Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Slots: Difference between revisions

From Stationeers Community Wiki
Azera (talk | contribs)
Create module for automatically rendering a slot info table. Accepts variable number of arguments consisting of name;slotType;index where index is optional
 
Azera (talk | contribs)
Update slots module to include information on slot logic values
Line 1: Line 1:
local p = {}
local p = {}


local ROW_MARKER = '\x01'
local FIELD_SEP  = '\x02'
local BASE_PARAMS = {
    'Class', 'Damage', 'MaxQuantity', 'Occupied', 'OccupantHash', 'Quantity', 'ReferenceId'
}
local EXTRA_PARAMS = {
    Battery    = {'Charge', 'ChargeRatio'},
    GasCanister = {'Pressure', 'Temperature'},
    GasFilter  = {'FilterType'},
}
local function getLogicParams(slotType)
    local params = {}
    for _, v in ipairs(BASE_PARAMS) do table.insert(params, v) end
    if EXTRA_PARAMS[slotType] then
        for _, v in ipairs(EXTRA_PARAMS[slotType]) do table.insert(params, v) end
    end
    table.sort(params)
    return table.concat(params, ', ')
end
-- {{Slots/row|name=Battery|type=Battery|index=0|logicParams=...}}
-- index and logicParams are optional.
function p.row(frame)
    local args      = frame.args
    local name      = mw.text.trim(args.name or '')
    local slotType  = mw.text.trim(args.type or 'None')
    local index      = mw.text.trim(args.index or '')
    local logicParams = mw.text.trim(args.logicParams or '')
    return ROW_MARKER .. table.concat({index, name, slotType, logicParams}, FIELD_SEP)
end
-- {{Slots|logic=1|{{Slots/row|...}}|{{Slots/row|...}}}}
function p.render(frame)
function p.render(frame)
     local args = frame:getParent().args
     local args     = frame:getParent().args
     local rows = {}
    local showLogic = args['logic'] ~= nil and args['logic'] ~= ''
     local rows     = {}


     for i, v in ipairs(args) do
     for i, v in ipairs(args) do
         local parts     = mw.text.split(v, ';')
         local parts     = mw.text.split(v:sub(2), FIELD_SEP)
         local name     = mw.text.trim(parts[1] or '')
         local index     = mw.text.trim(parts[1] or '')
         local slotType  = mw.text.trim(parts[2] or 'None')
         local name      = mw.text.trim(parts[2] or '')
         local index    = parts[3] and mw.text.trim(parts[3]) or tostring(i - 1)
         local slotType  = mw.text.trim(parts[3] or 'None')
        local logicParams = mw.text.trim(parts[4] or '')
 
        if index == '' then index = tostring(i - 1) end
 
         if name ~= '' then
         if name ~= '' then
             table.insert(rows, '|-\n| ' .. name .. ' || ' .. slotType .. ' || ' .. index)
             local row = '|-\n| ' .. index .. ' || ' .. name .. ' || ' .. slotType
            if showLogic then
                local params = logicParams ~= '' and logicParams or getLogicParams(slotType)
                row = row .. ' || ' .. params
            end
            table.insert(rows, row)
         end
         end
     end
     end


     return '{| class="wikitable"\n|-\n! Slot Name !! Type !! Index\n'
     local header = '{| class="wikitable"\n|-\n! Index !! Slot Name !! Type'
        .. table.concat(rows, '\n') .. '\n|}'
    if showLogic then
        header = header .. ' !! Logic Parameters'
    end
 
    return header .. '\n' .. table.concat(rows, '\n') .. '\n|}'
end
end


return p
return p

Revision as of 01:05, 13 April 2026

Documentation for this module may be created at Module:Slots/doc

local p = {}

local ROW_MARKER = '\x01'
local FIELD_SEP  = '\x02'

local BASE_PARAMS = {
    'Class', 'Damage', 'MaxQuantity', 'Occupied', 'OccupantHash', 'Quantity', 'ReferenceId'
}

local EXTRA_PARAMS = {
    Battery     = {'Charge', 'ChargeRatio'},
    GasCanister = {'Pressure', 'Temperature'},
    GasFilter   = {'FilterType'},
}

local function getLogicParams(slotType)
    local params = {}
    for _, v in ipairs(BASE_PARAMS) do table.insert(params, v) end
    if EXTRA_PARAMS[slotType] then
        for _, v in ipairs(EXTRA_PARAMS[slotType]) do table.insert(params, v) end
    end
    table.sort(params)
    return table.concat(params, ', ')
end

-- {{Slots/row|name=Battery|type=Battery|index=0|logicParams=...}}
-- index and logicParams are optional.
function p.row(frame)
    local args       = frame.args
    local name       = mw.text.trim(args.name or '')
    local slotType   = mw.text.trim(args.type or 'None')
    local index      = mw.text.trim(args.index or '')
    local logicParams = mw.text.trim(args.logicParams or '')
    return ROW_MARKER .. table.concat({index, name, slotType, logicParams}, FIELD_SEP)
end

-- {{Slots|logic=1|{{Slots/row|...}}|{{Slots/row|...}}}}
function p.render(frame)
    local args      = frame:getParent().args
    local showLogic = args['logic'] ~= nil and args['logic'] ~= ''
    local rows      = {}

    for i, v in ipairs(args) do
        local parts      = mw.text.split(v:sub(2), FIELD_SEP)
        local index      = mw.text.trim(parts[1] or '')
        local name       = mw.text.trim(parts[2] or '')
        local slotType   = mw.text.trim(parts[3] or 'None')
        local logicParams = mw.text.trim(parts[4] or '')

        if index == '' then index = tostring(i - 1) end

        if name ~= '' then
            local row = '|-\n| ' .. index .. ' || ' .. name .. ' || ' .. slotType
            if showLogic then
                local params = logicParams ~= '' and logicParams or getLogicParams(slotType)
                row = row .. ' || ' .. params
            end
            table.insert(rows, row)
        end
    end

    local header = '{| class="wikitable"\n|-\n! Index !! Slot Name !! Type'
    if showLogic then
        header = header .. ' !! Logic Parameters'
    end

    return header .. '\n' .. table.concat(rows, '\n') .. '\n|}'
end

return p