Module:AbilityData

Revision as of 23:55, 13 September 2024 by Saag (talk | contribs) (added more attrs)

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_number)
	for i,v in pairs(data) do
		if (v["Name"] == hero_name) then
			return v["BoundAbilities"][tonumber(ability_number)]
		end
	end
	return nil
end

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

    local ability = get_ability(hero_name, ability_num)
    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 used_keys[1]
        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
			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, value
        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