Module:UŊMAO

From Nguhcraft Wiki
Revision as of 22:58, 17 February 2026 by Annwan (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Functions for the UŊMAO page


local def, _a, find do local u = require("Module:Utils") def, _a, find = u.def, u._a, u.find end
local data = mw.loadJsonData "Data:UŊMAO"
local places = require "Module:Places"
local c = data.currencies
local r = data.resources
local _m = {}


local function formatval(v)
	if type(v) ~= "number" then return v end
	return string.format("%.6f", v)
end

local function get_nval(code)
	local _, c_data = find(c, "code", code)
	if not c_data then return nil end
	if c_data.n_val then return c_data.n_val end
	local _, r_data = find(r, "code", c_data.backing)
	if not r_data then return nil end
	return r_data.n_val * c_data.b_val
end

local function place_of(code)
	local _, v = find(c, "code", code)
	if not v.place_override then return (places.get(v.code:sub(1, 2)) or {common_name = "???"}).common_name
	elseif v.code:sub(1,1) == "X" then return v.place_override
	else return places.get(v.place_override).common_name
	end
end

_m.resource_table = function(frame)
	local out = [=[<table class="wikitable sortable"><tr><th>Code</th><th>Resource</th><th>Value (in [[slablet]]s)</th><th>Traded at the [[Slab Exchange]]</th></tr>]=]
	for _, v in ipairs(r) do
		out = out .. "<tr><td>"
		out = out .. v.code 
		out = out .. "</td><td>"
		out = out .. v.name
		out = out .. "</td><td>"
		out = out .. formatval(v.n_val)
		out = out  .. "</td><td>"
		out = out  .. (v.sxg and "yes" or "no")
		out = out  .. "</td></tr>"
	end
	out = out .. "</table>"
	return out
end


_m.current_currencies = function(frame)
	local out = [=[<table class="wikitable sortable"><tr><th>Code</th><th>Place</th><th>Name</th><th>Backing</th><th>Value (in the <abbr title="Backing Resource">B.R.</abbr>)</th><th>Value (in [[slablet]]s)</th></tr>]=]
	for _, v in ipairs(c) do
		if not v.discontinued then
			local backing_fmt, b_val_fmt
			if v.backing == "___" then
				backing_fmt = "Mixed"
				b_val_fmt = "N/A"
			else
				_, backing_data = find(r, "code", v.backing)
				if backing_data then backing_fmt = [[<abbr title="]] .. backing_data.name .. [[">]] .. v.backing .. "</abbr>"
				else backing_fmt = v.backing
				end
				b_val_fmt = formatval(v.b_val)
			end
			out = out ..
				"<tr><td>" .. v.code ..
				"</td><td>[[" .. place_of(v.code) ..
				"]]</td><td>[[" .. v.name ..
				"]]</td><td>" .. backing_fmt ..
				"</td><td>" .. b_val_fmt ..
				"</td><td>" .. formatval(get_nval(v.code)) ..
				"</td></tr>"
		end
	end
	return out .. "</table>"
end

_m.withdrawn_currencies = function(frame)
	local out = [=[<table class="wikitable sortable"><tr><th>Code</th><th>Place</th><th>Name</th><th>Backing</th><th>Value (in the <abbr title="Backing Resource">B.R.</abbr>)</th><th>Value (in [[slablet]]s) at the time of withdrawal</th><th>Reason for withdrawal</th></tr>]=]
	for _, v in ipairs(c) do
		if v.discontinued then
			local backing_fmt, b_val_fmt
			if v.backing == "___" then
				backing_fmt = "Mixed"
				b_val_fmt = "N/A"
			else
				_, backing_data = find(r, "code", v.backing)
				if backing_data then backing_fmt = [[<abbr title="]] .. backing_data.name .. [[">]] .. v.backing .. "</abbr>"
				else backing_fmt = v.backing
				end
				b_val_fmt = formatval(v.b_val)
			end
			out = out ..
				"<tr><td>" .. v.code ..
				"</td><td>[[" .. place_of(v.code) ..
				"]]</td><td>[[" .. v.name ..
				"]]</td><td>" .. backing_fmt ..
				"</td><td>" .. b_val_fmt ..
				"</td><td>" .. formatval(v.n_val) ..
				"</td><td>" .. tostring(v.discontinued) ..
				"</td></tr>"
		end
	end
	return out .. "</table>"
end

_m.curency_map = function(frame)
	out = [=[<table class="wikitable"><tr><td>TO →</br>↓ FROM</td>]=]
	for _, v in ipairs(c) do if not v.discontinued then
		out = out .. "<th><abbr title=\"" .. v.name .. " (" .. place_of(v.code) .. ")\">" .. v.code .. "</abbr></th>"
	end end
	out = out .. "</tr>"
	for _, vf in ipairs(c) do if not vf.discontinued then
		out = out .. "<tr><th><abbr title=\"" .. vf.name .. " (" .. place_of(vf.code) .. ")\">" .. vf.code .. "</abbr></th>"
		for _, vt in ipairs(c) do if not vt.discontinued then
			out = out .. "<td>" .. formatval(get_nval(vf.code)/get_nval(vt.code)) .. "</td>"
		end end
		out = out .. "</tr>"
	end end
	return out
end
return _m