<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AShop_usage</id>
	<title>Module:Shop usage - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=Module%3AShop_usage"/>
	<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Shop_usage&amp;action=history"/>
	<updated>2026-04-06T15:55:14Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://mbwiki.stairwaygames.work/w/index.php?title=Module:Shop_usage&amp;diff=6890&amp;oldid=prev</id>
		<title>Admin coral island: Created page with &quot;local p = {} local Parse = require(&#039;Module:Parser&#039;).getTemplateArgs local Slib = require(&#039;Module:Shop&#039;) local lib = require(&#039;Module:Feature&#039;) local Icon = require(&#039;Module:Icon&#039;)._main local Icon_list = require(&#039;Module:Icon list&#039;)._main  local Pages = {} local display = {}  function p.main(frame) 	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, { 		parentFirst=true, 		wrappers = {&#039;Template:Shop usage&#039;} 	}) 	if lib.isNotEmpty(frame.args.pages) then 		local item = a...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=Module:Shop_usage&amp;diff=6890&amp;oldid=prev"/>
		<updated>2023-08-09T10:42:37Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {} local Parse = require(&amp;#039;Module:Parser&amp;#039;).getTemplateArgs local Slib = require(&amp;#039;Module:Shop&amp;#039;) local lib = require(&amp;#039;Module:Feature&amp;#039;) local Icon = require(&amp;#039;Module:Icon&amp;#039;)._main local Icon_list = require(&amp;#039;Module:Icon list&amp;#039;)._main  local Pages = {} local display = {}  function p.main(frame) 	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, { 		parentFirst=true, 		wrappers = {&amp;#039;Template:Shop usage&amp;#039;} 	}) 	if lib.isNotEmpty(frame.args.pages) then 		local item = a...&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;
local Parse = require(&amp;#039;Module:Parser&amp;#039;).getTemplateArgs&lt;br /&gt;
local Slib = require(&amp;#039;Module:Shop&amp;#039;)&lt;br /&gt;
local lib = require(&amp;#039;Module:Feature&amp;#039;)&lt;br /&gt;
local Icon = require(&amp;#039;Module:Icon&amp;#039;)._main&lt;br /&gt;
local Icon_list = require(&amp;#039;Module:Icon list&amp;#039;)._main&lt;br /&gt;
&lt;br /&gt;
local Pages = {}&lt;br /&gt;
local display = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {&lt;br /&gt;
		parentFirst=true,&lt;br /&gt;
		wrappers = {&amp;#039;Template:Shop usage&amp;#039;}&lt;br /&gt;
	})&lt;br /&gt;
	if lib.isNotEmpty(frame.args.pages) then&lt;br /&gt;
		local item = args[1] or mw.title.getCurrentTitle().rootText&lt;br /&gt;
		for page in string.gmatch(frame.args.pages, &amp;#039;(.-)%$%$%$&amp;#039;) do&lt;br /&gt;
			local data = Parse(page, { only=&amp;#039;Shop&amp;#039; } )&lt;br /&gt;
			local Pdata&lt;br /&gt;
			if type(data[1]) == &amp;#039;table&amp;#039; then&lt;br /&gt;
				for num, call in pairs(data) do&lt;br /&gt;
					Pdata = p.ParseCall(call, item)&lt;br /&gt;
					if Pdata then&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				Pdata = p.ParseCall(data, item)&lt;br /&gt;
			end&lt;br /&gt;
			if Pdata then&lt;br /&gt;
				Pdata.PAGENAME = page&lt;br /&gt;
				table.insert(Pages, Pdata)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		mw.logObject(Pages)&lt;br /&gt;
		return p._main(args, frame)&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;No shop asks for this item as currency.&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, frame)&lt;br /&gt;
	local temp_cols = { &amp;#039;Price range&amp;#039;, &amp;#039;Season&amp;#039;, &amp;#039;Town rank&amp;#039;, &amp;#039;Requirement&amp;#039; }&lt;br /&gt;
	local cols = {}&lt;br /&gt;
	local _table = mw.html.create(&amp;#039;table&amp;#039;):addClass(&amp;#039;fandom-table article-table sortable&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	-- header row&lt;br /&gt;
	local tr = _table:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Location&amp;#039;)&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Item&amp;#039;)&lt;br /&gt;
	tr:tag(&amp;#039;th&amp;#039;):wikitext(&amp;#039;Price&amp;#039;)&lt;br /&gt;
	for _, col in ipairs(temp_cols) do&lt;br /&gt;
		if display[col] then&lt;br /&gt;
			table.insert(cols, col)&lt;br /&gt;
			tr:tag(&amp;#039;th&amp;#039;):wikitext(col)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- rest of table&lt;br /&gt;
	for _, page in ipairs(Pages) do&lt;br /&gt;
		local tr = _table:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		tr:tag(&amp;#039;td&amp;#039;):attr(&amp;#039;rowspan&amp;#039;, #page):wikitext(&amp;#039;[[&amp;#039;, page.PAGENAME, &amp;#039;]]&amp;#039;)&lt;br /&gt;
		for i, call in pairs(page) do&lt;br /&gt;
			if tonumber(i) ~= nil then&lt;br /&gt;
				 mw.logObject(call) --debug&lt;br /&gt;
				if i&amp;gt;1 then tr = _table:tag(&amp;#039;tr&amp;#039;) end&lt;br /&gt;
				tr:tag(&amp;#039;td&amp;#039;):node(Icon_list{call.ITEM_NAME})&lt;br /&gt;
				local td = tr:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				if call.Price and tonumber(call.Price) ~= nil then&lt;br /&gt;
					td&lt;br /&gt;
						:node(Icon{&lt;br /&gt;
								&amp;#039;Coin&amp;#039;,&lt;br /&gt;
								call.Price,&lt;br /&gt;
								size = &amp;#039;16&amp;#039;,&lt;br /&gt;
								notext = 1,&lt;br /&gt;
								nolink = 1&lt;br /&gt;
							})&lt;br /&gt;
						:attr(&amp;#039;data-sort-value&amp;#039;, call.Price)&lt;br /&gt;
				elseif call.Price and call.Price:find(&amp;#039;%*%d&amp;#039;) then&lt;br /&gt;
					local items = lib.split(call.Price, &amp;#039;,&amp;#039;)&lt;br /&gt;
					list = td:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;icon-list&amp;#039;)&lt;br /&gt;
					for _, item in ipairs(items) do&lt;br /&gt;
						local name, amount = string.match(item, &amp;#039;^(.-)*(.-)$&amp;#039;)&lt;br /&gt;
						if name == &amp;#039;Coin&amp;#039; then td:attr(&amp;#039;data-sort-value&amp;#039;, amount) end&lt;br /&gt;
						list:node(Icon{&lt;br /&gt;
							name,&lt;br /&gt;
							amount,&lt;br /&gt;
							size = (name==&amp;#039;Coin&amp;#039; and &amp;#039;16&amp;#039; or &amp;#039;20&amp;#039;),&lt;br /&gt;
							notext = (name==&amp;#039;Coin&amp;#039; and &amp;#039;1&amp;#039; or nil),&lt;br /&gt;
							nolink = (name==&amp;#039;Coin&amp;#039; and &amp;#039;1&amp;#039; or nil)&lt;br /&gt;
						})&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				for _, col in ipairs(cols) do&lt;br /&gt;
					local td = tr:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
					if call[col] then&lt;br /&gt;
						td:wikitext(call[col])&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- mw.logObject(_table) --debug&lt;br /&gt;
	return frame:preprocess(tostring(_table))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.ParseCall(call_data, items)&lt;br /&gt;
	local delim = call_data.delim or &amp;#039;;&amp;#039;&lt;br /&gt;
	local default = {}&lt;br /&gt;
	table.insert(default, (call_data.firstcol or &amp;#039;Item&amp;#039;))&lt;br /&gt;
	table.insert(default, (call_data.secondcol or &amp;#039;Price&amp;#039;))&lt;br /&gt;
	local types = Slib.HashTypes(nil, call_data.cols, default)&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local targets = {}&lt;br /&gt;
	for item in lib.gsplit(items, &amp;#039;;&amp;#039;) do&lt;br /&gt;
		targets[string.lower(item)] = true&lt;br /&gt;
	end&lt;br /&gt;
	local function inString(data)&lt;br /&gt;
		for str in lib.gsplit(data, &amp;#039;,&amp;#039;) do&lt;br /&gt;
			for item in lib.gsplit(str, &amp;#039;//&amp;#039;) do&lt;br /&gt;
				local pre1 = lib.split(item, &amp;#039;/&amp;#039;)&lt;br /&gt;
				local quality = pre1[2]&lt;br /&gt;
				&lt;br /&gt;
				local pre2 = lib.split(pre1[1], &amp;#039;*&amp;#039;)&lt;br /&gt;
				local name = pre2[1]&lt;br /&gt;
				local amount = pre2[2] or &amp;#039;1&amp;#039;&lt;br /&gt;
				-- mw.logObject(string.lower(name), &amp;#039;name&amp;#039;)&lt;br /&gt;
				-- mw.logObject(mustHave, &amp;#039;mustHave&amp;#039;)&lt;br /&gt;
				&lt;br /&gt;
				if targets[string.lower(name)] then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for row_num, row in lib.spairs(call_data, function(tVal, a, b) return tostring(a)&amp;lt;tostring(b) end) do&lt;br /&gt;
		if tonumber(row_num) ~= nil then&lt;br /&gt;
			local cols_data = lib.split(row, delim)&lt;br /&gt;
			if inString(cols_data[2]) then&lt;br /&gt;
				local params = {[&amp;#039;ITEM_NAME&amp;#039;] = cols_data[1]}&lt;br /&gt;
				for col_num, col_value in ipairs(cols_data) do&lt;br /&gt;
					if col_num &amp;gt; 1 and types[col_num] and lib.isNotEmpty(col_value) then&lt;br /&gt;
						display[types[col_num]] = true&lt;br /&gt;
						params[types[col_num]] = col_value&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				table.insert(ret, params)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if next(ret) then&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin coral island</name></author>
	</entry>
</feed>