Module:Sandbox/One Bar: Difference between revisionsGive feedback
No edit summary |
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 | local level_scaling_key_to_name = { | ||
BulletDamage = "Bullet Damage", | BulletDamage = "Bullet Damage", | ||
MaxHealth = "Health", | MaxHealth = "Health", | ||
| Line 27: | Line 19: | ||
} | } | ||
p.pi_table = function(frame) | |||
local | local pi_souls_list = get_pi_list() | ||
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( | table.insert(pi_souls_list, v["RequiredSouls"]) | ||
end | end | ||
end | end | ||
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 = | 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 | local create_div = mw.html.create("div"):css("overflow-x", "auto") | ||
local | local create_table = mw.html.create("table"):addClass("wikitable sortable mw-collapsible mw-collapsed"):done() | ||
local title_header = mw.html.create("tr") | |||
local | title_header:tag("th"):attr("colspan", (level_count + 3)):wikitext("Base " .. name .. " based on PI"):done() | ||
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() | ||
create_table:node(label_header) | |||
local | |||
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) | ||
souls_formatted = frame:expandTemplate{ title = "Souls", args = {souls_formatted}} | |||
souls_header:tag("th"):wikitext(souls_formatted):done() | |||
end | end | ||
create_table:node(souls_header) | |||
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 | local hero_row = mw.html.create("tr") | ||
hero_row | |||
:tag("td"):wikitext(hero_icon | :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 | ||
hero_row | |||
:tag("td"):wikitext(total):done() | :tag("td"):wikitext(total):done() | ||
end | end | ||
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 | :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 | ||
create_table:node(alt_fire_row) | |||
end | end | ||
end | end | ||
return tostring( | create_div:node(create_table) | ||
return tostring(create_div) | |||
end | end | ||