Editing Module:HeroDataArraysGive feedback
Jump to navigation
Jump to search
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 14: | Line 14: | ||
end | end | ||
end | end | ||
end | end | ||
| Line 35: | Line 22: | ||
end | end | ||
return value | return value | ||
end | end | ||
| Line 163: | Line 64: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
maxHealth = data["MaxHealth"] or 0, | maxHealth = tonumber(data["MaxHealth"]) or 0, | ||
scalingHealth = | scalingHealth = tonumber(data["LevelScaling>MaxHealth"]) or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | -- Input table will be called a, output wikitable will be called z | ||
local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Hero Base Health Stats \n".. | |||
"! Hero !! Starting !! Added per Boon !! At Max Boon \n" | |||
{ | -- Iterate over heroes adding a new row to the wikitable for each | ||
for _, r in ipairs(rows) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.maxHealth.." || +"..r.scalingHealth.." || ".. | |||
tostring(roundValue(r.maxHealth + r.scalingHealth * soul_unlock.get_max('PowerIncrease'))).." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
return | |||
end | end | ||
p.heroRegenTable = function(frame) | p.heroRegenTable = function(frame) | ||
local heroRegenData = heroDataArray({"Name", " | local heroRegenData = heroDataArray({"Name", "BaseHealthRegen"}) | ||
local rows = {} | local rows = {} | ||
| Line 199: | Line 96: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
baseHealthRegen = data["BaseHealthRegen"] or 0 | baseHealthRegen = data["BaseHealthRegen"] or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Hero Base Health Regen \n".. | |||
"! Hero !! HP/s \n" | |||
for _, r in ipairs(rows) do | |||
for _, | z = z.. | ||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.baseHealthRegen.." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroDpsTable = function(frame) | p.heroDpsTable = function(frame) | ||
local heroDpsData = heroDataArray({"Name","Weapon>DPS","Weapon>ReloadSingle","Weapon>ReloadDelay","Weapon>ReloadTime", | local heroDpsData = heroDataArray({"Name","Weapon>DPS","Weapon>ReloadSingle","Weapon>ReloadDelay","Weapon>ReloadTime", | ||
"Weapon>ClipSize","Weapon>RoundsPerSecond","Weapon>BulletDamage","Weapon | "Weapon>ClipSize","Weapon>RoundsPerSecond","Weapon>BulletDamage","Weapon>BulletsPerShot"}) | ||
local rows = {} | local rows = {} | ||
| Line 241: | Line 130: | ||
roundsPerSecond = data["Weapon>RoundsPerSecond"] or 0, | roundsPerSecond = data["Weapon>RoundsPerSecond"] or 0, | ||
bulletDamage = data["Weapon>BulletDamage"] or 0, | bulletDamage = data["Weapon>BulletDamage"] or 0, | ||
bulletsPerShot = data["Weapon | bulletsPerShot = data["Weapon>BulletsPerShot"] or 0 | ||
}) | }) | ||
end | |||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Hero Base Damage \n".. | |||
"! Hero !! Damage per sec !! Reload Delay (s) !! Reload Time (s) !! Ammo !! Bullets per sec !! Bullet Damage !! Bullets Per Shot \n" | |||
local | for _, r in ipairs(rows) do | ||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.DPS.." || "..r.reloadDelay.." || "..r.reloadTime.." || "..r.clipSize.. | |||
" || "..r.roundsPerSecond.." || "..r.bulletDamage.." || "..r.bulletsPerShot.." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | |||
p.heroAltDpsTable = function(frame) | |||
local heroAltDpsData = heroDataArray({"Name","Weapon>AltFire>DPS","Weapon>AltFire>ReloadTime", | |||
"Weapon>AltFire>AmmoConsumedPerShot","Weapon>AltFire>RoundsPerSecond","Weapon>AltFire>BulletDamage","Weapon>AltFire>BulletsPerShot"}) | |||
local rows = {} | |||
for name, data in pairs(heroAltDpsData) do | |||
table.insert(rows, { | |||
name = name, | |||
DPS = data["Weapon>AltFire>DPS"] or 0, | |||
reloadTime = data["Weapon>AltFire>ReloadTime"] or 0, | |||
ammoConsumedPerShot = data["Weapon>AltFire>AmmoConsumedPerShot"] or 0, | |||
roundsPerSecond = data["Weapon>AltFire>RoundsPerSecond"] or 0, | |||
bulletDamage = data["Weapon>AltFire>BulletDamage"] or 0, | |||
bulletsPerShot = data["Weapon>AltFire>BulletsPerShot"] or 0 | |||
}) | |||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local tableDefs = { | local tableDefs = { | ||
{ | { | ||
title = "Base | title = "Hero Base Alt Fire Stats", | ||
columns = { | columns = { | ||
{ label = "Damage per sec", field = "DPS" }, | { label = "Damage per sec", field = "DPS" }, | ||
{ label = "Reload Time (s)", field = "reloadTime" }, | { label = "Reload Time (s)", field = "reloadTime" }, | ||
{ label = "Ammo", field = " | { label = "Ammo Per Shot", field = "ammoConsumedPerShot" }, | ||
{ label = "Bullets per sec", field = "roundsPerSecond" }, | { label = "Bullets per sec", field = "roundsPerSecond" }, | ||
{ label = "Bullet Damage", field = "bulletDamage" }, | { label = "Bullet Damage", field = "bulletDamage" }, | ||
{ label = "Bullets Per Shot", field = "bulletsPerShot" }, | { label = "Bullets Per Shot", field = "bulletsPerShot" }, | ||
} | } | ||
} | } | ||
} | } | ||
local output = | local output = "" | ||
for _, | |||
local | for _, tableDef in ipairs(tableDefs) do | ||
local filteredRows = {} | |||
table.insert( | for _, r in ipairs(rows) do | ||
local hasValue = false | |||
for _, col in ipairs(tableDef.columns) do | |||
if r[col.field] ~= 0 then | |||
hasValue = true | |||
break | |||
end | |||
end | |||
if hasValue then | |||
table.insert(filteredRows, r) | |||
end | |||
end | |||
if #filteredRows > 0 then | |||
local header = "" | |||
for _, col in ipairs(tableDef.columns) do | |||
header = header.." !! "..col.label | |||
end | |||
local t = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ "..tableDef.title.." \n".. | |||
"! Hero"..header.." \n" | |||
for _, r in ipairs(filteredRows) do | |||
local cells = "" | |||
for _, col in ipairs(tableDef.columns) do | |||
cells = cells.." || "..r[col.field] | |||
end | |||
t = t.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
cells.." \n" | |||
end | |||
t = t.."|}" | |||
if output ~= "" then | |||
output = output.."\n\n" | |||
end | |||
output = output..t | |||
end | end | ||
end | end | ||
return | return output | ||
end | end | ||
p.heroBulletSpeedTable = function(frame) | p.heroBulletSpeedTable = function(frame) | ||
local heroBulletSpeedData = heroDataArray({ | local heroBulletSpeedData = heroDataArray({"Name", "Weapon>BulletSpeed"}) | ||
local rows = {} | local rows = {} | ||
for name, data in pairs(heroBulletSpeedData) do | for name, data in pairs(heroBulletSpeedData) do | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
bulletSpeed = data["Weapon | bulletSpeed = data["Weapon>BulletSpeed"] or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Base Bullet Velocity \n".. | |||
"! Hero !! m/s \n" | |||
for _, r in ipairs(rows) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
{ | frame:expandTemplate{title="PageRef", args={r.name}}.. | ||
" || "..r.bulletSpeed.." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroClipSizeTable = function(frame) | p.heroClipSizeTable = function(frame) | ||
local heroClipSizeData = heroDataArray({"Name", "Weapon | local heroClipSizeData = heroDataArray({"Name", "Weapon>ClipSize"}) | ||
local rows = {} | local rows = {} | ||
| Line 351: | Line 267: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
clipSize = data["Weapon>ClipSize | clipSize = data["Weapon>ClipSize"] or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Base Ammo Count \n".. | |||
"! Hero !! Ammo \n" | |||
for _, r in ipairs(rows) do | |||
for _, | z = z.. | ||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.clipSize.." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroRoundsPerSecondTable = function(frame) | p.heroRoundsPerSecondTable = function(frame) | ||
local heroRoundsPerSecondData = heroDataArray({"Name", "Weapon>RoundsPerSecond | local heroRoundsPerSecondData = heroDataArray({"Name", "Weapon>RoundsPerSecond"}) | ||
local rows = {} | local rows = {} | ||
| Line 402: | Line 294: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
roundsPerSecond = data["Weapon>RoundsPerSecond"] or 0 | roundsPerSecond = data["Weapon>RoundsPerSecond"] or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Base Fire Rate \n".. | |||
"! Hero !! Rounds/s \n" | |||
for _, r in ipairs(rows) do | |||
for _, | z = z.. | ||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.roundsPerSecond.." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroFalloffRangeTable = function(frame) | p.heroFalloffRangeTable = function(frame) | ||
local heroFalloffRangeData = heroDataArray({"Name", "Weapon>FalloffStartRange", "Weapon>FalloffEndRange" | local heroFalloffRangeData = heroDataArray({"Name", "Weapon>FalloffStartRange", "Weapon>FalloffEndRange"}) | ||
local rows = {} | local rows = {} | ||
| Line 451: | Line 322: | ||
name = name, | name = name, | ||
falloffStartRange = data["Weapon>FalloffStartRange"] or 0, | falloffStartRange = data["Weapon>FalloffStartRange"] or 0, | ||
falloffEndRange = data["Weapon>FalloffEndRange"] or 0 | falloffEndRange = data["Weapon>FalloffEndRange"] or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Base Falloff Range \n".. | |||
"! Hero !! Minimum Range (m) !! Maximum Range (m) \n" | |||
for _, r in ipairs(rows) do | |||
for _, | z = z.. | ||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.falloffStartRange.." || "..r.falloffEndRange.." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroBulletDamageTable = function(frame) | p.heroBulletDamageTable = function(frame) | ||
-- Pull data | -- Pull data | ||
local heroBulletDamageData = heroDataArray({"Name", "Weapon>BulletDamage", "LevelScaling>BulletDamage | local heroBulletDamageData = heroDataArray({"Name", "Weapon>BulletDamage", "LevelScaling>BulletDamage"}) | ||
local rows = {} | local rows = {} | ||
| Line 509: | Line 350: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
bulletDamage = | bulletDamage = tonumber(data["Weapon>BulletDamage"]) or 0, | ||
scalingDamage = tonumber(data["LevelScaling>BulletDamage"]) or 0 | |||
scalingDamage = | |||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Hero Base Bullet Damage Stats \n".. | |||
"! Hero !! Starting !! Added per Boon !! At Max Boon \n" | |||
-- Iterate over heroes adding a new row to the wikitable for each | |||
for _, | for _, r in ipairs(rows) do | ||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.bulletDamage.." || +"..r.scalingDamage.." || ".. | |||
tostring(roundValue(r.bulletDamage + r.scalingDamage * soul_unlock.get_max('PowerIncrease'))).." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
return | |||
end | end | ||
| Line 611: | Line 382: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
lightMeleeDamage = data["LightMeleeDamage"] or 0, | lightMeleeDamage = tonumber(data["LightMeleeDamage"]) or 0, | ||
scalingDamage = | scalingDamage = tonumber(data["LevelScaling>LightMeleeDamage"]) or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Hero Base Light Melee Stats \n".. | |||
"! Hero !! Starting !! Added per Boon !! At Max Boon \n" | |||
-- Iterate over heroes adding a new row to the wikitable for each | |||
for _, r in ipairs(rows) do | |||
z = z.. | |||
"|- \n".. | |||
{ | "| style=\"text-align:left;\" | ".. | ||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.lightMeleeDamage.." || +"..r.scalingDamage.." || ".. | |||
tostring(roundValue(r.lightMeleeDamage + r.scalingDamage * soul_unlock.get_max('PowerIncrease'))).." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
return | |||
end | end | ||
p.heroHeavyMeleeTable = function(frame) | p.heroHeavyMeleeTable = function(frame) | ||
-- Pull data | -- Pull data | ||
local heroHeavyMeleeData = heroDataArray({"Name", "HeavyMeleeDamage", "LevelScaling | local heroHeavyMeleeData = heroDataArray({"Name", "HeavyMeleeDamage", "LevelScaling>HeavyMeleeDamage"}) | ||
local rows = {} | local rows = {} | ||
| Line 648: | Line 414: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
heavyMeleeDamage = data["HeavyMeleeDamage"] or 0, | heavyMeleeDamage = tonumber(data["HeavyMeleeDamage"]) or 0, | ||
scalingDamage = | scalingDamage = tonumber(data["LevelScaling>HeavyMeleeDamage"]) or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Hero Base Heavy Melee Stats \n".. | |||
"! Hero !! Starting !! Added per Boon !! At Max Boon \n" | |||
-- Iterate over heroes adding a new row to the wikitable for each | |||
for _, r in ipairs(rows) do | |||
{ | z = z.. | ||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.heavyMeleeDamage.." || +"..r.scalingDamage.." || ".. | |||
tostring(roundValue(r.heavyMeleeDamage + r.scalingDamage * soul_unlock.get_max('PowerIncrease'))).." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
return | |||
end | end | ||
| Line 690: | Line 449: | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Hero Base Stamina Stats \n".. | |||
"! Hero !! Stamina Bars !! Cooldown (s) \n" | |||
for _, r in ipairs(rows) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.stamina.." || "..r.staminaCooldown.." \n" | |||
for _, | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroDashTable = function(frame) | p.heroDashTable = function(frame) | ||
local heroDashData = heroDataArray({"Name", "GroundDashSpeed | local heroDashData = heroDataArray({"Name", "GroundDashSpeed"}) | ||
local rows = {} | local rows = {} | ||
| Line 720: | Line 473: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
duration = tonumber(data.GroundDashSpeed) or 0 | |||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = '{| class="wikitable sortable mw-collapsible" style="text-align:center"\n' .. | ||
'|+ Hero Base Dash Speed Stats\n' .. | |||
'! Hero !! Dash Speed (m/s)\n' | |||
for _, r in ipairs(rows) do | |||
z = z .. '|-\n| style="text-align:left;" | ' .. | |||
frame:expandTemplate{title = 'PageRef', args = {r.name}} .. | |||
' || ' .. r.duration .. '\n' | |||
for _, | |||
end | end | ||
return z .. '|}' | |||
return | |||
end | end | ||
| Line 754: | Line 492: | ||
local heroReloadData = heroDataArray({"Name", "Weapon>ReloadTime"}) | local heroReloadData = heroDataArray({"Name", "Weapon>ReloadTime"}) | ||
-- 1. collect rows | |||
local rows = {} | local rows = {} | ||
for name, data in pairs(heroReloadData) do | for name, data in pairs(heroReloadData) do | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
reloadTime = data["Weapon>ReloadTime"] or 0 | reloadTime = tonumber(data["Weapon>ReloadTime"]) or 0 | ||
}) | }) | ||
end | end | ||
-- 2. alphabetical by hero name | |||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | -- 3. build table | ||
local z = '{| class="wikitable sortable mw-collapsible" style="text-align:center"\n' .. | |||
'|+ Hero Base Reload Time Stats\n' .. | |||
'! Hero !! Reload Time (s) \n' | |||
for _, r in ipairs(rows) do | |||
z = z .. | |||
'|-\n' .. | |||
'| style="text-align:left;" | ' .. | |||
frame:expandTemplate{title = 'PageRef', args = {r.name}} .. | |||
for _, | ' || '.. r.reloadTime ..' \n' | ||
end | end | ||
return z .. '|}' | |||
return | |||
end | end | ||
| Line 794: | Line 529: | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local tableDefs = { | local tableDefs = { | ||
{ | { | ||
title = "Base Reload Delay", | title = "Hero Base Reload Delay Stats", | ||
columns = { | columns = { | ||
{ label = "Reload Delay (s)", field = "reloadDelay" } | { label = "Reload Delay (s)", field = "reloadDelay" } | ||
| Line 805: | Line 540: | ||
} | } | ||
local output = | local output = "" | ||
for _, | |||
local | for _, tableDef in ipairs(tableDefs) do | ||
local filteredRows = {} | |||
table.insert( | for _, r in ipairs(rows) do | ||
local hasValue = false | |||
for _, col in ipairs(tableDef.columns) do | |||
if r[col.field] ~= 0 then | |||
hasValue = true | |||
break | |||
end | |||
end | |||
if hasValue then | |||
table.insert(filteredRows, r) | |||
end | |||
end | |||
if #filteredRows > 0 then | |||
local header = "" | |||
for _, col in ipairs(tableDef.columns) do | |||
header = header.." !! "..col.label | |||
end | |||
local t = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ "..tableDef.title.." \n".. | |||
"! Hero"..header.." \n" | |||
for _, r in ipairs(filteredRows) do | |||
local cells = "" | |||
for _, col in ipairs(tableDef.columns) do | |||
cells = cells.." || "..r[col.field] | |||
end | |||
t = t.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
cells.." \n" | |||
end | |||
t = t.."|}" | |||
if output ~= "" then | |||
output = output.."\n\n" | |||
end | |||
output = output..t | |||
end | end | ||
end | end | ||
return | return output | ||
end | end | ||
p.heroMoveSpeedTable = function(frame) | p.heroMoveSpeedTable = function(frame) | ||
local heroMoveSpeedData = heroDataArray({"Name", "MaxMoveSpeed", " | local heroMoveSpeedData = heroDataArray({"Name", "MaxMoveSpeed", "SprintSpeed"}) | ||
local rows = {} | local rows = {} | ||
| Line 823: | Line 597: | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
moveSpeed = data["MaxMoveSpeed"] or 0, | moveSpeed = tonumber(data["MaxMoveSpeed"]) or 0, | ||
sprintSpeed = | sprintSpeed = tonumber(data["SprintSpeed"]) or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local | local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | ||
"|+ Hero Base Move Speed Stats \n".. | |||
"! Hero !! Move Speed (m/s) !! Sprint Speed (m/s) !! Total Speed (m/s) \n" | |||
for _, r in ipairs(rows) do | |||
for _, | z = z.. | ||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
" || "..r.moveSpeed.." || "..r.sprintSpeed.." || "..r.moveSpeed + r.sprintSpeed .." \n" | |||
end | end | ||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroDamageResistTable = function(frame) | p.heroDamageResistTable = function(frame) | ||
local heroDamageResistData = heroDataArray({"Name", "BulletResist", "LevelScaling>BulletResist", "TechResist", "LevelScaling>TechResist", "MeleeResist", "CritDamageReceivedPercent" | local heroDamageResistData = heroDataArray({"Name", "BulletResist", "LevelScaling>BulletResist", "TechResist", "LevelScaling>TechResist", "MeleeResist", "CritDamageReceivedPercent"}) | ||
local rows = {} | local rows = {} | ||
| Line 870: | Line 626: | ||
name = name, | name = name, | ||
bulletResist = data["BulletResist"] or 0, | bulletResist = data["BulletResist"] or 0, | ||
bulletScaling = data["LevelScaling>BulletResist"] or 0, | |||
spiritResist = data["TechResist"] or 0, | spiritResist = data["TechResist"] or 0, | ||
spiritScaling = data["LevelScaling>TechResist"] or 0, | |||
meleeResist = data["MeleeResist"] or 0, | meleeResist = data["MeleeResist"] or 0, | ||
critReduction = data["CritDamageReceivedPercent"] or 0 | critReduction = data["CritDamageReceivedPercent"] or 0 | ||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local tableDefs = { | local tableDefs = { | ||
{ | { | ||
title = "Base Bullet Resist Stats", | title = "Hero Base Bullet Resist Stats", | ||
columns = { | columns = { | ||
{ label = " | { label = "Bullet Resist (%)", field = "bulletResist" }, | ||
{ label = " | { label = "BR per Boon (%)", field = "bulletScaling" }, | ||
} | } | ||
}, | }, | ||
{ | { | ||
title = "Base Spirit Resist Stats", | title = "Hero Base Spirit Resist Stats", | ||
columns = { | columns = { | ||
{ label = " | { label = "Spirit Resist (%)", field = "spiritResist" }, | ||
{ label = " | { label = "SR per Boon (%)", field = "spiritScaling" }, | ||
} | } | ||
}, | }, | ||
{ | { | ||
title = "Base Melee Resist Stats", | title = "Hero Base Melee Resist Stats", | ||
columns = { | columns = { | ||
{ label = "Melee Resist (%)", field = "meleeResist" }, | { label = "Melee Resist (%)", field = "meleeResist" }, | ||
| Line 909: | Line 657: | ||
}, | }, | ||
{ | { | ||
title = "Base Crit Reduction Stats", | title = "Hero Base Crit Reduction Stats", | ||
columns = { | columns = { | ||
{ label = "Crit Reduction (%)", field = "critReduction" }, | { label = "Crit Reduction (%)", field = "critReduction" }, | ||
| Line 916: | Line 664: | ||
} | } | ||
local output | local output = "" | ||
for _, tableDef in ipairs(tableDefs) do | |||
local filteredRows = {} | |||
for _, r in ipairs(rows) do | |||
local hasValue = false | |||
for _, col in ipairs(tableDef.columns) do | |||
if r[col.field] ~= 0 then | |||
hasValue = true | |||
break | |||
end | |||
end | |||
if hasValue then | |||
table.insert(filteredRows, r) | |||
end | |||
table.insert( | |||
end | end | ||
if #filteredRows > 0 then | |||
end | local header = "" | ||
for _, col in ipairs(tableDef.columns) do | |||
header = header.." !! "..col.label | |||
end | |||
local t = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ "..tableDef.title.." \n".. | |||
"! Hero"..header.." \n" | |||
for _, r in ipairs(filteredRows) do | |||
local cells = "" | |||
for _, col in ipairs(tableDef.columns) do | |||
cells = cells.." || "..r[col.field] | |||
end | |||
t = t.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
cells.." \n" | |||
end | |||
t = t.."|}" | |||
if output ~= "" then | |||
output = output.."\n\n" | |||
end | |||
output = output..t | |||
end | end | ||
end | end | ||
return | return output | ||
end | end | ||
p. | p.heroCritTable = function(frame) | ||
local | local heroCritData = heroDataArray({"Name", "CritDamageBonusPercent"}) | ||
local rows = {} | local rows = {} | ||
for name, data in pairs( | for name, data in pairs(heroCritData) do | ||
table.insert(rows, { | table.insert(rows, { | ||
name = name, | name = name, | ||
critBonusScale = data["CritDamageBonusPercent"] or 0 | |||
}) | }) | ||
end | end | ||
table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end) | |||
local tableDefs = { | local tableDefs = { | ||
{ | { | ||
title = "Base | title = "Hero Base Crit Bonus Scale Stats", | ||
columns = { | columns = { | ||
{ label = " | { label = "Crit Bonus Scale (%)", field = "critBonusScale" } | ||
} | } | ||
} | } | ||
} | } | ||
local output | local output = "" | ||
for _, tableDef in ipairs(tableDefs) do | |||
local filteredRows = {} | |||
for _, r in ipairs(rows) do | |||
local hasValue = false | |||
for _, col in ipairs(tableDef.columns) do | |||
if r[col.field] ~= 0 then | |||
hasValue = true | |||
break | |||
end | |||
end | |||
if hasValue then | |||
table.insert(filteredRows, r) | |||
end | |||
end | end | ||
if #filteredRows > 0 then | |||
end | local header = "" | ||
for _, col in ipairs(tableDef.columns) do | |||
header = header.." !! "..col.label | |||
end | |||
local t = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ "..tableDef.title.." \n".. | |||
"! Hero"..header.." \n" | |||
for _, r in ipairs(filteredRows) do | |||
local cells = "" | |||
for _, col in ipairs(tableDef.columns) do | |||
cells = cells.." || "..r[col.field] | |||
end | |||
t = t.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={r.name}}.. | |||
cells.." \n" | |||
end | |||
t = t.."|}" | |||
if output ~= "" then | |||
output = output.."\n\n" | |||
end | |||
output = output..t | |||
end | end | ||
end | end | ||
return | return output | ||
end | end | ||
return p | return p | ||