Модуль:Chemistry Lookup/data

Материал из FIRE STATION WIKI

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

local chem = "User:FireBot/chem_prototypes.json"
local react = "User:FireBot/react_prototypes.json"
local status = "User:FireBot/chem_status.json"
local flavors = "User:FireBot/flavors.json"

-- Загружаем данные из JSON файлов
local chemData = mw.text.jsonDecode(mw.title.new(chem, "User"):getContent())
local reactData = mw.text.jsonDecode(mw.title.new(react, "User"):getContent())
local statusData = mw.text.jsonDecode(mw.title.new(status, "User"):getContent())
local flavorData = mw.text.jsonDecode(mw.title.new(flavors, "User"):getContent())

-- Функция для поиска рецептов химиката
local function findRecipesForChem(chemName)
	local recipes = {}
	for reactionId, reactionData in pairs(reactData) do
		if reactionData.products and reactionData.products[chemName] then
			table.insert(recipes, reactionId)
		end
	end
	return recipes
end

-- Обрабатываем данные химикатов
local processedChem = {}
for chemId, chemInfo in pairs(chemData) do
	if type(chemInfo) == "table" and chemInfo.type == "reagent" then
		-- Копируем все данные химиката
		processedChem[chemId] = {}
		for k, v in pairs(chemInfo) do
			processedChem[chemId][k] = v
		end
		
		-- Исправляем структуру метаболизма - заменяем metabolismRate на rate
		if chemInfo.metabolisms then
			processedChem[chemId].metabolisms = {}
			for metabType, metabData in pairs(chemInfo.metabolisms) do
				processedChem[chemId].metabolisms[metabType] = {}
				
				-- Копируем все данные метаболизма
				for k, v in pairs(metabData) do
					if k == "metabolismRate" then
						-- Переименовываем metabolismRate в rate
						processedChem[chemId].metabolisms[metabType].rate = v
					else
						processedChem[chemId].metabolisms[metabType][k] = v
					end
				end
				
				-- Если rate не был задан, устанавливаем значение по умолчанию
				if not processedChem[chemId].metabolisms[metabType].rate then
					processedChem[chemId].metabolisms[metabType].rate = 1.0
				end
			end
		end
		
		-- Добавляем рецепты
		local recipes = findRecipesForChem(chemId)
		if #recipes > 0 then
			processedChem[chemId].recipes = recipes
		end
	end
end

return {
	chem = processedChem,
	react = reactData,
	status = statusData,
	flavors = flavorData,
	groupDirection = {
		Drinks = "Drinks";
		Foods = "Cooking";
	}
}