Module:Sandbox/One Bar: Difference between revisionsGive feedback
Jump to navigation
Jump to search
m arg fix hopefully |
table fluff |
||
| Line 5: | Line 5: | ||
local function souls(frame, item) | local function souls(frame, item) | ||
return frame:expandTemplate{ title = | 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", | |||
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 | |||
return filtered | |||
end | end | ||
| Line 20: | Line 42: | ||
p.pi_table = function(frame) | p.pi_table = function(frame) | ||
local pi_souls_list = get_pi_list() | local pi_souls_list = get_pi_list() | ||
local level_count = 0 | |||
for _ in ipairs(T) do level_count = level_count + 1 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 suffix = property == "BulletDamage" and " (Full Shot)" or "" | |||
local createTable = mw.html.create( | local createTable = mw.html.create("table"):addClass("wikitable sortable"):done() | ||
local header1 = mw.html.create("tr") | |||
local | header1:tag("th"):attr("colspan", (level_count + 3)):wikitext("Base " .. name .. " based on PI"):done() | ||
createTable:node(header1) | |||
:tag( | local header2 = mw.html.create("tr") | ||
:tag( | header2 | ||
:tag( | :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 | for _, v in ipairs(pi_souls_list) do | ||
createTableHeader:tag( | local souls = string.format("%.1fK", v) | ||
createTableHeader:tag("th"):wikitext(souls(frame, souls)):done() | |||
end | end | ||
createTable:node(createTableHeader) | createTable:node(createTableHeader) | ||
for _, hero in | for _, hero in ipairs(filtered_heroes()) do | ||
local base = hero[property] | local base = hero[property] | ||
local level = hero["LevelScaling"][property] | |||
local shots = hero["BulletsPerShot"] | local shots = hero["BulletsPerShot"] | ||
local tableData = mw.html.create("tr") | |||
local tableData = mw.html.create( | |||
tableData | tableData | ||
:tag( | :tag("td"):wikitext(hero_icon(hero["Name"])):done() | ||
:tag( | :tag("td"):wikitext(base):done() | ||
:tag( | :tag("td"):wikitext("+" .. level):done() | ||
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 | tableData | ||
:tag( | :tag("td"):wikitext(total):done() | ||
end | end | ||
Revision as of 02:18, 15 May 2025
Documentation for this module may be created at Module:Sandbox/One Bar/doc
local p = {};
local item_data = mw.loadJsonData("Data:ItemData.json")
local heroes_data = mw.loadJsonData("Data:HeroData.json")
local soul_unlocks_data = mw.loadJsonData("Data:SoulUnlockData.json")
local function souls(frame, item)
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",
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
return filtered
end
local function get_pi_list()
local soul_pis = {}
for _, v in ipairs(soul_unlocks_data) do
if (v["PowerIncrease"]) then
table.insert(soul_pis, v["RequiredSouls"])
end
end
return soul_pis
end
p.pi_table = function(frame)
local pi_souls_list = get_pi_list()
local level_count = 0
for _ in ipairs(T) do level_count = level_count + 1 end
local property = frame.args[1] --frame:getParent().args[1]
local name = key_to_name[property]
local suffix = property == "BulletDamage" and " (Full Shot)" or ""
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 = string.format("%.1fK", v)
createTableHeader:tag("th"):wikitext(souls(frame, souls)):done()
end
createTable:node(createTableHeader)
for _, hero in ipairs(filtered_heroes()) do
local base = hero[property]
local level = hero["LevelScaling"][property]
local shots = hero["BulletsPerShot"]
local tableData = mw.html.create("tr")
tableData
:tag("td"):wikitext(hero_icon(hero["Name"])):done()
: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
createTable:node(tableData)
end
return tostring(createTable)
end
local function get_disabled_items_array()
local disabledItems = {}
for k, v in pairs(item_data) do
if (v["IsDisabled"] == true and v["Name"] ~= nil) then
disabledItems[k] = v
end
end
return disabledItems
end
p.disabledItemsTable = function(frame)
local requirements = {}
local listofItems = ""
local filteredData = {}
filteredData = get_disabled_items_array()
local createTable = mw.html.create('table')
:addClass('wikitable sortable')
:tag('caption'):wikitext("List of items"):done()
local createTableHeader = mw.html.create('tr')
createTableHeader
:tag('th'):wikitext('Variable'):done()
:tag('th'):wikitext('Name'):done()
:tag('th'):wikitext('Category'):done()
:tag('th'):wikitext('Description'):done()
createTable:node(createTableHeader)
-- query all the filtered items. itemName is the item table.
for internalName, itemName in pairs(filteredData) do
local display = itemName["Name"]
listofItems = listofItems .. itemName["Name"] .. "<br/>"
local categoryDisplay = itemName["Slot"]
local description = itemName["Description"]
local tableData = mw.html.create('tr')
tableData
:tag('td'):wikitext(internalName):done()
:tag('td'):wikitext(display):done()
:tag('td'):wikitext(categoryDisplay):done()
:tag('td'):wikitext(description):done()
table.insert(requirements, tableData)
end
for _, row in ipairs(requirements) do
createTable:node(row)
end
return tostring(createTable)
end
return p