Модуль:Prototypes/Хранилище/Предмет: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 81: | Строка 81: | ||
end | end | ||
local | local function processAllSelectors(children) | ||
function processAllSelectors(children) | |||
local result = '' | local result = '' | ||
for _, child in ipairs(children) do | for _, child in ipairs(children) do | ||
| Строка 94: | Строка 91: | ||
result = result .. processAllSelectors(child.children) | result = result .. processAllSelectors(child.children) | ||
elseif child["!type"] == "NestedSelector" and child.tableId then | elseif child["!type"] == "NestedSelector" and child.tableId then | ||
local nestedRolls | local nestedRolls = child.rolls and (child.rolls.value or (child.rolls.range and math.random(string.match(child.rolls.range, "(%d+),%s*(%d+)")))) or 1 | ||
result = result .. getTableOutput(child.tableId, nestedRolls) | result = result .. getTableOutput(child.tableId, nestedRolls) | ||
end | end | ||
| Строка 126: | Строка 111: | ||
result = result .. processAllSelectors(selectedChild.children) | result = result .. processAllSelectors(selectedChild.children) | ||
elseif selectedChild["!type"] == "NestedSelector" and selectedChild.tableId then | elseif selectedChild["!type"] == "NestedSelector" and selectedChild.tableId then | ||
local nestedRolls | local nestedRolls = selectedChild.rolls and (selectedChild.rolls.value or (selectedChild.rolls.range and math.random(string.match(selectedChild.rolls.range, "(%d+),%s*(%d+)")))) or 1 | ||
result = result .. getTableOutput(selectedChild.tableId, nestedRolls) | result = result .. getTableOutput(selectedChild.tableId, nestedRolls) | ||
end | end | ||
end | end | ||
end | end | ||
| Строка 191: | Строка 134: | ||
end | end | ||
-- Формирование списка | -- Формирование списка содержащихся предметов или таблиц | ||
local function | local 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 | ||
local | local result = '' | ||
if item.StorageFill and item.StorageFill.contents then | |||
result = result .. getContentsOutput(item.StorageFill.contents) | |||
elseif item.EntityTableContainerFill and item.EntityTableContainerFill.containers then | |||
local containers = item.EntityTableContainerFill.containers | |||
local tableId = containers.storagebase and containers.storagebase.tableId or containers.entity_storage and containers.entity_storage.tableId or containers.other_storage and containers.other_storage.tableId | |||
local rolls = containers.storagebase and containers.storagebase.rolls and containers.storagebase.rolls.value or containers.entity_storage and containers.entity_storage.rolls and containers.entity_storage.rolls.value or 1 | |||
if tableId then | |||
result = result .. getTableOutput(tableId, rolls) | |||
else | |||
result = result .. | result = result .. 'Таблица не найдена.' | ||
end | end | ||
end | end | ||
return result | return result | ||
end | end | ||
| Строка 213: | Строка 160: | ||
local mode = frame.args[1] | local mode = frame.args[1] | ||
local id = frame.args[2] | local id = frame.args[2] | ||
if not id then return 'Не указан ID.' end | if not id then return 'Не указан ID.' end | ||
local data = loadData('User:IanComradeBot/prototypes/fills/Item.json', 'items') | local data = loadData('User:IanComradeBot/prototypes/fills/Item.json', 'items') | ||
if not data then return 'Не удалось загрузить данные.' end | if not data then return 'Не удалось загрузить данные.' end | ||
if mode == 'contained' then | |||
return frame:preprocess(getContainedOutput(data, id, false)) | return frame:preprocess(getContainedOutput(data, id, false)) | ||
else | else | ||