<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AElemental_weakness_table</id>
	<title>Module:Elemental weakness table - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.runerealm.org/index.php?action=history&amp;feed=atom&amp;title=Module%3AElemental_weakness_table"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Elemental_weakness_table&amp;action=history"/>
	<updated>2026-04-30T23:37:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Elemental_weakness_table&amp;diff=34054&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;require(&#039;strict&#039;)  local p = {}  local arr = require(&#039;Module:Array&#039;) local pagelisttools = require(&#039;Module:PageListTools&#039;) local pageswithcats = pagelisttools.pageswithcats  local smwstats = {}  -- Formats a table header function p.header(tbl, verbose)     local tr = tbl:tag(&#039;tr&#039;)         :tag(&#039;th&#039;):attr(&#039;colspan&#039;, &#039;2&#039;):wikitext(&#039;Monster&#039;):done()         :tag(&#039;th&#039;):wikitext(&#039;Members&#039;):done()         :tag(&#039;th&#039;):wikitext(&#039;Weak To&#039;):done()         :tag(&#039;th&#039;):wikitext(&#039;Weakn...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Elemental_weakness_table&amp;diff=34054&amp;oldid=prev"/>
		<updated>2024-10-15T21:11:44Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;require(&amp;#039;strict&amp;#039;)  local p = {}  local arr = require(&amp;#039;Module:Array&amp;#039;) local pagelisttools = require(&amp;#039;Module:PageListTools&amp;#039;) local pageswithcats = pagelisttools.pageswithcats  local smwstats = {}  -- Formats a table header function p.header(tbl, verbose)     local tr = tbl:tag(&amp;#039;tr&amp;#039;)         :tag(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;):wikitext(&amp;#039;Monster&amp;#039;):done()         :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Members&amp;#039;):done()         :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Weak To&amp;#039;):done()         :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Weakn...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local arr = require(&amp;#039;Module:Array&amp;#039;)&lt;br /&gt;
local pagelisttools = require(&amp;#039;Module:PageListTools&amp;#039;)&lt;br /&gt;
local pageswithcats = pagelisttools.pageswithcats&lt;br /&gt;
&lt;br /&gt;
local smwstats = {}&lt;br /&gt;
&lt;br /&gt;
-- Formats a table header&lt;br /&gt;
function p.header(tbl, verbose)&lt;br /&gt;
    local tr = tbl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
        :tag(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;):wikitext(&amp;#039;Monster&amp;#039;):done()&lt;br /&gt;
        :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Members&amp;#039;):done()&lt;br /&gt;
        :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Weak To&amp;#039;):done()&lt;br /&gt;
        :tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Weakness&amp;#039;):done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main entrypoint&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    local args = frame:getParent().args&lt;br /&gt;
    return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local element = &amp;#039;all&amp;#039;&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		element = args[1]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    -- Gather the data&lt;br /&gt;
    local fulldata = p.loadData(element)&lt;br /&gt;
    local data = p.filterData(fulldata)&lt;br /&gt;
    local fulldata = nil&lt;br /&gt;
&lt;br /&gt;
    -- Format the output page&lt;br /&gt;
    local div = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local tbl = div:tag(&amp;#039;table&amp;#039;):addClass(&amp;#039;wikitable sortable mw-collapsible mw-collapsed&amp;#039;)&lt;br /&gt;
        :addClass(&amp;#039;align-center-1 align-left-2 align-center-3 align-center-4 align-center-5&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    p.header(tbl)&lt;br /&gt;
&lt;br /&gt;
    -- Render rows&lt;br /&gt;
    &lt;br /&gt;
    local function makeRow(entry)&lt;br /&gt;
        local name = mw.text.split(entry[&amp;#039;name&amp;#039;], &amp;#039;#&amp;#039;, true)&lt;br /&gt;
        if name[2] then&lt;br /&gt;
        	name[2] = name[2]:gsub(&amp;#039;_&amp;#039;, &amp;#039; &amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        local membsicon = &amp;#039;&amp;#039;&lt;br /&gt;
        if type(entry[&amp;#039;members&amp;#039;]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
	        local ismem = arr.contains(entry[&amp;#039;members&amp;#039;], true)&lt;br /&gt;
    		local isftp = arr.contains(entry[&amp;#039;members&amp;#039;], false)&lt;br /&gt;
        	if ismem then&lt;br /&gt;
        		membsicon = &amp;#039;[[File:Member icon.png|center|link=Members|alt=Members]]&amp;#039;&lt;br /&gt;
        	end&lt;br /&gt;
        	if isftp then&lt;br /&gt;
        		membsicon = &amp;#039;[[File:Free-to-play icon.png|center|link=Free-to-play|alt=Free-to-play]]&amp;#039;&lt;br /&gt;
        	end&lt;br /&gt;
        	if ismem and isftp then&lt;br /&gt;
        		membsicon = &amp;#039;[[File:Member icon.png|link=Members|alt=Members]] / [[File:Free-to-play icon.png|link=Free-to-play|alt=Free-to-play]]&amp;#039;&lt;br /&gt;
        	end&lt;br /&gt;
    	else&lt;br /&gt;
    		membsicon = entry[&amp;#039;members&amp;#039;] and &amp;#039;[[File:Member icon.png|center|link=Members|alt=Members]]&amp;#039; or &amp;#039;[[File:Free-to-play icon.png|center|link=Free-to-play|alt=Free-to-play]]&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
        local tr = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;):css(&amp;#039;height&amp;#039;, &amp;#039;64px&amp;#039;):wikitext(entry[&amp;#039;image&amp;#039;] and string.format(&amp;#039;[[%s|link=|64x64px|%s%s]]&amp;#039;, entry[&amp;#039;image&amp;#039;], name[1], (name[2] and &amp;#039; - &amp;#039; .. name[2]) or &amp;#039;&amp;#039;) or &amp;#039;&amp;#039; ):done()&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;[[%s|%s]]%s&amp;#039;, entry[&amp;#039;name&amp;#039;], name[1], name[2] and &amp;#039;&amp;lt;br/&amp;gt;&amp;lt;i&amp;gt;&amp;#039; .. name[2] .. &amp;#039;&amp;lt;/i&amp;gt;&amp;#039; or &amp;#039;&amp;#039;) ):done()&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;):wikitext(membsicon):done()&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;#039;[[File:%s_rune.png|link=|alt=%s]]&amp;#039;, entry[&amp;#039;elemental weakness&amp;#039;], entry[&amp;#039;elemental weakness&amp;#039;])):done()&lt;br /&gt;
            :tag(&amp;#039;td&amp;#039;):wikitext(entry[&amp;#039;elemental weakness percent&amp;#039;] .. &amp;#039;%&amp;#039;):done()&lt;br /&gt;
        return tr&lt;br /&gt;
	end&lt;br /&gt;
    &lt;br /&gt;
    local errors = {}&lt;br /&gt;
    for e, entry in ipairs(data) do&lt;br /&gt;
    	local isnoterr, ret = pcall(makeRow, entry)&lt;br /&gt;
    	if isnoterr then&lt;br /&gt;
    		tbl:node(ret)&lt;br /&gt;
    	else&lt;br /&gt;
    		table.insert(errors, &amp;#039;Error message: &amp;#039;..ret..&amp;#039;&amp;lt;br&amp;gt;Affected entry: &amp;lt;code&amp;gt;&amp;#039;..mw.text.nowiki(mw.text.jsonEncode(entry))..&amp;#039;&amp;lt;/code&amp;gt;&amp;#039;)&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    if #errors &amp;gt; 0 then&lt;br /&gt;
    	local errtag = div:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;error&amp;#039;):wikitext(&amp;#039;Errors with this query shown below:[[Category:Pages with script errors]]&amp;#039;)&lt;br /&gt;
    	for i,v in ipairs(errors) do&lt;br /&gt;
    		errtag:newline():wikitext(&amp;#039;* &amp;#039;,v)&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    return div&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Filter discontinued monsters&lt;br /&gt;
function p.filterData(indata)&lt;br /&gt;
    -- Fetch exclusion list&lt;br /&gt;
    local exlist = {}&lt;br /&gt;
&lt;br /&gt;
    table.insert(exlist, &amp;#039;[[Category:Monsters]] [[Category:Discontinued content]]&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local pages_excl = pageswithcats(exlist)&lt;br /&gt;
&lt;br /&gt;
    -- Post-process the data&lt;br /&gt;
    local data = {}&lt;br /&gt;
&lt;br /&gt;
    for _, entry in ipairs(indata) do&lt;br /&gt;
        local process = true&lt;br /&gt;
&lt;br /&gt;
        if arr.contains(pages_excl, entry[&amp;#039;variantof&amp;#039;]) or arr.contains(pages_excl, entry[&amp;#039;name&amp;#039;]) then&lt;br /&gt;
            process = false&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if process then&lt;br /&gt;
            table.insert(data, entry)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Sends a query to SMW and returns the data&lt;br /&gt;
function p.loadData(element)&lt;br /&gt;
    local props = {&lt;br /&gt;
        [&amp;#039;Image&amp;#039;]             = &amp;#039;image&amp;#039;,&lt;br /&gt;
        [&amp;#039;Is members only&amp;#039;]   = &amp;#039;members&amp;#039;,&lt;br /&gt;
        [&amp;#039;Elemental weakness&amp;#039;] = &amp;#039;elemental weakness&amp;#039;,&lt;br /&gt;
        [&amp;#039;Elemental weakness percent&amp;#039;] = &amp;#039;elemental weakness percent&amp;#039;,&lt;br /&gt;
        [&amp;#039;Is variant of&amp;#039;]     = &amp;#039;variantof&amp;#039;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    local query = {}&lt;br /&gt;
&lt;br /&gt;
    -- Conditions part of query&lt;br /&gt;
    local condition = { &amp;#039;[[Uses infobox::Monster]] [[Elemental weakness percent::≥1]]&amp;#039; }&lt;br /&gt;
    if not (element == &amp;#039;all&amp;#039;) then&lt;br /&gt;
    	table.insert(condition, &amp;#039;[[Elemental weakness::&amp;#039; .. element .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
    end&lt;br /&gt;
    table.insert(query, table.concat(condition))&lt;br /&gt;
&lt;br /&gt;
    -- Printouts part of query&lt;br /&gt;
    table.insert(query, &amp;#039;?=#-&amp;#039;)&lt;br /&gt;
    for k, pr in pairs(props) do&lt;br /&gt;
        table.insert(query, string.format(&amp;#039;?%s #- = %s&amp;#039;, k, pr))&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Parameters part of query&lt;br /&gt;
    query.offset = 0&lt;br /&gt;
    query.limit = 500&lt;br /&gt;
&lt;br /&gt;
    -- Fetch the data&lt;br /&gt;
    local smw = mw.smw.ask(query)&lt;br /&gt;
    if not smw or #smw == 0 then&lt;br /&gt;
        smw = {}&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Post-process the data&lt;br /&gt;
    local data = {}&lt;br /&gt;
&lt;br /&gt;
    for _, entry in ipairs(smw) do&lt;br /&gt;
        local dataline = entry&lt;br /&gt;
&lt;br /&gt;
        dataline[&amp;#039;name&amp;#039;] = dataline[1]&lt;br /&gt;
        dataline[1] = nil&lt;br /&gt;
        if type(dataline[&amp;#039;image&amp;#039;]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
            dataline[&amp;#039;image&amp;#039;] = dataline[&amp;#039;image&amp;#039;][1]&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        table.insert(data, dataline)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>