Module:HeroDataArrays: Difference between revisions
Jump to navigation
Jump to search
SerpentofSet (talk | contribs) start hero data grabber |
SerpentofSet (talk | contribs) mNo edit summary |
||
(13 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local p = {} | |||
local allHeroData = mw.loadJsonData("Data:HeroData.json") | local allHeroData = mw.loadJsonData("Data:HeroData.json") | ||
local inGameHeroData = {} | local inGameHeroData = {} | ||
for | -- Just get heroes that are playable | ||
for i, heroData in pairs(allHeroData) do | |||
if heroData["IsDisabled"] == false and heroData["InDevelopment"] == false then | if heroData["IsDisabled"] == false and heroData["InDevelopment"] == false then | ||
table.insert(inGameHeroData, heroData) | table.insert(inGameHeroData, heroData) | ||
Line 9: | Line 12: | ||
end | end | ||
-- heroDataArray takes as argument a table of any length containing keys or | |||
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling>Health}. | |||
-- A path of keys should be specified as such, with the ">" character separating | |||
-- subsequent keys. | |||
local heroDataArray = function(args) | |||
local outData = {} | local outData = {} | ||
for i, heroData in ipairs(inGameHeroData) do | for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero | ||
local out = {} | local out = {} -- First creating a table to hold data | ||
for j, | for j, key in pairs(args) do -- Iterate over each key: | ||
if | if string.find(key, ">") ~= nil then -- If the key is actually a path of keys, | ||
local node = heroData | local node = heroData -- start with the biggest node heroData, and | ||
for k, | for k in string.gmatch(key, "([^>]+)") do -- iterate over each key, splitting on ">", | ||
node = node[key] | 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 | end | ||
out[ | out[key] = node -- until outputting the final node | ||
else | else | ||
out[ | out[key] = heroData[key] -- or just grab the data if not a path | ||
end | end | ||
end | end | ||
outData[heroData["Name"]] = out | outData[heroData["Name"]] = out -- Save data in the big table of heroes | ||
end | end | ||
return(outData) | return(outData) | ||
end | end | ||
--= | 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(tonumber(a["MaxHealth"])+tonumber(a["LevelScaling>MaxHealth"])*14).." \n" | |||
end | |||
-- Cap it off | |||
z = z.."|}" | |||
return z | |||
end | |||
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 | |||
p.heroDpsTable = function(frame) | |||
heroDpsData = heroDataArray({"Name","ReloadSingle","ReloadDelay","ReloadTime", | |||
"ClipSize","RoundsPerSecond","BulletDamage","BulletsPerShot"}) | |||
mw.logObject(heroDpsData) | |||
end | |||
return p | return p |
Latest revision as of 16:22, 25 October 2024
Overview[edit source]
This module consists of one generic function, heroDataArray, and a series of functions that create specific wikitables using the output from heroDataArray.
local p = {}
local allHeroData = mw.loadJsonData("Data:HeroData.json")
local inGameHeroData = {}
-- Just get heroes that are playable
for i, heroData in pairs(allHeroData) do
if heroData["IsDisabled"] == false and heroData["InDevelopment"] == false then
table.insert(inGameHeroData, heroData)
end
end
-- heroDataArray takes as argument a table of any length containing keys or
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling>Health}.
-- A path of keys should be specified as such, with the ">" character separating
-- subsequent keys.
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] = node -- until outputting the final node
else
out[key] = heroData[key] -- or just grab the data if not a path
end
end
outData[heroData["Name"]] = out -- Save data in the big table of heroes
end
return(outData)
end
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(tonumber(a["MaxHealth"])+tonumber(a["LevelScaling>MaxHealth"])*14).." \n"
end
-- Cap it off
z = z.."|}"
return z
end
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
p.heroDpsTable = function(frame)
heroDpsData = heroDataArray({"Name","ReloadSingle","ReloadDelay","ReloadTime",
"ClipSize","RoundsPerSecond","BulletDamage","BulletsPerShot"})
mw.logObject(heroDpsData)
end
return p