Module:HeroDataArrays: Difference between revisionsGive feedback
Gammaton32 (talk | contribs) No edit summary |
added rounded decimals |
||
| Line 1: | Line 1: | ||
local p = {}; | local p = {}; | ||
local util_module = require('Module:Utilities') | local util_module = require('Module:Utilities') | ||
| Line 7: | Line 6: | ||
-- Just get heroes that are playable | -- Just get heroes that are playable | ||
for i, heroData in pairs(allHeroData) do | for i, heroData in pairs(allHeroData) do | ||
if heroData["IsDisabled"] == false then | |||
table.insert(inGameHeroData, heroData) | |||
end | |||
end | |||
-- Helper function to round numeric values | |||
local function roundValue(value) | |||
if type(value) == "number" then | |||
return util_module.round_to_sig_fig(value, 3) | |||
end | |||
return value | |||
end | end | ||
| Line 17: | Line 24: | ||
-- subsequent keys. | -- subsequent keys. | ||
local heroDataArray = function(args) | local heroDataArray = function(args) | ||
local outData = {} | |||
for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero | |||
local out = {} -- First creating a table to hold data | |||
for j, key in pairs(args) do -- Iterate over each key: | |||
if string.find(key, ">") ~= nil then -- If the key is actually a path of keys, | |||
local node = heroData -- start with the biggest node heroData, and | |||
for k in string.gmatch(key, "([^>]+)") do -- iterate over each key, splitting on ">", | |||
if node[k] ~= nil then -- trying the key as a string e.g. "1", | |||
node = node[k] | |||
else -- else using the key as numeric, | |||
node = node[tonumber(k)] | |||
end -- drilling down the JSON node after node | |||
end | |||
out[key] = roundValue(node) -- until outputting the final node (rounded) | |||
else | |||
out[key] = roundValue(heroData[key]) -- or just grab the data if not a path (rounded) | |||
end | |||
end | |||
outData[heroData["Name"]] = out -- Save data in the big table of heroes | |||
end | |||
return(outData) | |||
end | end | ||
p.heroHealthTable = function(frame) | p.heroHealthTable = function(frame) | ||
-- Pull data | |||
heroHealthData = heroDataArray({"Name", "MaxHealth", "LevelScaling>MaxHealth"}) | |||
-- Input table will be called a, output wikitable will be called z | |||
-- From a to z, haha get it | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Hero Base Health Stats \n".. | |||
"! Hero !! Starting !! Added per PI !! At Max PI \n" | |||
-- Iterate over heroes adding a new row to the wikitable for each | |||
for i,a in pairs(heroHealthData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["MaxHealth"].." || +"..a["LevelScaling>MaxHealth"].." || ".. | |||
tostring(roundValue(tonumber(a["MaxHealth"])+tonumber(a["LevelScaling>MaxHealth"])*14)).." \n" | |||
end | |||
-- Cap it off | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroRegenTable = function(frame) | p.heroRegenTable = function(frame) | ||
heroRegenData = heroDataArray({"Name", "BaseHealthRegen"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Hero Base Health Regen \n".. | |||
"! Hero !! HP/s \n" | |||
for i,a in pairs(heroRegenData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["BaseHealthRegen"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroDpsTable = function(frame) | p.heroDpsTable = function(frame) | ||
heroDpsData = heroDataArray({"Name","ReloadSingle","ReloadDelay","ReloadTime", | |||
"ClipSize","RoundsPerSecond","BulletDamage","BulletsPerShot"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Hero Base Damage \n".. | |||
"! Hero !! Reload Delay (s) !! Reload Time (s) !! Ammo !! Bullets per sec !! Bullet Damage !! Bullets Per Shot \n" | |||
for i,a in pairs(heroDpsData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["ReloadDelay"].." || "..a["ReloadTime"].." || "..a["ClipSize"].. | |||
" || "..a["RoundsPerSecond"].." || "..a["BulletDamage"].." || "..a["BulletsPerShot"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroBulletSpeedTable = function(frame) | p.heroBulletSpeedTable = function(frame) | ||
heroBulletSpeedData = heroDataArray({"Name", "BulletSpeed"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Base Bullet Velocity \n".. | |||
"! Hero !! m/s \n" | |||
for i,a in pairs(heroBulletSpeedData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["BulletSpeed"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroClipSizeTable = function(frame) | p.heroClipSizeTable = function(frame) | ||
heroClipSizeData = heroDataArray({"Name", "ClipSize"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Base Ammo Count \n".. | |||
"! Hero !! Ammo \n" | |||
for i,a in pairs(heroClipSizeData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["ClipSize"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroMoveSpeedTable = function(frame) | p.heroMoveSpeedTable = function(frame) | ||
heroMoveSpeedData = heroDataArray({"Name", "MoveSpeed"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Base Movement Speed \n".. | |||
"! Hero !! m/s \n" | |||
for i,a in pairs(heroMoveSpeedData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["MoveSpeed"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroRoundsPerSecondTable = function(frame) | p.heroRoundsPerSecondTable = function(frame) | ||
heroRoundsPerSecondData = heroDataArray({"Name", "RoundsPerSecond"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Base Fire Rate \n".. | |||
"! Hero !! Rounds/s \n" | |||
for i,a in pairs(heroRoundsPerSecondData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["RoundsPerSecond"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
p.heroFalloffRangeTable = function(frame) | p.heroFalloffRangeTable = function(frame) | ||
heroFalloffRangeData = heroDataArray({"Name", "FalloffStartRange", "FalloffEndRange"}) | |||
z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n".. | |||
"|+ Base Falloff Range \n".. | |||
"! Hero !! Minimum Range (m) !! Maximum Range (m) \n" | |||
for i,a in pairs(heroFalloffRangeData) do | |||
z = z.. | |||
"|- \n".. | |||
"| style=\"text-align:left;\" | ".. | |||
frame:expandTemplate{title="PageRef", args={a["Name"]}}.. | |||
" || "..a["FalloffStartRange"].." || "..a["FalloffEndRange"].." \n" | |||
end | |||
z = z.."|}" | |||
return z | |||
end | end | ||
return p | return p | ||