Home
Random
Log in
Settings
Search
Editing
Module:HeroData
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {}; local heroes_data = mw.loadJsonData("Data:HeroData.json") local attributes_data = mw.loadJsonData("Data:AttributeData.json") local util_module = require('Module:Utilities') local attribute_module = require('Module:AttributeData') -- returns the table of a specific item, used by external modules function p.get_json_item(name) for i,v in pairs(heroes_data) do if (v["Name"] == name) then return v end end return nil end --{{#invoke:HeroData|get_hero_stat|HERO_NAME|STAT_NAME}}-- p.get_hero_stat = function(frame) local hero_name = frame.args[1] local hero_stat_key = frame.args[2] local hero = p.get_json_item(hero_name) if(hero == nil) then return "Hero Not Found" end local var_value = hero[hero_stat_key] if(var_value == nil) then return 0 end return var_value end --If the hero scales with the stat, it returns {{Ss|value}} or {{Ls|value}}, else blank string --{{#invoke:HeroData|get_hero_scalar_str_invoke|HERO_NAME|STAT_NAME}}-- p.get_hero_scalar_str_invoke = function(frame) local hero_name = frame.args[1] local hero_stat_key = frame.args[2] local hero_data = p.get_json_item(hero_name) if(hero_data == nil) then return "Hero Not Found" end return p.get_hero_scalar_str(hero_data, hero_stat_key) --surely theres a better way end function p.get_hero_scalar_str(hero, hero_stat_key) local scaling_type_full local scaling_data local scaling_value local scaling_types = {"Spirit", "Level"} local scaling_abbrevs = {"Ss", "Ls"} for index, scaling_type in ipairs(scaling_types) do scaling_type_full = scaling_type .. "Scaling" scaling_data = hero[scaling_type_full] --If the scaling data exists if (scaling_data ~= nil) then scaling_value = scaling_data[hero_stat_key] --If the stat scales if (scaling_value ~= nil) then scaling_value = util_module.round_to_sig_fig(scaling_value, 3) --The hero has a scaling value with this stat local template_title = "Template:" .. scaling_abbrevs[index] --scaling type's abbreviation local template_args = {} template_args["1"] = scaling_value --store in 1st arg for {{{1}}} to grab it from {{SS}} or {{LS}} template local template_call = mw.getCurrentFrame():expandTemplate{ title = template_title, args = template_args } return template_call end end end -- Otherwise return empty string return "" end --{{#invoke:HeroData|write_hero_infobox|HERO_NAME}}-- p.write_hero_infobox = function(frame) hero_name = frame.args[1] hero = p.get_json_item(hero_name) if(hero == nil) then return "Hero Not Found" end -- Prepare the arguments for the template local templateArgs = {} for stat_name, stat_value in pairs(hero) do if (type(stat_value) ~= "table") then -- skips complex nested tables templateArgs[stat_name] = stat_value end end -- Use expandTemplate to evaluate the Infobox_hero template local templateTitle = mw.title.new("Template:Infobox_hero") local expandedTemplate = mw.getCurrentFrame():expandTemplate{ title = templateTitle, args = templateArgs } return expandedTemplate end --{{#invoke:HeroData|write_stat_boxes|HERO_NAME}} --Creates {{StatBox}}'s' for the 3 categories Weapon, Vitality, Spirit p.write_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_data = p.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 in AttrData" end local category_data = attribute_module.get_category_data() for _, category in ipairs(attributes_data["_category_order"]) do stats = attributes_data[category] local category_values = category_data[category] template_args["box_name"] = category_values.unlocalized_name template_args["box_rgb"] = category_values.rgb template_args["num_cols"] = 2 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"] -- gets the stat's value if its under either its alternate name or real name stat_value = hero_data[alternate_name] if (stat_value == nil) then stat_value = hero_data[stat_name] if (stat_value == nil) then stat_value = 0 --default to 0 if not present end end --Round value to 3 significant figures stat_value = util_module.round_to_sig_fig(stat_value, 3) -- get label and postfix label = util_module.call_lang(stat_data["label"]) postfix = stat_data["postfix"] if (postfix == nil) then postfix = "" else postfix = util_module.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_name = util_module.get_image_file(image_file_name) -- 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 -- Add the scaling str if it scales local scalar_str = p.get_hero_scalar_str(hero_data, stat_name) -- Set cell value as "Icon StatvaluePostfix Statname Scaling," -- If icon file already exists, set it to #REDIRECT to the duplicate file page cell_value = image_file_name .. " " .. stat_value .. postfix .. " " .. label .. " " .. scalar_str .. "," .. 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
Summary:
Please note that all contributions to Deadlock Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
Deadlock:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Template used on this page:
Module:HeroData/doc
(
edit
)