|
|
(22 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 lang_module = require("Module:Lang") |
| | 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" |
| | }, |
| | } |
| | local brown_icons = { --color these attributes brown instead of grey |
| | BaseWeaponDamageIncrease = true, |
| | BulletDamage = true, |
| | DPS = true, |
| | LightMeleeDamage = true, |
| | HeavyMeleeDamage = true |
| | } |
| | |
| | function p.get_category_data() |
| | return category_data |
| | end |
|
| |
|
| | -- returns the color (x) for {{Icon/x}} for a given color using brown_icons |
| | function p.get_attr_icon_color(attr_key) |
| | color_it_brown = brown_icons[attr_key] |
| | if (color_it_brown == nil) then |
| | return "Grey" |
| | else |
| | return "Brown" |
| | end |
| | 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 14: |
Line 48: |
| end | | end |
|
| |
|
| --Call {{Lang}} on a given unlocalized string using key (not label) | | -- localize Weapon/Vitality/Spirit from english rather than their keys |
| function call_lang(unlocalized)
| | --{{#invoke:AttributeData|localize_category|Weapon/Vitality/Spirit}} |
| local template_title = mw.title.new("Template:Lang")
| | p.localize_category = function(frame) |
| local template_args = {}
| | local category_en = frame.args[1] |
| local template_call
| | if (category_en == nil) then return "Weapon/Vitality/Spirit category not provided" end |
| | |
| 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 | | -- get unlocalized key |
| local template_title = mw.title.new("Template:StatBox") --name of the template
| | local unlocalized_key = nil |
| local template_calls = "" --all template calls concatenated
| | for category, cat_data in pairs(category_data) do |
| local template_call --current template call
| | if category == category_en then |
| local template_args = {} --current template arguments
| | unlocalized_key = cat_data["unlocalized_name"] |
| 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) | |
| if (hero_data == nil) then return "Hero Not Found" end
| |
| local category_data = {
| |
| ["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, stats in pairs(data) do | |
| 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, stat_data in pairs(stats) do
| |
| 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
| |
|
| |
| -- Set cell value as "Icon StatvaluePostfix Statname,"
| |
| cell_value = "[[File:Bullet damage.png|15px]]" .. " " .. stat_value .. postfix .. " " .. label .. ","
| |
|
| |
| cell_values = cell_values .. cell_value --add value to values list
| |
| end | | 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 | | end |
| | if (unlocalized_key == nil) then return "Category should be one of Weapon/Vitality/Spirit" end |
| | | |
| -- Add a few newlines below the template calls to give space for the hover box | | -- localize it |
| template_calls = template_calls .. "\n\n" | | local localized = lang_module.get_string(unlocalized_key) |
| | if (localized == nil) then return category_en end --category missing from lang |
| | | |
| return template_calls | | return localized |
| end | | end |
|
| |
|
| return p | | return p |