Модуль:Prototypes/Механика/Исследование: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 3: | Строка 3: | ||
local researchDataCache = nil -- Кэш для данных исследований | local researchDataCache = nil -- Кэш для данных исследований | ||
local machineIDCache = {} -- Кэш для машинных ID | local machineIDCache = {} -- Кэш для машинных ID | ||
-- Функция для загрузки данных плат из JSON-файла | -- Функция для загрузки данных плат из JSON-файла | ||
local function loadData() | local function loadData() | ||
if not dataCache then | if not dataCache then | ||
dataCache = mw.text.jsonDecode(mw.title.new(" | -- Кэширование данных при первом вызове | ||
dataCache = mw.text.jsonDecode(mw.title.new("Участник:IanComradeBot/entity_prototypes.json"):getContent()) | |||
end | end | ||
return dataCache | return dataCache | ||
| Строка 27: | Строка 16: | ||
local function loadResearchData() | local function loadResearchData() | ||
if not researchDataCache then | if not researchDataCache then | ||
-- Кэширование данных исследований при первом вызове | |||
researchDataCache = mw.text.jsonDecode(mw.title.new("User:IanComradeBot/research_prototypes.json"):getContent()) | researchDataCache = mw.text.jsonDecode(mw.title.new("User:IanComradeBot/research_prototypes.json"):getContent()) | ||
end | end | ||
| Строка 32: | Строка 22: | ||
end | end | ||
-- Функция для перевода ID плат в ID машин с кэшированием | -- Функция для перевода ID плат в ID машин с кэшированием | ||
local function translateBoardIDToMachineID(boardID) | local function translateBoardIDToMachineID(boardID) | ||
if machineIDCache[boardID] then | if machineIDCache[boardID] then | ||
-- Если ID машины уже есть в кэше, возвращаем его | |||
return machineIDCache[boardID] | return machineIDCache[boardID] | ||
end | end | ||
-- | -- Загружаем данные плат | ||
local board = | local data = loadData() | ||
if not board then | |||
-- Поиск платы по ID | |||
local board = data[boardID] | |||
if not board or not board.name then | |||
return nil | return nil | ||
end | end | ||
-- Проверка на машинные или консольные платы | -- Проверка на машинные или консольные платы | ||
if not board.name:find("%(машинная плата%)") and not board.name:find("%(консольная плата%)") then | |||
return nil | |||
end | |||
-- Удаление фраз из имени платы | |||
local machineName = board.name:gsub(" %(машинная плата%)", ""):gsub(" %(консольная плата%)", "") | local machineName = board.name:gsub(" %(машинная плата%)", ""):gsub(" %(консольная плата%)", "") | ||
-- | -- Исключения | ||
machineIDCache[boardID] = | local excludeWords = {"Unanchored", "Debug", "Admin", "Enabled"} | ||
return | |||
-- Поиск машины по новому имени | |||
for _, entity in pairs(data) do | |||
if entity.name == machineName then | |||
local shouldExclude = false | |||
for _, word in ipairs(excludeWords) do | |||
if entity.id:find(word) then | |||
shouldExclude = true | |||
break | |||
end | |||
end | |||
if not shouldExclude then | |||
-- Кэширование ID машины | |||
machineIDCache[boardID] = entity.id | |||
return entity.id | |||
end | |||
end | |||
end | |||
return nil | |||
end | end | ||