Модуль:Песочница/Pok: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 3: | Строка 3: | ||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | ||
-- Функция поиска данных по ID | -- Функция поиска данных по ID | ||
findDataById = function( | findDataById = function(itemDataIndex, id) | ||
if not | if not itemDataIndex then return nil end | ||
for _, item in ipairs(itemDataIndex) do | |||
if item.id == id then | |||
return item | |||
end | |||
end | |||
end | end | ||
| Строка 69: | Строка 51: | ||
getContentsOutput = function(contents) | getContentsOutput = function(contents) | ||
local result = "" | local result = "" | ||
for _, content in ipairs(contents) do | if type(contents) == "table" then | ||
result = result .. formatContent(content) | if #contents > 0 then | ||
for _, content in ipairs(contents) do | |||
result = result .. formatContent(content) | |||
end | |||
else | |||
for _, content in pairs(contents) do | |||
result = result .. formatContent(content) | |||
end | |||
end | |||
end | end | ||
return result | return result | ||
| Строка 82: | Строка 72: | ||
local result = "" | local result = "" | ||
for _, child in ipairs(children) do | if type(children) == "table" then | ||
if child.id then | if #children > 0 then | ||
for _, child in ipairs(children) do | |||
result = result .. | if child.id then | ||
if not visited[child.id] then | |||
result = result .. formatContent(child) | |||
end | |||
elseif child["!type"] == "NestedSelector" then | |||
result = result .. handleNestedSelector(child, true, visited) | |||
elseif child["!type"] == "GroupSelector" then | |||
result = result .. handleGroupSelector(child, visited) | |||
end | |||
end | |||
else | |||
for _, child in pairs(children) do | |||
if child.id then | |||
if not visited[child.id] then | |||
result = result .. formatContent(child) | |||
end | |||
elseif child["!type"] == "NestedSelector" then | |||
result = result .. handleNestedSelector(child, true, visited) | |||
elseif child["!type"] == "GroupSelector" then | |||
result = result .. handleGroupSelector(child, visited) | |||
end | |||
end | end | ||
end | end | ||
end | end | ||
return result | return result | ||
end | end | ||
| Строка 152: | Строка 157: | ||
-- Обработка entity_storage | -- Обработка entity_storage | ||
if containers.entity_storage then | if containers.entity_storage then | ||
if containers.entity_storage.children then | if containers.entity_storage.children and type(containers.entity_storage.children) == "table" then | ||
for _, child in ipairs(containers.entity_storage.children) do | if #containers.entity_storage.children > 0 then | ||
if child.id then | for _, child in ipairs(containers.entity_storage.children) do | ||
if child.id then | |||
result[#result + 1] = formatContent(child) | |||
elseif child["!type"] == "GroupSelector" then | |||
result[#result + 1] = handleGroupSelector(child, visited) | |||
elseif child["!type"] == "AllSelector" then | |||
result[#result + 1] = processNestedSelectors(child.children, visited) | |||
end | |||
end | |||
else | |||
for _, child in pairs(containers.entity_storage.children) do | |||
if child.id then | |||
result[#result + 1] = formatContent(child) | |||
elseif child["!type"] == "GroupSelector" then | |||
result[#result + 1] = handleGroupSelector(child, visited) | |||
elseif child["!type"] == "AllSelector" then | |||
result[#result + 1] = processNestedSelectors(child.children, visited) | |||
end | |||
end | end | ||
end | end | ||
| Строка 171: | Строка 188: | ||
-- Обработка storagebase (аналогично entity_storage) | -- Обработка storagebase (аналогично entity_storage) | ||
if containers.storagebase then | if containers.storagebase then | ||
if containers.storagebase.children then | if containers.storagebase.children and type(containers.storagebase.children) == "table" then | ||
for _, child in ipairs(containers.storagebase.children) do | if #containers.storagebase.children > 0 then | ||
if child.id then | for _, child in ipairs(containers.storagebase.children) do | ||
if child.id then | |||
result[#result + 1] = formatContent(child) | |||
elseif child["!type"] == "GroupSelector" then | |||
result[#result + 1] = handleGroupSelector(child, visited) | |||
elseif child["!type"] == "AllSelector" then | |||
result[#result + 1] = processNestedSelectors(child.children, visited) | |||
end | |||
end | |||
else | |||
for _, child in pairs(containers.storagebase.children) do | |||
if child.id then | |||
result[#result + 1] = formatContent(child) | |||
elseif child["!type"] == "GroupSelector" then | |||
result[#result + 1] = handleGroupSelector(child, visited) | |||
elseif child["!type"] == "AllSelector" then | |||
result[#result + 1] = processNestedSelectors(child.children, visited) | |||
end | |||
end | end | ||
end | end | ||
| Строка 214: | Строка 243: | ||
end | end | ||
for _, child in ipairs(groupSelector.children) do | if type(groupSelector.children) == "table" then | ||
if #groupSelector.children > 0 then | |||
for _, child in ipairs(groupSelector.children) do | |||
if child["!type"] == "GroupSelector" then | |||
result = result .. handleGroupSelector(child, visited) | |||
elseif child["!type"] == "AllSelector" then | |||
result = result .. string.format('{{LinkСard/Сollapsible|name=Выпадают только вместе:|content=%s}}', handleAllSelector(child)) | |||
elseif child.id then | |||
result = result .. formatContent(child) | |||
else | |||
result = result .. "<div>Ошибка: отсутствует id у элемента.</div>" | |||
end | |||
end | |||
else | else | ||
result = result .. "<div>Ошибка: отсутствует id у элемента.</div>" | for _, child in pairs(groupSelector.children) do | ||
if child["!type"] == "GroupSelector" then | |||
result = result .. handleGroupSelector(child, visited) | |||
elseif child["!type"] == "AllSelector" then | |||
result = result .. string.format('{{LinkСard/Сollapsible|name=Выпадают только вместе:|content=%s}}', handleAllSelector(child)) | |||
elseif child.id then | |||
result = result .. formatContent(child) | |||
else | |||
result = result .. "<div>Ошибка: отсутствует id у элемента.</div>" | |||
end | |||
end | |||
end | end | ||
end | end | ||
| Строка 295: | Строка 340: | ||
local allReagents = {} | local allReagents = {} | ||
for _, solution in pairs(item.SolutionContainerManager.solutions) do | for _, solution in pairs(item.SolutionContainerManager.solutions) do | ||
if solution and solution.reagents then | if solution and solution.reagents and type(solution.reagents) == "table" then | ||
for _, reagent in ipairs(solution.reagents) do | if #solution.reagents > 0 then | ||
table.insert(allReagents, reagent) | for _, reagent in ipairs(solution.reagents) do | ||
table.insert(allReagents, reagent) | |||
end | |||
else | |||
for _, reagent in pairs(solution.reagents) do | |||
table.insert(allReagents, reagent) | |||
end | |||
end | end | ||
end | end | ||
| Строка 303: | Строка 354: | ||
local hasNonFiber = false | local hasNonFiber = false | ||
for _, reagent in ipairs(allReagents) do | if type(allReagents) == "table" then | ||
if reagent.ReagentId ~= "Fiber" then | if #allReagents > 0 then | ||
for _, reagent in ipairs(allReagents) do | |||
if reagent.ReagentId ~= "Fiber" then | |||
hasNonFiber = true | |||
break | |||
end | |||
end | |||
else | |||
for _, reagent in pairs(allReagents) do | |||
if reagent.ReagentId ~= "Fiber" then | |||
hasNonFiber = true | |||
break | |||
end | |||
end | |||
end | end | ||
end | end | ||
| Строка 316: | Строка 378: | ||
local function processSolution(solution) | local function processSolution(solution) | ||
local output = "" | local output = "" | ||
if solution and solution.reagents then | if solution and solution.reagents and type(solution.reagents) == "table" then | ||
for _, reagent in ipairs(solution.reagents) do | if #solution.reagents > 0 then | ||
local chemInfo = chemTranslateData[reagent.ReagentId] | for _, reagent in ipairs(solution.reagents) do | ||
local chemInfo = chemTranslateData[reagent.ReagentId] | |||
local displayName = chemInfo and chemInfo.name or reagent.ReagentId | |||
output = output .. string.format( | |||
'<li>[[Химия#chem_%s|%s]] (%d ед.)</li>', | |||
reagent.ReagentId, displayName, reagent.Quantity | |||
) | |||
end | |||
else | |||
for _, reagent in pairs(solution.reagents) do | |||
local chemInfo = chemTranslateData[reagent.ReagentId] | |||
local displayName = chemInfo and chemInfo.name or reagent.ReagentId | |||
output = output .. string.format( | |||
'<li>[[Химия#chem_%s|%s]] (%d ед.)</li>', | |||
reagent.ReagentId, displayName, reagent.Quantity | |||
) | |||
end | |||
end | end | ||
end | end | ||
| Строка 335: | Строка 408: | ||
result = result .. processSolution(item.SolutionContainerManager.solutions["injector"]) | result = result .. processSolution(item.SolutionContainerManager.solutions["injector"]) | ||
result = result .. processSolution(item.SolutionContainerManager.solutions["pen"]) | result = result .. processSolution(item.SolutionContainerManager.solutions["pen"]) | ||
return result ~= "" and string.format('<ul class="1">%s</ul>', result) or '' | return result ~= "" and string.format('<ul class="1">%s</ul>', result) or '' | ||
end | end | ||
| Строка 387: | Строка 460: | ||
if not itemDataEntry then return "" end | if not itemDataEntry then return "" end | ||
local startingItem = nil | local startingItem = nil | ||
if itemDataEntry.ItemSlots and itemDataEntry.ItemSlots.slots then | if itemDataEntry.ItemSlots and itemDataEntry.ItemSlots.slots and type(itemDataEntry.ItemSlots.slots) == "table" then | ||
for _, slot in ipairs(itemDataEntry.ItemSlots.slots) do | if #itemDataEntry.ItemSlots.slots > 0 then | ||
if slot.startingItem and slot.startingItem ~= "" then | for _, slot in ipairs(itemDataEntry.ItemSlots.slots) do | ||
if slot.startingItem and slot.startingItem ~= "" then | |||
startingItem = slot.startingItem | |||
break | |||
end | |||
end | |||
else | |||
for _, slot in pairs(itemDataEntry.ItemSlots.slots) do | |||
if slot.startingItem and slot.startingItem ~= "" then | |||
startingItem = slot.startingItem | |||
break | |||
end | |||
end | end | ||
end | end | ||
| Строка 414: | Строка 496: | ||
if not itemDataEntry then return "" end | if not itemDataEntry then return "" end | ||
local startingItem = nil | local startingItem = nil | ||
if itemDataEntry.ItemSlots and itemDataEntry.ItemSlots.slots then | if itemDataEntry.ItemSlots and itemDataEntry.ItemSlots.slots and type(itemDataEntry.ItemSlots.slots) == "table" then | ||
for _, slot in ipairs(itemDataEntry.ItemSlots.slots) do | if #itemDataEntry.ItemSlots.slots > 0 then | ||
if slot.startingItem and slot.startingItem ~= "" then | for _, slot in ipairs(itemDataEntry.ItemSlots.slots) do | ||
if slot.startingItem and slot.startingItem ~= "" then | |||
startingItem = slot.startingItem | |||
break | |||
end | |||
end | |||
else | |||
for _, slot in pairs(itemDataEntry.ItemSlots.slots) do | |||
if slot.startingItem and slot.startingItem ~= "" then | |||
startingItem = slot.startingItem | |||
break | |||
end | |||
end | end | ||
end | end | ||