Modul:ArmorTable

Aus Star Citizen Wiki
Modul Dokumentation[view][edit][history][purge]
Diese Dokumentation wird von Modul:ArmorTable/doc aus übernommen. Änderungen können auf der Diskussionsseite vorgeschlagen werden.

Dieses Modul erzeugt eine tabellarische Übersicht aller verfügbaren Rüstungen.


local ArmorTable = {}

local common = require( 'Module:Common' )

local metatable = {}
local methodtable = {}

metatable.__index = methodtable


--- Queries the SMW Store
--- @return table
function methodtable.getSmwData( self )
    -- Cache multiple calls
    if self.smwData ~= nil then
        return self.smwData
    end

    -- name from args or current page
    -- local subType = self.frameArgs[ 'Typ' ] or 'Raumschiff'

    local query = {
        '[[Ist Basisversion::wahr]][[Kategorie:Körperpanzerung]]',
        '?#-=page',
        '?Minimaler Temperaturwiderstand=temp_min',
        '?Maximaler Temperaturwiderstand=temp_max',
        '?Subtyp#-=class',
        '?Inventar=inventory',
        '?Hersteller=manufacturer',
        '?Spielversion#-=version',
        'mainlabel=name',
        'sort=name,Subtyp',
        'order=asc,asc',
        'limit=500',
    }

    local data = mw.smw.ask( query )

    if data == nil or data[ 1 ] == nil then
        return nil
    end
	
	mw.logObject( data )
    
    self.smwData = data

    return self.smwData
end


--- Sorts the table by Position -> Shop
---
--- @return table
function methodtable.sort( self )
    local sorted = {}

    for _, row in pairs( self.smwData ) do
        if row.class ~= nil then
            if type( sorted[ row.class ] ) ~= 'table' then
                sorted[ row.class ] = {}
            end

            table.insert( sorted[ row.class ], row )
        end
    end

    return sorted
end


--- Creates the buy table
---
--- @param armor table
--- @return string
function methodtable.createTable(self, items)
    if #items == 0 then
        return ''
    end

    local currentRow = 1

    local table = mw.html.create( 'table' )
                    :attr( 'class', 'wikitable broadtable sortable' )
                    :attr( 'style', 'width: 100%')
                    :tag( 'tr' )
                        :tag( 'th' )
                            :wikitext( 'Name' )
                            :done()
                        :tag( 'th' )
                            :wikitext( 'Temperaturresistenz' )
                            :done()
                        :tag( 'th' )
                            :wikitext( 'Rüstungsklasse' )
                            :done()
                        :tag( 'th' )
                            :wikitext( 'Inventar' )
                            :done()
                        :tag( 'th' )
                            :wikitext( 'Hersteller' )
                            :done()
                        :tag( 'th' )
                            :wikitext( 'Spielversion' )
                            :done()
                        :done()
                    :done()

    for _, armor in pairs(items) do
        local trClass = 'row-odd'
        if currentRow % 2 == 0 then
            trClass = 'row-even'
        end
        currentRow = currentRow + 1

		local price = '-'
		if type( armor.price ) == 'table' then
			price = armor.price[ 1 ]
		end
		
		local tempResist = armor.temp_resist

        table:tag( 'tr' )
             :addClass( trClass )
                 :tag( 'td' )
                     :wikitext( string.format( '[[%s]]', armor.page ) )
                     :done()
                 :tag( 'td' )
                    :wikitext( (armor.temp_min or '-') .. ' / ' .. (armor.temp_max or '-') )
                    :done()
                 :tag( 'td' )
                    :wikitext( armor.class )
                    :done()
                 :tag( 'td' )
                    :wikitext( armor.inventory )
                    :done()
                 :tag( 'td' )
                	:wikitext( armor.manufacturer )
                    :done()
                 :tag( 'td' )
                     :wikitext( armor.version )
                    :done()
             :done()
    end

    return table:allDone()
end


--- Outputs the table
---
--- @return string
function methodtable.make( self )
    local data = self:getSmwData()

    if data == nil then
        return '<p class="hatnote">Konnte keine semantischen Daten laden.</p>'
    end

    local sorted = self:sort()
    local out = ''

    for class, items in common.spairs( sorted ) do
        out = string.format( "%s\n=== [[%s]] ===\n%s", out, class, tostring( self:createTable(items) ))

    end
    mw.logObject(out)
    return mw.text.trim( out )
end


--- New Instance
--- @return table ArmorTable
function ArmorTable.new( self, frameArgs )
    local instance = {
        args = frameArgs,
    }

    setmetatable( instance, metatable )

    return instance
end

--- Entry for module calls
---
--- @return string
function ArmorTable.fromArgs( frame )
    local args = require( 'Module:Arguments').getArgs( frame )

    local instance = ArmorTable:new( args )

    return instance:make()
end


return ArmorTable
Cookies helfen uns bei der Bereitstellung dieses Wikis. Durch die Nutzung des Star Citizen Wiki erklärst du dich damit einverstanden, dass wir Cookies speichern.