Перейти к содержанию

Модуль:Обжиг

Материал из LemonCraft Wiki
Версия от 00:33, 13 июня 2025; Spark108 (обсуждение | вклад) (1 версия импортирована)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

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

----------------------------------------------------------------------------------
--- Модуль для создания таблиц с рецептами для обжига и похожих методов обработки.
----------------------------------------------------------------------------------
local p = {}

--- Интернационализация и локализация
local i18n = {
	-- Зависимости
	moduleArgs = [[Модуль:ProcessArgs]],
	moduleRecipe = [[Модуль:Таблица рецептов]],
	moduleProcessing = [[Модуль:Обработка]],
	moduleProcessingFunc = "interface",
	moduleMods = [[Модуль:Модификации]],
	
	-- Параметры процесса
	type = "обжиг",
	typeGenitive = "обжига",
}

-- Зависимости
local recipeTable = require(i18n.moduleRecipe).table
local modNames = mw.loadData(i18n.moduleMods)

-- Создание таблицы
function p.table(f)
	local args = f
	if f == mw.getCurrentFrame() then
		args = require(i18n.moduleArgs).merge(true)
	else
		f = mw.getCurrentFrame()
	end
	
	-- Модификация и вид обработки
	-- [[Модуль:Обработка]] не разбирает сокращения и не поддерживает параметр
	-- «мод» со строчной буквы, поэтому они обрабатываются явным образом.
	local mod = args["мод"] or args["Мод"]
	local progress = args["Прогресс"]
	if progress then
		args["несколько обработок"] = 1
	end
	
	if mod then
		-- разбор сокращений
		mod = modNames[mod] or mod
	elseif progress then
		-- определение модификации по обозначению вида обработки
		-- для совместимости??!
		if progress:find('gt4') then
			mod = 'GregTech 4'
		elseif progress:find('gt') then
			mod = 'GregTech'
		elseif progress:find('ic2') then
			mod = 'IndustrialCraft 2'
		end
	end
	args["мод"] = mod
	args["Мод"] = mod
	
	-- Обработка аргументов интерфейса
	local ingredientArgVals = {}
	local outputArgVals = {}
	
	-- Нежидкостные ресурсы
	args["Ресурс1"] = args["Ресурс1"] or args["Ресурс"] or args[1]
	if args["Ресурс1"] then
		ingredientArgVals[1] = "Ресурс1"
	end
	
	if not args["Ресурс2"] then
		args["Ресурс2"] = args["Топливо"] or args["топливо"]
	else
		-- Если Ресурс2 на самом деле топливо, то этот параметр исключается из
		-- списка аргументов, обрабатываемых Таблицей рецептов. То есть, на
		-- топливо не будет ссылок в ячейке ингредиентов. Также оно не будет
		-- учитываться системами отслеживания использования ингредиентов, если
		-- и когда они будут реализованы для Обжига.
		
		-- Но здесь не тот случай
		table.insert(ingredientArgVals, "Ресурс2")
	end
	
	local n = 3
	while args["Ресурс" .. n] do
		table.insert(ingredientArgVals, "Ресурс" .. n)
		n = n + 1
	end
	
	-- Нежидкостные выходы
	args["Выход1"] = args["Выход1"] or args["Выход"] or args[2]
	n = 1
	while args["Выход" .. n] do
		table.insert(outputArgVals, "Выход" .. n)
		n = n + 1
	end
	
	-- Жидкостные входы
	args["РесурсЖ1"] = args["РесурсЖ1"] or args["РесурсЖ"]
	n = 1
	while args["РесурсЖ" .. n] do
		table.insert(ingredientArgVals, "РесурсЖ" .. n)
		n = n + 1
	end
	
	-- Жидкостные выходы
	args["ВыходЖ1"] = args["ВыходЖ1"] or args["ВыходЖ"]
	n = 1
	while args["ВыходЖ" .. n] do
		table.insert(outputArgVals, "ВыходЖ" .. n)
		n = n + 1
	end
	
	-- Теперь можно использовать Таблицу рецептов
	local out = recipeTable(args, {
		["модуль интерфейса"] = i18n.moduleProcessing,
		["функция интерфейса"] = i18n.moduleProcessingFunc,
		["тип"] = i18n.type,
		["типа"] = i18n.typeGenitive,
		["аргументы ингредиентов"] = ingredientArgVals,
		["аргументы выхода"] = outputArgVals
	})
	return out
end

return p