Modul:Planet

Aus Star Citizen Wiki

Die Dokumentation für dieses Modul kann unter Modul:Planet/Doku erstellt werden

local Planet = {}

-- Vars
local currentFrame
local frameArgs

local pageName

local categories = {}

-- Extensions
local capiunto = require 'capiunto'
local common = require( 'Module:Common' )

local function starsystemName()
    -- This needs to be reworked if a system name has a space in it
    local page = mw.text.split( pageName, ' ', true )

    return page[ 1 ]
end

local function sortKey()
    -- This needs to be reworked if a system name has a space in it
    local page = mw.text.split( pageName, ' ', true )

    return page[ 2 ]
end

local function addCategory()
    if mw.title.getCurrentTitle().namespace ~= 0 then
        return
    end

	table.insert( categories, '[[Category:Planet]]' )

    local page = starsystemName()
    
    local category = mw.title.new( page .. ' (Sternensystem)', 14 )

    if category.exists then
        table.insert( categories, '[[Category:' .. category.text .. '|' .. sortKey() .. ']]' )
    else
        table.insert( categories, '[[Category:' .. page .. '|' .. sortKey() .. ']]' )
    end
end

-- Semantic Properties
local function setSemanticProperties()
    if mw.title.getCurrentTitle().namespace ~= 0 then
        return
    end

    -- Can't set data without args
    if frameArgs == nil then
        return
    end

    local function orbitalPeriod()
        if frameArgs[ 'orbital_period' ] ~= nil then
            return frameArgs[ 'orbital_period' ] .. ' SET'
        end

        return nil
    end

    local function planetSize()
        if frameArgs[ 'planet_size' ] ~= nil then
            return frameArgs[ 'planet_size' ] .. ' km'
        end

        return nil
    end

    local setData = {
        [ 'Sternensystem' ] = starsystemName(),
        [ 'Umlaufzeit' ] = orbitalPeriod(),
        
        [ 'Planetgröße' ] = planetSize(),
        [ 'Planettyp' ] = Planet.parseType( frameArgs[ 'planet_type' ] ),
        
        [ 'Bevölkerungsgröße' ] = frameArgs[ 'population_size' ] or nil,
        [ 'Habitabel' ] = frameArgs[ 'habitable' ] or nil,
    }

    common.checkSmwResult( mw.smw.set( setData ) )
end

local function getImage()
    if frameArgs == nil then
        return
    end

    local fileName = 'Datei:PMO_'

    if frameArgs[ 'texture' ] == nil then
        fileName = fileName .. 'Textur Platzhalter.png'
        table.insert( categories, '[[Category:Planet mit fehlender Textur]]' )
    else
        fileName = fileName .. frameArgs[ 'texture' ] .. 'textur'
    end

    if frameArgs[ 'texture_version' ] ~= nil then
        fileName = fileName .. '_' .. frameArgs[ 'texture_version' ]
    end

    fileName = fileName .. '.jpg'

    local file = mw.title.new( fileName, 6 )

    if not file.exists then
        table.insert( categories, [[Category:Planet mit fehlerhafter Textur]] )
    else
        return currentFrame:callParserFunction{
            name = '#shape_viewer:',
            args = {
                file = file.text,
                rotation_speed_y = '0.01',
                clear_color = '#eaecf0',
                background_opacity = '1',
                camera_position_z = '11',
                resolution = 'square250',
            },
        }
    end
end

local function getInfoBox()
    if frameArgs == nil then
        return 'Frame is missing'
    end

    local commonData = {
        import = 'Import',
        export = 'Export',
        planet_size = 'Größe',
        planet_type = 'Typ',
        population_size = 'Bevölkerung',
        orbital_period = 'Umlaufzeit',
    }

    local smwAskData = {
        planet_size = 'Planetgröße',
        planet_type = 'Planettyp',
        population_size = 'Bevölkerungsgröße',
        orbital_period = 'Umlaufzeit',
    }

    local cleanTitle = pageName

    if cleanTitle == nil then
        cleanTitle = common.removeTypeSuffix( mw.title.getCurrentTitle().subpageText, 'Planet' )
    end

    local infoBox = capiunto.create( {
        title = cleanTitle,
        top = frameArgs[ 'name' ],
        bodyClass = 'wikitable',
    } )

    -- Image
    local image = getImage()

    if image ~= nil then
        infoBox:addHeader( image, 'vehicle-image' )
    end

    for k, v in pairs( commonData ) do
        if frameArgs[ k ] ~= nil then
            if smwAskData[ k ] ~= nil then
                infoBox:addRow( v, currentFrame:preprocess( '{{#show: {{FULLPAGENAME}} |?' .. smwAskData[ k ] .. '}}' ) )
            else
                infoBox:addRow( v, frameArgs[ k ] )
            end
        end
    end

    local landingZones = currentFrame:preprocess( '{{#ask:[[Kategorie:' .. mw.title.getCurrentTitle().subpageText .. ']][[:+]][[Kategorie:Landezone]]|sep=<br>}}' )
    local spaceStations = currentFrame:preprocess( '{{#ask:[[Kategorie:' .. mw.title.getCurrentTitle().subpageText .. ']][[:+]][[Kategorie:Raumstation]]|sep=<br>}}' )
    local towns = currentFrame:preprocess( '{{#ask:[[Kategorie:' .. mw.title.getCurrentTitle().subpageText .. ']][[:+]][[Kategorie:Stadt]]|sep=<br>}}' )
    
    if landingZones ~= '' or spaceStations ~= '' or towns ~= '' then
        infoBox:addHeader( 'Points of Interest' )
    end

    if landingZones ~= '' then
        infoBox:addRow( 'Landezonen', landingZones )
    end

    if spaceStations ~= '' then
        infoBox:addRow( 'Raumstationen', spaceStations )
    end

    if towns ~= '' then
        infoBox:addRow( 'Städte', towns )
    end

    return infoBox
end

-- Entrypoint for {{#seo:}}
local function setSeoData()
    if currentFrame == nil then
        error( 'No frame set. Call "setFrame" first.', 0 )
    end

    local desc = table.concat( {
        pageName,
        frameArgs[ 'name' ] or '',
        'ist ein Planet im',
        starsystemName( pageName ),
        'Sternensystem.',
    }, ' ' )

    local name
    if frameArgs[ 'name' ] ~= nil then
        name = pageName .. ': ' .. frameArgs[ 'name' ]
    else
        name = pageName
    end

    -- Call to {{#seo:}}
    currentFrame:callParserFunction{
        name = '#seo:', 
        args = {
            author = currentFrame:preprocess( '{{SERVER}}/Benutzer:{{urlencode:{{REVISIONUSER}}|WIKI}}' ),
            section = 'Planet',
            url = tostring( mw.uri.fullUrl( mw.title.getCurrentTitle().text ) ),
            title = table.concat( {
            	name,
            	starsystemName( pageName ),
            	currentFrame:preprocess( '{{SITENAME}}' )
            }, ' - '),
            title_mode = 'replace',
            keywords = table.concat( {
                'Star Citizen',
                'Squadron 42',
                'Planet',
                pageName,
                starsystemName( pageName ),
            }, ', '),
            description = frameArgs[ 'description' ] or desc,
            --image= getImage() or '',
            --image_alt = 'Bild des ' .. data.Sternensystem .. ' Systems',
            locale = 'de_DE',
            type = 'article',
        } 
    }
end

-- Get categories
local function getCategories()
    return tostring( table.concat( categories ) )
end

function Planet.parseType( planetType )
    local types = {
        [ 'Künstlicher Planet' ] = {
            'artificial',
            'artificial planet',
        },
        [ 'Kohlenstoffplanet' ] = {
            'carbon',
            'carbon planet',
        },
        [ 'Chthonischer Planet' ] = {
            'chthonian',
            'chthonian planet',
        },
        [ 'Kernloser Planet' ] = {
            'coreless',
            'coreless planet',
        },
        [ 'Wüstenplanet' ] = {
            'desert',
            'desert planet',
        },
        [ 'Zwergplanet' ] = {
            'dwarf',
            'dwarf planet',
        },
        [ 'Gasriese' ] = {
            'gas giant',
        },
        [ 'Gaszwerg' ] = {
            'gas dwarf',
        },
        [ 'Heißer Saturn' ] = {
            'hot jupiter',
        },
        [ 'Eisplanet' ] = {
            'ice',
            'ice planet',
        },
        [ 'Eisriese' ] = {
            'ice giant',
        },
        [ 'Eisenplanet' ] = {
            'iron',
            'iron planet',
        },
        [ 'Lavaplanet' ] = {
            'lava',
            'lava planet',
        },
        [ 'Mesoplanet' ] = {
        },
        [ 'Ozeanplanet' ] = {
            'ocean',
            'ocean planet',
        },
        [ 'Protoplanet' ] = {
        },
        [ 'Auflösender Planet' ] = {
            'puffy',
            'puffy planet',
        },
        [ 'Vagabundierender Planet' ] = {
            'rogue',
            'rogue planet',
        },
        [ 'Smogplanet' ] = {
            'smog',
            'smog planet',
        },
        [ 'Supererde' ] = {
            'super-earth',
            'super earth',
        },
        [ 'Superjupiter' ] = {
            'super-jupiter',
            'super jupiter',
        },
        [ 'Gesteinsplanet' ] = {
            'terrestrial',
            'terrestrial planet',
            'terrestrial rocky',
        }
    }

    for type, values in pairs( types ) do
        -- Check Keys
        if mw.ustring.lower( type ) == mw.ustring.lower( planetType ) then
            return type
        end

        -- Check values in keys
        for _, otherNames in pairs( values ) do
            if mw.ustring.lower( planetType ) == otherNames then
                return type
            end
        end
    end

    table.insert( categories, [[Category:Planet mit fehlerhaftem Planettyp]] )
end

function Planet.infoBox( frame )
    local args = require( 'Module:Arguments' )

    currentFrame = frame
    frameArgs = args.getArgs( frame )

    pageName = common.removeTypeSuffix( mw.title.getCurrentTitle().subpageText, 'Planet' )

    local name
    if frameArgs[ 'name' ] ~= nil then
        name = pageName .. ': ' .. frameArgs[ 'name' ]
    else
        name = pageName
    end

    common.setDisplayTitle( currentFrame, name )

    addCategory()

    setSemanticProperties()
    setSeoData()

    return tostring( getInfoBox() ) .. getCategories()
end

return Planet

Standard Erden Tage. Der Wert eines SET (oder auch siderischer Tag) ist kürzer als ein bürgerlicher Tag (mittlerer Sonnentag). So braucht die Erde z.B. 365,256 siderische Tage für einen Sonnenumlauf.

Ein Mesoplanet ist ein Himmelskörper, der größer als Ceres (963 km), aber kleiner als Merkur (4879 km) ist.

Protoplanet ist nach der verbreitetsten Theorie die Bezeichnung für den Vorläufer eines Planeten. Es ist nach dem Planetesimalen das zweite Entwicklungsstadium von Planeten.

Hauptsächlich wird dieser Begriff für Objekte gebraucht, die nicht gravitativ an einen massereicheren Körper gebunden sind. Die Entdeckung von Objekten, die sich keinem Sternsystem zuordnen lassen, stellt die eindeutige Definition des Begriffs „Planet“ vor zusätzliche Probleme. Es hat sich in der Forschung bisher keine allgemein anerkannte Definition und kein einheitlicher Begriff für diese Objekte durchgesetzt. Verwendet werden unter anderem die Bezeichnungen vagabundierender Planet oder der/das Planemo.

Eine Supererde ist ein extrasolarer Planet, der zwar mehr Masse besitzt als die Erde, allerdings wesentlich weniger als die Eisriesen des Sonnensystems Uranus (15 Erdmassen) und Neptun (17 Erdmassen). Der Ausdruck Supererde bezieht sich nur auf die Masse des Planeten und impliziert nichts über die Bedingung auf der Planetenoberfläche oder die Bewohnbarkeit des Planeten.

Ein Superjupiter ist ein astronomisches Objekt, das mehr Masse besitzt als der Planet Jupiter.