Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:HeroInfo

From Fisk's Superheroes Wiki
Revision as of 09:13, 13 April 2025 by Lok (talk | contribs)

Documentation for this module may be created at Module:HeroInfo/doc

local p = {
    split = function(str, sep)
        if (str == nil) then return {} end
        local result = {}
        for match in (str..sep):gmatch("([^"..sep.."]+)") do
            table.insert(result, match)
        end
        return result
    end,

    indexOf = function(t, value)
        for i, v in ipairs(t) do
            if v == value then
                return i
            end
        end
        return -1
    end,
}
p["sort"] = function(t, basedOn)
    local out = {}
    table.sort(t, function(a, b)
        return p.indexOf(basedOn, a:sub(1, (a:find("\*") or 0) - 1)) < p.indexOf(basedOn, b:sub(1, (b:find("\*") or 0) - 1))
    end)
    for i, v in ipairs(t) do
        table.insert(out, v:sub(v:find("\*") or 1, -1))
    end
    return out
end


function p.attributes( frame )
    local attributeList = {"ARROW_DAMAGE", "BASE_SPEED", "BASE_SPEED_LEVELS", "BOW_DRAWBACK", "DAMAGE_REDUCTION", "FALL_RESISTANCE", "FISKTAG_ARMOR", "FISKTAG_HEALTH", "IMPACT_DAMAGE", "JUMP_HEIGHT", "KNOCKBACK", "MAX_HEALTH", "PUNCH_DAMAGE", "REACH_DISTANCE", "SPRINT_SPEED", "STEP_HEIGHT", "WEAPON_DAMAGE"}
    
    local args = frame.args
    local temp = {"== Attributes =="}
    
    for i, v in ipairs(attributeList) do
        local attr = args[v] or args[v:lower()]
        if attr ~= nil then
            local attrName = p.split(v:lower(), "_")
            for j, k in ipairs(attrName) do
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)
            end
            attrName = table.concat(attrName, " ")
            local attrValue = tonumber(p.split(attr, ";")[1])
            if attrValue then
                local operator = p.split(attr, ";")[2] or ""
                if operator == "0" then
                    operator = ""
                end
                if operator == "1" then
                    operator = "%"
                end
                if operator == "%" then
                    attrValue = attrValue * 100
                end

                local positive
                if (tonumber(attrValue) > 0) then
                    positive = "+"
                end

                table.insert(temp, v.."* " .. positive .. attrValue .. operator .. " " .. attrName)
            end
        end
    end

    return table.concat(p.sort(temp, attributeList), "\n")
end

function p.keybinds( frame )
    local keybindCodes = {}
    keybindCodes[-1] = "Left Click"
    for i = 1, 5 do
        keybindCodes[i] = "Ability " .. i
    end

    local modifiers = {"sneaking", "on the ground", "in the air", "flying"}

    local args = frame.args
    local temp = {"== Keybinds =="}

    for _, v in pairs(args) do
        local keybindInfo = p.split(v, ";")
        local keybindLabel = keybindInfo[1]
        local keybindSlot = tonumber(keybindInfo[2])
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot
        local keybindModifier = tonumber(keybindInfo[3])
        keybindModifier = modifiers[keybindModifier] or keybindModifier

        local mod = ""
        if (keybindModifier) then
            mod = " (while " .. keybindModifier .. ")"
        end
        table.insert(temp, v.."* " .. keybindLabel .. " - " .. keybindSlot .. mod)
    end
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), "\n")
end

function p.equipment( frame )
    local out = {}
    for _, v in pairs(frame.args) do
        local equipmentInfo = p.split(v, ";")
        local equipmentName = equipmentInfo[1]
        local included = equipmentInfo[2] == "true" or equipmentInfo[2] == "1"
        
        local temp = {}

        local span = tostring(included)
        -- if included then
        --     span:wikitext("+"):attr("title", "Included with suit")
        -- else
        --     span:wikitext("-"):attr("title", "Not included with suit")
        -- end
        -- span:wikitext():attr("title", "test")
        table.insert(temp, tostring(span))
        table.insert(temp, equipmentName)
        table.insert(out, table.concat(temp, " "))
    end
    return table.concat(out, "\n")
end

return p