Module:AbilityData: Difference between revisions

From Deadlock Wiki
Jump to navigation Jump to search
Saag (talk | contribs)
Formatted effect values
Saag (talk | contribs)
get ability from name instead of number
Line 3: Line 3:


-- returns the table of a specific item
-- returns the table of a specific item
function get_ability(hero_name, ability_number)
function get_ability(hero_name, ability_name)
for i, v in pairs(data) do
local hero_key = get_hero_key(hero_name)
if v["Name"] == hero_name then
 
return v["BoundAbilities"][tonumber(ability_number)]
for i, ability in pairs(data[hero_key]["BoundAbilities"]) do
if ability["Name"] == ability_name then
return ability
end
end
return nil
end
 
function get_hero_key(hero_name)
for i, hero in pairs(data) do
if hero["Name"] == hero_name then
return i
end
end
end
end
Line 12: Line 23:
end
end


--{{#invoke:AbilityData|get_ability_card|HERO_NAME|ABILITY_NUMBER}}--
--{{#invoke:AbilityData|get_ability_card|HERO_NAME|ABILITY_NAME}}--
p.get_ability_card = function(frame)
p.get_ability_card = function(frame)
local hero_name = frame.args[1]
local hero_name = frame.args[1]
local ability_num = frame.args[2]
local ability_name = frame.args[2]


local ability = get_ability(hero_name, ability_num)
local ability = get_ability(hero_name, ability_name)
if(ability == nil) then return "Ability Not Found" end
if ability then
if ability then
-- Pass the table fields to the template
-- Pass the table fields to the template

Revision as of 12:10, 14 September 2024

Documentation for this module may be created at Module:AbilityData/doc

local p = {}
local data = mw.loadJsonData("Data:HeroData.json")

-- returns the table of a specific item
function get_ability(hero_name, ability_name)
	local hero_key = get_hero_key(hero_name)

	for i, ability in pairs(data[hero_key]["BoundAbilities"]) do
		if ability["Name"] == ability_name then
			return ability	
		end
	end
	return nil
end

function get_hero_key(hero_name)
	for i, hero in pairs(data) do
		if hero["Name"] == hero_name then
			return i
		end
	end
	return nil
end

--{{#invoke:AbilityData|get_ability_card|HERO_NAME|ABILITY_NAME}}--
p.get_ability_card = function(frame)
	local hero_name = frame.args[1]
	local ability_name = frame.args[2]

	local ability = get_ability(hero_name, ability_name)
	if(ability == nil) then return "Ability Not Found" end
	if ability then
		-- Pass the table fields to the template
		local width_key = find_width_key(ability)
		local used_keys = {
			'Description', 'Radius', 'AbilityCastRange', 'AbilityDuration',
			'AbilityDuration', 'AbilityCooldown', 'Upgrades', width_key
		}

		local effects = get_effects(ability, used_keys)

		return frame:expandTemplate{
			title = "Ability card",
			args = {
				name = ability.Name,
				description = ability.Description,
				radius = ability.Radius,
				range = ability.AbilityCastRange,
				ability_width = ability[width_key],
				duration = ability.AbilityDuration,
				cooldown = ability.AbilityCooldown,
				effect1 = effects[1],
				effect2 = effects[2],
				effect3 = effects[3],
				effect4 = effects[4],
				effect5 = effects[5],
				effect6 = effects[6],
				effect7 = effects[7],
				effect8 = effects[8],
				effect9 = effects[9],
				upgrade1 = ability.Upgrades[1].Description,
				upgrade2 = ability.Upgrades[2].Description,
				upgrade3 = ability.Upgrades[3].Description
			}
		}
	else
		return "Ability data not found for hero " .. hero_name .. " and num " .. ability_num
	end
end

function get_effects(ability, used_keys)
	effects = {}
	for key, value in pairs(ability) do
		if not string_in_list(key, used_keys) then
			local effect_value = string.format("'''%s''': %s", key, value)
			table.insert(effects, effect_value)
		end
	end
	return effects
end

function find_width_key(ability)
	for key, value in pairs(ability) do
		if type(key) == "string" and key:sub(-5) == "Width" then
			return key
		end
	end
	return nil
end

function string_in_list(str, list)
	for _, value in ipairs(list) do
		if value == str then
			return true
		end
	end
	return false
end

return p