<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://star-citizen.wiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3ASternensystemStruktur</id>
	<title>Modul:SternensystemStruktur - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://star-citizen.wiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3ASternensystemStruktur"/>
	<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:SternensystemStruktur&amp;action=history"/>
	<updated>2026-05-10T12:52:24Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Star Citizen Wiki</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://star-citizen.wiki/index.php?title=Modul:SternensystemStruktur&amp;diff=9253&amp;oldid=prev</id>
		<title>imported&gt;FoXFTW am 18. Januar 2022 um 21:38 Uhr</title>
		<link rel="alternate" type="text/html" href="https://star-citizen.wiki/index.php?title=Modul:SternensystemStruktur&amp;diff=9253&amp;oldid=prev"/>
		<updated>2022-01-18T21:38:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local SternensystemStruktur = {}&lt;br /&gt;
&lt;br /&gt;
local metatable = {}&lt;br /&gt;
local methodtable = {}&lt;br /&gt;
&lt;br /&gt;
metatable.__index = methodtable&lt;br /&gt;
&lt;br /&gt;
local starsystem = require( &amp;#039;Module:Sternensystem&amp;#039; )&lt;br /&gt;
local celestialObject = require( &amp;#039;Module:CelestialObject&amp;#039; )&lt;br /&gt;
local localized = require( &amp;#039;Module:Localized&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Walks a table in order&lt;br /&gt;
local function spairs( t, order )&lt;br /&gt;
    -- collect the keys&lt;br /&gt;
    local keys = {}&lt;br /&gt;
    for k in pairs(t) do keys[#keys+1] = k end&lt;br /&gt;
&lt;br /&gt;
    -- if order function given, sort by it by passing the table and keys a, b,&lt;br /&gt;
    -- otherwise just sort the keys&lt;br /&gt;
    if order then&lt;br /&gt;
        table.sort(keys, function(a,b) return order(t, a, b) end)&lt;br /&gt;
    else&lt;br /&gt;
        table.sort(keys)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- return the iterator function&lt;br /&gt;
    local i = 0&lt;br /&gt;
    return function()&lt;br /&gt;
        i = i + 1&lt;br /&gt;
        if keys[i] then&lt;br /&gt;
            return keys[i], t[keys[i]]&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Queries the SMW store for data of the current page name&lt;br /&gt;
function methodtable.getStarsystemData( t )&lt;br /&gt;
    if t.system ~= nil then&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local selector = t.pageName&lt;br /&gt;
&lt;br /&gt;
    if mw.getCurrentFrame():getParent().args.code then&lt;br /&gt;
        selector = &amp;#039;Starmap Code::&amp;#039; .. mw.getCurrentFrame():getParent().args.code&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local askData = celestialObject.getSmwBaseAskData()&lt;br /&gt;
    table.insert( askData, 1, &amp;#039;[[&amp;#039; .. selector .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    askData.mainlabel = &amp;#039;-&amp;#039;&lt;br /&gt;
    askData.limit = 1&lt;br /&gt;
&lt;br /&gt;
    local data = mw.smw.ask( askData )&lt;br /&gt;
&lt;br /&gt;
    if data ~= nil and data[ 1 ] ~= nil then&lt;br /&gt;
        t.system = data[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    error( &amp;#039;Could not get Starsystem data&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Queries the SMW store for the objects of the system&lt;br /&gt;
function methodtable.getCelestialObjects( t )&lt;br /&gt;
    local selector = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    if mw.getCurrentFrame():getParent().args.code == nil then&lt;br /&gt;
        selector = &amp;#039;[[-Has subobject::&amp;#039; .. t.pageName .. &amp;#039;]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
        if t.system.id ~= nil then&lt;br /&gt;
            selector = &amp;#039;&amp;lt;q&amp;gt;&amp;#039; .. selector .. &amp;#039;||[[Sternensystemid::&amp;#039; .. t.system.id .. &amp;#039;]]&amp;lt;/q&amp;gt;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
    elseif t.system.system_id ~= nil then&lt;br /&gt;
        selector = &amp;#039;[[Sternensystemid::&amp;#039; .. t.system.system_id .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local askData = celestialObject.getSmwBaseAskData()&lt;br /&gt;
    table.insert( askData, 1, selector .. &amp;#039;[[Starmap Code::+]]&amp;#039; )&lt;br /&gt;
    table.insert( askData, &amp;#039;sort=Typ,Bezeichnung&amp;#039; )&lt;br /&gt;
    table.insert( askData, &amp;#039;order=desc,asc&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    askData.mainlabel = &amp;#039;-&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    local data = mw.smw.ask( askData )&lt;br /&gt;
&lt;br /&gt;
    if data ~= nil and data[ 1 ] ~= nil then&lt;br /&gt;
        t.celestialObjects = data&lt;br /&gt;
&lt;br /&gt;
        return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    error( &amp;#039;Could not get Celestial Objects&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Filters from all celestial objects&lt;br /&gt;
--- those that have the upper most parent of &amp;#039;system.id&amp;#039;&lt;br /&gt;
--- @return table&lt;br /&gt;
function methodtable.filterCelestialObjects( t )&lt;br /&gt;
    local filtered = {}&lt;br /&gt;
&lt;br /&gt;
    local parentIds = {&lt;br /&gt;
        [ t.system.id ] = &amp;#039;&amp;#039;,&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for _, object in spairs( t.celestialObjects ) do&lt;br /&gt;
        if parentIds[ object.parent_id ] ~= nil then&lt;br /&gt;
            parentIds[ object.id ] = &amp;#039;&amp;#039;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for _, object in spairs( t.celestialObjects ) do&lt;br /&gt;
        if parentIds[ object.parent_id ] ~= nil then&lt;br /&gt;
            filtered[ object.id ] = object&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return filtered&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates the data structure&lt;br /&gt;
--- A &amp;quot;tree&amp;quot; that has the system as its root&lt;br /&gt;
function methodtable.createDataStructure( t )&lt;br /&gt;
    -- Maps object id to key in array&lt;br /&gt;
    local idMapping = {}&lt;br /&gt;
&lt;br /&gt;
	local ignoredTypes = {&lt;br /&gt;
		&amp;#039;STATE&amp;#039;,&lt;br /&gt;
		&amp;#039;TOWN&amp;#039;,&lt;br /&gt;
		&amp;#039;LANDINGZONE&amp;#039;,&lt;br /&gt;
		&amp;#039;STRUCTURE&amp;#039;,&lt;br /&gt;
		&amp;#039;SETTLEMENT&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local function continue( objectType )&lt;br /&gt;
		if mw.getCurrentFrame():getParent().args.code ~= nil then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		for _, ignored in pairs( ignoredTypes ) do&lt;br /&gt;
			if objectType == ignored then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    t.structure = {&lt;br /&gt;
        [ t.system.id ] = t.system&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    t.types[ t.system.type ] = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    t.structure[ t.system.id ].children = {}&lt;br /&gt;
&lt;br /&gt;
    for key, object in spairs( t.celestialObjects ) do&lt;br /&gt;
        idMapping[ tonumber(object.id) ] = key&lt;br /&gt;
        object.children = {}&lt;br /&gt;
&lt;br /&gt;
        if object.type ~= nil and continue( object.type ) then&lt;br /&gt;
            if t.types[ object.type ] == nil then&lt;br /&gt;
                t.types[ object.type ] = &amp;#039;&amp;#039;&lt;br /&gt;
            end&lt;br /&gt;
&lt;br /&gt;
            if object.id ~= nil and object.parent_id == nil or object.parent_id == t.system.id then&lt;br /&gt;
                if object.type == &amp;#039;JUMPPOINT&amp;#039; then&lt;br /&gt;
                    object.id = object.id + 10000 --hack&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                table.insert( t.structure[ t.system.id ].children, tonumber(object.id), object )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local function stratify( data )&lt;br /&gt;
        for _, object in pairs( data ) do&lt;br /&gt;
            if object.parent_id ~= nil then&lt;br /&gt;
                local parentEl = data[ idMapping[ tonumber(object.parent_id or object.system_id) ] ]&lt;br /&gt;
&lt;br /&gt;
                if parentEl ~= nil then&lt;br /&gt;
                    table.insert( parentEl.children, object.id, object )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    stratify( t.celestialObjects )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Makes a html entry&lt;br /&gt;
--- @param object table The current object from the list of smw entries&lt;br /&gt;
--- @param infoTable table The html table object&lt;br /&gt;
function methodtable.makeEntry( t, object, infoTable )&lt;br /&gt;
    local icon = &amp;#039;&amp;#039;&lt;br /&gt;
    if celestialObject.getIcon( object.type ) ~= nil then&lt;br /&gt;
        icon = string.format(&lt;br /&gt;
                &amp;#039;&amp;lt;span title=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
                celestialObject.reverseMapType( object.type ),&lt;br /&gt;
                celestialObject.getIcon( object.type )&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local text = celestialObject.getName( object.designation, true )&lt;br /&gt;
&lt;br /&gt;
    if object.name ~= nil and text ~= object.name then&lt;br /&gt;
        text = text .. &amp;#039;|&amp;#039; .. text .. &amp;#039;: &amp;#039; .. object.name&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if object.type == &amp;#039;STAR&amp;#039; or object.type == &amp;#039;BLACKHOLE&amp;#039; then&lt;br /&gt;
        local starPage = mw.title.new( object.designation, 0 )&lt;br /&gt;
&lt;br /&gt;
        if starPage.exists then&lt;br /&gt;
            if object.type == &amp;#039;STAR&amp;#039; then&lt;br /&gt;
                text = object.designation .. &amp;#039; (Stern)&amp;#039;&lt;br /&gt;
            else&lt;br /&gt;
                text = object.designation .. &amp;#039; (Schwarzes Loch)&amp;#039;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    text = &amp;#039;[[&amp;#039; .. text .. &amp;#039;]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    if object.type == &amp;#039;ASTEROID_BELT&amp;#039; or object.type == &amp;#039;ASTERPOD_FIELD&amp;#039; then&lt;br /&gt;
        text = object.designation&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if object.type == &amp;#039;JUMPPOINT&amp;#039; then&lt;br /&gt;
        local split = mw.text.split( object.designation, &amp;#039; - &amp;#039;, true )&lt;br /&gt;
&lt;br /&gt;
        text = &amp;#039;[[&amp;#039; .. starsystem.cleanJumppointDestination( split[ 2 ] ) .. &amp;#039;]]&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    infoTable = infoTable&lt;br /&gt;
            :tag( &amp;#039;div&amp;#039;, {parent = infoTable} )&lt;br /&gt;
            :addClass( &amp;#039;system-entry&amp;#039; )&lt;br /&gt;
            :addClass( &amp;#039;system-entry-&amp;#039; .. object.type )&lt;br /&gt;
            :tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
            :addClass( &amp;#039;system-entry-label&amp;#039; )&lt;br /&gt;
            :wikitext( icon .. &amp;#039; &amp;#039; .. text )&lt;br /&gt;
            :done()&lt;br /&gt;
&lt;br /&gt;
    if type( object.children ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
        for _, child in spairs( object.children ) do&lt;br /&gt;
            infoTable = t:makeEntry( child, infoTable )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoTable:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generates the html&lt;br /&gt;
--- @return string&lt;br /&gt;
function methodtable.makeHtml( t )&lt;br /&gt;
    local headText = t.pageName&lt;br /&gt;
&lt;br /&gt;
    if mw.getCurrentFrame():getParent().args.code then&lt;br /&gt;
        headText = t.system.designation or t.pageName&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local icon = string.format(&lt;br /&gt;
            &amp;#039;&amp;lt;span title=&amp;quot;%s&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
            celestialObject.reverseMapType( t.system.type ),&lt;br /&gt;
            celestialObject.getIcon( t.system.type )&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    local infoTable = mw.html.create( &amp;#039;div&amp;#039; )&lt;br /&gt;
                        :addClass( &amp;#039;system-wrapper&amp;#039; )&lt;br /&gt;
                        :addClass( &amp;#039;mw-collapsible mw-collapsed&amp;#039; )&lt;br /&gt;
                        :tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
                        :addClass( &amp;#039;system-label&amp;#039; )&lt;br /&gt;
                        :wikitext( icon .. &amp;#039; [[&amp;#039; .. headText .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
                        :done()&lt;br /&gt;
                        :tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
                        :addClass( &amp;#039;mw-collapsible-content&amp;#039; )&lt;br /&gt;
                        :addClass( &amp;#039;system-content&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    for _, object in spairs( t.structure[ t.system.id ].children ) do&lt;br /&gt;
        infoTable = t:makeEntry( object, infoTable )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    infoTable = infoTable&lt;br /&gt;
            :tag( &amp;#039;div&amp;#039;, {parent = infoTable} )&lt;br /&gt;
            :addClass( &amp;#039;system-entry&amp;#039; )&lt;br /&gt;
            :addClass( &amp;#039;system-entry-INFO&amp;#039; )&lt;br /&gt;
            :tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
            :addClass( &amp;#039;system-entry-label&amp;#039; )&lt;br /&gt;
            :addClass( &amp;#039;mw-customtoggle-legend&amp;#039; )&lt;br /&gt;
            :wikitext( &amp;#039;Legende&amp;#039; )&lt;br /&gt;
            :done()&lt;br /&gt;
            :tag( &amp;#039;div&amp;#039; )&lt;br /&gt;
            :attr( &amp;#039;id&amp;#039;, &amp;#039;mw-customcollapsible-legend&amp;#039; )&lt;br /&gt;
            :addClass( &amp;#039;mw-collapsible mw-collapsed&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
    for key, _ in pairs( t.types ) do&lt;br /&gt;
        local icon = &amp;#039;&amp;#039;&lt;br /&gt;
        local typeTranslation = key&lt;br /&gt;
&lt;br /&gt;
        if celestialObject.getIcon( key ) ~= nil then&lt;br /&gt;
            icon = celestialObject.getIcon( key )&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        if celestialObject.reverseMapType( key ) ~= nil then&lt;br /&gt;
            typeTranslation = celestialObject.reverseMapType( key )&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        infoTable = infoTable&lt;br /&gt;
                :tag( &amp;#039;span&amp;#039; )&lt;br /&gt;
                :addClass( &amp;#039;system-entry-label&amp;#039; )&lt;br /&gt;
                :wikitext( icon .. &amp;#039; &amp;#039; .. typeTranslation )&lt;br /&gt;
                :done()&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return infoTable:allDone()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Template call entry&lt;br /&gt;
function SternensystemStruktur.output()&lt;br /&gt;
    local instance = SternensystemStruktur:new()&lt;br /&gt;
&lt;br /&gt;
    if mw.getCurrentFrame():getParent().args.name ~= nil then&lt;br /&gt;
        instance.pageName = mw.getCurrentFrame():getParent().args.name&lt;br /&gt;
    else&lt;br /&gt;
        instance.pageName = localized.getMainTitle()&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    instance:getStarsystemData()&lt;br /&gt;
    instance:getCelestialObjects()&lt;br /&gt;
&lt;br /&gt;
    if mw.getCurrentFrame():getParent().args.code then&lt;br /&gt;
        instance.celestialObjects = instance:filterCelestialObjects( instance )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    instance:createDataStructure()&lt;br /&gt;
&lt;br /&gt;
    return tostring( instance:makeHtml() )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- New Instance&lt;br /&gt;
--- @return table CelestialObject&lt;br /&gt;
function SternensystemStruktur.new( self )&lt;br /&gt;
    local instance = {&lt;br /&gt;
        pageName = nil,&lt;br /&gt;
        system = nil,&lt;br /&gt;
        celestialObject = nil,&lt;br /&gt;
        structure = nil,&lt;br /&gt;
        types = {}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    setmetatable( instance, metatable )&lt;br /&gt;
&lt;br /&gt;
    return instance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return SternensystemStruktur&lt;/div&gt;</summary>
		<author><name>imported&gt;FoXFTW</name></author>
	</entry>
</feed>