Module:Slots
From Stationeers Community Wiki
More actions
Documentation for this module may be created at Module:Slots/doc
local p = {}
-- U+E000 / U+E001: valid UTF-8 private-use characters, cannot appear in template content
local ROW_MARKER = string.char(0xEE, 0x80, 0x80)
local FIELD_SEP = string.char(0xEE, 0x80, 0x81)
local function splitOn(str, sep)
local parts = {}
local sepLen = mw.ustring.len(sep)
local start = 1
while true do
local pos = mw.ustring.find(str, sep, start, true)
if not pos then
table.insert(parts, mw.ustring.sub(str, start))
break
end
table.insert(parts, mw.ustring.sub(str, start, pos - 1))
start = pos + sepLen
end
return parts
end
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
function p.row(frame)
local args = frame:getParent().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
function p.render(frame)
local args = frame:getParent().args
local showLogic = args['logic'] ~= nil and args['logic'] ~= ''
local markerLen = mw.ustring.len(ROW_MARKER)
local rows = {}
for i, v in ipairs(args) do
if mw.ustring.sub(v, 1, markerLen) == ROW_MARKER then
local parts = splitOn(mw.ustring.sub(v, markerLen + 1), 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
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