Модуль:Песочница/Pok: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 43: | Строка 43: | ||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | ||
local function findRelatedTables(initialList) | local function findRelatedTables(initialList) | ||
local results = {} | local results = {} | ||
| Строка 70: | Строка 69: | ||
return res | return res | ||
end | end | ||
local function searchTableIdInStructure(struct, tableIds) | local function searchTableIdInStructure(struct, tableIds) | ||
if type(struct) ~= "table" then | if type(struct) ~= "table" then | ||
| Строка 91: | Строка 91: | ||
end | end | ||
--------------------------------------------------------------------- | |||
-- Общая логика поиска хранилищ, содержащих указанный targetId | |||
--------------------------------------------------------------------- | |||
local function findMatchingStorages(targetId) | |||
local initialTables = {} | local initialTables = {} | ||
for key, tblEntry in pairs(tableData) do | for key, tblEntry in pairs(tableData) do | ||
| Строка 135: | Строка 133: | ||
end | end | ||
return matchingStorages | |||
end | |||
--------------------------------------------------------------------- | |||
function p.reverseContained(frame) | |||
local targetId = frame.args[2] | |||
if not targetId or targetId == "" then | |||
return "Ошибка: не указан id предмета для обратного поиска." | |||
end | |||
local matchingStorages = findMatchingStorages(targetId) | |||
local filteredStorages = {} | local filteredStorages = {} | ||
for _, sid in ipairs(matchingStorages) do | for _, sid in ipairs(matchingStorages) do | ||
| Строка 155: | Строка 164: | ||
return "Найденные хранилища: " .. table.concat(filteredStorages, ", ") | return "Найденные хранилища: " .. table.concat(filteredStorages, ", ") | ||
end | end | ||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | ||
| Строка 214: | Строка 221: | ||
for _, g in ipairs(role.groups) do | for _, g in ipairs(role.groups) do | ||
if g == foundGroupId then | if g == foundGroupId then | ||
foundJob = role.id | foundJob = role.id | ||
break | break | ||
end | end | ||
| Строка 236: | Строка 243: | ||
return "Найдено использование оборудования: " .. table.concat(results, "; ") | return "Найдено использование оборудования: " .. table.concat(results, "; ") | ||
end | end | ||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | ||
| Строка 246: | Строка 251: | ||
end | end | ||
local | -- Сначала ищем прямые совпадения в cargoData по product | ||
local directCargo = {} | |||
for _, entry in ipairs(cargoData) do | for _, entry in ipairs(cargoData) do | ||
if entry.product == searchValue then | if entry.product == searchValue then | ||
table.insert( | table.insert(directCargo, entry.id) | ||
end | |||
end | |||
if #directCargo > 0 then | |||
return "Найденные записи cargo: " .. table.concat(directCargo, ", ") | |||
end | |||
-- Если не найдено прямых совпадений, выполняем обратный поиск как в reverseContained, | |||
-- но оставляем только те хранилища, которые присутствуют в cargoData (т.е. имеют product равный их id) | |||
local matchingStorages = findMatchingStorages(searchValue) | |||
local cargoStorages = {} | |||
for _, sid in ipairs(matchingStorages) do | |||
for _, cargo in pairs(cargoData) do | |||
if type(cargo) == "table" and cargo.product == sid then | |||
table.insert(cargoStorages, sid) | |||
break | |||
end | |||
end | end | ||
end | end | ||
if # | if #cargoStorages == 0 then | ||
return " | return "Хранилище, содержащее предмет с id " .. searchValue .. ", не найдено." | ||
end | end | ||
return "Найденные | return "Найденные хранилища cargo: " .. table.concat(cargoStorages, ", ") | ||
end | end | ||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | ||
| Строка 312: | Строка 333: | ||
return "Найденные станки: " .. table.concat(matchingLathes, ", ") | return "Найденные станки: " .. table.concat(matchingLathes, ", ") | ||
end | end | ||
--------------------------------------------------------------------- | --------------------------------------------------------------------- | ||
| Строка 328: | Строка 347: | ||
if inventory.id then | if inventory.id then | ||
local found = false | local found = false | ||
if (invMode == "inventory" or invMode == "" or not invMode) and inventory.startingInventory and type(inventory.startingInventory) == "table" then | if (invMode == "inventory" or invMode == "" or not invMode) and inventory.startingInventory and type(inventory.startingInventory) == "table" then | ||
if inventory.startingInventory[targetId] then | if inventory.startingInventory[targetId] then | ||
| Строка 355: | Строка 373: | ||
local matchingVendingMachines = {} | local matchingVendingMachines = {} | ||
for _, vm in pairs(vendingMachinesData) do | for _, vm in pairs(vendingMachinesData) do | ||
if vm.VendingMachine and vm.VendingMachine.pack then | if vm.VendingMachine and vm.VendingMachine.pack then | ||
| Строка 383: | Строка 400: | ||
local mode = frame.args[1] | local mode = frame.args[1] | ||
if not mode or mode == "" then | if not mode or mode == "" then | ||
return "Ошибка: не указан режим обратного поиска. Доступные режимы: reverseContained, reverseEquipment, reverseCargo, reverseLathe." | return "Ошибка: не указан режим обратного поиска. Доступные режимы: reverseContained, reverseEquipment, reverseCargo, reverseLathe, reverseVending." | ||
end | end | ||
| Строка 397: | Строка 414: | ||
return p.reverseVending(frame) | return p.reverseVending(frame) | ||
else | else | ||
return "Неизвестный режим: " .. mode .. ". Доступные режимы: reverseContained, reverseEquipment, reverseCargo, reverseLathe." | return "Неизвестный режим: " .. mode .. ". Доступные режимы: reverseContained, reverseEquipment, reverseCargo, reverseLathe, reverseVending." | ||
end | end | ||
end | end | ||
return p | return p | ||