Модуль:Prototypes/Объект/Торгомат/Пополнение: различия между версиями

Материал из Space Station 14 Вики
Новая страница: «local p = {} -- Загрузка данных 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 --...»
 
мНет описания правки
 
(не показано 15 промежуточных версий этого же участника)
Строка 1: Строка 1:
-- Загрузка данных
local vendingMachinesData = mw.loadData("Модуль:IanComradeBot/prototypes/vending machines.json/data")
local restockData = mw.loadData("Модуль:IanComradeBot/prototypes/vending machines/restock.json/data")
local p = {}
local p = {}
-- Загрузка данных
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
-- Поиск данных по ID
Строка 21: Строка 18:
-- Получение списка торговых автоматов, которые могут быть пополнены данным пополнителем
-- Получение списка торговых автоматов, которые могут быть пополнены данным пополнителем
local function getRestockOutput(id)
local function getRestockOutput(id)
     local vendingMachines = loadData("User:IanComradeBot/prototypes/vending machines.json")
     local result = ""
    local restockData = loadData("User:IanComradeBot/prototypes/vending machines/restock.json")
      
      
     local result = ""
    -- Находим пополнителя по ID
     local restockItem = findDataById(restockData, id)
    if not restockItem then
        return "Пополнитель не найден"
    end
      
      
     -- Проходим по данным пополнителей
     -- Для каждого объекта в canRestock ищем соответствующие автоматы
     for _, restock in ipairs(restockData) do
     if restockItem.VendingMachineRestock and restockItem.VendingMachineRestock.canRestock then
        if restock.canRestock then
        for _, canRestockId in ipairs(restockItem.VendingMachineRestock.canRestock) do
            -- Проверяем, если текущий пополнитель может пополнить автомат с данным ID
            -- Ищем все автоматы, где pack соответствует значению canRestock
            for _, canRestockId in ipairs(restock.canRestock) do
            for _, vendingMachine in ipairs(vendingMachinesData) do
                if canRestockId == id then
                if vendingMachine.VendingMachine and vendingMachine.VendingMachine.pack == canRestockId then
                    -- Находим соответствующий торговый автомат в vendingMachines
                    -- Добавляем ID найденного автомата в результат
                    for _, vendingMachine in ipairs(vendingMachines) do
                    result = result .. mw.getCurrentFrame():preprocess("{{#invoke:Предмет|main|" .. vendingMachine.id .. "|repository=|wrapper=|link=}}")
                        if vendingMachine.VendingMachine and vendingMachine.VendingMachine.pack == canRestockId then
                            -- Если автомат найден, добавляем его ID в результат
                            result = result .. mw.getCurrentFrame():preprocess("{{LinkСard|image=" .. vendingMachine.id .. "|name={{#invoke:Entity Lookup|getname|" .. vendingMachine.id .. "}}|link=Торговые автоматы#{{#invoke:Entity Lookup|getname|" .. vendingMachine.id .. "}}}}")
                        end
                    end
                 end
                 end
             end
             end
Строка 49: Строка 44:
-- Основная функция модуля
-- Основная функция модуля
function p.main(frame)
function p.main(frame)
     local id = frame.args.id
     local id = frame.args[1]


     if not id then return "" end
     if not id then return "" end

Текущая версия от 09:33, 4 апреля 2025

Для документации этого модуля может быть создана страница Модуль:Prototypes/Объект/Торгомат/Пополнение/doc

-- Загрузка данных
local vendingMachinesData = mw.loadData("Модуль:IanComradeBot/prototypes/vending machines.json/data")
local restockData = mw.loadData("Модуль:IanComradeBot/prototypes/vending machines/restock.json/data")

local p = {}

-- Поиск данных по 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 getRestockOutput(id)
    local result = ""
    
    -- Находим пополнителя по ID
    local restockItem = findDataById(restockData, id)
    if not restockItem then
        return "Пополнитель не найден"
    end
    
    -- Для каждого объекта в canRestock ищем соответствующие автоматы
    if restockItem.VendingMachineRestock and restockItem.VendingMachineRestock.canRestock then
        for _, canRestockId in ipairs(restockItem.VendingMachineRestock.canRestock) do
            -- Ищем все автоматы, где pack соответствует значению canRestock
            for _, vendingMachine in ipairs(vendingMachinesData) do
                if vendingMachine.VendingMachine and vendingMachine.VendingMachine.pack == canRestockId then
                    -- Добавляем ID найденного автомата в результат
                    result = result .. mw.getCurrentFrame():preprocess("{{#invoke:Предмет|main|" ..  vendingMachine.id .. "|repository=|wrapper=|link=}}")
                end
            end
        end
    end

    return result
end

-- Основная функция модуля
function p.main(frame)
    local id = frame.args[1]

    if not id then return "" end

    return getRestockOutput(id)
end

return p