Module:HeroDataArrays: Difference between revisions

LVL (talk | contribs)
Reload table alphabetical sort
LVL (talk | contribs)
By default, sort all tables by english hero name
Line 57: Line 57:
     -- Pull data
     -- Pull data
     local heroHealthData = heroDataArray({"Name", "MaxHealth", "LevelScaling>MaxHealth"})
     local heroHealthData = heroDataArray({"Name", "MaxHealth", "LevelScaling>MaxHealth"})
    local rows = {}
    for name, data in pairs(heroHealthData) do
        table.insert(rows, {
            name = name,
            maxHealth = tonumber(data["MaxHealth"]) or 0,
            scalingHealth = tonumber(data["LevelScaling>MaxHealth"]) or 0
        })
    end
    table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() end)


     -- Input table will be called a, output wikitable will be called z
     -- Input table will be called a, output wikitable will be called z
Line 64: Line 74:


     -- Iterate over heroes adding a new row to the wikitable for each
     -- Iterate over heroes adding a new row to the wikitable for each
     for i,a in pairs(heroHealthData) do
     for _, r in ipairs(rows) do
        local maxHealth = a["MaxHealth"] or 0
        local scalingHealth = a["LevelScaling>MaxHealth"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..maxHealth.." || +"..scalingHealth.." || "..
                 " || "..r.maxHealth.." || +"..r.scalingHealth.." || "..
                 tostring(roundValue(tonumber(maxHealth) + tonumber(scalingHealth) * soul_unlock.get_max('PowerIncrease'))).." \n"
                 tostring(roundValue(r.maxHealth + r.scalingHealth * soul_unlock.get_max('PowerIncrease'))).." \n"
     end
     end
      
      
Line 82: Line 90:
     local heroRegenData = heroDataArray({"Name", "BaseHealthRegen"})
     local heroRegenData = heroDataArray({"Name", "BaseHealthRegen"})
      
      
    local rows = {}
    for name, data in pairs(heroRegenData) do
        table.insert(rows, {
            name = name,
            baseHealthRegen = data["BaseHealthRegen"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Hero Base Health Regen \n"..
         "|+ Hero Base Health Regen \n"..
         "! Hero !! HP/s \n"
         "! Hero !! HP/s \n"


     for i,a in pairs(heroRegenData) do
     for _, r in ipairs(rows) do
        local baseHealthRegen = a["BaseHealthRegen"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..baseHealthRegen.." \n"
                 " || "..r.baseHealthRegen.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 102: Line 118:
         "ClipSize","RoundsPerSecond","BulletDamage","BulletsPerShot"})
         "ClipSize","RoundsPerSecond","BulletDamage","BulletsPerShot"})
    
    
    local rows = {}
    for name, data in pairs(heroDpsData) do
        table.insert(rows, {
            name = name,
            reloadDelay = data["ReloadDelay"] or 0,
            reloadTime = data["ReloadTime"] or 0,
            clipSize = data["ClipSize"] or 0,
            roundsPerSecond = data["RoundsPerSecond"] or 0,
            bulletDamage = data["BulletDamage"] or 0,
            bulletsPerShot = data["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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Hero Base Damage \n"..
         "|+ Hero Base Damage \n"..
         "! Hero !! Reload Delay (s) !! Reload Time (s) !! Ammo !! Bullets per sec !! Bullet Damage !! Bullets Per Shot \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
     for _, r in ipairs(rows) do
    local reloadDelay = a["ReloadDelay"] or 0
    local reloadTime = a["ReloadTime"] or 0
    local clipSize = a["ClipSize"] or 0
    local roundsPerSecond = a["RoundsPerSecond"] or 0
    local bulletDamage = a["BulletDamage"] or 0
    local bulletsPerShot = a["BulletsPerShot"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..reloadDelay.." || "..reloadTime.."  || "..clipSize..
                 " || "..r.reloadDelay.." || "..r.reloadTime.."  || "..r.clipSize..
                 " || "..roundsPerSecond.." || "..bulletDamage.." || "..bulletsPerShot.." \n"
                 " || "..r.roundsPerSecond.." || "..r.bulletDamage.." || "..r.bulletsPerShot.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 127: Line 151:
     local heroBulletSpeedData = heroDataArray({"Name", "BulletSpeed"})
     local heroBulletSpeedData = heroDataArray({"Name", "BulletSpeed"})
      
      
    local rows = {}
    for name, data in pairs(heroBulletSpeedData) do
        table.insert(rows, {
            name = name,
            bulletSpeed = data["BulletSpeed"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Base Bullet Velocity \n"..
         "|+ Base Bullet Velocity \n"..
         "! Hero !! m/s \n"
         "! Hero !! m/s \n"


     for i,a in pairs(heroBulletSpeedData) do
     for _, r in ipairs(rows) do
    local bulletSpeed = a["BulletSpeed"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..bulletSpeed.." \n"
                 " || "..r.bulletSpeed.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 146: Line 178:
     local heroClipSizeData = heroDataArray({"Name", "ClipSize"})
     local heroClipSizeData = heroDataArray({"Name", "ClipSize"})
      
      
    local rows = {}
    for name, data in pairs(heroClipSizeData) do
        table.insert(rows, {
            name = name,
            clipSize = data["ClipSize"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Base Ammo Count \n"..
         "|+ Base Ammo Count \n"..
         "! Hero !! Ammo \n"
         "! Hero !! Ammo \n"


     for i,a in pairs(heroClipSizeData) do
     for _, r in ipairs(rows) do
    local clipSize = a["ClipSize"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..clipSize.." \n"
                 " || "..r.clipSize.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 165: Line 205:
     local heroMoveSpeedData = heroDataArray({"Name", "MoveSpeed"})
     local heroMoveSpeedData = heroDataArray({"Name", "MoveSpeed"})
      
      
    local rows = {}
    for name, data in pairs(heroMoveSpeedData) do
        table.insert(rows, {
            name = name,
            moveSpeed = data["MoveSpeed"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Base Movement Speed \n"..
         "|+ Base Movement Speed \n"..
         "! Hero !! m/s \n"
         "! Hero !! m/s \n"


     for i,a in pairs(heroMoveSpeedData) do
     for _, r in ipairs(rows) do
        local moveSpeed = a["MoveSpeed"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..moveSpeed.." \n"
                 " || "..r.moveSpeed.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 184: Line 232:
     local heroRoundsPerSecondData = heroDataArray({"Name", "RoundsPerSecond"})
     local heroRoundsPerSecondData = heroDataArray({"Name", "RoundsPerSecond"})
      
      
    local rows = {}
    for name, data in pairs(heroRoundsPerSecondData) do
        table.insert(rows, {
            name = name,
            roundsPerSecond = data["RoundsPerSecond"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Base Fire Rate \n"..
         "|+ Base Fire Rate \n"..
         "! Hero !! Rounds/s \n"
         "! Hero !! Rounds/s \n"


     for i,a in pairs(heroRoundsPerSecondData) do
     for _, r in ipairs(rows) do
    local roundsPerSecond = a["RoundsPerSecond"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..roundsPerSecond.." \n"
                 " || "..r.roundsPerSecond.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 203: Line 259:
     local heroFalloffRangeData = heroDataArray({"Name", "FalloffStartRange", "FalloffEndRange"})
     local heroFalloffRangeData = heroDataArray({"Name", "FalloffStartRange", "FalloffEndRange"})
      
      
    local rows = {}
    for name, data in pairs(heroFalloffRangeData) do
        table.insert(rows, {
            name = name,
            falloffStartRange = data["FalloffStartRange"] or 0,
            falloffEndRange = data["FalloffEndRange"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
         "|+ Base Falloff Range \n"..
         "|+ Base Falloff Range \n"..
         "! Hero !! Minimum Range (m) !! Maximum Range (m)  \n"
         "! Hero !! Minimum Range (m) !! Maximum Range (m)  \n"


     for i,a in pairs(heroFalloffRangeData) do
     for _, r in ipairs(rows) do
    local falloffStartRange = a["FalloffStartRange"] or 0
    local falloffEndRange = a["FalloffEndRange"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..falloffStartRange.." || "..falloffEndRange.." \n"
                 " || "..r.falloffStartRange.." || "..r.falloffEndRange.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 223: Line 287:
     -- Pull data
     -- Pull data
     local heroBulletDamageData = heroDataArray({"Name", "BulletDamage", "LevelScaling>BulletDamage"})
     local heroBulletDamageData = heroDataArray({"Name", "BulletDamage", "LevelScaling>BulletDamage"})
    local rows = {}
    for name, data in pairs(heroBulletDamageData) do
        table.insert(rows, {
            name = name,
            bulletDamage = tonumber(data["BulletDamage"]) or 0,
            scalingDamage = tonumber(data["LevelScaling>BulletDamage"]) 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
Line 229: Line 303:


     -- Iterate over heroes adding a new row to the wikitable for each
     -- Iterate over heroes adding a new row to the wikitable for each
     for i,a in pairs(heroBulletDamageData) do
     for _, r in ipairs(rows) do
        -- FIX: Set default values of 0 if the data is nil to prevent arithmetic errors
    local bulletDamage = a["BulletDamage"] or 0
    local scalingDamage = a["LevelScaling>BulletDamage"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                -- Use the safe variables here
                 " || "..r.bulletDamage.." || +"..r.scalingDamage.." || "..
                 " || "..bulletDamage.." || +"..scalingDamage.." || "..
                 tostring(roundValue(r.bulletDamage + r.scalingDamage * soul_unlock.get_max('PowerIncrease'))).." \n"
                -- And use them in the calculation
                 tostring(roundValue(tonumber(bulletDamage) + tonumber(scalingDamage) * soul_unlock.get_max('PowerIncrease'))).." \n"
     end
     end
      
      
Line 250: Line 319:
     -- Pull data
     -- Pull data
     local heroLightMeleeData = heroDataArray({"Name", "LightMeleeDamage", "LevelScaling>LightMeleeDamage"})
     local heroLightMeleeData = heroDataArray({"Name", "LightMeleeDamage", "LevelScaling>LightMeleeDamage"})
    local rows = {}
    for name, data in pairs(heroLightMeleeData) do
        table.insert(rows, {
            name = name,
            lightMeleeDamage = tonumber(data["LightMeleeDamage"]) or 0,
            scalingDamage = tonumber(data["LevelScaling>LightMeleeDamage"]) 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
Line 256: Line 335:


     -- Iterate over heroes adding a new row to the wikitable for each
     -- Iterate over heroes adding a new row to the wikitable for each
     for i,a in pairs(heroLightMeleeData) do
     for _, r in ipairs(rows) do
        local lightMeleeDamage = a["LightMeleeDamage"] or 0
        local scalingDamage = a["LevelScaling>LightMeleeDamage"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..lightMeleeDamage.." || +"..scalingDamage.." || "..
                 " || "..r.lightMeleeDamage.." || +"..r.scalingDamage.." || "..
                 tostring(roundValue(tonumber(lightMeleeDamage) + tonumber(scalingDamage) * soul_unlock.get_max('PowerIncrease'))).." \n"
                 tostring(roundValue(r.lightMeleeDamage + r.scalingDamage * soul_unlock.get_max('PowerIncrease'))).." \n"
     end
     end
      
      
Line 274: Line 351:
     -- Pull data
     -- Pull data
     local heroHeavyMeleeData = heroDataArray({"Name", "HeavyMeleeDamage", "LevelScaling>HeavyMeleeDamage"})
     local heroHeavyMeleeData = heroDataArray({"Name", "HeavyMeleeDamage", "LevelScaling>HeavyMeleeDamage"})
    local rows = {}
    for name, data in pairs(heroHeavyMeleeData) do
        table.insert(rows, {
            name = name,
            heavyMeleeDamage = tonumber(data["HeavyMeleeDamage"]) or 0,
            scalingDamage = tonumber(data["LevelScaling>HeavyMeleeDamage"]) 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
Line 280: Line 367:


     -- Iterate over heroes adding a new row to the wikitable for each
     -- Iterate over heroes adding a new row to the wikitable for each
     for i,a in pairs(heroHeavyMeleeData) do
     for _, r in ipairs(rows) do
        local heavyMeleeDamage = a["HeavyMeleeDamage"] or 0
        local scalingDamage = a["LevelScaling>HeavyMeleeDamage"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..heavyMeleeDamage.." || +"..scalingDamage.." || "..
                 " || "..r.heavyMeleeDamage.." || +"..r.scalingDamage.." || "..
                 tostring(roundValue(tonumber(heavyMeleeDamage) + tonumber(scalingDamage) * soul_unlock.get_max('PowerIncrease'))).." \n"
                 tostring(roundValue(r.heavyMeleeDamage + r.scalingDamage * soul_unlock.get_max('PowerIncrease'))).." \n"
     end
     end
      
      
Line 297: Line 382:
p.heroStaminaTable = function(frame)
p.heroStaminaTable = function(frame)
     local heroStaminaData = heroDataArray({"Name", "Stamina"})
     local heroStaminaData = heroDataArray({"Name", "Stamina"})
    local rows = {}
    for name, data in pairs(heroStaminaData) do
        table.insert(rows, {
            name = name,
            stamina = data["Stamina"] 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
Line 302: Line 396:
         "! Hero !! Stamina Bars \n"
         "! Hero !! Stamina Bars \n"


     for i,a in pairs(heroStaminaData) do
     for _, r in ipairs(rows) do
        local stamina = a["Stamina"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..stamina.." \n"
                 " || "..r.stamina.." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"
Line 369: Line 462:
p.heroMoveSpeedTable = function(frame)
p.heroMoveSpeedTable = function(frame)
     local heroMoveSpeedData = heroDataArray({"Name", "MaxMoveSpeed", "SprintSpeed"})
     local heroMoveSpeedData = heroDataArray({"Name", "MaxMoveSpeed", "SprintSpeed"})
    local rows = {}
    for name, data in pairs(heroMoveSpeedData) do
        table.insert(rows, {
            name = name,
            moveSpeed = tonumber(data["MaxMoveSpeed"]) or 0,
            sprintSpeed = tonumber(data["SprintSpeed"]) 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"..
     local z = "{| class=\"wikitable sortable mw-collapsible\" style=\"text-align:center\" \n"..
Line 374: Line 477:
         "! Hero !! Move Speed !! Sprint Speed !! Total Sprint Speed \n"
         "! Hero !! Move Speed !! Sprint Speed !! Total Sprint Speed \n"


     for i,a in pairs(heroMoveSpeedData) do
     for _, r in ipairs(rows) do
    local moveSpeed = a["MaxMoveSpeed"] or 0
    local sprintSpeed = a["SprintSpeed"] or 0
         z = z..
         z = z..
             "|- \n"..
             "|- \n"..
             "| style=\"text-align:left;\" | "..
             "| style=\"text-align:left;\" | "..
                 frame:expandTemplate{title="PageRef", args={a["Name"]}}..
                 frame:expandTemplate{title="PageRef", args={r.name}}..
                 " || "..moveSpeed.." || "..sprintSpeed.." || "..tonumber(moveSpeed) + tonumber(sprintSpeed).." \n"
                 " || "..r.moveSpeed.." || "..r.sprintSpeed.." || "..r.moveSpeed + r.sprintSpeed .." \n"
     end
     end
     z = z.."|}"
     z = z.."|}"