<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.infinf.info/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ASystem</id>
	<title>模块:System - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.infinf.info/index.php?action=history&amp;feed=atom&amp;title=%E6%A8%A1%E5%9D%97%3ASystem"/>
	<link rel="alternate" type="text/html" href="https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:System&amp;action=history"/>
	<updated>2026-04-15T10:34:03Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:System&amp;diff=1445&amp;oldid=prev</id>
		<title>9Yan：​创建页面，内容为“local System = {}  local Array = require( &#039;Module:Array&#039; ) local Starmap = require( &#039;Module:Starmap_old&#039; ) local Infobox = require( &#039;Module:InfoboxNeue&#039; ) local TNT = require( &#039;Module:Translate&#039; ):new() local config = mw.loadJsonData( &#039;Module:System/config.json&#039; )  local lang if config[ &#039;module_lang&#039; ] then 	lang = mw.getLanguage( config[ &#039;module_lang&#039; ] ) else 	lang = mw.getContentLanguage() end local langCode = lang:getCode()  --- Wrapper function for Module:…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.infinf.info/index.php?title=%E6%A8%A1%E5%9D%97:System&amp;diff=1445&amp;oldid=prev"/>
		<updated>2025-08-02T14:12:18Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“local System = {}  local Array = require( &amp;#039;Module:Array&amp;#039; ) local Starmap = require( &amp;#039;Module:Starmap_old&amp;#039; ) local Infobox = require( &amp;#039;Module:InfoboxNeue&amp;#039; ) local TNT = require( &amp;#039;Module:Translate&amp;#039; ):new() local config = mw.loadJsonData( &amp;#039;Module:System/config.json&amp;#039; )  local lang if config[ &amp;#039;module_lang&amp;#039; ] then 	lang = mw.getLanguage( config[ &amp;#039;module_lang&amp;#039; ] ) else 	lang = mw.getContentLanguage() end local langCode = lang:getCode()  --- Wrapper function for Module:…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local System = {}&lt;br /&gt;
&lt;br /&gt;
local Array = require( &amp;#039;Module:Array&amp;#039; )&lt;br /&gt;
local Starmap = require( &amp;#039;Module:Starmap_old&amp;#039; )&lt;br /&gt;
local Infobox = require( &amp;#039;Module:InfoboxNeue&amp;#039; )&lt;br /&gt;
local TNT = require( &amp;#039;Module:Translate&amp;#039; ):new()&lt;br /&gt;
local config = mw.loadJsonData( &amp;#039;Module:System/config.json&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local lang&lt;br /&gt;
if config[ &amp;#039;module_lang&amp;#039; ] then&lt;br /&gt;
	lang = mw.getLanguage( config[ &amp;#039;module_lang&amp;#039; ] )&lt;br /&gt;
else&lt;br /&gt;
	lang = mw.getContentLanguage()&lt;br /&gt;
end&lt;br /&gt;
local langCode = lang:getCode()&lt;br /&gt;
&lt;br /&gt;
--- Wrapper function for Module:Translate.translate&lt;br /&gt;
-- @param key string The translation key&lt;br /&gt;
-- @param addSuffix boolean Adds a language suffix if config.smw_multilingual_text is true&lt;br /&gt;
-- @return string If the key was not found in the .tab page, the key is returned&lt;br /&gt;
local function t( key, addSuffix, ... )&lt;br /&gt;
	return TNT:translate( &amp;#039;Module:System/i18n.json&amp;#039;, config, key, addSuffix, {...} ) or key&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Remove parentheses and their content&lt;br /&gt;
local function removeParentheses( inputString )&lt;br /&gt;
    return string.match( string.gsub( inputString, &amp;#039;%b()&amp;#039;, &amp;#039;&amp;#039; ), &amp;#039;^%s*(.*%S)&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Alternative for doing table[key][key], this returns nil instead of an error if it doesn&amp;#039;t exist&lt;br /&gt;
-- @param table object&lt;br /&gt;
local function e( object, ... )&lt;br /&gt;
	local value = object&lt;br /&gt;
	if not value then return end&lt;br /&gt;
	for _, key in ipairs( { ... } ) do&lt;br /&gt;
		value = value[ key ]&lt;br /&gt;
		if value == nil then return nil end&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Does string end with x&lt;br /&gt;
-- @param str string&lt;br /&gt;
-- @param suffix string&lt;br /&gt;
-- @return boolean&lt;br /&gt;
local function endsWith( str, suffix )&lt;br /&gt;
    return string.sub( str, -string.len( suffix ) ) == suffix&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Does string start with x&lt;br /&gt;
-- @param str string&lt;br /&gt;
-- @param prefix string&lt;br /&gt;
-- @return boolean&lt;br /&gt;
local function startsWith( str, prefix )&lt;br /&gt;
    return string.sub( str, 1, string.len( prefix ) ) == prefix&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Filter table&lt;br /&gt;
-- @param array table&lt;br /&gt;
-- @param key string&lt;br /&gt;
-- @param value any&lt;br /&gt;
-- @param zero any Value to return if zero matches&lt;br /&gt;
local function filter( array, key, value, zero )&lt;br /&gt;
	local matches = {}&lt;br /&gt;
	if array then&lt;br /&gt;
		for _, item in ipairs( array ) do&lt;br /&gt;
			if item[ key ] == value then&lt;br /&gt;
				table.insert( matches, item )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if zero and #matches == 0 then&lt;br /&gt;
		return zero&lt;br /&gt;
	else&lt;br /&gt;
		return matches&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Split a string with seperator&lt;br /&gt;
-- @param str string Input&lt;br /&gt;
-- @param sep string Seperator&lt;br /&gt;
local function split( str, sep )&lt;br /&gt;
	local matches = {}&lt;br /&gt;
	for str in string.gmatch( str, &amp;#039;([^&amp;#039; .. sep .. &amp;#039;]+)&amp;#039; ) do&lt;br /&gt;
		table.insert( matches, string.gsub( str, &amp;#039;%b()&amp;#039;, &amp;#039;&amp;#039; ) or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return matches&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- @param str string&lt;br /&gt;
local function trim( str )&lt;br /&gt;
    return string.match( str, &amp;#039;([^:%(%s]+)&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- If but inline&lt;br /&gt;
-- @param condition boolean&lt;br /&gt;
-- @param truthy any What to return if true&lt;br /&gt;
-- @param falsy any What to return if false&lt;br /&gt;
local function inlineIf( condition, truthy, falsy )&lt;br /&gt;
	if not not condition then return truthy else return falsy end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- @param categories table Plain text categories in array&lt;br /&gt;
local function convertCategories( categories )&lt;br /&gt;
	local mapped = {}&lt;br /&gt;
	for _, category in pairs( categories ) do&lt;br /&gt;
		if category ~= nil then&lt;br /&gt;
			if string.sub( category, 1, 2 ) ~= &amp;#039;[[&amp;#039; then&lt;br /&gt;
				category = string.format( &amp;#039;[[Category:%s]]&amp;#039;, category )&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			table.insert( mapped, category )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat( mapped )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Bypass for a bug&lt;br /&gt;
local function cuteArray( array )&lt;br /&gt;
	local newArray = {}&lt;br /&gt;
	for _, val in ipairs( array ) do &lt;br /&gt;
		table.insert( newArray, val )&lt;br /&gt;
	end&lt;br /&gt;
	return newArray&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- @param frame table https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Frame_object&lt;br /&gt;
function System.main( frame )&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local infobox = Infobox:new( { placeholderImage = config[ &amp;#039;placeholder_image&amp;#039; ] } )&lt;br /&gt;
	&lt;br /&gt;
	--- The idea of this mega table is to get all data, then set it in the infobox, better organization.&lt;br /&gt;
	local mega = {&lt;br /&gt;
		[ &amp;#039;image&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;name&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;#name&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;code&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;system&amp;#039; ] = {},&lt;br /&gt;
		[ &amp;#039;type&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;#type&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;size&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;#size&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;status&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;#status&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;system_objects&amp;#039; ] = {},&lt;br /&gt;
		[ &amp;#039;star_types&amp;#039; ] = {},&lt;br /&gt;
		[ &amp;#039;#star_types&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;affiliation&amp;#039; ] = {},&lt;br /&gt;
		[ &amp;#039;#affiliation&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;#population&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;planet_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;satellite_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;asteroid_belt_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;asteroid_field_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;anomaly_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;station_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;jumppoint_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;blackhole_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;poi_count&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;sensor_danger&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;sensor_economy&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;sensor_population&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;discovered_in&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;discovered_by&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;historical_names&amp;#039; ] = {},&lt;br /&gt;
		[ &amp;#039;#historical_names&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;starmap_link&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;starmap_id&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;cornerstone_link&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;verseguide_link&amp;#039; ] = nil,&lt;br /&gt;
		[ &amp;#039;categories&amp;#039; ] = {},&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	table.insert( mega[ &amp;#039;categories&amp;#039; ], &amp;#039;Systems&amp;#039; ) -- Default category for systems&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;image&amp;#039; ] = args[ &amp;#039;image&amp;#039; ]&lt;br /&gt;
	mega[ &amp;#039;name&amp;#039; ] = args[ &amp;#039;name&amp;#039; ]&lt;br /&gt;
	mega[ &amp;#039;code&amp;#039; ] = args[ &amp;#039;code&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;name&amp;#039; ] == nil and mega[ &amp;#039;code&amp;#039; ] == nil then&lt;br /&gt;
		return infobox:renderInfobox( infobox:renderMessage( { &lt;br /&gt;
			title = t( &amp;#039;error_title&amp;#039; ),&lt;br /&gt;
			desc = t( &amp;#039;error_invalid_args_desc&amp;#039; )&lt;br /&gt;
		} ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--- Trim &amp;#039;system&amp;#039; from the name&lt;br /&gt;
	if mega[ &amp;#039;name&amp;#039; ] ~= nil and endsWith( mega[ &amp;#039;name&amp;#039; ], &amp;#039;system&amp;#039; ) then&lt;br /&gt;
		mega[ &amp;#039;name&amp;#039; ] = trim( string.sub( mega[ &amp;#039;name&amp;#039; ], 1, -6 ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;system&amp;#039; ] = Starmap.findStructure( &amp;#039;system&amp;#039;, mega[ &amp;#039;code&amp;#039; ] or mega[ &amp;#039;name&amp;#039; ] ) or {}&lt;br /&gt;
	if mega[ &amp;#039;system&amp;#039; ] ~= nil then&lt;br /&gt;
		if mega[ &amp;#039;name&amp;#039; ] == nil then mega[ &amp;#039;name&amp;#039; ] = removeParentheses( mega[ &amp;#039;system&amp;#039; ][ &amp;#039;name&amp;#039; ] ) end&lt;br /&gt;
		mega[ &amp;#039;code&amp;#039; ] = mega[ &amp;#039;system&amp;#039; ][ &amp;#039;code&amp;#039; ]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;#name&amp;#039; ] = mega[ &amp;#039;name&amp;#039; ]&lt;br /&gt;
	--- Add &amp;#039; system&amp;#039; to end of `#name`&lt;br /&gt;
	if endsWith( mega[ &amp;#039;#name&amp;#039; ], &amp;#039; system&amp;#039; ) == false then&lt;br /&gt;
		mega[ &amp;#039;#name&amp;#039; ] = mega[ &amp;#039;#name&amp;#039; ] .. &amp;#039; system&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;type&amp;#039; ] = args[ &amp;#039;type&amp;#039; ] or mega[ &amp;#039;system&amp;#039; ][ &amp;#039;type&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;type&amp;#039; ] ~= nil then&lt;br /&gt;
		mega[ &amp;#039;#type&amp;#039; ] = t( &amp;#039;val_type_&amp;#039; .. string.lower( mega[ &amp;#039;type&amp;#039; ] ) )&lt;br /&gt;
		table.insert( mega[ &amp;#039;categories&amp;#039; ], mega[ &amp;#039;#type&amp;#039; ] .. &amp;#039; systems&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;size&amp;#039; ] = args[ &amp;#039;size&amp;#039; ] or mega[ &amp;#039;system&amp;#039; ][ &amp;#039;aggregated_size&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;size&amp;#039; ] ~= nil and tonumber( mega[ &amp;#039;size&amp;#039; ] ) then&lt;br /&gt;
		mega[ &amp;#039;size&amp;#039; ] = tonumber( mega[ &amp;#039;size&amp;#039; ] )&lt;br /&gt;
		mega[ &amp;#039;#size&amp;#039; ] = tostring( mega[ &amp;#039;size&amp;#039; ] ) .. &amp;#039; AU&amp;#039;&lt;br /&gt;
	else mega[ &amp;#039;#size&amp;#039; ] = &amp;#039;? AU&amp;#039; end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;status&amp;#039; ] = args[ &amp;#039;status&amp;#039; ] or mega[ &amp;#039;system&amp;#039; ][ &amp;#039;status&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;status&amp;#039; ] ~= nil then mega[ &amp;#039;#status&amp;#039; ] = t( &amp;#039;val_status_&amp;#039; .. string.lower( mega[ &amp;#039;status&amp;#039; ] ) ) end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;system_objects&amp;#039; ] = Starmap.systemObjects( mega[ &amp;#039;code&amp;#039; ] or mega[ &amp;#039;name&amp;#039; ] )&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;star_types&amp;#039; ] = args[ &amp;#039;startypes&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;star_types&amp;#039; ] then&lt;br /&gt;
		mega[ &amp;#039;star_types&amp;#039; ] = split( mega[ &amp;#039;star_types&amp;#039; ], &amp;#039;,&amp;#039; )&lt;br /&gt;
	elseif mega[ &amp;#039;system_objects&amp;#039; ] then&lt;br /&gt;
		mega[ &amp;#039;star_types&amp;#039; ] = {}&lt;br /&gt;
		for _, star in ipairs( filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;STAR&amp;#039; ) ) do&lt;br /&gt;
			if star[ &amp;#039;subtype&amp;#039; ] then&lt;br /&gt;
				table.insert( mega[ &amp;#039;star_types&amp;#039; ], config[ &amp;#039;subtype_rename&amp;#039; ][ star[ &amp;#039;subtype&amp;#039; ][ &amp;#039;name&amp;#039; ] ] or star[ &amp;#039;subtype&amp;#039; ][ &amp;#039;name&amp;#039; ] )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		mega[ &amp;#039;star_types&amp;#039; ] = {} -- Revert back to default&lt;br /&gt;
	end&lt;br /&gt;
	mega[ &amp;#039;#star_types&amp;#039; ] = table.concat( mega[ &amp;#039;star_types&amp;#039; ], &amp;#039;, &amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	if args[ &amp;#039;affiliation&amp;#039; ] then&lt;br /&gt;
		mega[ &amp;#039;affiliation&amp;#039; ] = split( args[ &amp;#039;affiliation&amp;#039; ], &amp;#039;,&amp;#039; )&lt;br /&gt;
	elseif e( mega, &amp;#039;system&amp;#039;, &amp;#039;affiliation&amp;#039; ) ~= nil then&lt;br /&gt;
		mega[ &amp;#039;affiliation&amp;#039; ] = {}&lt;br /&gt;
		for _, empire in ipairs( mega[ &amp;#039;system&amp;#039; ][ &amp;#039;affiliation&amp;#039; ] ) do&lt;br /&gt;
			table.insert( mega[ &amp;#039;affiliation&amp;#039; ], t( &amp;#039;val_affiliation_&amp;#039; .. string.lower( empire[ &amp;#039;code&amp;#039; ] ) ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if mega[ &amp;#039;affiliation&amp;#039; ][ 1 ] then table.insert( mega[ &amp;#039;categories&amp;#039; ], mega[ &amp;#039;affiliation&amp;#039; ][ 1 ] .. &amp;#039; systems&amp;#039; ) end&lt;br /&gt;
	mega[ &amp;#039;#affiliation&amp;#039; ] = {}&lt;br /&gt;
	for _, name in ipairs( mega[ &amp;#039;affiliation&amp;#039; ] ) do&lt;br /&gt;
		table.insert( mega[ &amp;#039;#affiliation&amp;#039; ], string.format( &amp;#039;[[%s]]&amp;#039;, name ) )&lt;br /&gt;
	end&lt;br /&gt;
	mega[ &amp;#039;#affiliation&amp;#039; ] = table.concat( mega[ &amp;#039;#affiliation&amp;#039; ], &amp;#039;, &amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;#population&amp;#039; ] = args[ &amp;#039;population&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;planet_count&amp;#039; ] = args[ &amp;#039;planets&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;PLANET&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;satellite_count&amp;#039; ] = args[ &amp;#039;satellites&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;SATELLITE&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;asteroid_belt_count&amp;#039; ] = args[ &amp;#039;asteroidbelts&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;ASTEROID_BELT&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;asteroid_fields_count&amp;#039; ] = args[ &amp;#039;asteroidfields&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;ASTEROID_FIELDS&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;anomaly_count&amp;#039; ] = args[ &amp;#039;anomalies&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;ANOMALY&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;station_count&amp;#039; ] = args[ &amp;#039;stations&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;MANMADE&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;jumppoint_count&amp;#039; ] = args[ &amp;#039;jumppoints&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;JUMPPOINT&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;blackholes_count&amp;#039; ] = args[ &amp;#039;blackholes&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;BLACKHOLE&amp;#039;, nil )&lt;br /&gt;
	mega[ &amp;#039;poi_count&amp;#039; ] = args[ &amp;#039;pois&amp;#039; ] or #filter( mega[ &amp;#039;system_objects&amp;#039; ], &amp;#039;type&amp;#039;, &amp;#039;POI&amp;#039;, nil )&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;sensor_danger&amp;#039; ] = args[ &amp;#039;sensordanger&amp;#039; ] or e( mega[ &amp;#039;system&amp;#039; ][ &amp;#039;aggregated_danger&amp;#039; ] )&lt;br /&gt;
	if mega[ &amp;#039;sensor_danger&amp;#039; ] ~= nil and mega[ &amp;#039;sensor_danger&amp;#039; ] ~= 0 then&lt;br /&gt;
		mega[ &amp;#039;sensor_danger&amp;#039; ] = tonumber( mega[ &amp;#039;sensor_danger&amp;#039; ] )&lt;br /&gt;
		mega[ &amp;#039;#sensor_danger&amp;#039; ] = tostring( mega[ &amp;#039;sensor_danger&amp;#039; ] ) .. &amp;#039;/10&amp;#039;&lt;br /&gt;
	else mega[ &amp;#039;sensor_danger&amp;#039; ] = nil end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;sensor_economy&amp;#039; ] = args[ &amp;#039;sensoreconomy&amp;#039; ] or e( mega[ &amp;#039;system&amp;#039; ][ &amp;#039;aggregated_economy&amp;#039; ] )&lt;br /&gt;
	if mega[ &amp;#039;sensor_economy&amp;#039; ] ~= nil and mega[ &amp;#039;sensor_economy&amp;#039; ] ~= 0 then&lt;br /&gt;
		mega[ &amp;#039;sensor_economy&amp;#039; ] = tonumber( mega[ &amp;#039;sensor_economy&amp;#039; ] )&lt;br /&gt;
		mega[ &amp;#039;#sensor_economy&amp;#039; ] = tostring( mega[ &amp;#039;sensor_economy&amp;#039; ] ) .. &amp;#039;/10&amp;#039;&lt;br /&gt;
	else mega[ &amp;#039;sensor_danger&amp;#039; ] = nil end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;sensor_population&amp;#039; ] = args[ &amp;#039;sensorpopulation&amp;#039; ] or e( mega[ &amp;#039;system&amp;#039; ][ &amp;#039;aggregated_population&amp;#039; ] )&lt;br /&gt;
	if mega[ &amp;#039;sensor_population&amp;#039; ] ~= nil and mega[ &amp;#039;sensor_population&amp;#039; ] ~= 0 then&lt;br /&gt;
		mega[ &amp;#039;sensor_population&amp;#039; ] = tonumber( mega[ &amp;#039;sensor_population&amp;#039; ] )&lt;br /&gt;
		mega[ &amp;#039;#sensor_population&amp;#039; ] = tostring( mega[ &amp;#039;sensor_population&amp;#039; ] ) .. &amp;#039;/10&amp;#039;&lt;br /&gt;
	else mega[ &amp;#039;sensor_population&amp;#039; ] = nil end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;discovered_in&amp;#039; ] = args[ &amp;#039;discoveredin&amp;#039; ]&lt;br /&gt;
	mega[ &amp;#039;discovered_by&amp;#039; ] = args[ &amp;#039;discoveredby&amp;#039; ]&lt;br /&gt;
	mega[ &amp;#039;historical_names&amp;#039; ] = args[ &amp;#039;historicalnames&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;historical_names&amp;#039; ] then&lt;br /&gt;
		mega[ &amp;#039;historical_names&amp;#039; ] = split( mega[ &amp;#039;historical_names&amp;#039; ], &amp;#039;,&amp;#039; )&lt;br /&gt;
		mega[ &amp;#039;#historical_names&amp;#039; ] = table.concat( mega[ &amp;#039;historical_names&amp;#039; ], &amp;#039;, &amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		mega[ &amp;#039;historical_names&amp;#039; ] = {} -- Revert back to default&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mega[ &amp;#039;starmap_link&amp;#039; ] = args[ &amp;#039;starmap&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;starmap_link&amp;#039; ] == nil and mega[ &amp;#039;code&amp;#039; ] then mega[ &amp;#039;starmap_link&amp;#039; ] = Starmap.link( mega[ &amp;#039;code&amp;#039; ] ) end&lt;br /&gt;
	mega[ &amp;#039;starmap_id&amp;#039; ] = e( mega, &amp;#039;system&amp;#039;, &amp;#039;id&amp;#039; )&lt;br /&gt;
	mega[ &amp;#039;cornerstone_link&amp;#039; ] = args[ &amp;#039;cornerstone&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;cornerstone_link&amp;#039; ] == nil and Array.contains( cuteArray( config[ &amp;#039;cornerstone_systems&amp;#039; ] ), mega[ &amp;#039;code&amp;#039; ] ) then mega[ &amp;#039;cornerstone_link&amp;#039; ] = string.format( config[ &amp;#039;cornerstone&amp;#039; ], mega[ &amp;#039;name&amp;#039; ] ) end&lt;br /&gt;
	mega[ &amp;#039;verseguide_link&amp;#039; ] = args[ &amp;#039;verseguide&amp;#039; ]&lt;br /&gt;
	if mega[ &amp;#039;verseguide_link&amp;#039; ] == nil and Array.contains( cuteArray( config[ &amp;#039;verseguide_systems&amp;#039; ] ), mega[ &amp;#039;code&amp;#039; ] ) then mega[ &amp;#039;verseguide_link&amp;#039; ] = string.format( config[ &amp;#039;verseguide&amp;#039; ], string.upper( mega[ &amp;#039;name&amp;#039; ] ) ) end&lt;br /&gt;
	&lt;br /&gt;
	infobox:renderImage( mega[ &amp;#039;image&amp;#039; ] )&lt;br /&gt;
	infobox:renderHeader( {&lt;br /&gt;
		title = mega[ &amp;#039;#name&amp;#039; ],&lt;br /&gt;
		subtitle = mega[ &amp;#039;#affiliation&amp;#039; ]&lt;br /&gt;
	} )&lt;br /&gt;
	infobox:renderSection( {&lt;br /&gt;
		content = {&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_type&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;#type&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_size&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;#size&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_status&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;#status&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = inlineIf( #mega[ &amp;#039;star_types&amp;#039; ] == 1, t( &amp;#039;lbl_star_type&amp;#039; ), t( &amp;#039;lbl_star_types&amp;#039; ) ),&lt;br /&gt;
				data = mega[ &amp;#039;#star_types&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_population&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;#population&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
		},&lt;br /&gt;
		col = 2&lt;br /&gt;
	} )&lt;br /&gt;
	infobox:renderSection( {&lt;br /&gt;
		title = t( &amp;#039;lbl_astronomical_objects&amp;#039; ),&lt;br /&gt;
		content = {&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_planets&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;planet_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;planet_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_satellites&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;satellite_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;satellite_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_asteroid_belts&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;asteroid_belt_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;asteroid_belt_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_asteroid_fields&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;asteroid_field_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;asteroid_field_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_anomalies&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;anomaly_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;anomaly_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_stations&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;station_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;station_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_jump_points&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;jumppoint_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;jumppoint_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_blackholes&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;blackhole_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;blackhole_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_pois&amp;#039; ),&lt;br /&gt;
				data = inlineIf( (mega[ &amp;#039;poi_count&amp;#039; ] or nil) ~= 0, mega[ &amp;#039;poi_count&amp;#039; ] or nil, nil )&lt;br /&gt;
			} )&lt;br /&gt;
		},&lt;br /&gt;
		col = 3&lt;br /&gt;
	} )&lt;br /&gt;
	if mega[ &amp;#039;sensor_danger&amp;#039; ] ~= 0 and mega[ &amp;#039;sensor_economy&amp;#039; ] ~= 0 and mega[ &amp;#039;sensor_population&amp;#039; ] ~= 0 then&lt;br /&gt;
		infobox:renderSection( {&lt;br /&gt;
			title = t( &amp;#039;lbl_sensors&amp;#039; ),&lt;br /&gt;
			content = {&lt;br /&gt;
				infobox:renderItem( {&lt;br /&gt;
					label = t( &amp;#039;lbl_sensor_danger&amp;#039; ),&lt;br /&gt;
					data = mega[ &amp;#039;#sensor_danger&amp;#039; ]&lt;br /&gt;
				} ),&lt;br /&gt;
				infobox:renderItem( {&lt;br /&gt;
					label = t( &amp;#039;lbl_sensor_economy&amp;#039; ),&lt;br /&gt;
					data = mega[ &amp;#039;#sensor_economy&amp;#039; ]&lt;br /&gt;
				} ),&lt;br /&gt;
				infobox:renderItem( {&lt;br /&gt;
					label = t( &amp;#039;lbl_sensor_population&amp;#039; ),&lt;br /&gt;
					data = mega[ &amp;#039;#sensor_population&amp;#039; ]&lt;br /&gt;
				} )&lt;br /&gt;
			},&lt;br /&gt;
			col = 3&lt;br /&gt;
		} )&lt;br /&gt;
	end&lt;br /&gt;
	infobox:renderSection( {&lt;br /&gt;
		title = t( &amp;#039;lbl_history&amp;#039; ),&lt;br /&gt;
		content = {&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_discovered_in&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;discovered_in&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_discovered_by&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;discovered_by&amp;#039; ],&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = inlineIf( #mega[ &amp;#039;historical_names&amp;#039; ] == 1, t( &amp;#039;lbl_historical_name&amp;#039; ), t( &amp;#039;lbl_historical_names&amp;#039; ) ),&lt;br /&gt;
				data = mega[ &amp;#039;#historical_names&amp;#039; ],&lt;br /&gt;
			} )&lt;br /&gt;
		},&lt;br /&gt;
		col = 2&lt;br /&gt;
	} )&lt;br /&gt;
	infobox:renderSection( {&lt;br /&gt;
		class = &amp;#039;infobox__section--metadata infobox__section--hasBackground&amp;#039;,&lt;br /&gt;
		content = {&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_starmap_id&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;starmap_id&amp;#039; ],&lt;br /&gt;
				row = true,&lt;br /&gt;
				spacebetween = true&lt;br /&gt;
			} ),&lt;br /&gt;
			infobox:renderItem( {&lt;br /&gt;
				label = t( &amp;#039;lbl_starmap_code&amp;#039; ),&lt;br /&gt;
				data = mega[ &amp;#039;code&amp;#039; ],&lt;br /&gt;
				row = true,&lt;br /&gt;
				spacebetween = true&lt;br /&gt;
			} ),&lt;br /&gt;
		}&lt;br /&gt;
	} )&lt;br /&gt;
	infobox:renderFooter( {&lt;br /&gt;
		button = {&lt;br /&gt;
			icon = &amp;#039;WikimediaUI-Globe.svg&amp;#039;,&lt;br /&gt;
			label = t( &amp;#039;lbl_other_sites&amp;#039; ),&lt;br /&gt;
			type = &amp;#039;popup&amp;#039;,&lt;br /&gt;
			content = infobox:renderSection( {&lt;br /&gt;
				content = {&lt;br /&gt;
					infobox:renderItem( {&lt;br /&gt;
						label = t( &amp;#039;lbl_official_sites&amp;#039; ),&lt;br /&gt;
						data = infobox:renderLinkButton( {&lt;br /&gt;
							label = t( &amp;#039;lbl_starmap&amp;#039; ),&lt;br /&gt;
							link = mega[ &amp;#039;starmap_link&amp;#039; ]&lt;br /&gt;
						} )&lt;br /&gt;
					} ),&lt;br /&gt;
					infobox:renderItem( {&lt;br /&gt;
						label = t( &amp;#039;lbl_community_sites&amp;#039; ),&lt;br /&gt;
						data = infobox:renderLinkButton( {&lt;br /&gt;
							label = t( &amp;#039;lbl_cornerstone&amp;#039; ),&lt;br /&gt;
							link = mega[ &amp;#039;cornerstone_link&amp;#039; ]&lt;br /&gt;
						} ) .. infobox:renderLinkButton( {&lt;br /&gt;
							label = t( &amp;#039;lbl_verseguide&amp;#039; ),&lt;br /&gt;
							link = mega[ &amp;#039;verseguide_link&amp;#039; ]&lt;br /&gt;
						} )&lt;br /&gt;
					} ),&lt;br /&gt;
				},&lt;br /&gt;
				class = &amp;#039;infobox__section--linkButtons&amp;#039;,&lt;br /&gt;
			}, true )&lt;br /&gt;
		}&lt;br /&gt;
	} )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	mw.smw.set( {&lt;br /&gt;
		[ t( &amp;#039;lbl_starmap_id&amp;#039; ) ] = mega[ &amp;#039;starmap_id&amp;#039; ],&lt;br /&gt;
		[ t( &amp;#039;lbl_starmap_code&amp;#039; ) ] = mega[ &amp;#039;code&amp;#039; ],&lt;br /&gt;
		[ t( &amp;#039;lbl_system_type&amp;#039; ) ] = mega[ &amp;#039;type&amp;#039; ],&lt;br /&gt;
		[ t( &amp;#039;lbl_system_size&amp;#039; ) ] = mega[ &amp;#039;size&amp;#039; ],&lt;br /&gt;
		[ t( &amp;#039;lbl_system_status&amp;#039; ) ] = mega[ &amp;#039;status&amp;#039; ],&lt;br /&gt;
		[ t( &amp;#039;lbl_star_type&amp;#039; ) ] = mega[ &amp;#039;star_types&amp;#039; ]&lt;br /&gt;
	} )&lt;br /&gt;
&lt;br /&gt;
	if mega[ &amp;#039;planet_count&amp;#039; ] ~= nil and mega[ &amp;#039;planet_count&amp;#039; ] ~= 0 and mega[ &amp;#039;#type&amp;#039; ] ~= nil then&lt;br /&gt;
		frame:callParserFunction( &amp;#039;SHORTDESC&amp;#039;, string.format( &lt;br /&gt;
			inlineIf( mega[ &amp;#039;planet_count&amp;#039; ] == 1, t( &amp;#039;shortdesc_1_singular&amp;#039; ), t( &amp;#039;shortdesc_1_plural&amp;#039; ) ), &lt;br /&gt;
			string.gsub( string.lower( mega[ &amp;#039;#type&amp;#039; ] ), &amp;#039;^%l&amp;#039;, string.upper ),&lt;br /&gt;
			mega[ &amp;#039;planet_count&amp;#039; ]&lt;br /&gt;
		) )&lt;br /&gt;
	elseif (mega[ &amp;#039;planet_count&amp;#039; ] == nil or mega[ &amp;#039;planet_count&amp;#039; ] == 0) and mega[ &amp;#039;#type&amp;#039; ] ~= nil then&lt;br /&gt;
		frame:callParserFunction( &amp;#039;SHORTDESC&amp;#039;, string.format( &lt;br /&gt;
			t( &amp;#039;shortdesc_2&amp;#039; ),&lt;br /&gt;
			string.gsub( string.lower( mega[ &amp;#039;#type&amp;#039; ] ), &amp;#039;^%l&amp;#039;, string.upper )&lt;br /&gt;
		) )&lt;br /&gt;
	elseif mega[ &amp;#039;planet_count&amp;#039; ] ~= nil and mega[ &amp;#039;planet_count&amp;#039; ] ~= 0 then&lt;br /&gt;
		frame:callParserFunction( &amp;#039;SHORTDESC&amp;#039;, string.format( &lt;br /&gt;
			inlineIf( mega[ &amp;#039;planet_count&amp;#039; ] == 1, t( &amp;#039;shortdesc_3_singular&amp;#039; ), t( &amp;#039;shortdesc_3_plural&amp;#039; ) ), &lt;br /&gt;
			mega[ &amp;#039;planet_count&amp;#039; ]&lt;br /&gt;
		) )&lt;br /&gt;
	else frame:callParserFunction( &amp;#039;SHORTDESC&amp;#039;, t( &amp;#039;shortdesc_4&amp;#039; ) ) end&lt;br /&gt;
&lt;br /&gt;
	return tostring( infobox:renderInfobox( nil, mega[ &amp;#039;#name&amp;#039; ] ) ) .. convertCategories( mega[ &amp;#039;categories&amp;#039; ] )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function System.test( name )&lt;br /&gt;
	if not name then name = &amp;#039;Stanton&amp;#039; end -- System and Star&lt;br /&gt;
	System.main( { [ &amp;#039;getParent&amp;#039; ] = function() return { [ &amp;#039;args&amp;#039; ] = { [ &amp;#039;name&amp;#039; ] = name } } end } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return System&lt;/div&gt;</summary>
		<author><name>9Yan</name></author>
	</entry>
</feed>