Module:Abilities: Difference between revisions

From The Deadlock Wiki
Jump to navigation Jump to search
No edit summary
simplified get_ability_prop code, working on adding more variables
Line 40: Line 40:
local prop1 = frame.args[2]
local prop1 = frame.args[2]
local prop2 = frame.args[3]
local prop2 = frame.args[3]
local prop3 = frame.args[4]
local number_str = frame.args[4]
local number_int = tonumber(number_str)
    --find ability JSON name--
local ability = get_json_ability(ability_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--
if(type(ability[prop1]) == "table") then
local element = ability[prop1]
for i,v in pairs(ability[prop1]) do
if (element == 'table') then
local tableValues = table.insert(tableValues, v)
  local list1 = element[prop2]
  local element = list1
      if (list1 == 'table') then
local list2 = list1[number_int]
local element = list2
end
end
return table.concat(tableValues, ", ")
end
end
return ability[prop1]
if (element == nil) then return "" end
return element
end
end


return p
return p

Revision as of 04:30, 5 May 2025

Overview

The Abilities module provides functions for retrieving data about hero abilities and their upgrades.

  • The function get_ability_name references Data:AbilityCards.json to link a hero and ability slot to an ability's display name.
  • The functions get_ability_prop and get_ability_upgrade_prop reference 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: table

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 number_str = frame.args[4]
	local number_int = tonumber(number_str)
    --find ability JSON name--	
	local ability = get_json_ability(ability_name)
	if(ability == nil) then return "Ability Not Found" end
	--identify if prop1 is a table, then use prop2--
	local element = ability[prop1]
		if (element == 'table') then
   		local list1 = element[prop2]
   		local element = list1
       		if (list1 == 'table') then
			local list2 = list1[number_int]
			local element = list2
		end
	end
	
	if (element == nil) then return "" end
	
	return element
end

return p