Модуль:Prototypes/Роль/Экипировка: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 7: | Строка 7: | ||
local p = {} | local p = {} | ||
-- | -- Вспомогательная функция для поиска в gearloadout по id | ||
function p.findInLoadoutById(id, slot) | |||
if | for _, v in pairs(gearloadout) do | ||
if string.lower(v.id) == string.lower(id) then | |||
if v.equipment then | |||
return v.equipment[slot], v | |||
return | end | ||
break | |||
end | |||
end | |||
return nil, nil | |||
end | end | ||
| Строка 24: | Строка 28: | ||
return "Ошибка: Не заданы необходимые параметры. Используйте: {{#invoke:IanComradeBot/gear|main|<slot>|<jobId>}}" | return "Ошибка: Не заданы необходимые параметры. Используйте: {{#invoke:IanComradeBot/gear|main|<slot>|<jobId>}}" | ||
end | end | ||
-- Поиск должности по id | -- Поиск должности по id | ||
local job = nil | local job = nil | ||
| Строка 54: | Строка 58: | ||
return "Ошибка: не найдена экипировка с id " .. gearId | return "Ошибка: не найдена экипировка с id " .. gearId | ||
end | end | ||
if not gear.equipment then | if not gear.equipment then | ||
return "Ошибка: в экипировке с id " .. gearId .. " отсутствует раздел equipment" | return "Ошибка: в экипировке с id " .. gearId .. " отсутствует раздел equipment" | ||
end | end | ||
-- 1. Попытка получить экипировку из gearData | |||
local itemId = gear.equipment[slot] | |||
local sourceGear = gear | local sourceGear = gear | ||
-- | -- 2. Если в gearData ничего не найдено, ищем в gearloadout по id (jobId .. slot) | ||
if not itemId then | if not itemId then | ||
local combinedId = jobId .. slot | local combinedId = jobId .. slot -- например, "Quartermaster" + "shoes" → "Quartermastershoes" | ||
itemId, sourceGear = p.findInLoadoutById(combinedId, slot) | |||
end | end | ||
-- | -- 3. Если и там ничего не найдено, ищем в gearloadoutGroup | ||
if not itemId then | if not itemId then | ||
local combinedId = jobId .. slot | local combinedId = jobId .. slot | ||
local | local groupEntry = nil | ||
for _, v in pairs(gearloadoutGroup) do | for _, v in pairs(gearloadoutGroup) do | ||
if string.lower(v.id) == string.lower(combinedId) then | if string.lower(v.id) == string.lower(combinedId) then | ||
groupEntry = v | |||
break | break | ||
end | end | ||
end | end | ||
if | if groupEntry and groupEntry.loadouts and #groupEntry.loadouts > 0 then | ||
local firstLoadoutId = | local firstLoadoutId = groupEntry.loadouts[1] | ||
itemId, sourceGear = p.findInLoadoutById(firstLoadoutId, slot) | |||
end | end | ||
end | end | ||
-- 4. Если экипировка так и не найдена, возвращаем пустую строку | |||
if not itemId then | if not itemId then | ||
return "" | return "" | ||
end | end | ||
-- | -- Обработка для слота "back" | ||
if slot == "back" then | if slot == "back" then | ||
local storageBack = "" | local storageBack = "" | ||