<?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%3ASkill_table</id>
	<title>Module:Skill 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%3ASkill_table"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Skill_table&amp;action=history"/>
	<updated>2026-05-03T09:34:22Z</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:Skill_table&amp;diff=38432&amp;oldid=prev</id>
		<title>Alex at 10:23, 17 October 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Skill_table&amp;diff=38432&amp;oldid=prev"/>
		<updated>2024-10-17T10:23:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:23, 17 October 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 164:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 164:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;function tableConcat(mainTable, newTable, exclusionList)&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;function tableConcat(mainTable, newTable, exclusionList)&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    for i = 1, #newTable, 1 do&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    for i = 1, #newTable, 1 do&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	-- Only add &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.&lt;/del&gt;pages not using excluded materials&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	-- Only add pages not using excluded materials&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	if(not((newTable[i][&#039;Uses infobox&#039;] == &#039;Pure&#039;) or (shouldExclude(newTable[i][&#039;Uses material&#039;], exclusionList)))) then&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	if(not((newTable[i][&#039;Uses infobox&#039;] == &#039;Pure&#039;) or (shouldExclude(newTable[i][&#039;Uses material&#039;], exclusionList)))) then&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    		mainTable[#mainTable+1] = newTable[i]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    		mainTable[#mainTable+1] = newTable[i]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-35148:rev-38432:wikidiff2=table:1.13.0:bc2a06be --&gt;
&lt;/table&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Skill_table&amp;diff=35148&amp;oldid=prev</id>
		<title>Alex at 23:13, 16 October 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Skill_table&amp;diff=35148&amp;oldid=prev"/>
		<updated>2024-10-16T23:13:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 01:13, 17 October 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 164:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 164:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;function tableConcat(mainTable, newTable, exclusionList)&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;function tableConcat(mainTable, newTable, exclusionList)&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    for i = 1, #newTable, 1 do&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    for i = 1, #newTable, 1 do&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	-- Only add pages not using excluded materials&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	-- Only add &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mw.&lt;/ins&gt;pages not using excluded materials&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	if(not((newTable[i][&#039;Uses infobox&#039;] == &#039;Pure&#039;) or (shouldExclude(newTable[i][&#039;Uses material&#039;], exclusionList)))) then&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    	if(not((newTable[i][&#039;Uses infobox&#039;] == &#039;Pure&#039;) or (shouldExclude(newTable[i][&#039;Uses material&#039;], exclusionList)))) then&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    		mainTable[#mainTable+1] = newTable[i]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    		mainTable[#mainTable+1] = newTable[i]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
	<entry>
		<id>https://wiki.runerealm.org/index.php?title=Module:Skill_table&amp;diff=34250&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;local p = {}  local scp = require(&#039;Module:SCP&#039;)._main local yesNo = require(&#039;Module:Yesno&#039;) local paramTest = require(&#039;Module:Paramtest&#039;)  local trim = mw.text.trim local split = mw.text.split local ustring = mw.ustring local listToText = mw.text.listToText  function plinkify(tbl) 	if tbl == nil then 		return nil 	elseif type(tbl) == &#039;string&#039; then 		tbl = {tbl} 	end 	for i, v in ipairs(tbl) do 		local name = ustring.gsub(v, &#039;[^%[]*%[%[:?([^%|]+).*&#039;, &#039;%1&#039;) 		local fileNam...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Skill_table&amp;diff=34250&amp;oldid=prev"/>
		<updated>2024-10-15T23:58:39Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {}  local scp = require(&amp;#039;Module:SCP&amp;#039;)._main local yesNo = require(&amp;#039;Module:Yesno&amp;#039;) local paramTest = require(&amp;#039;Module:Paramtest&amp;#039;)  local trim = mw.text.trim local split = mw.text.split local ustring = mw.ustring local listToText = mw.text.listToText  function plinkify(tbl) 	if tbl == nil then 		return nil 	elseif type(tbl) == &amp;#039;string&amp;#039; then 		tbl = {tbl} 	end 	for i, v in ipairs(tbl) do 		local name = ustring.gsub(v, &amp;#039;[^%[]*%[%[:?([^%|]+).*&amp;#039;, &amp;#039;%1&amp;#039;) 		local fileNam...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local scp = require(&amp;#039;Module:SCP&amp;#039;)._main&lt;br /&gt;
local yesNo = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local paramTest = require(&amp;#039;Module:Paramtest&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
local split = mw.text.split&lt;br /&gt;
local ustring = mw.ustring&lt;br /&gt;
local listToText = mw.text.listToText&lt;br /&gt;
&lt;br /&gt;
function plinkify(tbl)&lt;br /&gt;
	if tbl == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif type(tbl) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		tbl = {tbl}&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(tbl) do&lt;br /&gt;
		local name = ustring.gsub(v, &amp;#039;[^%[]*%[%[:?([^%|]+).*&amp;#039;, &amp;#039;%1&amp;#039;)&lt;br /&gt;
		local fileName = ustring.match(name, &amp;#039;[^%#]+&amp;#039;) -- Remove #foo from image name&lt;br /&gt;
		if(not mw.title.new(fileName .. &amp;#039;.png&amp;#039;, &amp;#039;File&amp;#039;):getContent()) then -- If file doesnt exist, just use name&lt;br /&gt;
			tbl[i] = &amp;#039;[[&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			tbl[i] = &amp;#039;[[File:&amp;#039; .. fileName .. &amp;#039;.png|link=&amp;#039; .. name .. &amp;#039;|frameless|35x35px]] [[&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(tbl, &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- val index in arr&lt;br /&gt;
function indexOf(tbl, val, doSearch)&lt;br /&gt;
	for i, item in ipairs(tbl) do&lt;br /&gt;
		if item == val then&lt;br /&gt;
			return i&lt;br /&gt;
		elseif doSearch and string.find(item, val) then&lt;br /&gt;
			return i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function buildRow(page, skillName, images, columns)&lt;br /&gt;
	local row = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- First cell, image/icon&lt;br /&gt;
	local image = getLastElement(page[&amp;#039;Image&amp;#039;]) or getLastElement(page[&amp;#039;All Image&amp;#039;]) or getLastElement(page[&amp;#039;Parent Image&amp;#039;])&lt;br /&gt;
	local icon = getLastElement(page[&amp;#039;Icon&amp;#039;])&lt;br /&gt;
	-- If images is set to icons, prefer icon over images. If its not icon, prefer image over icon&lt;br /&gt;
	local pic = images == &amp;#039;icons&amp;#039; and (icon or image) or (image or icon)&lt;br /&gt;
	-- If images is set to icons, set smaller size, otherwise set larger size&lt;br /&gt;
	local imageSize = images == &amp;#039;icons&amp;#039; and &amp;#039;35x35px&amp;#039; or &amp;#039;120x120px&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if(pic) then&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[&amp;#039; .. pic .. &amp;#039;|frameless|&amp;#039; .. imageSize .. &amp;#039;|center|link=&amp;#039; .. page[1] .. &amp;#039; ]]&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;(?)&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Second cell, page name + verisoning (if applicable)&lt;br /&gt;
	local title = split(page[1], &amp;#039;#&amp;#039;)[1]&lt;br /&gt;
	local subtitle = split(page[1], &amp;#039;#&amp;#039;)[2]&lt;br /&gt;
	row:tag(&amp;#039;td&amp;#039;):wikitext(string.format(&amp;quot;[[%s|%s]]%s&amp;quot;, page[1], title, subtitle and &amp;#039; &amp;lt;small&amp;gt;(&amp;#039;..string.gsub(subtitle, &amp;#039;_&amp;#039;, &amp;#039; &amp;#039;)..&amp;#039;)&amp;lt;/small&amp;gt;&amp;#039; or &amp;#039;&amp;#039;))&lt;br /&gt;
	&lt;br /&gt;
	-- Third cell (optional), members&lt;br /&gt;
	if(columns[&amp;#039;membersColumn&amp;#039;]) then&lt;br /&gt;
		if(page[&amp;#039;Is members only&amp;#039;] or page[&amp;#039;All Is members only&amp;#039;] or page[&amp;#039;Parent Members&amp;#039;]) then&lt;br /&gt;
			row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[File:Member icon.png|link=|Members]]&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			row:tag(&amp;#039;td&amp;#039;):wikitext(&amp;#039;[[File:Free-to-play icon.png|link=|Free-to-play]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Fourth cell, skill level requirement&lt;br /&gt;
	local skillLevels = page[skillName .. &amp;#039; level&amp;#039;]&lt;br /&gt;
	local skillStr = &amp;#039;&amp;#039;&lt;br /&gt;
	if(type(skillLevels) == &amp;#039;table&amp;#039;) then&lt;br /&gt;
		for i, skillLevel in ipairs(skillLevels) do&lt;br /&gt;
			skillStr = skillStr .. scp(skillName, skillLevel, &amp;#039;yes&amp;#039;) .. &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		skillStr = scp(skillName, skillLevels, &amp;#039;yes&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if skillStr == &amp;#039;&amp;#039; then skillstr = &amp;#039;(?)&amp;#039; end&lt;br /&gt;
	row:tag(&amp;#039;td&amp;#039;):wikitext(skillStr)&lt;br /&gt;
	&lt;br /&gt;
	-- Fifth cell, skill experience yield&lt;br /&gt;
	row:tag(&amp;#039;td&amp;#039;):wikitext(concatenateTable(page[skillName..&amp;#039; experience&amp;#039;]) or &amp;#039;(?)&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- Sixth cell, materials&lt;br /&gt;
	if(columns[&amp;#039;materialsColumn&amp;#039;]) then&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(plinkify(page[&amp;#039;Uses material&amp;#039;]))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Seventh cell, tools&lt;br /&gt;
	if(columns[&amp;#039;toolsColumn&amp;#039;])then&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(plinkify(page[&amp;#039;Uses tool&amp;#039;]))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Eighth cell, facilities&lt;br /&gt;
	if(columns[&amp;#039;facilitiesColumn&amp;#039;]) then&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(concatenateTable(page[&amp;#039;Uses facility&amp;#039;]))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ninth cell, facilities&lt;br /&gt;
	if type(page[&amp;#039;Uses skill&amp;#039;]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		-- Remove primary skill information displayed in previous cells&lt;br /&gt;
		table.remove(page[&amp;#039;Uses skill&amp;#039;], indexOf(page[&amp;#039;Uses skill&amp;#039;], skillName, true))&lt;br /&gt;
	elseif string.find(page[&amp;#039;Uses skill&amp;#039;] or &amp;#039;&amp;#039;, skillName) then&lt;br /&gt;
		-- If the singular string is of primary skill, set to nil as there are no other skills to display&lt;br /&gt;
		page[&amp;#039;Uses skill&amp;#039;] = nil&lt;br /&gt;
	else&lt;br /&gt;
		-- Not a table, but also not just the original skill (somehow). Convert to table to avoid errors.&lt;br /&gt;
		page[&amp;#039;Uses skill&amp;#039;] = {page[&amp;#039;Uses skill&amp;#039;]}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Convert other skills information to be SCPs, these do not include levels because it would require further smw and pre-emptive knowledge otherwise grabbing all skills info&lt;br /&gt;
	if page[&amp;#039;Uses skill&amp;#039;] then&lt;br /&gt;
		for i, skill in ipairs(page[&amp;#039;Uses skill&amp;#039;]) do&lt;br /&gt;
			page[&amp;#039;Uses skill&amp;#039;][i] = scp(skill, nil, &amp;#039;yes&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if(columns[&amp;#039;otherSkillsColumn&amp;#039;]) then&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;):wikitext(page[&amp;#039;Uses skill&amp;#039;] and table.concat(page[&amp;#039;Uses skill&amp;#039;], &amp;#039;&amp;lt;br/&amp;gt;&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return row&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function createHeader(skill, columns)&lt;br /&gt;
	local tabl = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;wikitable sortable sticky-header align-center-1&amp;#039;):done()&lt;br /&gt;
	local header = tabl:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	header:tag(&amp;#039;th&amp;#039;):attr(&amp;#039;colspan&amp;#039;, &amp;#039;2&amp;#039;):wikitext(&amp;#039;Name&amp;#039;)&lt;br /&gt;
	if(columns[&amp;#039;membersColumn&amp;#039;]) then&lt;br /&gt;
		tabl:addClass(&amp;#039;align-center-3&amp;#039;)&lt;br /&gt;
		header:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;[[File:Member icon.png|link=|Members]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	header:tag(&amp;#039;th&amp;#039;):wikitext(skill..&amp;#039; level&amp;#039;)&lt;br /&gt;
	header:tag(&amp;#039;th&amp;#039;):wikitext(skill..&amp;#039; XP&amp;#039;)&lt;br /&gt;
	if(columns[&amp;#039;materialsColumn&amp;#039;]) then&lt;br /&gt;
		header:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Materials used&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if(columns[&amp;#039;toolsColumn&amp;#039;]) then&lt;br /&gt;
		header:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Tools used&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if(columns[&amp;#039;facilitiesColumn&amp;#039;]) then&lt;br /&gt;
		header:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Facilities used&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if(columns[&amp;#039;otherSkillsColumn&amp;#039;]) then&lt;br /&gt;
		header:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Skills involved&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return tabl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function shouldExclude(property, exclusionList)&lt;br /&gt;
	for _, exclusion in ipairs(exclusionList) do&lt;br /&gt;
		if((paramTest.has_content(exclusion)) and (ustring.find(string.lower(concatenateTable(property) or &amp;#039;&amp;#039;), string.lower(trim(exclusion))))) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function tableConcat(mainTable, newTable, exclusionList)&lt;br /&gt;
    for i = 1, #newTable, 1 do&lt;br /&gt;
    	-- Only add pages not using excluded materials&lt;br /&gt;
    	if(not((newTable[i][&amp;#039;Uses infobox&amp;#039;] == &amp;#039;Pure&amp;#039;) or (shouldExclude(newTable[i][&amp;#039;Uses material&amp;#039;], exclusionList)))) then&lt;br /&gt;
    		mainTable[#mainTable+1] = newTable[i]&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    return mainTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getLastElement(tbl)&lt;br /&gt;
	return type(tbl) == &amp;#039;table&amp;#039; and tbl[#tbl] or tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function concatenateTable(tbl)&lt;br /&gt;
	return type(tbl) == &amp;#039;table&amp;#039; and listToText(tbl, &amp;#039;, &amp;#039;, &amp;#039; and &amp;#039;) or tbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function loadData(strictExp, skillName, membersColumn, exclusionList, limit, batchSize, altQuery)&lt;br /&gt;
	local allData = {}&lt;br /&gt;
	&lt;br /&gt;
	local query = {&lt;br /&gt;
		&amp;quot;[[&amp;quot; .. skillName .. &amp;quot; level::+]]&amp;quot; .. strictExp .. &amp;quot;[[&amp;quot; .. skillName .. &amp;quot; experience::&amp;gt;&amp;gt;0]]&amp;quot;,&lt;br /&gt;
		&amp;quot;?=#-&amp;quot;,&lt;br /&gt;
		&amp;quot;?Image#-&amp;quot;,&lt;br /&gt;
		&amp;quot;?All Image#-&amp;quot;,&lt;br /&gt;
		&amp;quot;?Is variant of.All Image#-=Parent Image&amp;quot;,&lt;br /&gt;
		&amp;quot;?Icon#-&amp;quot;,&lt;br /&gt;
		--&amp;quot;?All Icon#-&amp;quot;,&lt;br /&gt;
		--&amp;quot;?Is variant of.All Icon#-=Parent Icon&amp;quot;,&lt;br /&gt;
		&amp;quot;?Uses material&amp;quot;,&lt;br /&gt;
		&amp;quot;?Uses tool&amp;quot;,&lt;br /&gt;
		&amp;quot;?Uses facility&amp;quot;,&lt;br /&gt;
		&amp;quot;?Uses skill#-&amp;quot;,&lt;br /&gt;
		&amp;quot;?Uses infobox&amp;quot;,&lt;br /&gt;
		&amp;quot;?&amp;quot; .. skillName .. &amp;quot; level&amp;quot;,&lt;br /&gt;
		&amp;quot;?&amp;quot; .. skillName .. &amp;quot; experience&amp;quot;,&lt;br /&gt;
		limit = batchSize,&lt;br /&gt;
		offset = 0,&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- Only fetch members data if the members column is going to be shown&lt;br /&gt;
	if(membersColumn) then&lt;br /&gt;
		table.insert(query, &amp;quot;?Is members only&amp;quot;)&lt;br /&gt;
		table.insert(query, &amp;quot;?All Is members only&amp;quot;)&lt;br /&gt;
		table.insert(query, &amp;quot;?Is variant of.All Is members only=Parent Members&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- prepend AND append, to make sure the custom query gets applied to both sides of the OR&lt;br /&gt;
	if(altQuery) then&lt;br /&gt;
		query[1] = altQuery .. query[1] .. altQuery&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for i = 0, limit, batchSize do&lt;br /&gt;
		query.limit = batchSize&lt;br /&gt;
		query.offset = i&lt;br /&gt;
		&lt;br /&gt;
		local t1 = os.clock()&lt;br /&gt;
		local smwData = mw.smw.ask(query)&lt;br /&gt;
		local t2 = os.clock()&lt;br /&gt;
		if(smwData == nil) then break end&lt;br /&gt;
		mw.log(string.format(&amp;#039;SMW: entries %d, time elapsed: %.3f ms.&amp;#039;, #smwData, (t2 - t1) * 1000))&lt;br /&gt;
		&lt;br /&gt;
		tableConcat(allData, smwData, exclusionList)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if(allData == nil) then&lt;br /&gt;
		error(&amp;quot;No results found for the specified query.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return allData&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Strict requests experience &amp;gt;0&lt;br /&gt;
	local strictExp = (yesNo(args.strict) or false) and &amp;#039;&amp;#039; or &amp;#039; OR &amp;#039;&lt;br /&gt;
	local skillName = trim(args.skill)&lt;br /&gt;
	local limit = paramTest.default_to(tonumber(args.limit), 5000) -- Acting as a real limiter&lt;br /&gt;
	local batchSize = paramTest.default_to(tonumber(args.batchsize), 100)&lt;br /&gt;
	&lt;br /&gt;
	--Table columns&lt;br /&gt;
	local columns = {&lt;br /&gt;
		membersColumn = yesNo(args.members or &amp;#039;&amp;#039;, true),&lt;br /&gt;
		materialsColumn = yesNo(args.materials or &amp;#039;&amp;#039;, true),&lt;br /&gt;
		toolsColumn = yesNo(args.tools or &amp;#039;&amp;#039;, true),&lt;br /&gt;
		facilitiesColumn = yesNo(args.facilities or &amp;#039;&amp;#039;, true),&lt;br /&gt;
		otherSkillsColumn = yesNo(args[&amp;#039;other skills&amp;#039;] or &amp;#039;&amp;#039;, true),&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local exclusions = split(args[&amp;#039;exclude material&amp;#039;] or &amp;#039;&amp;#039;, &amp;#039;,&amp;#039;)&lt;br /&gt;
	local images = string.lower(args.images or &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local data = loadData(strictExp, skillName, columns[&amp;#039;membersColumn&amp;#039;], exclusions, limit, batchSize, args.query)&lt;br /&gt;
&lt;br /&gt;
	local ret = createHeader(skillName, columns)&lt;br /&gt;
	&lt;br /&gt;
	for i, page in pairs(data) do&lt;br /&gt;
		ret:node(buildRow(page, skillName, images, columns))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	--mw.logObject(args)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>