<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.fiskmods.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lok</id>
	<title>Fisk&#039;s Superheroes Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.fiskmods.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lok"/>
	<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/Special:Contributions/Lok"/>
	<updated>2026-04-25T16:34:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Captain_Cold&amp;diff=434</id>
		<title>Captain Cold</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Captain_Cold&amp;diff=434"/>
		<updated>2025-04-13T23:39:58Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Captain_Cold_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Captain_Cold_Helmet.png&lt;br /&gt;
 | slot2 = Captain_Cold_Chestplate.png&lt;br /&gt;
 | slot3 = Captain_Cold_Leggings.png&lt;br /&gt;
 | slot4 = Captain_Cold_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Captain Cold&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Captain_Cold_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|powers&lt;br /&gt;
 | Cold Resistance&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|attributes&lt;br /&gt;
 | PUNCH_DAMAGE = 4&lt;br /&gt;
 | WEAPON_DAMAGE = 2&lt;br /&gt;
 | JUMP_HEIGHT = 0.5&lt;br /&gt;
 | FALL_RESISTANCE = 3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|keybinds&lt;br /&gt;
 | Aim;-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|equipment&lt;br /&gt;
 | Cold Gun;true&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=433</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=433"/>
		<updated>2025-04-13T23:39:32Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(s, sep)&lt;br /&gt;
        local separated = mw.text.split(s, &amp;quot;;&amp;quot;)&lt;br /&gt;
        for i, v in ipairs(separated) do&lt;br /&gt;
            separated[i] = mw.text.trim(v)&lt;br /&gt;
        end&lt;br /&gt;
        return separated&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. mw.text.trim(v) .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=432</id>
		<title>Rip Hunter</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=432"/>
		<updated>2025-04-13T23:38:21Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Rip_Hunter_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Rip_Hunter_Chestplate.png&lt;br /&gt;
 | slot2 = Rip_Hunter_Leggings.png&lt;br /&gt;
 | slot3 = Rip_Hunter_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Rip Hunter&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Rip_Hunter_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|attributes&lt;br /&gt;
 | PUNCH_DAMAGE = 5&lt;br /&gt;
 | WEAPON_DAMAGE = 2.5&lt;br /&gt;
 | JUMP_HEIGHT = 0.5&lt;br /&gt;
 | FALL_RESISTANCE = 3.5&lt;br /&gt;
 | SPRINT_SPEED = 0.1;1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|keybinds&lt;br /&gt;
 | Aim;-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|equipment&lt;br /&gt;
 | Rip Hunter&#039;s Gun;true&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=431</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=431"/>
		<updated>2025-04-13T23:37:51Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(s, sep)&lt;br /&gt;
        local separated = mw.text.split(s, &amp;quot;;&amp;quot;)&lt;br /&gt;
        for i, v in ipairs(separated) do&lt;br /&gt;
            separated[i] = mw.text.trim(v)&lt;br /&gt;
        end&lt;br /&gt;
        return separated&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=430</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=430"/>
		<updated>2025-04-13T23:31:31Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    findLast = function(str, pattern)&lt;br /&gt;
        local lastIndex = -1&lt;br /&gt;
        local index = 0&lt;br /&gt;
        while true do&lt;br /&gt;
            index = str:find(pattern, index + 1)&lt;br /&gt;
            if not index then break end&lt;br /&gt;
            lastIndex = index&lt;br /&gt;
        end&lt;br /&gt;
        return lastIndex&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;, true)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        for i, v2 in ipairs(equipmentInfo) do&lt;br /&gt;
            equipmentInfo[i] = mw.text.trim(v2)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=429</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=429"/>
		<updated>2025-04-13T23:25:03Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    findLast = function(str, pattern)&lt;br /&gt;
        local lastIndex = -1&lt;br /&gt;
        local index = 0&lt;br /&gt;
        while true do&lt;br /&gt;
            index = str:find(pattern, index + 1)&lt;br /&gt;
            if not index then break end&lt;br /&gt;
            lastIndex = index&lt;br /&gt;
        end&lt;br /&gt;
        return lastIndex&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;, true)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v:sub(1, -2), &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=428</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=428"/>
		<updated>2025-04-13T23:23:34Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    findLast = function(str, pattern)&lt;br /&gt;
        local lastIndex = -1&lt;br /&gt;
        local index = 0&lt;br /&gt;
        while true do&lt;br /&gt;
            index = str:find(pattern, index + 1)&lt;br /&gt;
            if not index then break end&lt;br /&gt;
            lastIndex = index&lt;br /&gt;
        end&lt;br /&gt;
        return lastIndex&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;, true)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v:sub(1, p.findLast(v, v:sub(1, -2))), &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=427</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=427"/>
		<updated>2025-04-13T23:16:12Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    findLast = function(str, pattern)&lt;br /&gt;
        local lastIndex = -1&lt;br /&gt;
        local index = 0&lt;br /&gt;
        while true do&lt;br /&gt;
            index = str:find(pattern, index + 1)&lt;br /&gt;
            if not index then break end&lt;br /&gt;
            lastIndex = index&lt;br /&gt;
        end&lt;br /&gt;
        return lastIndex&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;, true)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;, true)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;, true)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;, true)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v:sub(1, p.findLast(v, string.char(13))), &amp;quot;;&amp;quot;, true)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=426</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=426"/>
		<updated>2025-04-13T23:14:09Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    findLast = function(str, pattern)&lt;br /&gt;
        local lastIndex = -1&lt;br /&gt;
        local index = 0&lt;br /&gt;
        while true do&lt;br /&gt;
            index = str:find(pattern, index + 1)&lt;br /&gt;
            if not index then break end&lt;br /&gt;
            lastIndex = index&lt;br /&gt;
        end&lt;br /&gt;
        return lastIndex&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;, true)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;, true)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;, true)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;, true)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v:sub(1, p.findLast(v, &amp;quot;\n&amp;quot;)), &amp;quot;;&amp;quot;, true)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=425</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=425"/>
		<updated>2025-04-13T23:06:53Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;, true)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;, true)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;, true)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;, true)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v, &amp;quot;;&amp;quot;, true)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=424</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=424"/>
		<updated>2025-04-13T23:04:03Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = mw.text.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(mw.text.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = mw.text.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive = &amp;quot;&amp;quot;&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    keybindCodes[0] = &amp;quot;Right Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = mw.text.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = mw.text.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Captain_Cold&amp;diff=413</id>
		<title>Captain Cold</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Captain_Cold&amp;diff=413"/>
		<updated>2025-04-13T13:41:33Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Captain_Cold_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Captain_Cold_Helmet.png&lt;br /&gt;
 | slot2 = Captain_Cold_Chestplate.png&lt;br /&gt;
 | slot3 = Captain_Cold_Leggings.png&lt;br /&gt;
 | slot4 = Captain_Cold_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Captain Cold&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Captain_Cold_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|powers&lt;br /&gt;
 |= Cold Resistance&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|attributes&lt;br /&gt;
 | PUNCH_DAMAGE = 4&lt;br /&gt;
 | WEAPON_DAMAGE = 2&lt;br /&gt;
 | JUMP_HEIGHT = 0.5&lt;br /&gt;
 | FALL_RESISTANCE = 3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|keybinds&lt;br /&gt;
 |= Aim;-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|equipment&lt;br /&gt;
 |= Cold Gun;true&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=411</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=411"/>
		<updated>2025-04-13T13:29:47Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;* [[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=410</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=410"/>
		<updated>2025-04-13T13:26:45Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, &amp;quot;[[&amp;quot; .. v .. &amp;quot;]]&amp;quot;); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=409</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=409"/>
		<updated>2025-04-13T13:26:26Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.powers( frame )&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {&amp;quot;== Powers ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        table.insert(out, v); &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;, &amp;quot;=== Default ===&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=408</id>
		<title>Rip Hunter</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=408"/>
		<updated>2025-04-13T13:18:45Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Rip_Hunter_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Rip_Hunter_Chestplate.png&lt;br /&gt;
 | slot2 = Rip_Hunter_Leggings.png&lt;br /&gt;
 | slot3 = Rip_Hunter_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Rip Hunter&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Rip_Hunter_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|attributes&lt;br /&gt;
 | PUNCH_DAMAGE = 5&lt;br /&gt;
 | WEAPON_DAMAGE = 2.5&lt;br /&gt;
 | JUMP_HEIGHT = 0.5&lt;br /&gt;
 | FALL_RESISTANCE = 3.5&lt;br /&gt;
 | SPRINT_SPEED = 0.1;1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|keybinds&lt;br /&gt;
 | Aim;-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|equipment&lt;br /&gt;
 |= Rip Hunter&#039;s Gun;true&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=407</id>
		<title>Rip Hunter</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=407"/>
		<updated>2025-04-13T13:17:32Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Rip_Hunter_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Rip_Hunter_Chestplate.png&lt;br /&gt;
 | slot2 = Rip_Hunter_Leggings.png&lt;br /&gt;
 | slot3 = Rip_Hunter_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Rip Hunter&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Rip_Hunter_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|attributes&lt;br /&gt;
 | PUNCH_DAMAGE = 5&lt;br /&gt;
 | WEAPON_DAMAGE = 2.5&lt;br /&gt;
 | JUMP_HEIGHT = 0.5&lt;br /&gt;
 | FALL_RESISTANCE = 3.5&lt;br /&gt;
 | SPRINT_SPEED = 0.1;1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|keybinds&lt;br /&gt;
 | Aim;-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|equipment&lt;br /&gt;
 |= Rip Hunter&#039;s Gun;true&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=406</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=406"/>
		<updated>2025-04-13T13:16:54Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, &amp;quot;[[&amp;quot;..equipmentName..&amp;quot;]]&amp;quot;)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=405</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=405"/>
		<updated>2025-04-13T13:16:18Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {&amp;quot;== Equipment ==&amp;quot;}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {&amp;quot;*&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=404</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=404"/>
		<updated>2025-04-13T13:15:46Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=403</id>
		<title>Rip Hunter</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=403"/>
		<updated>2025-04-13T13:14:35Z</updated>

		<summary type="html">&lt;p&gt;Lok: Undo revision 402 by Lok (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Rip_Hunter_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Rip_Hunter_Chestplate.png&lt;br /&gt;
 | slot2 = Rip_Hunter_Leggings.png&lt;br /&gt;
 | slot3 = Rip_Hunter_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rip Hunter&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Rip_Hunter_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
* +5 Punch Damage&lt;br /&gt;
* +2.5 Weapon Damage&lt;br /&gt;
* +0.5 Jump Height&lt;br /&gt;
* +3.5 Fall Resistance&lt;br /&gt;
* +10% Sprint Speed&lt;br /&gt;
&lt;br /&gt;
== Keybinds ==&lt;br /&gt;
* Aim - Left Click&lt;br /&gt;
&lt;br /&gt;
== Equipment ==&lt;br /&gt;
* &amp;lt;span title=&amp;quot;Included with suit&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; [[Rip Hunter&#039;s Gun]]&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=402</id>
		<title>Rip Hunter</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Rip_Hunter&amp;diff=402"/>
		<updated>2025-04-13T13:14:06Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox&lt;br /&gt;
|title={{BASEPAGENAME}}&lt;br /&gt;
|image=[[File:Rip_Hunter_Player_Model.png]]&lt;br /&gt;
|caption={{#invoke:Slot|slot&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | slot1 = Rip_Hunter_Chestplate.png&lt;br /&gt;
 | slot2 = Rip_Hunter_Leggings.png&lt;br /&gt;
 | slot3 = Rip_Hunter_Boots.png&lt;br /&gt;
}}&lt;br /&gt;
|label1=[[Heropack]]&lt;br /&gt;
|data1=[[Fisk&#039;s Supeheroes (Heropack)|Fisk&#039;s Superheroes]]&lt;br /&gt;
|label2=[[Suit Tier|Tier]]&lt;br /&gt;
|data2=[[Fisk&#039;s Supeheroes (Heropack)#Tier 1|1]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rip Hunter&#039;&#039;&#039; is a tier 1 suit in the base [[Fisk&#039;s Superheroes]] Heropack&lt;br /&gt;
&lt;br /&gt;
== Obtaining ==&lt;br /&gt;
=== Fabricating ===&lt;br /&gt;
{{#invoke:Fabricator|gui&lt;br /&gt;
 | scale = 2&lt;br /&gt;
 | I1 = Tutridium_Gem.png;10&lt;br /&gt;
 | output = Rip_Hunter_Chestplate.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|attributes&lt;br /&gt;
 | PUNCH_DAMAGE = 5&lt;br /&gt;
 | WEAPON_DAMAGE = 2.5&lt;br /&gt;
 | JUMP_HEIGHT = 0.5&lt;br /&gt;
 | FALL_RESISTANCE = 3.5&lt;br /&gt;
 | SPRINT_SPEED = 0.1;1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|keybinds&lt;br /&gt;
 | Aim;-1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Equipment ==&lt;br /&gt;
* &amp;lt;span title=&amp;quot;Included with suit&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; [[Rip Hunter&#039;s Gun]]&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroInfo|equipment&lt;br /&gt;
 | Rip Hunter&#039;s Gun;true&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=401</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=401"/>
		<updated>2025-04-13T13:13:34Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = tostring(included)&lt;br /&gt;
        -- if included then&lt;br /&gt;
        --     span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        -- else&lt;br /&gt;
        --     span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        -- end&lt;br /&gt;
        -- span:wikitext():attr(&amp;quot;title&amp;quot;, &amp;quot;test&amp;quot;)&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=400</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=400"/>
		<updated>2025-04-13T13:13:21Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = tostring(included)&lt;br /&gt;
        -- if included then&lt;br /&gt;
        --     span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        -- else&lt;br /&gt;
        --     span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        -- end&lt;br /&gt;
        span:wikitext():attr(&amp;quot;title&amp;quot;, &amp;quot;test&amp;quot;)&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=399</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=399"/>
		<updated>2025-04-13T13:09:55Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        -- if included then&lt;br /&gt;
        --     span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        -- else&lt;br /&gt;
        --     span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        -- end&lt;br /&gt;
        span:wikitext(tostring(included)):attr(&amp;quot;title&amp;quot;, &amp;quot;test&amp;quot;)&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=398</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=398"/>
		<updated>2025-04-13T13:09:39Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        -- if included then&lt;br /&gt;
        --     span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        -- else&lt;br /&gt;
        --     span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        -- end&lt;br /&gt;
        span:wikitext(included):attr(&amp;quot;title&amp;quot;, &amp;quot;test&amp;quot;)&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=397</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=397"/>
		<updated>2025-04-13T13:08:24Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, tostring(span))&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=396</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=396"/>
		<updated>2025-04-13T13:01:15Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for _, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.equipment( frame )&lt;br /&gt;
    local out = {}&lt;br /&gt;
    for _, v in pairs(frame.args) do&lt;br /&gt;
        local equipmentInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local equipmentName = equipmentInfo[1]&lt;br /&gt;
        local included = equipmentInfo[2] == &amp;quot;true&amp;quot; or equipmentInfo[2] == &amp;quot;1&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        local temp = {}&lt;br /&gt;
&lt;br /&gt;
        local span = mw.html.create(&amp;quot;span&amp;quot;)&lt;br /&gt;
        if included then&lt;br /&gt;
            span:wikitext(&amp;quot;+&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Included with suit&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
            span:wikitext(&amp;quot;-&amp;quot;):attr(&amp;quot;title&amp;quot;, &amp;quot;Not included with suit&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, span)&lt;br /&gt;
        table.insert(temp, equipmentName)&lt;br /&gt;
        table.insert(out, table.concat(temp, &amp;quot; &amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=395</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=395"/>
		<updated>2025-04-13T12:54:32Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, (a:find(&amp;quot;\*&amp;quot;) or 0) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, (b:find(&amp;quot;\*&amp;quot;) or 0) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;) or 1, -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for i, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=394</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=394"/>
		<updated>2025-04-13T12:53:33Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Attributes ==&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {&amp;quot;== Keybinds ==&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    for i, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=393</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=393"/>
		<updated>2025-04-13T12:52:45Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in pairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=392</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=392"/>
		<updated>2025-04-13T12:51:57Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(v, &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=391</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=391"/>
		<updated>2025-04-13T12:44:05Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(temp, v..&amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
    return table.concat(p.sort(p.sort(temp, keybindCodes), modifiers), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=390</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=390"/>
		<updated>2025-04-13T12:41:34Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(t) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=389</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=389"/>
		<updated>2025-04-13T12:02:24Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
}&lt;br /&gt;
p[&amp;quot;sort&amp;quot;] = function(t, basedOn)&lt;br /&gt;
    local out = {}&lt;br /&gt;
    table.sort(t, function(a, b)&lt;br /&gt;
        return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(temp) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
    return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=388</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=388"/>
		<updated>2025-04-13T12:01:47Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    sort = function(t, basedOn)&lt;br /&gt;
        local out = {}&lt;br /&gt;
        table.sort(t, function(a, b)&lt;br /&gt;
            return this.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; this.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
        end)&lt;br /&gt;
        for i, v in ipairs(temp) do&lt;br /&gt;
            table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
        end&lt;br /&gt;
        return out&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=387</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=387"/>
		<updated>2025-04-13T11:54:54Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    sort = function(t, basedOn)&lt;br /&gt;
        local out = {}&lt;br /&gt;
        table.sort(t, function(a, b)&lt;br /&gt;
            return p.indexOf(basedOn, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(basedOn, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
        end)&lt;br /&gt;
        for i, v in ipairs(temp) do&lt;br /&gt;
            table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
        end&lt;br /&gt;
        return out&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    &lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(p.sort(temp, attributeList), &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=386</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=386"/>
		<updated>2025-04-13T11:51:58Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    local temp = {}&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, v..&amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.sort(temp, function(a, b)&lt;br /&gt;
        return p.indexOf(attributeList, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(attributeList, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(temp) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=385</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=385"/>
		<updated>2025-04-13T11:49:14Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
    &lt;br /&gt;
    local temp = {}&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.sort(temp, function(a, b)&lt;br /&gt;
        return p.indexOf(attributeList, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(attributeList, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(temp) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=384</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=384"/>
		<updated>2025-04-13T11:48:48Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(temp, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.sort(temp, function(a, b)&lt;br /&gt;
        return p.indexOf(attributeList, a:sub(1, a:find(&amp;quot;\*&amp;quot;) - 1)) &amp;lt; p.indexOf(attributeList, b:sub(1, b:find(&amp;quot;\*&amp;quot;) - 1))&lt;br /&gt;
    end)&lt;br /&gt;
    for i, v in ipairs(temp) do&lt;br /&gt;
        table.insert(out, v:sub(v:find(&amp;quot;\*&amp;quot;), -1))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=383</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=383"/>
		<updated>2025-04-13T11:33:23Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    table.sort(out, function(a, b)&lt;br /&gt;
        return p.indexOf(attributeList, a) &amp;lt; p.indexOf(attributeList, b)&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=382</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=382"/>
		<updated>2025-04-13T11:31:19Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    local inOrder = {}&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                inOrder[p.indexOf(attributeList, v)] = &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    for _, v in ipairs(inOrder) do&lt;br /&gt;
        table.insert(out, v)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=381</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=381"/>
		<updated>2025-04-13T11:29:15Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    local inOrder = {}&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                inOrder[p.indexOf(attributeList, attr)] = &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    for _, v in ipairs(inOrder) do&lt;br /&gt;
        if v ~= nil then&lt;br /&gt;
            table.insert(out, v)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=380</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=380"/>
		<updated>2025-04-13T11:28:59Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end,&lt;br /&gt;
&lt;br /&gt;
    indexOf = function(t, value)&lt;br /&gt;
        for i, v in ipairs(t) do&lt;br /&gt;
            if v == value then&lt;br /&gt;
                return i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return -1&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    local inOrder = {}&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                inOrder[indexOf(attributeList, attr)] = &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    for _, v in ipairs(inOrder) do&lt;br /&gt;
        if v ~= nil then&lt;br /&gt;
            table.insert(out, v)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=379</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=379"/>
		<updated>2025-04-13T11:23:27Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;0&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=378</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=378"/>
		<updated>2025-04-13T11:22:37Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                if operator == &amp;quot;%&amp;quot; then&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=377</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=377"/>
		<updated>2025-04-13T11:22:09Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                    attrValue = attrValue * 100&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=376</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=376"/>
		<updated>2025-04-13T11:21:05Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(v:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                &lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=375</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=375"/>
		<updated>2025-04-13T11:19:09Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(attr:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;&amp;quot;&lt;br /&gt;
                &lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
	<entry>
		<id>https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=374</id>
		<title>Module:HeroInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.fiskmods.com/index.php?title=Module:HeroInfo&amp;diff=374"/>
		<updated>2025-04-13T11:17:56Z</updated>

		<summary type="html">&lt;p&gt;Lok: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {&lt;br /&gt;
    split = function(str, sep)&lt;br /&gt;
        if (str == nil) then return {} end&lt;br /&gt;
        local result = {}&lt;br /&gt;
        for match in (str..sep):gmatch(&amp;quot;([^&amp;quot;..sep..&amp;quot;]+)&amp;quot;) do&lt;br /&gt;
            table.insert(result, match)&lt;br /&gt;
        end&lt;br /&gt;
        return result&lt;br /&gt;
    end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.attributes( frame )&lt;br /&gt;
    local attributeList = {&amp;quot;ARROW_DAMAGE&amp;quot;, &amp;quot;BASE_SPEED&amp;quot;, &amp;quot;BASE_SPEED_LEVELS&amp;quot;, &amp;quot;BOW_DRAWBACK&amp;quot;, &amp;quot;DAMAGE_REDUCTION&amp;quot;, &amp;quot;FALL_RESISTANCE&amp;quot;, &amp;quot;FISKTAG_ARMOR&amp;quot;, &amp;quot;FISKTAG_HEALTH&amp;quot;, &amp;quot;IMPACT_DAMAGE&amp;quot;, &amp;quot;JUMP_HEIGHT&amp;quot;, &amp;quot;KNOCKBACK&amp;quot;, &amp;quot;MAX_HEALTH&amp;quot;, &amp;quot;PUNCH_DAMAGE&amp;quot;, &amp;quot;REACH_DISTANCE&amp;quot;, &amp;quot;SPRINT_SPEED&amp;quot;, &amp;quot;STEP_HEIGHT&amp;quot;, &amp;quot;WEAPON_DAMAGE&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(attributeList) do&lt;br /&gt;
        local attr = args[v] or args[v:lower()]&lt;br /&gt;
        if attr ~= nil then&lt;br /&gt;
            local attrName = p.split(attr:lower(), &amp;quot;_&amp;quot;)&lt;br /&gt;
            for j, k in ipairs(attrName) do&lt;br /&gt;
                attrName[j] = k:sub(1, 1):upper() .. k:sub(2)&lt;br /&gt;
            end&lt;br /&gt;
            attrName = table.concat(attrName, &amp;quot; &amp;quot;)&lt;br /&gt;
            local attrValue = tonumber(p.split(attr, &amp;quot;;&amp;quot;)[1])&lt;br /&gt;
            if attrValue then&lt;br /&gt;
                local operator = p.split(attr, &amp;quot;;&amp;quot;)[2] or &amp;quot;0&amp;quot;&lt;br /&gt;
                if operator == &amp;quot;1&amp;quot; then&lt;br /&gt;
                    operator = &amp;quot;%&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                &lt;br /&gt;
                local positive&lt;br /&gt;
                if (tonumber(attrValue) &amp;gt; 0) then&lt;br /&gt;
                    positive = &amp;quot;+&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert(out, &amp;quot;* &amp;quot; .. positive .. attrValue .. operator .. &amp;quot; &amp;quot; .. attrName)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(out, &amp;quot;\n&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.keybinds( frame )&lt;br /&gt;
    local keybindCodes = {}&lt;br /&gt;
    keybindCodes[-1] = &amp;quot;Left Click&amp;quot;&lt;br /&gt;
    for i = 1, 5 do&lt;br /&gt;
        keybindCodes[i] = &amp;quot;Ability &amp;quot; .. i&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local modifiers = {&amp;quot;sneaking&amp;quot;, &amp;quot;on the ground&amp;quot;, &amp;quot;in the air&amp;quot;, &amp;quot;flying&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local out = {}&lt;br /&gt;
&lt;br /&gt;
    for i, v in ipairs(args) do&lt;br /&gt;
        local keybindInfo = p.split(args[v], &amp;quot;;&amp;quot;)&lt;br /&gt;
        local keybindLabel = keybindInfo[1]&lt;br /&gt;
        local keybindSlot = tonumber(keybindInfo[2])&lt;br /&gt;
        keybindSlot = keybindCodes[keybindSlot] or keybindSlot&lt;br /&gt;
        local keybindModifier = tonumber(keybindInfo[3])&lt;br /&gt;
        keybindModifier = modifiers[keybindModifier] or keybindModifier&lt;br /&gt;
&lt;br /&gt;
        local mod = &amp;quot;&amp;quot;&lt;br /&gt;
        if (keybindModifier) then&lt;br /&gt;
            mod = &amp;quot; (while &amp;quot; .. keybindModifier .. &amp;quot;)&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        table.insert(out, &amp;quot;* &amp;quot; .. keybindLabel .. &amp;quot; - &amp;quot; .. keybindSlot .. mod)&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Lok</name></author>
	</entry>
</feed>