Editing Module:Sandbox/One BarGive feedback
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
| Latest revision | Your text | ||
| Line 2: | Line 2: | ||
local item_data = mw.loadJsonData("Data:ItemData.json") | local item_data = mw.loadJsonData("Data:ItemData.json") | ||
local heroes_data = mw.loadJsonData("Data:HeroData.json") | local heroes_data = mw.loadJsonData("Data:HeroData.json") | ||
local | local soul_unlocks_data = mw.loadJsonData("Data:SoulUnlockData.json") | ||
local | local level_scaling_key_to_name = { | ||
BulletDamage = "Bullet Damage", | |||
MaxHealth = "Health", | |||
TechPower = "Spirit Power", | |||
LightMeleeDamage = "Light Melee Damage", | |||
HeavyMeleeDamage = "Heavy Melee Damage" | |||
} | |||
-- Not in HeroData.json although Shiv is just (bullet damage * 12) | |||
local alt_fires = { | |||
Shiv = {base = 59.4, level = 2.64, suffix = "alt fire 12 pellets"}, | |||
Viscous = {base = 70, level = 0.9, suffix = "alt fire AOE"}, | |||
Yamato = {base = 70, level = 0.35, suffix = "alt fire AOE"} | |||
} | |||
p.pi_table = function(frame) | |||
local | local pi_souls_list = get_pi_list() | ||
for _, v in ipairs(soul_unlocks_data) do | |||
if (v["PowerIncrease"]) then | |||
table.insert(pi_souls_list, v["RequiredSouls"]) | |||
end | end | ||
end | end | ||
local level_count = 0 | |||
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) | |||
local | |||
for | |||
if (not hero["IsDisabled | |||
table.insert( | |||
end | end | ||
end | end | ||
local create_table = mw.html.create("table"):addClass("wikitable sortable"):done() | local property = frame.args[1] --frame:getParent().args[1] | ||
local | local name = level_scaling_key_to_name[property] | ||
local suffix = property == "BulletDamage" and " (Full Shot)" or "" | |||
:tag("th"):attr(" | local create_div = mw.html.create("div"):css("overflow-x", "auto") | ||
:tag("th"):attr(" | local create_table = mw.html.create("table"):addClass("wikitable sortable mw-collapsible mw-collapsed"):done() | ||
:tag("th"):attr(" | |||
:tag("th"):attr("colspan", | local title_header = mw.html.create("tr") | ||
create_table:node( | 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("Base " .. name .. suffix):done() | |||
:tag("th"):attr("rowspan", 2):wikitext("PL Increase" .. suffix):done() | |||
:tag("th"):attr("colspan", level_count):wikitext("Souls Collected"):done() | |||
create_table:node(label_header) | |||
local souls_header = mw.html.create("tr") | |||
for _, v in ipairs(pi_souls_list) do | |||
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 | |||
create_table:node(souls_header) | |||
for _, | for _, hero in ipairs(filtered_heroes) do | ||
local hero = | local base = math.floor((hero[property] or 0) * 100) / 100 | ||
local | local level = math.floor(hero["LevelScaling"][property] * 100) / 100 | ||
local shots = hero["BulletsPerShot"] | |||
local burst = hero["BulletsPerBurst"] | |||
local bullet_mult = shots * burst | |||
local hero_icon = frame:expandTemplate{ title = "HeroIcon", args = {hero["Name"]}} | |||
local hero_suffix = "" | |||
if (property == "BulletDamage" and bullet_mult > 1) then | |||
base = base * bullet_mult | |||
level = level * bullet_mult | |||
if (shots > 1) then hero_suffix = hero_suffix .. " (" .. shots .. " pellets)" end | |||
if (burst > 1) then hero_suffix = hero_suffix .. " (" .. burst .. " bullets)" end | |||
end | |||
local hero_row = mw.html.create("tr") | local hero_row = mw.html.create("tr") | ||
hero_row | |||
:tag("td"):wikitext(hero_icon .. hero_suffix):done() | |||
:tag("td"):wikitext(base):done() | |||
for i | :tag("td"):wikitext("+" .. level):done() | ||
hero_row:tag( | |||
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 | |||
hero_row | |||
:tag("td"):wikitext(total):done() | |||
end | end | ||
create_table:node(hero_row) | create_table:node(hero_row) | ||
if (property == "BulletDamage" and alt_fires[hero["Name"]] ~= nil) then | |||
local alt_fire = alt_fires[hero["Name"]] | |||
local alt_base = alt_fire["base"] | |||
local alt_level = alt_fire["level"] | |||
local alt_suffix = " (" .. alt_fire["suffix"] .. ")" | |||
local alt_fire_row = mw.html.create("tr") | |||
alt_fire_row | |||
:tag("td"):wikitext(hero_icon .. alt_suffix):done() | |||
:tag("td"):wikitext(alt_base):done() | |||
:tag("td"):wikitext("+" .. alt_level):done() | |||
for i, v in ipairs(pi_souls_list) do | |||
local total = alt_base + alt_level * i | |||
alt_fire_row:tag("td"):wikitext(total):done() | |||
end | |||
create_table:node(alt_fire_row) | |||
end | |||
end | end | ||
return tostring( | create_div:node(create_table) | ||
return tostring(create_div) | |||
end | end | ||