Модуль:Chemistry Lookup

Материал из SS14 Backmen

Для документации этого модуля может быть создана страница Модуль:Chemistry Lookup/doc

-- Модуль Chemistry Lookup
local ChemistryLookup = {}

-- Импорт JSON-данных
local chemData = mw.text.jsonDecode(mw.title.new("User:BKM-Head/chem_prototypes.json", "User"):getContent()) or {}

-- Временное хранилище для несохранённых изменений
local tempData = {}

-- Функция для добавления временных данных
function ChemistryLookup:setTempData(prototype, field, value)
    tempData[prototype] = tempData[prototype] or {}
    tempData[prototype][field] = value
end

-- Функция для получения данных с учётом временных изменений
function ChemistryLookup:getChemData(prototype, field)
    -- Проверяем временные данные
    if tempData[prototype] and tempData[prototype][field] then
        return tempData[prototype][field]
    end
    -- Если временных данных нет, возвращаем из оригинального источника
    local chem = chemData[prototype]
    if not chem then return nil end
    return chem[field] or nil
end

-- Получение цвета реагента
function ChemistryLookup:getcolor(prototype)
    return self:getChemData(prototype, "color") or "#000000FF"
end

-- Получение цвета текста
function ChemistryLookup:gettextcolor(prototype)
    return self:getChemData(prototype, "textColor") or "#FFFFFFFF"
end

-- Получение имени реагента
function ChemistryLookup:getname(prototype)
    return self:getChemData(prototype, "name") or "Неизвестное вещество"
end

-- Получение описания реагента
function ChemistryLookup:getdesc(prototype)
    return self:getChemData(prototype, "desc") or "Описание отсутствует."
end

-- Проверка на наличие рецептов
function ChemistryLookup:hasrecipe(prototype)
    local recipes = self:getChemData(prototype, "recipes")
    return recipes and #recipes > 0
end

-- Генерация списка рецептов
function ChemistryLookup:buildrecipes(prototype)
    local recipes = self:getChemData(prototype, "recipes")
    if not recipes or #recipes == 0 then return "" end
    return table.concat(recipes, ", ")
end

-- Проверка на наличие эффектов
function ChemistryLookup:haseffects(prototype)
    local metabolisms = self:getChemData(prototype, "metabolisms")
    return metabolisms ~= nil
end

-- Генерация описания эффектов
function ChemistryLookup:geneffects(prototype)
    local metabolisms = self:getChemData(prototype, "metabolisms")
    if not metabolisms then return "" end

    local effects = {}
    for _, metabolism in pairs(metabolisms) do
        for _, effect in ipairs(metabolism.effects or {}) do
            table.insert(effects, effect.description or "")
        end
    end
    return table.concat(effects, "<br/>")
end

-- Экспорт функций
return ChemistryLookup