<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.warexpand.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AUnitStats</id>
	<title>Module:UnitStats - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.warexpand.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AUnitStats"/>
	<link rel="alternate" type="text/html" href="https://wiki.warexpand.com/index.php?title=Module:UnitStats&amp;action=history"/>
	<updated>2026-08-20T06:59:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.warexpand.com/index.php?title=Module:UnitStats&amp;diff=3&amp;oldid=prev</id>
		<title>Admin: Seed from wiki/seed</title>
		<link rel="alternate" type="text/html" href="https://wiki.warexpand.com/index.php?title=Module:UnitStats&amp;diff=3&amp;oldid=prev"/>
		<updated>2026-08-19T17:41:28Z</updated>

		<summary type="html">&lt;p&gt;Seed from wiki/seed&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Renders unit statistics from [[Module:Data/Units]].&lt;br /&gt;
--&lt;br /&gt;
-- This module is hand-written. Module:Data/Units is generated by&lt;br /&gt;
-- scripts/export-wiki-data.cjs, which refuses to write anything outside the&lt;br /&gt;
-- Module:Data/ prefix, so this file is never overwritten by the export.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local data = mw.loadData( &amp;#039;Module:Data/Units&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local RESOURCES = { &amp;#039;money&amp;#039;, &amp;#039;food&amp;#039;, &amp;#039;metal&amp;#039;, &amp;#039;petrol&amp;#039;, &amp;#039;uranium&amp;#039; }&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;100 money, 20 metal&amp;quot;, or &amp;quot;free&amp;quot; when a unit costs nothing.&lt;br /&gt;
local function formatResources( bundle )&lt;br /&gt;
	if not bundle then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local parts = {}&lt;br /&gt;
	for _, name in ipairs( RESOURCES ) do&lt;br /&gt;
		local amount = bundle[name]&lt;br /&gt;
		if amount and amount &amp;gt; 0 then&lt;br /&gt;
			parts[#parts + 1] = string.format( &amp;#039;%s %s&amp;#039;, amount, name )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #parts == 0 then&lt;br /&gt;
		return &amp;#039;free&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( parts, &amp;#039;, &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Emits nothing at all for a missing value, so empty rows never show up.&lt;br /&gt;
local function row( label, value )&lt;br /&gt;
	if value == nil or value == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return string.format( &amp;#039;|-\n! %s\n| %s\n&amp;#039;, label, value )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Stat box for one tier of one unit.&lt;br /&gt;
-- Usage: {{#invoke:UnitStats|infobox|code=light_infantry|tier=1}}&lt;br /&gt;
function p.infobox( frame )&lt;br /&gt;
	local code = frame.args.code&lt;br /&gt;
	local tier = tonumber( frame.args.tier ) or 1&lt;br /&gt;
&lt;br /&gt;
	local unit = data[code]&lt;br /&gt;
	if not unit then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Unknown unit code: %s&amp;lt;/strong&amp;gt;&amp;#039;,&lt;br /&gt;
			tostring( code )&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local stats = unit.tiers[tier]&lt;br /&gt;
	if not stats then&lt;br /&gt;
		return string.format(&lt;br /&gt;
			&amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;%s has no tier %s&amp;lt;/strong&amp;gt;&amp;#039;,&lt;br /&gt;
			unit.name, tostring( tier )&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local cargo = ( stats.cargo_volume or 0 ) &amp;gt; 0 and stats.cargo_volume or nil&lt;br /&gt;
&lt;br /&gt;
	return table.concat( {&lt;br /&gt;
		&amp;#039;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right; margin:0 0 1em 1em; min-width:18em&amp;quot;\n&amp;#039;,&lt;br /&gt;
		string.format( &amp;#039;|+ %s &amp;amp;mdash; tier %d\n&amp;#039;, unit.name, tier ),&lt;br /&gt;
		row( &amp;#039;Domain&amp;#039;, unit.domain ),&lt;br /&gt;
		row( &amp;#039;Attack&amp;#039;, stats.attack ),&lt;br /&gt;
		row( &amp;#039;Defense&amp;#039;, stats.defense ),&lt;br /&gt;
		row( &amp;#039;Speed&amp;#039;, stats.speed ),&lt;br /&gt;
		row( &amp;#039;Range&amp;#039;, stats.range ),&lt;br /&gt;
		row( &amp;#039;Volume&amp;#039;, stats.volume ),&lt;br /&gt;
		row( &amp;#039;Cargo capacity&amp;#039;, cargo ),&lt;br /&gt;
		row( &amp;#039;Build time&amp;#039;, stats.build_time ),&lt;br /&gt;
		row( &amp;#039;Cost&amp;#039;, formatResources( stats.cost ) ),&lt;br /&gt;
		row( &amp;#039;Upkeep&amp;#039;, formatResources( stats.upkeep ) ),&lt;br /&gt;
		&amp;#039;|}&amp;#039;,&lt;br /&gt;
	} )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>