Module:Sandbox/One Bar: Difference between revisions

Jump to navigation Jump to search
One Bar (talk | contribs)
No edit summary
One Bar (talk | contribs)
No edit summary
Line 4: Line 4:
local soul_unlocks_data = mw.loadJsonData("Data:SoulUnlockData.json")
local soul_unlocks_data = mw.loadJsonData("Data:SoulUnlockData.json")


local function souls(frame, item)
local level_scaling_key_to_name = {
return frame:expandTemplate{ title = "Souls", args = {item}}
end
 
local function hero_icon(frame, hero)
return frame:expandTemplate{ title = "HeroIcon", args = {hero}}
end
 
local key_to_name = {
BulletDamage = "Bullet Damage",
BulletDamage = "Bullet Damage",
MaxHealth = "Health",
MaxHealth = "Health",
Line 27: Line 19:
}
}


local function filtered_heroes()
p.pi_table = function(frame)
local filtered = {}
local pi_souls_list = get_pi_list()
for _, hero in pairs(heroes_data) do
if (not hero["IsDisabled"]) then
table.insert(filtered, hero)
end
end
return filtered
end
 
local function get_pi_list()
local soul_pis = {}
for _, v in ipairs(soul_unlocks_data) do
for _, v in ipairs(soul_unlocks_data) do
if (v["PowerIncrease"]) then
if (v["PowerIncrease"]) then
table.insert(soul_pis, v["RequiredSouls"])
table.insert(pi_souls_list, v["RequiredSouls"])
end
end
end
end
return soul_pis
end
p.pi_table = function(frame)
local pi_souls_list = get_pi_list()
local level_count = 0
local level_count = 0
for _ in ipairs(pi_souls_list) do level_count = level_count + 1 end
for _ in ipairs(pi_souls_list) do level_count = level_count + 1 end
local filtered_heroes = filtered_heroes()
for _, hero in pairs(heroes_data) do
if (not hero["IsDisabled"]) then
table.insert(filtered, hero)
end
end
local property = frame.args[1] --frame:getParent().args[1]
local property = frame.args[1] --frame:getParent().args[1]
local name = key_to_name[property]
local name = level_scaling_key_to_name[property]
local suffix = property == "BulletDamage" and " (Full Shot)" or ""
local suffix = property == "BulletDamage" and " (Full Shot)" or ""
local createTable = mw.html.create("table"):addClass("wikitable sortable mw-collapsible"):done()
local create_div = mw.html.create("div"):css("overflow-x", "auto")
local header1 = mw.html.create("tr")
local create_table = mw.html.create("table"):addClass("wikitable sortable mw-collapsible mw-collapsed"):done()
header1:tag("th"):attr("colspan", (level_count + 3)):wikitext("Base " .. name .. " based on PI"):done()
createTable:node(header1)
local title_header = mw.html.create("tr")
local header2 = mw.html.create("tr")
title_header:tag("th"):attr("colspan", (level_count + 3)):wikitext("Base " .. name .. " based on PI"):done()
header2
create_table:node(title_header)
local label_header = mw.html.create("tr")
label_header
:tag("th"):attr("rowspan", 2):wikitext("Hero"):done()
:tag("th"):attr("rowspan", 2):wikitext("Hero"):done()
:tag("th"):attr("rowspan", 2):wikitext("Base " .. name .. suffix):done()
:tag("th"):attr("rowspan", 2):wikitext("Base " .. name .. suffix):done()
:tag("th"):attr("rowspan", 2):wikitext("PL Increase" .. suffix):done()
:tag("th"):attr("rowspan", 2):wikitext("PL Increase" .. suffix):done()
:tag("th"):attr("colspan", level_count):wikitext("Souls Collected"):done()
:tag("th"):attr("colspan", level_count):wikitext("Souls Collected"):done()
createTable:node(header2)
create_table:node(label_header)
local createTableHeader = mw.html.create("tr")
local souls_header = mw.html.create("tr")
for _, v in ipairs(pi_souls_list) do
for _, v in ipairs(pi_souls_list) do
local souls_formatted = string.format("%.1fK", (v + 400) / 1000)
local souls_formatted = string.format("%.1fK", (v + 400) / 1000)
createTableHeader:tag("th"):wikitext(souls(frame, souls_formatted)):done()
souls_formatted = frame:expandTemplate{ title = "Souls", args = {souls_formatted}}
souls_header:tag("th"):wikitext(souls_formatted):done()
end
end
createTable:node(createTableHeader)
create_table:node(souls_header)
local filtered_heroes = filtered_heroes()
for _, hero in ipairs(filtered_heroes) do
for _, hero in ipairs(filtered_heroes) do
local base = math.floor((hero[property] or 0) * 100) / 100
local base = math.floor((hero[property] or 0) * 100) / 100
Line 80: Line 69:
local burst = hero["BulletsPerBurst"]
local burst = hero["BulletsPerBurst"]
local bullet_mult = shots * burst
local bullet_mult = shots * burst
local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}}
local hero_suffix = ""
local hero_suffix = ""
if (property == "BulletDamage" and bullet_mult > 1) then
if (property == "BulletDamage" and bullet_mult > 1) then
Line 87: Line 77:
if (burst > 1) then hero_suffix = hero_suffix .. " (" .. burst .. " bullets)" end
if (burst > 1) then hero_suffix = hero_suffix .. " (" .. burst .. " bullets)" end
end
end
local tableData = mw.html.create("tr")
local hero_row = mw.html.create("tr")
tableData
hero_row
:tag("td"):wikitext(hero_icon(frame, hero["Name"]) .. hero_suffix):done()
:tag("td"):wikitext(hero_icon .. hero_suffix):done()
:tag("td"):wikitext(base):done()
:tag("td"):wikitext(base):done()
:tag("td"):wikitext("+" .. level):done()
:tag("td"):wikitext("+" .. level):done()
Line 95: Line 85:
for i, v in ipairs(pi_souls_list) do
for i, v in ipairs(pi_souls_list) do
local total = (tonumber(base) ~= nil and base or 0) + (tonumber(level) ~= nil and level or 0)  * i
local total = (tonumber(base) ~= nil and base or 0) + (tonumber(level) ~= nil and level or 0)  * i
tableData
hero_row
:tag("td"):wikitext(total):done()
:tag("td"):wikitext(total):done()
end
end
createTable:node(tableData)
create_table:node(hero_row)
if (property == "BulletDamage" and alt_fires[hero["Name"]] ~= nil) then
if (property == "BulletDamage" and alt_fires[hero["Name"]] ~= nil) then
Line 108: Line 98:
local alt_fire_row = mw.html.create("tr")
local alt_fire_row = mw.html.create("tr")
alt_fire_row
alt_fire_row
:tag("td"):wikitext(hero_icon(frame, hero["Name"]) .. alt_suffix):done()
:tag("td"):wikitext(hero_icon .. alt_suffix):done()
:tag("td"):wikitext(alt_base):done()
:tag("td"):wikitext(alt_base):done()
:tag("td"):wikitext("+" .. alt_level):done()
:tag("td"):wikitext("+" .. alt_level):done()
Line 117: Line 107:
end
end
createTable:node(alt_fire_row)
create_table:node(alt_fire_row)
end
end
end
end
return tostring(createTable)
create_div:node(create_table)
return tostring(create_div)
end
end