Module:Abilities: Difference between revisionsGive feedback
Jump to navigation
Jump to search
get_ability_prop can now lookup abilities by their name or by their key |
Added get_ability_upgrade_prop function to retrieve specific upgrade properties |
||
| Line 64: | Line 64: | ||
return element | return element | ||
end | end | ||
--{{#invoke:AbilityData|get_ability_upgrade_prop|ability_key_or_name|upgrade_num|prop}}-- | |||
-- 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|number} frame.args[2] - The upgrade number (1, 2, or 3). | |||
-- @param {string} frame.args[3] - The name of the property to retrieve. | |||
p.get_ability_upgrade_prop = function(frame) | |||
local ability_identifier = frame.args[1] | |||
local upgrade_num_str = frame.args[2] | |||
local prop = frame.args[3] | |||
-- Check for missing arguments | |||
if not (ability_identifier and upgrade_num_str and prop) then | |||
return "Missing Arguments" -- Or return "" | |||
end | |||
-- Find the base ability data | |||
local ability = find_json_ability(ability_identifier) | |||
if not ability then | |||
return "Ability Not Found" | |||
end | |||
-- Get the list of upgrades for this ability | |||
local upgrades = ability.Upgrades | |||
if not upgrades or type(upgrades) ~= "table" then | |||
return "No Upgrades Found" | |||
end | |||
-- Convert the upgrade number from a string to an integer | |||
local upgrade_num = tonumber(upgrade_num_str) | |||
if not upgrade_num then | |||
return "Invalid Upgrade Number" | |||
end | |||
-- Get the specific upgrade table from the list (Lua tables are 1-indexed) | |||
local upgrade = upgrades[upgrade_num] | |||
if not upgrade or type(upgrade) ~= "table" then | |||
return "Upgrade Not Found" | |||
end | |||
-- Get the desired property from the specific upgrade | |||
local element = upgrade[prop] | |||
if element == nil then | |||
return "" -- The property doesn't exist in this specific upgrade, which is a valid case. Return empty. | |||
end | |||
-- If the property is a table (like a Damage object), return its Value field | |||
if type(element) == "table" then | |||
return element.Value or "" | |||
end | |||
-- Otherwise, return the direct value | |||
return element | |||
end | |||
return p | return p | ||