Модуль:Prototypes/Объект/Торгомат: различия между версиями
Материал из Space Station 14 Вики
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
Строка 19: | Строка 19: | ||
end | end | ||
-- Функция для получения содержимого автомата | -- Функция для получения списка содержимого автомата | ||
local function | local function getInventory(id) | ||
-- Загрузка данных | -- Загрузка данных | ||
local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json") | local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json") | ||
Строка 27: | Строка 27: | ||
-- Поиск автомата по ID | -- Поиск автомата по ID | ||
local vendingMachine = findDataById(vendingMachines, id) | local vendingMachine = findDataById(vendingMachines, id) | ||
if not vendingMachine then | if not vendingMachine then return "" end | ||
-- Поиск инвентаря по pack | |||
local inventory = findDataById(inventories, vendingMachine.pack) | |||
if not inventory then return "" end | |||
-- Формирование строки с содержимым автомата | |||
local inventoryString = "" | |||
for item, quantity in pairs(inventory.startingInventory) do | |||
inventoryString = inventoryString .. "* " .. item .. ": " .. quantity .. "\n" | |||
end | end | ||
-- | return inventoryString | ||
local | end | ||
local | |||
if not | -- Функция для получения списка доступов | ||
return " | local function getAccessList(id) | ||
-- Загрузка данных | |||
local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json") | |||
-- Поиск автомата по ID | |||
local vendingMachine = findDataById(vendingMachines, id) | |||
if not vendingMachine or not vendingMachine.AccessReader or not vendingMachine.AccessReader.access then | |||
return "" | |||
end | end | ||
-- Формирование | -- Извлечение доступа | ||
local | local accessList = mw.text.jsonDecode(vendingMachine.AccessReader.access) | ||
for | if not accessList then return "" end | ||
-- Формирование строки для передачи в модуль Prototypes/Механика/Доступ | |||
local accessString = "" | |||
for _, access in ipairs(accessList) do | |||
accessString = accessString .. "[[\"" .. access .. "\"]]," | |||
end | end | ||
return | return '{{#invoke:Prototypes/Механика/Доступ|parse|[' .. accessString .. ']}}' | ||
end | end | ||
-- Функция для получения | -- Функция для получения ID пополнителя | ||
local function | local function getRestockId(id) | ||
-- Загрузка данных | -- Загрузка данных | ||
local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json") | local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json") | ||
local | local restocks = loadData("User:IanComradeBot/prototypes/vending machines/restock.json") | ||
-- Поиск автомата по ID | -- Поиск автомата по ID | ||
local vendingMachine = findDataById(vendingMachines, id) | local vendingMachine = findDataById(vendingMachines, id) | ||
if not vendingMachine then | if not vendingMachine then return "" end | ||
-- | -- Поиск пополнителя по pack | ||
local | local restock = findDataById(restocks, vendingMachine.pack) | ||
if not restock then return "" end | |||
-- Формирование строки с ID пополнителя | |||
local restockString = restock.id or "" | |||
return restockString | |||
end | end | ||
Строка 73: | Строка 88: | ||
function p.main(frame) | function p.main(frame) | ||
local id = frame.args.id | local id = frame.args.id | ||
local mode = frame.args.mode or "" -- Определяем, что за режим: 'access', 'inventory' или 'restock' | |||
if not id then | if not id then | ||
return " | return "" | ||
end | end | ||
-- | -- В зависимости от значения mode выбираем нужную функцию | ||
if | if mode == "access" then | ||
return | return getAccessList(id) | ||
elseif | elseif mode == "inventory" then | ||
return | return getInventory(id) | ||
elseif mode == "restock" then | |||
return getRestockId(id) | |||
else | else | ||
return " | return "" | ||
end | end | ||
end | end | ||
return p | return p |
Версия от 18:07, 16 января 2025
Для документации этого модуля может быть создана страница Модуль:Prototypes/Объект/Торгомат/doc
local p = {}
-- Функция для загрузки данных из JSON-файла
local function loadData(filePath)
local page = mw.title.new(filePath)
local content = page:getContent()
return content and mw.text.jsonDecode(content) or nil
end
-- Функция для поиска данных по ID
local function findDataById(data, id)
if not data then return nil end
for _, item in ipairs(data) do
if item.id == id then
return item
end
end
return nil
end
-- Функция для получения списка содержимого автомата
local function getInventory(id)
-- Загрузка данных
local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json")
local inventories = loadData("User:IanComradeBot/prototypes/vending machines/inventories.json")
-- Поиск автомата по ID
local vendingMachine = findDataById(vendingMachines, id)
if not vendingMachine then return "" end
-- Поиск инвентаря по pack
local inventory = findDataById(inventories, vendingMachine.pack)
if not inventory then return "" end
-- Формирование строки с содержимым автомата
local inventoryString = ""
for item, quantity in pairs(inventory.startingInventory) do
inventoryString = inventoryString .. "* " .. item .. ": " .. quantity .. "\n"
end
return inventoryString
end
-- Функция для получения списка доступов
local function getAccessList(id)
-- Загрузка данных
local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json")
-- Поиск автомата по ID
local vendingMachine = findDataById(vendingMachines, id)
if not vendingMachine or not vendingMachine.AccessReader or not vendingMachine.AccessReader.access then
return ""
end
-- Извлечение доступа
local accessList = mw.text.jsonDecode(vendingMachine.AccessReader.access)
if not accessList then return "" end
-- Формирование строки для передачи в модуль Prototypes/Механика/Доступ
local accessString = ""
for _, access in ipairs(accessList) do
accessString = accessString .. "[[\"" .. access .. "\"]],"
end
return '{{#invoke:Prototypes/Механика/Доступ|parse|[' .. accessString .. ']}}'
end
-- Функция для получения ID пополнителя
local function getRestockId(id)
-- Загрузка данных
local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json")
local restocks = loadData("User:IanComradeBot/prototypes/vending machines/restock.json")
-- Поиск автомата по ID
local vendingMachine = findDataById(vendingMachines, id)
if not vendingMachine then return "" end
-- Поиск пополнителя по pack
local restock = findDataById(restocks, vendingMachine.pack)
if not restock then return "" end
-- Формирование строки с ID пополнителя
local restockString = restock.id or ""
return restockString
end
-- Основная функция модуля
function p.main(frame)
local id = frame.args.id
local mode = frame.args.mode or "" -- Определяем, что за режим: 'access', 'inventory' или 'restock'
if not id then
return ""
end
-- В зависимости от значения mode выбираем нужную функцию
if mode == "access" then
return getAccessList(id)
elseif mode == "inventory" then
return getInventory(id)
elseif mode == "restock" then
return getRestockId(id)
else
return ""
end
end
return p