Module:AbilityData: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 19: | Line 19: | ||
end | end | ||
p. | p.get_info_main = function(frame) | ||
local hero_name = frame.args[1] | local hero_name = frame.args[1] | ||
local ability_num = frame.args[2] | local ability_num = frame.args[2] | ||
Line 34: | Line 34: | ||
for k, prop in pairs(main_props) do | for k, prop in pairs(main_props) do | ||
section_box = frame:expandTemplate{ | section_box = frame:expandTemplate{ | ||
title = "User:Saag/Sandbox/AbilityCard/ | title = "User:Saag/Sandbox/AbilityCard/MainBox", | ||
args = { | |||
key = prop.Key, | |||
value = format_value_with_prepost(prop.Key, prop.Value), | |||
type = prop.Type, | |||
scale_value = prop.Scale and format_value_with_prepost(prop.Key, prop.Scale.Value), | |||
scale_type = prop.Scale and prop.Scale.Type | |||
} | |||
} | |||
info_box_template = info_box_template .. section_box .. '\n' | |||
end | |||
return info_box_template | |||
end | |||
p.get_info_alt = function(frame) | |||
local hero_name = frame.args[1] | |||
local ability_num = frame.args[2] | |||
local info_section_num = frame.args[3] | |||
local ability = get_ability(hero_name, ability_num) | |||
if(ability == nil) then return "Ability Not Found" end | |||
local info_section = ability['Info'..info_section_num] | |||
local main_props = info_section.Alt | |||
-- Concatenate multiple section boxes into a single output template | |||
local info_box_template = '' | |||
for k, prop in pairs(main_props) do | |||
section_box = frame:expandTemplate{ | |||
title = "User:Saag/Sandbox/AbilityCard/AltBox", | |||
args = { | args = { | ||
key = prop.Key, | key = prop.Key, |
Revision as of 17:19, 22 September 2024
Deprecated
This module is being replaced by multiple modules in Module:Abilities. Any new functions should be created there
local lang = require "Module:Lang"
local p = {}
local data = mw.loadJsonData("Data:AbilityCard.json")
-- returns the table of a specific item
function get_ability(hero_name, ability_num)
local hero_key = get_hero_key(hero_name)
if(hero_key == nil) then return "Hero Not Found" end
return data[hero_key][tonumber(ability_num)]
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
p.get_info_main = function(frame)
local hero_name = frame.args[1]
local ability_num = frame.args[2]
local info_section_num = frame.args[3]
local ability = get_ability(hero_name, ability_num)
if(ability == nil) then return "Ability Not Found" end
local info_section = ability['Info'..info_section_num]
local main_props = info_section.Main.Props
-- Concatenate multiple section boxes into a single output template
local info_box_template = ''
for k, prop in pairs(main_props) do
section_box = frame:expandTemplate{
title = "User:Saag/Sandbox/AbilityCard/MainBox",
args = {
key = prop.Key,
value = format_value_with_prepost(prop.Key, prop.Value),
type = prop.Type,
scale_value = prop.Scale and format_value_with_prepost(prop.Key, prop.Scale.Value),
scale_type = prop.Scale and prop.Scale.Type
}
}
info_box_template = info_box_template .. section_box .. '\n'
end
return info_box_template
end
p.get_info_alt = function(frame)
local hero_name = frame.args[1]
local ability_num = frame.args[2]
local info_section_num = frame.args[3]
local ability = get_ability(hero_name, ability_num)
if(ability == nil) then return "Ability Not Found" end
local info_section = ability['Info'..info_section_num]
local main_props = info_section.Alt
-- Concatenate multiple section boxes into a single output template
local info_box_template = ''
for k, prop in pairs(main_props) do
section_box = frame:expandTemplate{
title = "User:Saag/Sandbox/AbilityCard/AltBox",
args = {
key = prop.Key,
value = format_value_with_prepost(prop.Key, prop.Value),
type = prop.Type,
scale_value = prop.Scale and format_value_with_prepost(prop.Key, prop.Scale.Value),
scale_type = prop.Scale and prop.Scale.Type
}
}
info_box_template = info_box_template .. section_box .. '\n'
end
return info_box_template
end
p.get_upgrades = 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 'Upgrades'
end
--{{#invoke:AbilityData|get_ability_card|HERO_NAME|ABILITY_NUM|ADD_LINK}}--
p.get_ability_card = function(frame)
local hero_name = frame.args[1]
local ability_num = frame.args[2]
local add_link = frame.args[3]
local ability = get_ability(hero_name, ability_num)
if(ability == nil) then
return 'Ability data not found for hero ' ..hero_name.. ' and num ' .. ability_num
end
local name_link = string.format("%s#(%s)_%s", hero_name, ability_num, ability.Name)
return frame:expandTemplate{
-- TODO - remove when testing is done
title = "User:Saag/Sandbox/AbilityCard",
args = {
hero_name = hero_name,
ability_num = ability_num,
name = ability.Name,
name_link = name_link,
description = format_value_with_prepost("Description", ability.Description),
radius = format_value_with_prepost("Radius", ability.Radius and ability.Radius.Value),
range = format_value_with_prepost("AbilityCastRange", ability.AbilityCastRange and ability.AbilityCastRange.Value),
-- ability_width = format_value_with_prepost(width_key, ability[width_key]),
cooldown = format_value_with_prepost("AbilityCooldown", ability.AbilityCooldown and ability.AbilityCooldown.Value),
charge_cooldown = format_value_with_prepost("AbilityDuration", ability.AbilityCooldownBetweenCharge and ability.AbilityCooldownBetweenCharge.Value),
num_of_charges = format_value_with_prepost("AbilityCharges", ability.AbilityCharges and ability.AbilityCharges.Value)
}
}
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
function get_effects(ability, used_keys)
local effects = {}
for key, value in pairs(ability) do
if not string_in_list(key, used_keys) then
local label = lang._get_string(string.format("%s_label", key))
if (label == nil) then
table.insert(effects, string.format("Missing label for key '%s'", key))
else
local effect_label= string.format("'''%s''': %s", label, format_value_with_prepost(key, value))
table.insert(effects, effect_label)
end
end
end
return effects
end
-- Add prefix and postfix labels to a value. Eg. "32" -> "32s"
function format_value_with_prepost(key, value)
if (value == nil) then return nil end
local prefix = lang._get_string(string.format("%s_prefix",key))
local postfix = lang._get_string(string.format("%s_postfix",key))
-- Default pre/post fix to empty string, as they may not exist
if (prefix == nil) then prefix = '' end
if (postfix == nil) then postfix = '' end
if (prefix == '{s:sign}') then
if value < 0 then
prefix = '-'
else
prefix = '+'
end
end
return string.format("%s%s%s", prefix, value, postfix)
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