Модуль:Prototypes/Хранилище/Предмет: различия между версиями

мНет описания правки
мНет описания правки
Строка 5: Строка 5:
     selectors = nil
     selectors = nil
}
}
-- Предварительное объявление функций
local loadData, findDataById, formatContent, getContentsOutput, pickByWeight
local processAllSelectors, processNestedSelectors, getTableOutput, getContainedOutput, getChemOutput


-- Функция для загрузки данных с кешированием
-- Функция для загрузки данных с кешированием
local function loadData(filePath, cacheKey)
function loadData(filePath, cacheKey)
     if cache[cacheKey] then
     if cache[cacheKey] then
         return cache[cacheKey]
         return cache[cacheKey]
Строка 23: Строка 27:


-- Поиск данных по ID
-- Поиск данных по ID
local function findDataById(data, id)
function findDataById(data, id)
     if not data then return nil end
     if not data then return nil end
     for _, item in ipairs(data) do
     for _, item in ipairs(data) do
Строка 34: Строка 38:


-- Форматирование одного содержимого
-- Форматирование одного содержимого
local function formatContent(content)
function formatContent(content)
     local name = string.format('{{#invoke:Entity Lookup|getname|%s}}', content.id)
     local name = string.format('{{#invoke:Entity Lookup|getname|%s}}', content.id)
     local image = string.format('%s.png', content.id)
     local image = string.format('%s.png', content.id)
Строка 53: Строка 57:


-- Получение содержимого
-- Получение содержимого
local function getContentsOutput(contents)
function getContentsOutput(contents)
     local result = ''
     local result = ''
     for _, content in ipairs(contents) do
     for _, content in ipairs(contents) do
Строка 62: Строка 66:


-- Функция выбора элемента на основе веса
-- Функция выбора элемента на основе веса
local function pickByWeight(children)
function pickByWeight(children)
     local totalWeight = 0
     local totalWeight = 0
     for _, child in ipairs(children) do
     for _, child in ipairs(children) do
Строка 79: Строка 83:


     return nil -- На случай, если ничего не выбрано (теоретически невозможно)
     return nil -- На случай, если ничего не выбрано (теоретически невозможно)
end
-- Обработка таблиц
local function getTableOutput(tableId, rolls)
    local allSelectors = loadData('User:IanComradeBot/prototypes/AllSelector.json', 'selectors')
    local tableData = findDataById(allSelectors, tableId)
    local children = tableData and (tableData['!type:GroupSelector'] and tableData['!type:GroupSelector'].children or tableData['!type:AllSelector'] and tableData['!type:AllSelector'].children)
    if not children then return 'Таблица не содержит элементов.' end
    if tableData['!type:AllSelector'] then
        return processAllSelectors(children)
    else
        return processNestedSelectors(children, rolls)
    end
end
end


-- Обработка AllSelector
-- Обработка AllSelector
local function processAllSelectors(children)
function processAllSelectors(children)
     local result = ''
     local result = ''
     for _, child in ipairs(children) do
     for _, child in ipairs(children) do
Строка 127: Строка 116:


-- Обработка вложенных таблиц
-- Обработка вложенных таблиц
local function processNestedSelectors(children, rolls)
function processNestedSelectors(children, rolls)
     local result = ''
     local result = ''
     for i = 1, rolls do
     for i = 1, rolls do
Строка 157: Строка 146:
     end
     end
     return result
     return result
end
-- Обработка таблиц
function getTableOutput(tableId, rolls)
    local allSelectors = loadData('User:IanComradeBot/prototypes/AllSelector.json', 'selectors')
    local tableData = findDataById(allSelectors, tableId)
    local children = tableData and (tableData['!type:GroupSelector'] and tableData['!type:GroupSelector'].children or tableData['!type:AllSelector'] and tableData['!type:AllSelector'].children)
    if not children then return 'Таблица не содержит элементов.' end
    if tableData['!type:AllSelector'] then
        return processAllSelectors(children)
    else
        return processNestedSelectors(children, rolls)
    end
end
end


-- Формирование списка содержащихся предметов или таблиц
-- Формирование списка содержащихся предметов или таблиц
local function getContainedOutput(data, id, wrapped)
function getContainedOutput(data, id, wrapped)
     local item = findDataById(data, id)
     local item = findDataById(data, id)
     if not item then return '' end
     if not item then return '' end
Строка 188: Строка 192:


-- Формирование списка химии
-- Формирование списка химии
local function getChemOutput(data, id)
function getChemOutput(data, id)
     local item = findDataById(data, id)
     local item = findDataById(data, id)
     if not item then return '' end
     if not item then return '' end