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 function | local function souls(frame, item) | ||
return frame:expandTemplate{ title = "Souls", args = {item}} | |||
end | end | ||
local function | local function hero_icon(frame, hero) | ||
local | return frame:expandTemplate{ title = "HeroIcon", args = {hero}} | ||
end | |||
local key_to_name = { | |||
BulletDamage = "Bullet Damage", | |||
MaxHealth = "Health", | |||
TechPower = "Spirit Power", | |||
LightMeleeDamage = "Light Melee Damage", | |||
HeavyMeleeDamage = "Heavy Melee Damage" | |||
} | |||
local function filtered_heroes() | |||
local filtered = {} | |||
for _, hero in ipairs(soul_unlocks_data) do | |||
if (not hero["isDisabled"]) then | |||
table.insert(filtered, hero) | |||
end | end | ||
end | end | ||
return | return filtered | ||
end | end | ||
local function | local function get_pi_list() | ||
local | local soul_pis = {} | ||
for _, v in ipairs(soul_unlocks_data) do | |||
if (v["PowerIncrease"]) then | |||
table.insert(soul_pis, v["RequiredSouls"]) | |||
end | end | ||
end | end | ||
return | return soul_pis | ||
end | end | ||
p.pi_table = function(frame) | |||
local pi_souls_list = get_pi_list() | |||
local level_count = 0 | |||
for _ in ipairs(pi_souls_list) do level_count = level_count + 1 end | |||
p. | local property = frame.args[1] --frame:getParent().args[1] | ||
local | local name = key_to_name[property] | ||
local | local suffix = property == "BulletDamage" and " (Full Shot)" or "" | ||
for | |||
local createTable = mw.html.create("table"):addClass("wikitable sortable"):done() | |||
local header1 = mw.html.create("tr") | |||
header1:tag("th"):attr("colspan", (level_count + 3)):wikitext("Base " .. name .. " based on PI"):done() | |||
createTable:node(header1) | |||
local header2 = mw.html.create("tr") | |||
header2 | |||
: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() | |||
createTable:node(header2) | |||
local createTableHeader = mw.html.create("tr") | |||
for _, v in ipairs(pi_souls_list) do | |||
local souls_formatted = string.format("%.1fK", v) | |||
createTableHeader:tag("th"):wikitext(souls(frame, souls_formatted)):done() | |||
end | end | ||
createTable:node(createTableHeader) | |||
for _, | for _, hero in ipairs(filtered_heroes()) do | ||
local hero = | local base = hero[property] | ||
local | local level = hero["LevelScaling"][property] | ||
local | local shots = hero["BulletsPerShot"] | ||
local tableData = mw.html.create("tr") | |||
tableData | |||
:tag("td"):wikitext(hero_icon(hero["Name"])):done() | |||
for i | :tag("td"):wikitext(base):done() | ||
:tag("td"):wikitext("+" .. level):done() | |||
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 | |||
tableData | |||
:tag("td"):wikitext(total):done() | |||
end | end | ||
createTable:node(tableData) | |||
end | end | ||
return tostring( | return tostring(createTable) | ||
end | end | ||