Модуль:Prototypes/Механика/Частоты
Материал из Space Station 14 Вики
Для документации этого модуля может быть создана страница Модуль:Prototypes/Механика/Частоты/doc
local p = {}
local keysData = mw.loadData("Module:IanComradeBot/prototypes/encryption keys.json/data")
local radioData = mw.loadData("Module:IanComradeBot/prototypes/radio channels.json/data")
local fillsData = mw.loadData("Module:IanComradeBot/prototypes/fills/Item.json/data")
local function trimQuotes(str)
if not str then return "" end
return (str:gsub("^['\"](.-)['\"]$", "%1"))
end
function p.render(frame)
local args = frame.args
local mode = args[1] or "radio"
local itemId = args[2]
if not itemId or itemId == "" then
return "Ошибка: не указан id предмета/ключа."
end
local keySlots = {}
if mode == "radio" then
local item
for _, data in pairs(fillsData) do
if data.id == itemId then
item = data
break
end
end
if not item then
return "Ошибка: предмет с id '" .. itemId .. "' не найден."
end
if not (item.ContainerFill
and item.ContainerFill.containers
and item.ContainerFill.containers.key_slots) then
return "Ошибка: для предмета '" .. itemId .. "' не определены ключевые слоты."
end
keySlots = item.ContainerFill.containers.key_slots
elseif mode == "key" then
keySlots = { itemId }
else
return "Ошибка: неизвестный режим '" .. mode .. "'."
end
local channels = {}
for _, keyId in ipairs(keySlots) do
local keyRecord
for _, data in pairs(keysData) do
if data.id == keyId then
keyRecord = data
break
end
end
if keyRecord and keyRecord.EncryptionKey and keyRecord.EncryptionKey.channels then
for _, channel in ipairs(keyRecord.EncryptionKey.channels) do
table.insert(channels, channel)
end
else
mw.log("Предупреждение: для ключа '" .. keyId .. "' не найдены данные или отсутствуют каналы.")
end
end
local resultSpans = {}
for _, channelName in ipairs(channels) do
local radioRecord
for _, data in pairs(radioData) do
if data.id == channelName then
radioRecord = data
break
end
end
if radioRecord then
local keycode = trimQuotes(radioRecord.keycode) or ""
local color = trimQuotes(radioRecord.color) or ""
local span = string.format('<span style="color: %s">%s</span>', color, keycode)
table.insert(resultSpans, span)
else
mw.log("Предупреждение: для канала '" .. channelName .. "' не найдены данные в radioData.")
end
end
local output = '<span class="radio">' .. table.concat(resultSpans, " ") .. '</span>'
return output
end
return p