Module:Abilities: Difference between revisionsGive feedback
Gammaton32 (talk | contribs) added get_ability_prop function (WIP) |
Gammaton32 (talk | contribs) No edit summary |
||
| Line 4: | Line 4: | ||
local p = {} | local p = {} | ||
-- returns the table of a specific | -- returns the table of a specific ability | ||
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] | ||
if(ui_data == nil) then return "Hero Not Found" end | if(ui_data == nil) then return "Hero Not Found" end | ||
return ui_data[tonumber(ability_num)] | return ui_data[tonumber(ability_num)] | ||
end | |||
-- Returns the table of a specific ability from Data:AbilityData | |||
-- @function get_json_ability | |||
-- @param {string} | |||
-- @return {table} | |||
local function get_json_ability(name) | |||
for _, v in pairs(raw_ability_data) do | |||
if (v["Name"] == name) then | |||
return v | |||
end | |||
end | |||
return nil | |||
end | end | ||
Revision as of 18:41, 30 April 2025
Overview
The Abilities module provides functions for retrieving data about hero abilities and their upgrades.
- The function
get_ability_namereferences Data:AbilityCards.json to link a hero and ability slot to an ability's display name. - The functions
get_ability_propandget_ability_upgrade_propreference Data:AbilityData.json to get specific stats from an ability's base data or its upgrades.
Examples
get_ability_name
To get the localized display name of a hero's ability (numbered 1 to 4):
{{#invoke:Abilities|get_ability_name|hero_atlas|1}}
Returns:
Siphon Life
Function can be passed with lang parameter to override the current language to a specific language code.
{{#invoke:Abilities|get_ability_name|hero_atlas|1|lang=ru}}
Returns:
Siphon Life
get_ability_prop
To get a property from the base stats of an ability. You can use the ability's key (e.g., "ability_afterburn") or its proper name (e.g., "Afterburn").
{{#invoke:Abilities|get_ability_prop|Afterburn|BurnDuration}}
Returns:
Lua error at line 51: invalid value (table) at index 2 in table for 'concat'.
You can also retrieve nested properties by using dot notation to drill down into the data structure. For example, to get a value nested inside a Scale table:
{{#invoke:Abilities|get_ability_prop|Lycan Curse|MaxRage.Scale.Value}}
Returns:
get_ability_upgrade_prop
To get a property from a specific upgrade of an ability.
{{#invoke:Abilities|get_ability_upgrade_prop|Afterburn|3|DPS}}
This example gets the DPS value from the 3rd upgrade for the ability "Afterburn".
Returns:
Script error: The function "get_ability_upgrade_prop" does not exist.
Another example, getting the `DamageAmplificationPerStack` from the 2nd upgrade of "Marksman":
{{#invoke:Abilities|get_ability_upgrade_prop|Marksman|2|DamageAmplificationPerStack}}
Returns:
Script error: The function "get_ability_upgrade_prop" does not exist.
Submodules
Abilities - Simple functions. Eg. getting ability name
Abilities/utils - Common internal functions that are shared amongst any Abilities/ modules
Abilities/card - Generates hero ability cards
Abilities/icon - Functions for retrieving ability and attribute icon data
Abilities/details table (WIP) - Generates details table to show raw ability data
local data = mw.loadJsonData("Data:AbilityCards.json")
local raw_ability_data = mw.loadJsonData("Data:AbilityData.json")
local p = {}
-- returns the table of a specific ability
function get_ability(hero_key, ability_num)
local ui_data = data[hero_key]
if(ui_data == nil) then return "Hero Not Found" end
return ui_data[tonumber(ability_num)]
end
-- Returns the table of a specific ability from Data:AbilityData
-- @function get_json_ability
-- @param {string}
-- @return {table}
local function get_json_ability(name)
for _, v in pairs(raw_ability_data) do
if (v["Name"] == name) then
return v
end
end
return nil
end
--{{#invoke:AbilityData|get_ability_name|HERO_NAME|ABILITY_NUM}}--
p.get_ability_name = function(frame)
local hero_name = frame.args[1]
local ability_num = frame.args[2]
local ability = get_ability(hero_name, ability_num)
if(ability == nil) then return "Ability Not Found" end
return ability.Name
end
--{{#invoke:Abilities|get_ability_prop|ability_name|prop1|prop2|prop3}}--
p.get_ability_prop = function(frame)
local tableValues = {}
local ability_name = frame.args[1]
local prop1 = frame.args[2]
local prop2 = frame.args[3]
local prop3 = frame.args[4]
local ability = get_json_ability(ability_name)
if(ability == nil) then return "Ability Not Found" end
if(type(ability[prop1]) == "table") then
for i,v in pairs(ability[prop1]) do
local tableValues = table.insert(tableValues, v)
end
return table.concat(tableValues, ", ")
end
return ability[prop1]
end
return p