Module:Abilities: Difference between revisions

added get_ability_number, corrected example calls for functions in comments
mNo edit summary
Tag: Undo
 
(8 intermediate revisions by 3 users not shown)
Line 60: Line 60:
local ui_data = data[hero_name]
local ui_data = data[hero_name]
if(ui_data == nil) then return "Hero Not Found" end
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
-- Iterate through the hero's abilities to find matching name
for ability_num, ability in pairs(ui_data) do
for ability_num, ability in pairs(ui_data) do
local current_name = Lang.get_string(ability.Key)
local current_name = Lang.get_string(ability.Key)
if current_name == ability_name then
if string.lower(current_name) == normalized_input then
return ability_num
return ability_num
end
end
Line 124: 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 145: 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 element == nil then
if prop and prop ~= "" then
return "" -- The property doesn't exist in this specific upgrade, which is a valid case. Return empty.
for segment in string.gmatch(prop, "[^%.]+") do
end
-- If upgrade is not a table, return value. If it is, check for segments
 
if type(element) ~= "table" then
-- If the property is a table (like a Damage object), return its Value field
return element or ""
if type(element) == "table" then
end
    return element.Value or ""
element = element[segment]
if element == nil then return "" end
end
end
end


Line 157: Line 162:
return element
return element
end
end
--{{#invoke:Abilities|find_hero_by_ability|ABILITY_NAME}}--
p.find_hero_by_ability = function(frame)
local ability_name = frame.args[1]
if not ability_name or ability_name == "" then
return "Missing Ability Name"
end
-- Iterate through all heroes in the data
for hero_key, ui_data in pairs(data) do
-- Check each ability for this hero
for ability_num, ability in pairs(ui_data) do
local current_name = Lang.get_string(ability.Key)
if current_name == ability_name then
return hero_key
end
end
end
return "Hero Not Found"
end


return p
return p