|
|
(9 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| local p = {}; | | local p = {}; |
| local data = mw.loadJsonData("Data:AttributeData.json") | | local attributes_data = mw.loadJsonData("Data:AttributeData.json") |
| local hero_data_module = require('Module:HeroData') | | local category_data = { --category specific parameters |
| local utils_module = require('Module:Utilities')
| | ["Weapon"] = { |
| | | unlocalized_name = "CitadelCategoryWeapon", |
| | | rgb = "213, 144, 63" |
| | }, |
| | ["Vitality"] = { |
| | unlocalized_name = "CitadelCategoryArmor", |
| | rgb = "116, 176, 28" |
| | }, |
| | ["Spirit"] = { |
| | unlocalized_name = "CitadelCategoryTech", |
| | rgb = "194, 136, 240" |
| | }, |
| | } |
| | |
| | function p.get_category_data() |
| | return category_data |
| | end |
|
| |
|
| -- returns the table of a specific item | | -- returns the table of a specific item |
| function get_json_item(name) | | function get_json_item(name) |
| for i,v in pairs(data) do | | for i,v in pairs(attributes_data) do |
| if (i == name) then | | if (i == name) then |
| return v | | return v |
Line 16: |
Line 30: |
| end | | end |
|
| |
|
| --Call {{Lang}} on a given unlocalized string using key (not label)
| |
| function call_lang(unlocalized)
| |
| local template_title = mw.title.new("Template:Lang")
| |
| local template_args = {}
| |
| local template_call
| |
|
| |
|
| template_args["key"] = unlocalized
| |
|
| |
| local template_call = mw.getCurrentFrame():expandTemplate{ title = template_title, args = template_args }
| |
| return template_call
| |
| end
| |
|
| |
|
| --{{#invoke:AttributeData|create_stat_boxes|HERO_NAME}}
| | |
| --Creates {{StatBox}}'s' for the 3 categories Weapon, Vitality, Spirit
| | |
| p.create_stat_boxes = function(frame)
| | |
| local hero_name = frame.args[1]
| |
| if(hero_name == nil) then return "Hero parameter missing" end
| |
|
| |
| -- Use expandTemplate to evaluate the Infobox_hero template
| |
| local template_title = mw.title.new("Template:StatBox") --name of the template
| |
| local template_calls = "" --all template calls concatenated
| |
| local template_call --current template call
| |
| local template_args = {} --current template arguments
| |
| local cell_values --current cell values
| |
| local cell_value --current cell value
| |
| local label --current stat's label
| |
| local postfix --current stat's postfix
| |
| local alternate_name --current stat's alternate name, used to locate the stat in hero data
| |
| local stat_value --current stat's numerical value in the hero data
| |
| local hero_datas = mw.loadJsonData("Data:HeroData.json")
| |
| local hero_data = hero_data_module.get_json_item(hero_name)
| |
| local stats --stats of the current category
| |
| local image_file_name --name of the image_file to check
| |
| local image_file --mw returned image file
| |
| local extra_blank_cell --add a blank cell after certain stats
| |
| local stats_to_add_blank_after = {BulletLifesteal = true, CritDamageReceivedScale = true}
| |
| if (hero_data == nil) then return "Hero Not Found" end
| |
| local category_data = { --category specific parameters
| |
| ["Weapon"] = {
| |
| box_name = "CitadelCategoryWeapon",
| |
| box_rgb = "213, 144, 63",
| |
| num_cols = 2
| |
| },
| |
| ["Vitality"] = {
| |
| box_name = "CitadelCategoryArmor",
| |
| box_rgb = "116, 176, 28",
| |
| num_cols = 2
| |
| },
| |
| ["Spirit"] = {
| |
| box_name = "CitadelCategoryTech",
| |
| box_rgb = "194, 136, 240",
| |
| num_cols = 2
| |
| },
| |
| }
| |
|
| |
| for _, category in ipairs(data["_category_order"]) do
| |
| stats = data[category]
| |
| local category_values = category_data[category]
| |
| template_args["box_name"] = category_values.box_name
| |
| template_args["box_rgb"] = category_values.box_rgb
| |
| template_args["num_cols"] = category_values.num_cols
| |
| cell_values = ""
| |
|
| |
| -- Determine cell values
| |
| for _, stat_name in ipairs(stats["_attribute_order"]) do
| |
| stat_data = stats[stat_name]
| |
| alternate_name = stat_data["alternate_name"]
| |
|
| |
| -- check if the stat's alternate_name is in hero data
| |
| stat_value = hero_data[stat_name]
| |
| if (stat_value == nil) then stat_value = 0 end --default to 0 if not present
| |
|
| |
| -- get label and postfix
| |
| label = call_lang(stat_data["label"])
| |
| postfix = stat_data["postfix"]
| |
| if (postfix == nil) then
| |
| postfix = ""
| |
| else
| |
| postfix = call_lang(postfix)
| |
| end
| |
|
| |
| -- Check if icon file exists, and if not, don't use any image
| |
| image_file_name = 'File:AttributeIcon' .. stat_name .. '.png'
| |
| image_file = mw.title.new(image_file_name)
| |
| if image_file and image_file.exists then
| |
| image_file_name = "[[" .. image_file_name .. "|15px]]"
| |
| else
| |
| image_file_name = ''
| |
| end
| |
|
| |
| -- Add an empty cell following some stats to align them correctly as seen in game
| |
| if (stats_to_add_blank_after[stat_name]) then
| |
| extra_blank_cell = " ," --prefixed space is needed
| |
| else
| |
| extra_blank_cell = ""
| |
| end
| |
|
| |
| --Round value to 3 significant figures
| |
| stat_value = utils_module.round_to_sig_fig(stat_value, 3)
| |
|
| |
| -- Set cell value as "Icon StatvaluePostfix Statname,"
| |
| -- If icon file already exists, set it to #REDIRECT to the duplicate file page
| |
| cell_value = image_file_name .. " " .. stat_value .. postfix .. " " .. label .. "," .. extra_blank_cell
| |
|
| |
| cell_values = cell_values .. cell_value --add value to values list
| |
| end
| |
| template_args["cell_values"] = cell_values
| |
|
| |
|
| |
| -- Write current call
| |
| template_call = mw.getCurrentFrame():expandTemplate{ title = template_title, args = template_args }
| |
|
| |
| -- Add call to the set of calls
| |
| template_calls = template_calls .. "\n" .. template_call
| |
| end
| |
|
| |
| -- Add a few newlines below the template calls to give space for the hover box
| |
| template_calls = template_calls .. "\n\n"
| |
|
| |
| return template_calls
| |
| end
| |
|
| |
|
| return p | | return p |
Documentation for this module may be created at Module:AttributeData/doc
local p = {};
local attributes_data = mw.loadJsonData("Data:AttributeData.json")
local category_data = { --category specific parameters
["Weapon"] = {
unlocalized_name = "CitadelCategoryWeapon",
rgb = "213, 144, 63"
},
["Vitality"] = {
unlocalized_name = "CitadelCategoryArmor",
rgb = "116, 176, 28"
},
["Spirit"] = {
unlocalized_name = "CitadelCategoryTech",
rgb = "194, 136, 240"
},
}
function p.get_category_data()
return category_data
end
-- returns the table of a specific item
function get_json_item(name)
for i,v in pairs(attributes_data) do
if (i == name) then
return v
end
end
return nil
end
return p