<?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%3AInfobox_Construction</id>
	<title>Module:Infobox Construction - 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%3AInfobox_Construction"/>
	<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Infobox_Construction&amp;action=history"/>
	<updated>2026-04-30T19:16:08Z</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:Infobox_Construction&amp;diff=34988&amp;oldid=prev</id>
		<title>Alex: Created page with &quot;-------------------------- -- Module for Template:Infobox Construction ------------------------ local p = {}  local onmain = require(&#039;Module:Mainonly&#039;).on_main local infobox = require(&#039;Module:Infobox&#039;)  -- Main function called with invokes function p.main(frame) 	local args = frame:getParent().args 	local ret = infobox.new(args)  	ret:defineParams{ 		{ name = &#039;name&#039;, func = &#039;name&#039; }, 		{ name = &#039;image&#039;, func = &#039;image&#039; }, 		{ name = &#039;image_smw&#039;, func = { name = image_...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.runerealm.org/index.php?title=Module:Infobox_Construction&amp;diff=34988&amp;oldid=prev"/>
		<updated>2024-10-16T23:12:17Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;-------------------------- -- Module for &lt;a href=&quot;/w/Template:Infobox_Construction&quot; title=&quot;Template:Infobox Construction&quot;&gt;Template:Infobox Construction&lt;/a&gt; ------------------------ local p = {}  local onmain = require(&amp;#039;Module:Mainonly&amp;#039;).on_main local infobox = require(&amp;#039;Module:Infobox&amp;#039;)  -- Main function called with invokes function p.main(frame) 	local args = frame:getParent().args 	local ret = infobox.new(args)  	ret:defineParams{ 		{ name = &amp;#039;name&amp;#039;, func = &amp;#039;name&amp;#039; }, 		{ name = &amp;#039;image&amp;#039;, func = &amp;#039;image&amp;#039; }, 		{ name = &amp;#039;image_smw&amp;#039;, func = { name = image_...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------&lt;br /&gt;
-- Module for [[Template:Infobox Construction]]&lt;br /&gt;
------------------------&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local onmain = require(&amp;#039;Module:Mainonly&amp;#039;).on_main&lt;br /&gt;
local infobox = require(&amp;#039;Module:Infobox&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Main function called with invokes&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local ret = infobox.new(args)&lt;br /&gt;
&lt;br /&gt;
	ret:defineParams{&lt;br /&gt;
		{ name = &amp;#039;name&amp;#039;, func = &amp;#039;name&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;image&amp;#039;, func = &amp;#039;image&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;image_smw&amp;#039;, func = { name = image_smw, params = { &amp;#039;image&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;icon&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;icon_smw&amp;#039;, func = { name = image_smw, params = { &amp;#039;icon&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;furniturename&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;release&amp;#039;, func = &amp;#039;release&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;level&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;level_smw&amp;#039;, func = { name = numericarg, params = { &amp;#039;level&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;experience&amp;#039;, func = { name = experiencearg, params = { &amp;#039;experience&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;experience_smw&amp;#039;, func = { name = numericarg, params = { &amp;#039;experience&amp;#039; } } },&lt;br /&gt;
		{ name = &amp;#039;room&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;hotspot&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;flatpack&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;actions&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;examine&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
&lt;br /&gt;
        { name = &amp;#039;usesinfobox&amp;#039;, func = { name = tostring, params = { &amp;#039;Construction&amp;#039; }, flag = &amp;#039;r&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;id&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;id_smw&amp;#039;, func = { name = idsmw, params = { &amp;#039;id&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;itemid&amp;#039;, func = &amp;#039;has_content&amp;#039; },&lt;br /&gt;
		{ name = &amp;#039;item_id_smw&amp;#039;, func = { name = idsmw, params = { &amp;#039;itemid&amp;#039; }, flag = &amp;#039;p&amp;#039; } },&lt;br /&gt;
		{ name = &amp;#039;uses_skill&amp;#039;, func = { name = tostring, params = { &amp;#039;Construction&amp;#039; }, flag = &amp;#039;r&amp;#039; } },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	ret:defineLinks({ hide = true })&lt;br /&gt;
	&lt;br /&gt;
	ret:useSMWSubobject({&lt;br /&gt;
		image_smw = &amp;#039;Image&amp;#039;,&lt;br /&gt;
		icon_smw = &amp;#039;Icon&amp;#039;,&lt;br /&gt;
		level_smw = &amp;#039;Construction level&amp;#039;,&lt;br /&gt;
		experience_smw = &amp;#039;Construction experience&amp;#039;,&lt;br /&gt;
		uses_skill = &amp;#039;Uses skill&amp;#039;,&lt;br /&gt;
		usesinfobox = &amp;#039;Uses infobox&amp;#039;,&lt;br /&gt;
		id_smw = &amp;#039;Object ID&amp;#039;,&lt;br /&gt;
		item_id_smw = &amp;#039;Item ID&amp;#039;,&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	ret:create()&lt;br /&gt;
	ret:cleanParams()&lt;br /&gt;
&lt;br /&gt;
	ret:customButtonPlacement(true)&lt;br /&gt;
	ret:addButtonsCaption()&lt;br /&gt;
&lt;br /&gt;
	ret:defineName(&amp;#039;Infobox Construction&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argh&amp;#039;, content = &amp;#039;name&amp;#039;, class=&amp;#039;infobox-header&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(20)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;image&amp;#039;, class=&amp;#039;infobox-image infobox-full-width-content&amp;#039;, colspan = &amp;#039;20&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(20)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Icon&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;icon&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Furniture name&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;furniturename&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Released&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;release&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Construction|Level]]&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;level&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Experience]]&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;experience&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Room&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;room&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Hotspot]]&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;hotspot&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;[[Flatpack]]able&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;flatpack&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	if ret:paramDefined(&amp;#039;actions&amp;#039;) then&lt;br /&gt;
		ret:addRow{&lt;br /&gt;
			{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Actions&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
			{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;actions&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	ret:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Examine&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;examine&amp;#039;, colspan = &amp;#039;13&amp;#039; }&lt;br /&gt;
	}&lt;br /&gt;
	:pad(20)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Advanced data&amp;#039;, class = &amp;#039;infobox-subheader&amp;#039;, colspan = &amp;#039;20&amp;#039; },&lt;br /&gt;
		meta = {addClass = &amp;#039;advanced-data&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	:pad(20, &amp;#039;advanced-data&amp;#039;)&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Object ID&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;id&amp;#039;,  colspan = &amp;#039;13&amp;#039; },&lt;br /&gt;
		meta = {addClass = &amp;#039;advanced-data&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	:addRow{&lt;br /&gt;
		{ tag = &amp;#039;th&amp;#039;, content = &amp;#039;Icon Item ID&amp;#039;, colspan = &amp;#039;7&amp;#039; },&lt;br /&gt;
		{ tag = &amp;#039;argd&amp;#039;, content = &amp;#039;itemid&amp;#039;,  colspan = &amp;#039;13&amp;#039; },&lt;br /&gt;
		meta = {addClass = &amp;#039;advanced-data&amp;#039;}&lt;br /&gt;
	}&lt;br /&gt;
	:pad(20, &amp;#039;advanced-data&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if onmain() then&lt;br /&gt;
		local a1 = ret:param(&amp;#039;all&amp;#039;)&lt;br /&gt;
		local a2 = ret:categoryData()&lt;br /&gt;
		ret:wikitext(addcategories(a1, a2))&lt;br /&gt;
	end&lt;br /&gt;
	return ret:tostring()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function experiencearg(arg)&lt;br /&gt;
	if not infobox.isDefined(arg) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local argNoCommas = string.gsub(arg, &amp;#039;,&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	if tonumber(argNoCommas) == nil then&lt;br /&gt;
		return arg&lt;br /&gt;
	else&lt;br /&gt;
		return string.format(&amp;#039;&amp;lt;span class=&amp;quot;infobox-quantity&amp;quot; data-val-each=&amp;quot;%s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;infobox-quantity-replace&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt; xp&amp;lt;/span&amp;gt;&amp;#039;, argNoCommas, arg)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function numericarg(level)&lt;br /&gt;
	if infobox.isDefined(level) then&lt;br /&gt;
		local r = tonumber(level)&lt;br /&gt;
		return r&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Filter non-numerical IDs and separate with splitpoint for use in SMW&lt;br /&gt;
-- Example: &amp;#039;123 ,hist234, 456&amp;#039; =&amp;gt; &amp;#039;123&amp;amp;&amp;amp;SPLITPOINT&amp;amp;&amp;amp;456&amp;#039;&lt;br /&gt;
function idsmw(id)&lt;br /&gt;
	if not infobox.isDefined(id) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local res = {}&lt;br /&gt;
	for id_i in string.gmatch(id, &amp;quot;[^,]+&amp;quot;) do&lt;br /&gt;
		local trimmed = id_i:gsub(&amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
		if tonumber(trimmed) then&lt;br /&gt;
			table.insert(res, trimmed)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(res, &amp;#039;&amp;amp;&amp;amp;SPLITPOINT&amp;amp;&amp;amp;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- split items with multiple images for smw (e.g. [[File:Arrow 1.png]] [[File:Arrow 2.png]])&lt;br /&gt;
function image_smw(arg)&lt;br /&gt;
	local _img = {}&lt;br /&gt;
	for i in string.gmatch(arg, &amp;quot;[Ff]ile:.-%.png&amp;quot;) do&lt;br /&gt;
		table.insert(_img, i)&lt;br /&gt;
	end&lt;br /&gt;
	if #_img == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(_img, &amp;#039;&amp;amp;&amp;amp;SPLITPOINT&amp;amp;&amp;amp;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function addcategories(args, catargs)&lt;br /&gt;
	local ret = { &amp;#039;Furniture&amp;#039; }&lt;br /&gt;
&lt;br /&gt;
	-- Add the associated category if the parameter doesn&amp;#039;t have content&lt;br /&gt;
	local notdefined_args = {&lt;br /&gt;
		image = &amp;#039;Needs image&amp;#039;,&lt;br /&gt;
		members = &amp;#039;Needs members status&amp;#039;,&lt;br /&gt;
		release = &amp;#039;Needs release date&amp;#039;,&lt;br /&gt;
		experience = &amp;#039;Needs experience info&amp;#039;,&lt;br /&gt;
		examine = &amp;#039;Needs examine added&amp;#039;,&lt;br /&gt;
		id = &amp;#039;Needs ID&amp;#039;,&lt;br /&gt;
		itemid = &amp;#039;Needs ID&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	for n, v in pairs(notdefined_args) do&lt;br /&gt;
		if catargs[n] and catargs[n].all_defined == false then&lt;br /&gt;
			table.insert(ret, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- combine table and format category wikicode&lt;br /&gt;
	for i, v in ipairs(ret) do&lt;br /&gt;
		if (v ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
			ret[i] = string.format(&amp;#039;[[Category:%s]]&amp;#039;, v)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat(ret, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alex</name></author>
	</entry>
</feed>