Hi Gamepedia users and contributors! Please complete this survey to help us learn how to better meet your needs in the future. We have one for editors and readers. This should only take about 7 minutes!

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

Материал из Minecraft Wiki
Перейти к: навигация, поиск
local p = {}
function p.table( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = f:getParent().args
	else
		f = mw.getCurrentFrame()
	end
	local getParts = require( 'Модуль:Инвентарный слот' ).getParts
	
	-- Начинать таблицу при необходимости
	local multirow = f:callParserFunction( '#dplvar', 'multirow' )
	if multirow ~= '1' then
		multirow = nil
	end
	local head = args["глава"] or ''
	if multirow then
		head = ''
	elseif head ~= '' then
		multirow = 1
		f:callParserFunction( '#dplvar:set', 'multirow', '1' )
	else
		head = 1
	end
	
	-- Заканчивать таблицу при необходимости
	local foot = args["подвал"] or ''
	if multirow then
		if foot ~= '' then
			multirow = nil
			f:callParserFunction( '#dplvar:set', 'multirow', '0' )
		end
	else
		foot = 1
	end
	
	local mod = args["Мод"]
	local progress = args["Прогресс"]
	
	-- Предопределение модификации
	local version
	if progress or '' ~= '' then
		mod = mod or 'GregTech'
		version = mw.ustring.match(progress or '', ':%s*([a-zA-Z 0-9]+)') or args["Версия"] or args["Мод"] or nil
	end
	
	progress = mw.ustring.match(progress or '', '([a-zA-Zа-яА-ЯёЁ 0-9]+):') or progress or nil
	
	if ( progress or '' ~= '' ) and ( version or '' ~= '' ) then
		args["Машина"] = args["Машина"] or nil
		mod = mod or nil
	else
		args["Машина"] = '21110000102'
		mod = mod or ''
		version = 'Оригинальная игра'
	end
	
	local header = ''
	if head ~= '' then
		local name = ''
		local description = ''
		if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then
			name = '!! Результат'
			f:callParserFunction( '#dplvar:set', 'resultname', '1' )
		end
		if args["показатьописание"] == '1' then
			description = ' !! class="unsortable" | Описание'
			f:callParserFunction( '#dplvar:set', 'smeltingdescription', '1' )
		end
		local class = args["класс"] or ''
		local recipeClass = ''
		if multirow then
			class = 'sortable collapsible ' .. class
			recipeClass = 'class="unsortable" |'
		end
        local process = ' [[Плавка|Процесс]]'
        if progress and mod then
         process=' Процесс'
        end
		header = table.concat( {
			' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Процесс"',
			'! ' .. 'Ингредиенты !! ' .. recipeClass .. process  .. name .. description,
			'|-'
		}, '\n' )
	end
	
	
	args["Ресурс1"] = args["Ресурс1"] or args["Ресурс"] or args["MРесурс"] or args["M2Ресурс"] or args["M3Ресурс"] or args[1]
	args["Ресурс2"] = args["Ресурс2"] or args["Топливо"] or args["топливо"]
	args["Выход1"] = args["Выход1"] or args["Выход"] or args["MВыход"] or args["M2Выход"] or args["M3Выход"] or args[2]
	args["РесурсЖ1"] = args["РесурсЖ1"] or args["РесурсЖ"] or args["MРесурсЖ"] or args["M2РесурсЖ"] or args["M3РесурсЖ"]
	args["ВыходЖ1"] = args["ВыходЖ1"] or args["ВыходЖ"] or args["MВыходЖ"] or args["M2ВыходЖ"] or args["M3ВыходЖ"]
	
	local input = mw.text.trim( args["Ресурс1"] or '' )
	local fuel = mw.text.trim( args["Ресурс2"] or '' )
	local input3 = mw.text.trim( args["Ресурс3"] or '' )
	local input4 = mw.text.trim( args["Ресурс4"] or '' )
	local input5 = mw.text.trim( args["Ресурс5"] or '' )
	local input6 = mw.text.trim( args["Ресурс6"] or '' )
	local input7 = mw.text.trim( args["РесурсЖ1"] or '' )
	local input8 = mw.text.trim( args["РесурсЖ2"] or '' )
	local input9 = mw.text.trim( args["РесурсЖ3"] or '' )
	local output = mw.text.trim( args["Выход1"] or '' )
	local output2 = mw.text.trim( args["Выход2"] or '' )
	local output3 = mw.text.trim( args["Выход3"] or '' )
	local output4 = mw.text.trim( args["Выход4"] or '' )
	local output5 = mw.text.trim( args["Выход5"] or '' )
	local output6 = mw.text.trim( args["Выход6"] or '' )
	local output7 = mw.text.trim( args["Выход7"] or '' )
	local output8 = mw.text.trim( args["Выход8"] or '' )
	local output9 = mw.text.trim( args["Выход9"] or '' )
	local output10 = mw.text.trim( args["ВыходЖ1"] or '' )
	local output11 = mw.text.trim( args["ВыходЖ2"] or '' )
	local output12 = mw.text.trim( args["ВыходЖ3"] or '' )
	if fuel == '' and (((mod == 'IndustrialCraft 2') or (mod == 'GregTech')) and args['Расход'] == 'Электричество') then
		fuel = 'Энергия'
    elseif fuel == '' and version == 'Оригинальная игра' then
		fuel = 'v:Любое топливо,1'
	end
	
	-- Ячейка с названием
	local nameCell
	if args["название"] or '' ~= '' then
		nameCell = args["название"]
	elseif f:callParserFunction( '#dplvar', 'resultname' ) == '1' then
		nameCell = {}
		local names = {}
		for k, v in ipairs{ output, output2, output3, output4, output5, output6, output7, output8, output9, output10, output11, output12  } do
			local separator = ''
			if k > 1 and next( names ) then
				separator = '&nbsp;+<br>\n'
			end
			for item in mw.text.gsplit( v, '%s*;%s*' ) do
				local parts = getParts( item, mod )
				if parts.name ~= '' and not names[parts.name] and ( k >= 1 ) then
					local link = ''
					if separator == '' and next( names ) then
						separator = '&nbsp;или<br>\n'
					end
					
					if parts.mod then
						link = parts.mod .. '/' .. parts.name .. '|'
					end
					
					if parts.name:find( '^Люб' ) then
					    if parts.mod then
						 link = parts.mod .. '/' .. mw.ustring.gsub( mw.ustring.sub( parts.name, 7 ), "^%l", mw.ustring.upper ) .. '|'
					    end
						table.insert( nameCell, separator .. mw.ustring.sub( parts.name, 0, 6 ) .. '[[' .. link .. mw.ustring.sub( parts.name, 6 ) .. ']]' )
					else
						table.insert( nameCell, separator .. '[[' .. link .. parts.name .. ']]' )
					end
					separator = ''
					
					names[parts.name] = 1
				end
			end
		end
		
		nameCell = table.concat( nameCell )
	end
	
	if nameCell and args["запланированное"] then
		nameCell = nameCell .. '<br>([[' .. args["запланированное"] .. ']])'
	end
	
	-- Ячейка с ингредиентами
	local ingredientsCell
	if args["ингредиенты"] or '' ~= '' then
		ingredientsCell = args["ингредиенты"]
	else
		ingredientsCell = {}
		local ingredients = {}
		local separator = ''
		for k, v in ipairs{ input, fuel, input3, input4, input5, input6, input7, input8, input9  } do
			if k > 1 and next( ingredients ) then
				separator = '&nbsp;+<br>\n'
			end
			for item in mw.text.gsplit( v, '%s*;%s*' ) do
				local parts = getParts( item, mod )
				if parts.name ~= '' and not ingredients[parts.name] and ( k >= 1 and ( v ~= fuel or mod == 'GregTech' ) ) then
					local link = ''
					if separator == '' and next( ingredients ) then
						separator = '&nbsp;или<br>\n'
					end
					
					if parts.mod then
						link = parts.mod .. '/' .. parts.name .. '|'
					end
					
					if parts.name:find( '^Люб' ) then
					    if parts.mod then
						 link = parts.mod .. '/' .. mw.ustring.gsub( mw.ustring.sub( parts.name, 7 ), "^%l", mw.ustring.upper ) .. '|'
					    end
						table.insert( ingredientsCell, separator .. mw.ustring.sub( parts.name, 0, 6 ) .. '[[' .. link .. mw.ustring.sub( parts.name, 6 ) .. ']]' )
					else
						table.insert( ingredientsCell, separator .. '[[' .. link .. parts.name .. ']]' )
					end
					separator = ''
					
					ingredients[parts.name] = 1
				end
			end
		end
		
		ingredientsCell = table.concat( ingredientsCell )
	end
	
	-- Остальные аргументы
	local newArgs = args
		newArgs["Ресурс"] = args[1] or args["Ресурс"]
		newArgs["Выход"] = args[2] or args["Выход"]
		newArgs["Топливо"] = fuel
		newArgs["РНазв"] = args["рНазв"]
		newArgs["ВНазв"] = args["вНазв"]
		newArgs["ТНазв"] = args["тНазв"]
		newArgs["Мод"] = mod
		newArgs["Прогресс"] = progress or 'Печь'
		newArgs["Расход"] = args["Расход"]
		newArgs["Версия"] = version
		newArgs["Машина"] = args["Машина"]
	
	-- Ячейка с рецептом
	local recipeCell = require( 'Модуль:GregTechProc' ).craftingTable( newArgs )
	
	local row = {
		'|\n' .. ingredientsCell,
		'style="padding:1px" |\n' .. recipeCell
	}
	if nameCell then
		table.insert( row, 3, '<b>' .. nameCell .. '</b>' )
	end
	if f:callParserFunction( '#dplvar', 'smeltingdescription' ) == '1' then
		table.insert( row, args["описание"] or '' )
	end
	row = table.concat( row, '\n|' )
	
	local footer = ''
	if foot ~= '' then
		footer = '|}'
		f:callParserFunction( '#dplvar:set', 'resultname', '0', 'smeltingdescription', '0' )
	end
	
	local title = mw.title.getCurrentTitle()
	local category = ''
	if args["запланированное"] and args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then
		category = '[[Категория:Запланированные материалы]]'
	end
	
	return header .. '\n' .. row .. '\n|-\n' .. footer .. category
end
return p