Module:Abilities: Difference between revisionsGive feedback
m Fixed key lookup |
mNo edit summary Tag: Undo |
||
| (10 intermediate revisions by 4 users not shown) | |||
| Line 36: | Line 36: | ||
end | end | ||
--{{#invoke: | --{{#invoke:Abilities|get_ability_name|HERO_NAME|ABILITY_NUM|lang=LANG_CODE}}-- | ||
p.get_ability_name = function(frame) | p.get_ability_name = function(frame) | ||
local hero_name = frame.args[1] | local hero_name = frame.args[1] | ||
| Line 52: | Line 52: | ||
end | end | ||
--{{#invoke: | -- Reverse function of get_ability_name | ||
--{{#invoke:Abilities|get_ability_number|HERO_NAME|ABILITY_NAME}}-- | |||
p.get_ability_number = function(frame) | |||
local hero_name = frame.args[1] | |||
local ability_name = frame.args[2] | |||
local ui_data = data[hero_name] | |||
if(ui_data == nil) then return "Hero Not Found" end | |||
-- Normalize input for case-insensitive comparison | |||
local normalized_input = string.lower(ability_name) | |||
-- Iterate through the hero's abilities to find matching name | |||
for ability_num, ability in pairs(ui_data) do | |||
local current_name = Lang.get_string(ability.Key) | |||
if string.lower(current_name) == normalized_input then | |||
return ability_num | |||
end | |||
end | |||
return "Ability Not Found" | |||
end | |||
--{{#invoke:Abilities|get_ability_prop|ability_key_or_name|prop}}-- | |||
p.get_ability_prop = function(frame) | p.get_ability_prop = function(frame) | ||
local ability_identifier = frame.args[1] | local ability_identifier = frame.args[1] | ||
| Line 61: | Line 84: | ||
if(ability == nil) then return "Ability Not Found" end | if(ability == nil) then return "Ability Not Found" end | ||
local element = ability[ | -- Handle nested properties via dot notation (e.g., "MaxRage.Scale.Value") | ||
local element = ability | |||
if prop and prop ~= "" then | |||
for segment in string.gmatch(prop, "[^%.]+") do | |||
if type(element) ~= "table" then | |||
return "" -- Can't traverse further | |||
end | |||
element = element[segment] | |||
if element == nil then return "" end | |||
end | |||
end | |||
if element == nil then return "" end | if element == nil then return "" end | ||
| Line 73: | Line 107: | ||
end | end | ||
--{{#invoke: | --{{#invoke:Abilities|get_ability_upgrade_prop|ability_key_or_name|upgrade_num|prop}}-- | ||
-- Gets a specific property from a specific upgrade of an ability. | -- Gets a specific property from a specific upgrade of an ability. | ||
-- @param {string} frame.args[1] - The ability's key (e.g., "ability_afterburn") or name (e.g., "Afterburn"). | -- @param {string} frame.args[1] - The ability's key (e.g., "ability_afterburn") or name (e.g., "Afterburn"). | ||
| Line 93: | Line 127: | ||
return "Ability Not Found" | return "Ability Not Found" | ||
end | end | ||
-- Get the list of upgrades for this ability | -- Get the list of upgrades for this ability | ||
local upgrades = ability.Upgrades | local upgrades = ability.Upgrades | ||
| Line 114: | Line 148: | ||
-- Get the desired property from the specific upgrade | -- Get the desired property from the specific upgrade | ||
local element = upgrade[prop] | local element = upgrade[prop] | ||
if | if prop and prop ~= "" then | ||
for segment in string.gmatch(prop, "[^%.]+") do | |||
-- If upgrade is not a table, return value. If it is, check for segments | |||
if type(element) ~= "table" then | |||
return element or "" | |||
end | |||
element = element[segment] | |||
if element == nil then return "" end | |||
end | |||
end | end | ||
| Line 126: | Line 162: | ||
return element | return element | ||
end | end | ||
return p | return p | ||