Module:Sandbox/One Bar: Difference between revisions

One Bar (talk | contribs)
No edit summary
m Mgpt moved page Module:One Bar/Sandbox to Module:Sandbox/One Bar: Deadlock:User pages
 
(10 intermediate revisions by one other user not shown)
Line 4: Line 4:
local ability_data = mw.loadJsonData("Data:AbilityCards.json")
local ability_data = mw.loadJsonData("Data:AbilityCards.json")


-- Outputs a string list of gun stats from heroes with either spreadshot or burst fire
local function format_spirit_scale(frame, key, base, scale)
-- @function   p.write_multishot_stats
local spirit_scale = frame:expandTemplate{ title = "ss", args = {(scale or 0)}}
-- @param      {}
return key ..": ".. (base or 0) .. "+" .. spirit_scale .. "\n"
-- @return     {string}
end
p.write_multishot_stats = function(frame)
 
local function hero_sort(h1, h2)  
local function get_stats_spirit_scaling(frame, hero)
return h1["Name"] < h2["Name"]
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
end
local spreadshot_heroes = {}
return stats_text
local burst_heroes = {}
end
for _, hero in pairs(heroes_data) do
 
if (hero["BulletsPerShot"] > 1 and not hero["IsDisabled"]) then
local function get_abilities_spirit_scaling(frame, hero_key, hero)
table.insert(spreadshot_heroes, hero)
local ret = {}
elseif (hero["BulletsPerBurst"] > 1 and not hero["IsDisabled"]) then
for i=1,4 do
table.insert(burst_heroes, hero)
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
end
ret[i*2] = ability_text
end
end
return ret
table.sort(spreadshot_heroes, hero_sort)
table.sort(burst_heroes, hero_sort)
local multishot_str = "Weapons with multiple projectiles (Spreadshot):\n"
for _, hero in ipairs(spreadshot_heroes) do
local base = math.floor(hero["BulletDamage"] * 100) / 100
local level = math.floor(hero["LevelScaling"]["BulletDamage"] * 100) / 100
local shots = hero["BulletsPerShot"]
local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}}
local stat_str = "* " .. hero_icon .. ": " .. shots .. " pellets, "
.. base .. "/pellet, +" .. level .. "/pellet\n"
multishot_str = multishot_str .. stat_str
end
multishot_str = multishot_str .. "Weapons with burst fire (Burst Fire):\n"
for _, hero in ipairs(burst_heroes) do
local base = math.floor(hero["BulletDamage"] * 100) / 100
local level = math.floor(hero["LevelScaling"]["BulletDamage"] * 100) / 100
local shots = hero["BulletsPerBurst"]
local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}}
local stat_str = "* " .. hero_icon .. ": " .. shots .. " rounds, "
.. base .. "/bullet, +" .. level .. "/bullet\n"
multishot_str = multishot_str .. stat_str
end
return multishot_str
end
end


Line 56: Line 54:
p.write_spirit_scaling_table = function(frame)
p.write_spirit_scaling_table = function(frame)
local filtered_heroes = {}
local filtered_heroes = {}
local hero_keys = {}
for hero_key, hero in pairs(heroes_data) do
for hero_key, hero in pairs(heroes_data) do
if (not hero["IsDisabled"]) then
if (not hero["IsDisabled"] and not hero["InDevelopment"]) then
filtered_heroes[hero_key] = hero
local hero_data = {["hero"] = hero; ["hero_key"] = hero_key}
table.insert(filtered_heroes, hero_data)
end
end
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 create_table = mw.html.create("table"):addClass("wikitable sortable"):done()
Line 66: Line 67:
header
header
:tag("th"):wikitext("Hero"):done()
:tag("th"):wikitext("Hero"):done()
:tag("th"):wikitext("Stats"):done()
:tag("th"):attr("colspan", 2):wikitext("First Skill"):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("Second Skill"):done()
Line 73: Line 73:
create_table:node(header)
create_table:node(header)
for hero_key, hero in pairs(filtered_heroes) do
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"]}}
local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}}
local spirit_scaling = hero["SpiritScaling"]
local hero_row = mw.html.create("tr")
hero_row:tag('td'):wikitext(hero_icon):done()
hero_row:tag('td'):wikitext(hero_icon):done()
stats_text = ""
local abilities = get_abilities_spirit_scaling(frame, hero_key, hero)
if (spirit_scaling ~= nil and next(spirit_scaling) ~= nil) then
for i=1,8 do
for k, v in ipairs(spirit_scaling) do
hero_row:tag('td'):wikitext(abilities[i]):done()
stats_text = stats_text .. k ..": ".. hero[k] .. "+" .. v .. "\n"
end
else
stats_text = "-"
end
hero_row:tag('td'):wikitext(stats_text):done()
for i=1,4 do
local ability = ability_data[hero_key][i]
hero_row:tag('td'):wikitext(ability["Name"]):done()
local ability_text = ""
-- Nowhere close to all the instances of ability spirit scaling
-- probably too much nil check but I want the table to print for now
if (ability["Info1"] ~= nil and ability["Info1"]["Main"] ~= nil
and ability["Info1"]["Main"]["Props"] ~= nil
and next(ability["Info1"]["Main"]["Props"]) ~= nil) then
for _, prop in ipairs(ability["Info1"]["Main"]["Props"]) do
if (prop["Scale"] ~= nil and next(prop["Scale"]) ~= nil) then
ability_text = ability_text .. prop["Name"] ..": "
.. prop["Value"] .. " + " .. prop["Scale"]["Value"] .. "\n"
end
end
else
ability_text = "-"
end
hero_row:tag('td'):wikitext(ability_text):done()
end
end
create_table:node(hero_row)
create_table:node(hero_row)