Module:HeroDataArrays: Difference between revisions

No edit summary
LVL (talk | contribs)
Split base damage resist stats into multiple tables within the function.
Line 472: Line 472:
         table.insert(rows, {
         table.insert(rows, {
             name = name,
             name = name,
             bulletResist = data["BulletResist"] or 0,
             bulletResist = data["BulletResist"] or 0,
             bulletScaling = data["LevelScaling>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,
             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
         })
         })
Line 482: Line 482:
     table.sort(rows, function(a, b) return a.name:lower() < b.name:lower() 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 tableDefs = {
         "|+ Hero Base Damage Resist Stats \n"..
         {
        "! Hero !! Bullet Resist (%) !! BR per boon (%) !! Spirit Resist (%) !! SR per boon (%) !! Melee Resist (%) !! Crit Reduction (%) \n"
            title  = "Hero Base Bullet Resist Stats",
            columns = {
                { label = "Bullet Resist (%)", field = "bulletResist"  },
                { label = "BR per Boon (%)",  field = "bulletScaling" },
            }
        },
        {
            title  = "Hero Base Spirit Resist Stats",
            columns = {
                { label = "Spirit Resist (%)", field = "spiritResist"  },
                { label = "SR per Boon (%)",  field = "spiritScaling" },
            }
        },
        {
            title  = "Hero Base Melee Resist Stats",
            columns = {
                { label = "Melee Resist (%)", field = "meleeResist" },
            }
        },
        {
            title  = "Hero Base Crit Reduction Stats",
            columns = {
                { label = "Crit Reduction (%)", field = "critReduction" },
            }
        },
    }


     for _, r in ipairs(rows) do
     local output = ""
        z = z..
 
             "|- \n"..
    for _, tableDef in ipairs(tableDefs) do
             "| style=\"text-align:left;\" | "..
        local filteredRows = {}
                 frame:expandTemplate{title="PageRef", args={r.name}}..
        for _, r in ipairs(rows) do
                " || "..r.bulletResist.." || "..r.bulletScaling.." || "..r.spiritResist.." || "..r.spiritScaling.." || "..r.meleeResist.." || "..r.critReduction.." \n"
            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.."|}"
            output = output..t.."\n\n"
        end
     end
     end
    z = z.."|}"
 
     return z
     return output
end
end


return p
return p