Модуль:Prototypes/Механика/Исследование: различия между версиями

мНет описания правки
мНет описания правки
Метка: ручная отмена
Строка 1: Строка 1:
local p = {}
local p = {}
-- Глобальная переменная для данных
local data
-- Хранилище для кэша перевода
local boardToMachineCache = {}


-- Функция для перевода ID плат в ID машин
-- Функция для перевода ID плат в ID машин
local function translateBoardIDToMachineID(boardID)
local function translateBoardIDToMachineID(boardID)
-- Проверяем кэш
-- Загрузка данных из JSON
if boardToMachineCache[boardID] ~= nil then
local data = mw.text.jsonDecode(mw.title.new("Участник:IanComradeBot/entity_prototypes.json"):getContent())
return boardToMachineCache[boardID]
end
 
-- Если данные еще не загружены, загружаем их
if not data then
data = mw.text.jsonDecode(mw.title.new("Участник:IanComradeBot/entity_prototypes.json"):getContent())
end


-- Поиск платы по ID и извлечение её названия
-- Поиск платы по ID и извлечение её названия
Строка 26: Строка 13:


-- Проверка наличия "(машинная плата)" или "(консольная плата)" в имени
-- Проверка наличия "(машинная плата)" или "(консольная плата)" в имени
if not (board.name:find("%(машинная плата%)") or board.name:find("%(консольная плата%)")) then
if not board.name:find("%(машинная плата%)") and not board.name:find("%(консольная плата%)") then
return nil -- Если в имени нет одной из фраз, возвращаем nil
return nil -- Если в имени нет одной из фраз, возвращаем nil
end
end


-- Удаление "(машинная плата)" и "(консольная плата)" из имени платы
-- Удаление "(машинная плата)" и "(консольная плата)" из имени платы
local machineName = board.name:gsub(" %(машинная плата%)", ""):gsub(" %(консольная плата%)", ""):trim()
local machineName = board.name:gsub(" %(машинная плата%)", ""):gsub(" %(консольная плата%)", "")


-- Список исключений
-- Список исключений
local excludeWords = {"Unanchored", "Debug", "Admin"}
local excludeWords = {"Unanchored", "Debug", "Admin", "Enabled"}


-- Оптимизация: создаем таблицу для быстрого поиска по имени
-- Поиск машины по новому названию
local machineID = nil
for _, entity in pairs(data) do
for _, entity in pairs(data) do
if entity.name == machineName then
if entity.name == machineName then
Строка 50: Строка 36:
if not shouldExclude then
if not shouldExclude then
machineID = entity.id -- Сохраняем ID машины
return entity.id -- Возвращаем ID машины
break
end
end
end
end
end
end


-- Кэшируем результат (nil, если не найдено)
return nil -- Если машина не найдена, возвращаем nil
boardToMachineCache[boardID] = machineID
return machineID -- Возвращаем ID машины или nil
end
end


Строка 71: Строка 54:
local customRecipeUnlocks = frame.args.customRecipeUnlocks or nil -- Ручной ввод в список разблокируемых технологий
local customRecipeUnlocks = frame.args.customRecipeUnlocks or nil -- Ручной ввод в список разблокируемых технологий


-- Загрузка данных из JSON один раз
-- Загрузка данных из JSON
if not data then
local data = mw.text.jsonDecode(mw.title.new("User:IanComradeBot/research_prototypes.json"):getContent())
data = mw.text.jsonDecode(mw.title.new("User:IanComradeBot/research_prototypes.json"):getContent())
end


local out = cssLink
local out = cssLink