| Latest revision |
Your text |
| Line 1: |
Line 1: |
| local p = {}; | | local p = {}; |
| local item_data = mw.loadJsonData("Data:ItemData.json") | | local data = mw.loadJsonData("Data:ItemData.json") |
| local heroes_data = mw.loadJsonData("Data:HeroData.json")
| |
| local ability_data = mw.loadJsonData("Data:AbilityCards.json")
| |
| | |
| local function format_spirit_scale(frame, key, base, scale)
| |
| local spirit_scale = frame:expandTemplate{ title = "ss", args = {(scale or 0)}}
| |
| return key ..": ".. (base or 0) .. "+" .. spirit_scale .. "\n"
| |
| end
| |
| | |
| local function get_stats_spirit_scaling(frame, hero)
| |
| local spirit_scaling = hero["SpiritScaling"]
| |
| stats_text = ""
| |
| if (spirit_scaling ~= nil) then
| |
| for k, v in pairs(spirit_scaling) do
| |
| stats_text = stats_text .. format_spirit_scale(frame, k, hero[k], v)
| |
| end
| |
| else
| |
| stats_text = "-"
| |
| end
| |
| return stats_text
| |
| end
| |
| | |
| local function get_abilities_spirit_scaling(frame, hero_key, hero)
| |
| local ret = {}
| |
| for i=1,4 do
| |
| local ability = ability_data[hero_key][i]
| |
| local ability_text = ""
| |
| if (ability ~= nil) then
| |
| ret[i*2-1] = ability["Name"]
| |
| if (ability["Info1"] ~= nil and ability["Info1"]["Main"] ~= nil
| |
| and ability["Info1"]["Main"]["Props"] ~= nil) then
| |
| for _, prop in ipairs(ability["Info1"]["Main"]["Props"]) do
| |
| if (prop["Scale"] ~= nil and prop["Scale"]["Type"] == "spirit" and prop["Scale"]["Value"] ~= 0) then
| |
| ability_text = ability_text .. format_spirit_scale(frame, prop["Name"], prop["Value"], prop["Scale"]["Value"])
| |
| end
| |
| end
| |
| end
| |
| else
| |
| ret[i*2-1] = "-"
| |
| end
| |
| if (ability_text == "") then
| |
| ability_text = "-"
| |
| end
| |
| ret[i*2] = ability_text
| |
| end
| |
| return ret
| |
| end
| |
| | |
| -- Outputs a wikitable of heroes and their stats' and abilities' spirit scaling
| |
| -- @function p.write_spirit_scaling_table
| |
| -- @param {}
| |
| -- @return {string}
| |
| p.write_spirit_scaling_table = function(frame)
| |
| local filtered_heroes = {}
| |
| local hero_keys = {}
| |
| for hero_key, hero in pairs(heroes_data) do
| |
| if (not hero["IsDisabled"] and not hero["InDevelopment"]) then
| |
| local hero_data = {["hero"] = hero; ["hero_key"] = hero_key}
| |
| table.insert(filtered_heroes, hero_data)
| |
| end
| |
| end
| |
| table.sort(filtered_heroes, function(a, b) return a.hero.Name:lower() < b.hero.Name:lower() end)
| |
|
| |
| local create_table = mw.html.create("table"):addClass("wikitable sortable"):done()
| |
| local header = mw.html.create("tr")
| |
| header
| |
| :tag("th"):wikitext("Hero"):done()
| |
| :tag("th"):attr("colspan", 2):wikitext("First Skill"):done()
| |
| :tag("th"):attr("colspan", 2):wikitext("Second Skill"):done()
| |
| :tag("th"):attr("colspan", 2):wikitext("Third Skill"):done()
| |
| :tag("th"):attr("colspan", 2):wikitext("Ultimate"):done()
| |
| create_table:node(header)
| |
|
| |
| for _, hero_data in ipairs(filtered_heroes) do
| |
| local hero = hero_data.hero
| |
| local hero_key = hero_data.hero_key
| |
| local hero_row = mw.html.create("tr")
| |
| local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}}
| |
| hero_row:tag('td'):wikitext(hero_icon):done()
| |
| local abilities = get_abilities_spirit_scaling(frame, hero_key, hero)
| |
| for i=1,8 do
| |
| hero_row:tag('td'):wikitext(abilities[i]):done()
| |
| end
| |
| create_table:node(hero_row)
| |
| end
| |
|
| |
| return tostring(create_table)
| |
| end
| |
|
| |
|
| local function get_disabled_items_array() | | local function get_disabled_items_array() |
| local disabledItems = {} | | local disabledItems = {} |
| for k, v in pairs(item_data) do | | for k, v in pairs(data) do |
| if (v["IsDisabled"] == true and v["Name"] ~= nil) then | | if (v["IsDisabled"] == true and v["Name"] ~= nil) then |
| disabledItems[k] = v | | disabledItems[k] = v |
| Line 119: |
Line 32: |
| | | |
| -- query all the filtered items. itemName is the item table. | | -- query all the filtered items. itemName is the item table. |
| for internalName, itemName in pairs(filteredData) do | | for internalName, itemName in ipairs(filteredData) do |
| local display = itemName["Name"] | | local display = itemName["Name"] |
| | | |