<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://darkanddarker.wiki.spellsandguns.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AUtility</id>
	<title>Module:Utility - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://darkanddarker.wiki.spellsandguns.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AUtility"/>
	<link rel="alternate" type="text/html" href="https://darkanddarker.wiki.spellsandguns.com/index.php?title=Module:Utility&amp;action=history"/>
	<updated>2026-09-28T00:39:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://darkanddarker.wiki.spellsandguns.com/index.php?title=Module:Utility&amp;diff=68848&amp;oldid=prev</id>
		<title>AssassinOTP: inital utility module</title>
		<link rel="alternate" type="text/html" href="https://darkanddarker.wiki.spellsandguns.com/index.php?title=Module:Utility&amp;diff=68848&amp;oldid=prev"/>
		<updated>2026-09-27T04:49:39Z</updated>

		<summary type="html">&lt;p&gt;inital utility module&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 UD = mw.loadJsonData(&amp;quot;Data:Utility.json&amp;quot;)&lt;br /&gt;
local concat = table.concat&lt;br /&gt;
&lt;br /&gt;
---Get the item&amp;#039;s size in pixels&lt;br /&gt;
local function size(item)&lt;br /&gt;
	return tostring(item.invwidth*45)..&amp;quot;x&amp;quot;..tostring(item.invheight*45)..&amp;quot;px&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function count(t)&lt;br /&gt;
	local c = 0&lt;br /&gt;
	for _ in pairs(t) do c = c + 1 end&lt;br /&gt;
	return c&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Marks up a list of values with color based on rarity&lt;br /&gt;
local function color_values(utility, values)&lt;br /&gt;
	if values == nil then return &amp;quot;&amp;quot; end&lt;br /&gt;
	if type(values)==&amp;quot;string&amp;quot; or type(values)==&amp;quot;number&amp;quot; then&lt;br /&gt;
		if count(utility.rarities) == 1 then return &amp;quot;&amp;lt;span class=&amp;#039;cr&amp;quot;..utility.rarities[1]..&amp;quot;&amp;#039;&amp;gt;&amp;quot;..values..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot; end&lt;br /&gt;
		return tostring(values)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local wt = &amp;quot;&amp;quot;&lt;br /&gt;
	local newline = &amp;quot;&amp;quot;&lt;br /&gt;
	for i, key in ipairs(utility.rarities) do&lt;br /&gt;
		wt = wt..newline..&amp;quot;&amp;lt;span class=&amp;#039;cr&amp;quot;..key..&amp;quot;&amp;#039;&amp;gt;&amp;quot;..tostring(values[tonumber(key)] or &amp;quot;&amp;quot;)..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
		if i == 1 then newline = &amp;quot;&amp;lt;br&amp;gt;&amp;quot; end&lt;br /&gt;
	end&lt;br /&gt;
	return wt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Returns a predetermined utility list&lt;br /&gt;
local function get_list(frame)&lt;br /&gt;
	if not (frame.args and frame.args[1]) then return {} end&lt;br /&gt;
	if not (UD[frame.args[1]] and UD[frame.args[1]]) then return {} end&lt;br /&gt;
&lt;br /&gt;
	return UD[frame.args[1]]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Formats a table cell for the iconbox&lt;br /&gt;
local function name(item, is_header)&lt;br /&gt;
	if is_header then return [[&amp;lt;th style=&amp;quot;width:5%&amp;quot;&amp;gt;Name&amp;lt;/th&amp;gt;]] end&lt;br /&gt;
&lt;br /&gt;
	local color = &amp;quot;2&amp;quot;&lt;br /&gt;
	local bold_link = &amp;quot;|&amp;lt;b&amp;gt;&amp;quot;..item.name&lt;br /&gt;
	if count(item.rarities) == 1 then&lt;br /&gt;
		color = item.rarities[1]&lt;br /&gt;
		bold_link = &amp;quot;|&amp;lt;b class=cr&amp;quot;..color..&amp;quot;&amp;gt;&amp;quot;..item.name&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local icon_amount = &amp;quot;&amp;quot;&lt;br /&gt;
	if item.maxammocount &amp;gt; 0 then&lt;br /&gt;
		icon_amount = &amp;quot;&amp;lt;span class=&amp;#039;iconamount&amp;#039; style=&amp;#039;pointer-events:none;color:#EEEA;font-size:16px&amp;#039;&amp;gt;&amp;quot;..item.maxammocount..&amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;quot;&amp;lt;td&amp;gt;&amp;lt;div class=&amp;#039;iconbox&amp;#039; style=&amp;#039;width:max-content;align-items:center&amp;#039;&amp;gt;&amp;lt;div class=&amp;#039;rarity&amp;quot;..color..&amp;quot; rounded relative&amp;#039;&amp;gt;[[File:&amp;quot;..item.name..&amp;quot;.png|&amp;quot;..size(item)..&amp;quot;|link=&amp;quot;..item.name..&amp;quot;]]&amp;quot;&lt;br /&gt;
				..icon_amount&lt;br /&gt;
			..&amp;quot;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;[[&amp;quot;..item.name..bold_link..&amp;quot;&amp;lt;/b&amp;gt;]]&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Formats a table cell of move speeds&lt;br /&gt;
local function move_speed(utility,is_header)&lt;br /&gt;
	if is_header then return [[&amp;lt;th style=&amp;quot;width:5%&amp;quot;&amp;gt;Movement Speed&amp;lt;/th&amp;gt;]] end&lt;br /&gt;
&lt;br /&gt;
	return &amp;quot;&amp;lt;td&amp;gt;&amp;quot;..color_values(utility,utility.stats[&amp;quot;move speed&amp;quot;])..&amp;quot;&amp;lt;/td&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function determine_table_type(utility)&lt;br /&gt;
	if utility.args then&lt;br /&gt;
		return utility.args[1]&lt;br /&gt;
	elseif utility.utilitytype then&lt;br /&gt;
		return utility.utilitytype&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
---Determines which table data goes into the table row&lt;br /&gt;
local row_type = {&lt;br /&gt;
	[&amp;quot;Drink&amp;quot;] = {name,move_speed}, --,effect,action_time,action_move_speed_penalty&lt;br /&gt;
	[&amp;quot;Default&amp;quot;] = {name,move_speed,effect,action_time,action_move_speed_penalty}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
---Return a table row of data cells containing utility information,&lt;br /&gt;
local function row(utility, is_header)&lt;br /&gt;
	is_header = is_header or false&lt;br /&gt;
	local wt = {}&lt;br /&gt;
	wt[#wt+1] = &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;&lt;br /&gt;
	for _,content in ipairs(row_type[determine_table_type(utility)]) do&lt;br /&gt;
		wt[#wt+1] = content(utility,is_header)&lt;br /&gt;
	end&lt;br /&gt;
	wt[#wt+1] = &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return concat(wt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.draw_table(frame)&lt;br /&gt;
	local wt = {}&lt;br /&gt;
	local item_list = get_list(frame)&lt;br /&gt;
	if count(item_list) == 0 then return &amp;quot;&amp;lt;span style=&amp;#039;font-size:24pt&amp;#039;&amp;gt;There are currently no items of this type.&amp;lt;/span&amp;gt;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
	wt[#wt+1] = &amp;quot;&amp;lt;table cellspacing=&amp;#039;0&amp;#039; class=&amp;#039;wikitable sortable jquery-tablesorter&amp;#039; style=&amp;#039;text-align:center; vertical-align:middle;&amp;#039;&amp;gt;&amp;quot;&lt;br /&gt;
	wt[#wt+1] = row(frame, true)&lt;br /&gt;
	for _,item_name in ipairs(item_list) do&lt;br /&gt;
		wt[#wt+1] = row(UD.Utility[item_name])&lt;br /&gt;
	end&lt;br /&gt;
	wt[#wt+1] = &amp;quot;&amp;lt;/table&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return concat(wt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Tests&lt;br /&gt;
-- mw.log(p.draw_table({args={&amp;quot;Drink&amp;quot;}}))&lt;/div&gt;</summary>
		<author><name>AssassinOTP</name></author>
	</entry>
</feed>