Module:Abilities: Difference between revisions

Jump to navigation Jump to search
LVL (talk | contribs)
Fixed get_ability_prop to return element.Value for table props
LVL (talk | contribs)
get_ability_prop can now lookup abilities by their name or by their key
Line 4: Line 4:
local p = {}
local p = {}


-- returns the table of a specific ability
-- returns the table of a specific ability from Data:AbilityCards.json
function get_ability(hero_key, ability_num)
function get_ability(hero_key, ability_num)
local ui_data = data[hero_key]
local ui_data = data[hero_key]
Line 11: Line 11:
end
end


-- Returns the table of a specific ability from Data:AbilityData
-- Returns the table of a specific ability from Data:AbilityData.json by its Key or Name
-- @function  get_json_ability
-- It first attempts a direct lookup by key for efficiency. If that fails, it iterates
-- @param      {string}
-- through the data to find a matching Name property.
-- @return    {table}
-- @function  find_json_ability
local function get_json_ability(name)
-- @param      {string} identifier - The ability's key or name
-- @return    {table} or nil
local function find_json_ability(identifier)
-- First, try a direct lookup by key (most efficient method)
if raw_ability_data[identifier] then
return raw_ability_data[identifier]
end
-- If not found by key, loop through and search by the "Name" property as a fallback
for _, v in pairs(raw_ability_data) do
for _, v in pairs(raw_ability_data) do
if (v["Name"] == name) then
if (v["Name"] == identifier) then
return v
return v
end
end
end
end
-- If not found by either method, return nil
return nil
return nil
end
end
Line 34: Line 44:
end
end


--{{#invoke:Abilities|get_ability_prop|ability_name|prop1|upgrade_tier|prop3}}--
--{{#invoke:AbilityData|get_ability_prop|ability_key_or_name|prop}}--
p.get_ability_prop = function(frame)
p.get_ability_prop = function(frame)
local tableValues = {}
local ability_identifier = frame.args[1]
local ability_name = frame.args[1]
local prop = frame.args[2]
local prop1 = frame.args[2]
local upgrade_tier = frame.args[3]
     -- Use the new, more flexible lookup function
local number_int = tonumber(upgrade_tier)
local ability = find_json_ability(ability_identifier)
     --find ability JSON name--
local ability = get_json_ability(ability_name)
if(ability == nil) then return "Ability Not Found" end
if(ability == nil) then return "Ability Not Found" end
--identify if prop1 is a table, then use prop2--
 
local element = ability[prop1]
local element = ability[prop]
if element == nil then return "" end
if element == nil then return "" end