Модуль:GTOreProc

Материал из Minecraft Wiki
Перейти к: навигация, поиск
local slot = require('Модуль:Инвентарный слот').slot
local GTCell = require('Модуль:GregTechProc').craftingTable
local CraftCell = require('Модуль:Интерфейс').craftingTable
local a1 = { 'ыль' , 'соль' , 'ая' , 'ный' , 'орошок' , 'песок'}
local b1 = { 'ыли' , 'соли' , 'ой' , 'ного' , 'орошка' , 'песка'}
-- Первая строчная буква
local lcfirst = function(s)
	local s1 = mw.ustring.sub(s,1,1)
	s1 = mw.ustring.lower(s1)
	local s2 = mw.ustring.sub(s,2)
	s = s1 .. s2
	return s
end
-- Предмет для строки-заголовка
local addSlot = function( item, mod)
	return slot{
		[1] = item, ["мод"] = mod, ["класс"] = 'invslot-plain', ["масштаб"] = '0.5', ["стиль"] = 'top:-1px'
	}
end
-- Строка-заголовок
local addHeadLine = function(body, block, text, mod)
	local head = body:tag('tr')
	local head_1 = head:tag('th')
	head_1:attr( 'colspan', '2' )
	head_1:wikitext("'''" .. addSlot(block, mod) .. text .. "'''")
end
-- Ячейка с машиной
local addGTCell = function( line, progress, args )
	local cell = line:tag('td')
	cell:css('padding','1px')
	args["Прогресс"] = progress
	cell:wikitext(GTCell(args))
end
-- Ячейка с верстаком
local addCraftCell = function( line, input, output, mod )
	local cell = line:tag('td')
	cell:css('padding','1px')
	cell:wikitext(CraftCell{["A1"] = 'Молот', ["A2"] = input, ["Выход"] = output, ["Мод"] = mod})
end

-- Экспортируемые функции
local p = {}

function p.procTable( f )

	local args = f
		if f == mw.getCurrentFrame() 
			then
				args = f:getParent().args
			else
				f = mw.getCurrentFrame()
			end

-- Чтение и генерация аргументов			
	local mod = args["МодБ"] or 'GregTech'
	local block = {}
	table.insert(block,args["РудаБ"])
	if args["РудаБ2"] then
		table.insert(block,args["РудаБ2"])
		if args["РудаБ3"] then
			table.insert(block,args["РудаБ3"])
			if args["РудаБ4"] then
				table.insert(block,args["РудаБ4"])
				if args["РудаБ5"] then
					table.insert(block,args["РудаБ5"])
				end
			end
		end
	end
	block = table.concat(block,';')
	local SDust = {}
	table.insert(SDust,args["ПыльПороды"])
	if args["ПыльПороды2"] then
		table.insert(SDust,args["ПыльПороды2"])
		if args["ПыльПороды3"] then
			table.insert(SDust,args["ПыльПороды3"])
			if args["ПыльПороды4"] then
				table.insert(SDust,args["ПыльПороды4"])
				if args["ПыльПороды5"] then
					table.insert(SDust,args["ПыльПороды5"])
				end
			end
		end
	end
	SDust = table.concat(SDust,';')
	local mercury = args["Ртуть"]
	local SPersulphate = args["Персульфат"]
	local out = args["Выход"] or '2'
	local oven = args["Обжиг"]
	local ingot = args["Слиток"]
	local nugget = args["Кусочек"]
	local blast = args["Домна"]
	local temp = args["Температура"]
	local calcite = args["Кальцит"]
	local magnet = args["Магнит"]
	local autoclave = args["Автоклав"]
	local gem = args["Самоцвет"]
	local rock = args["Камень"]
	local ore = args["Руда"]
	local crushed = 'Измельчённая ' .. lcfirst(ore)
	local purified = 'Очищенная ' .. lcfirst(ore)
	local centrifuged = 'Рафинированная ' .. lcfirst(ore)
	local dust = args["Пыль"]
	local dirty
	local clean
	if args["МРод"] then 
		dirty = 'Загрязнённый ' .. lcfirst(mw.ustring.gsub(dust,'v:',''))
		clean = 'Очищенный ' .. lcfirst(mw.ustring.gsub(dust,'v:',''))
	else
		dirty = 'Загрязнённая ' .. lcfirst(mw.ustring.gsub(dust,'v:',''))
		clean = 'Очищенная ' .. lcfirst(mw.ustring.gsub(dust,'v:',''))
	end
	local chance = args["Шанс"] or '10'
	local ByProd1 = args["ПРесурс1"]
	local ByProd2 = args["ПРесурс2"]
	local ByProd3 = args["ПРесурс3"]
	local tiny1 = mw.ustring.gsub(ByProd1,'v:','')
	local tiny2 = mw.ustring.gsub(ByProd2,'v:','')
	for i=1,table.maxn(a1) do
		tiny1 = mw.ustring.gsub(tiny1, a1[i], b1[i])
		tiny2 = mw.ustring.gsub(tiny2, a1[i], b1[i])
	end
	tiny1 = 'Крошечная кучка ' .. lcfirst(tiny1)
	tiny2 = 'Крошечная кучка ' .. lcfirst(tiny2)
	if args["МРод2"] then
		tiny1 = tiny1 .. 'а'
		tiny2 = tiny2 .. 'а'
	end
	local ByProdM = args["ПРесурсД"] or ByProd1

--Построение таблицы	
	local body = mw.html.create('table'):addClass('wikitable')
	body:css('text-align' , 'center')
-----------
	body:wikitext(addHeadLine(body, block, 'Блок руды', mod))
--
	local line_1_1 = body:tag('tr')
	line_1_1:wikitext(addGTCell(line_1_1, 'Дробитель:gt5', {["Уровень"] = '3', ["Шанс2"] = chance, ["Шанс3"] = '50', ["Ресурс1"] = block, ["Выход1"] = crushed .. ',' .. out, ["Выход2"] = ByProdM, ["Выход3"] = SDust}))
	local hammer
	if not oven or oven == 'thaum:Ртуть' then
		hammer = crushed
	else
		hammer = oven
	end
	if out or '1' > '1' then
		hammer = hammer .. ',' .. out/2
	end
	line_1_1:wikitext(addGTCell(line_1_1, 'Кузнечный молот:gt5', {["Ресурс1"] = block, ["Выход1"] = hammer}))
--
	if ingot or oven or calcite then
		local line_1_2 = body:tag('tr')
		if ingot then
			line_1_2:wikitext(addGTCell(line_1_2, 'Печь:gt5', {["Ресурс1"] = block, ["Выход1"] = ingot .. ',' .. math.ceil(out/2)}))
		elseif oven then
			line_1_2:wikitext(addGTCell(line_1_2, 'Печь:gt5', {["Ресурс1"] = block, ["Выход1"] = oven .. ',' .. math.ceil(out/4)}))
		else
			line_1_2:wikitext('<td>Нельзя обжечь в [[GregTech/Печь|печи]].</td>')
		end
		if calcite then
			line_1_2:wikitext(addGTCell(line_1_2, 'Электрическая доменная печь:gt5', {["Температура"] = '1500', ["Ресурс1"] = block, ["Ресурс2"] = 'Кальцитовая пыль', ["Выход1"] = 'v:Железный слиток,' .. calcite, ["Выход2"] = 'Кучка золы', }))
		else
			line_1_2:wikitext('<td>Нельзя обжечь в [[GregTech/Электрическая доменная печь|доменной печи]].</td>')
		end
	end
-----------
	body:wikitext(addHeadLine(body, crushed, 'Измельчённая руда', 'GregTech'))
--
	local line_2_1 = body:tag('tr')
	line_2_1:wikitext(addGTCell(line_2_1, 'Дробитель:gt5', {["Уровень"] = '2', ["Шанс2"] = '10', ["Ресурс1"] = crushed, ["Выход1"] = dirty, ["Выход2"] = ByProd1}))
	line_2_1:wikitext(addGTCell(line_2_1, 'Кузнечный молот:gt5', {["Ресурс1"] = crushed, ["Выход1"] = dirty}))
--
	local line_2_2 = body:tag('tr')
	if ingot or oven == 'thaum:Ртуть' then
		line_2_2:wikitext(addGTCell(line_2_2, 'Печь:gt5', {["Ресурс1"] = crushed, ["Выход1"] = nugget}))
	elseif blast then
		line_2_2:wikitext(addGTCell(line_2_2, 'Электрическая доменная печь:gt5', {["Температура"] = temp, ["Ресурс1"] = crushed, ["Выход1"] = blast}))
	else
		line_2_2:wikitext('<td>Нельзя обжечь в [[GregTech/Печь|печи]].</td>')
	end
	line_2_2:wikitext(addCraftCell(line_2_2, crushed, dirty, mod))
--
	local line_2_3 = body:tag('tr')
	line_2_3:wikitext(addGTCell(line_2_3, 'Термическая центрифуга:gt5', {["Ресурс1"] = crushed, ["Выход1"] = centrifuged, ["Выход2"] = tiny2, ["Выход3"] = 'Каменная пыль'}))
	line_2_3:wikitext(addGTCell(line_2_3, 'Рудопромывочная машина:gt5', {["Ресурс1"] = crushed, ["РесурсЖ1"] = 'Вода', ["РЖК1"] = '1000', ["Выход1"] = purified, ["Выход2"] = tiny1, ["Выход3"] = 'Каменная пыль'}))
--
	if SPersulphate or mercury then
		local line_2_4 = body:tag('tr')
		local bath1 = {}
		local bath2 = {}
		if SPersulphate then
			table.insert(bath1,'Персульфат натрия')
			table.insert(bath2,SPersulphate)
		end
		if mercury then
			table.insert(bath1,'Ртуть')
			table.insert(bath2,mercury)
		end
		bath1 = table.concat(bath1,';')
		bath2 = table.concat(bath2,';')
		line_2_4:wikitext(addGTCell(line_2_4, 'Химическая ванна:gt5', {["Шанс2"] = '70', ["Шанс3"] = '40', ["Ресурс1"] = crushed, ["РесурсЖ1"] = bath1, ["РЖК1"] = '1000', ["Выход1"] = purified, ["Выход2"] = bath2, ["Выход3"] = 'Каменная пыль'}))
		line_2_4:wikitext('<td>&nbsp;</td>')
	end
-----------
	body:wikitext(addHeadLine(body, purified, 'Очищенная руда', 'GregTech'))
--
	local line_3_1 = body:tag('tr')
	line_3_1:wikitext(addGTCell(line_3_1, 'Дробитель:gt5', {["Уровень"] = '2', ["Шанс2"] = '10', ["Ресурс1"] = purified, ["Выход1"] = clean, ["Выход2"] = ByProd2}))
	line_3_1:wikitext(addGTCell(line_3_1, 'Кузнечный молот:gt5', {["Ресурс1"] = purified, ["Выход1"] = clean}))
--
	local line_3_2 = body:tag('tr')
	line_3_2:wikitext(addGTCell(line_3_2, 'Термическая центрифуга:gt5', {["Ресурс1"] = purified, ["Выход1"] = centrifuged, ["Выход2"] = tiny2}))
	line_3_2:wikitext(addCraftCell(line_3_2, purified, clean, mod))
--
	if ingot or rock or gem or oven == 'thaum:Ртуть' then
		local line_3_3 = body:tag('tr')
		if ingot or oven == 'thaum:Ртуть' then
			line_3_3:wikitext(addGTCell(line_3_3, 'Печь:gt5', {["Ресурс1"] = purified, ["Выход1"] = nugget}))
		elseif blast then
			line_3_3:wikitext(addGTCell(line_3_3, 'Электрическая доменная печь:gt5', {["Температура"] = temp, ["Ресурс1"] = purified, ["Выход1"] = blast}))
		else
			line_3_3:wikitext('<td>Нельзя обжечь в [[GregTech/Печь|печи]].</td>')
		end
		if rock then
			line_3_3:wikitext(addGTCell(line_3_3, 'Просеиватель:gt5', {["Ресурс1"] = purified, ["Выход1"] = oven, ["Выход2"] = oven, ["Выход3"] = oven, ["Выход4"] = oven, ["Выход5"] = oven, ["Выход6"] = dust}))
		elseif gem then
			local gtgem = lcfirst(mw.ustring.gsub(oven,'v:',''))
			local ending
			if args["ЖРод"] then
				ending ='ая '
			else
				ending ='ый '
			end
			line_3_3:wikitext(addGTCell(line_3_3, 'Просеиватель:gt5', {["Ресурс1"] = purified, ["Выход1"] =  'Совершенн' .. ending .. gtgem, ["Выход2"] = 'Безупречн' .. ending .. gtgem, ["Выход3"] = oven, ["Выход4"] = 'Дефектн' .. ending .. gtgem, ["Выход5"] = 'Расколот' .. ending .. gtgem, ["Выход6"] = dust}))
		else
			line_3_3:wikitext('<td>Нельзя [[GregTech/Просеиватель|просеять]].</td>')
		end
	end
-----------
	body:wikitext(addHeadLine(body, centrifuged, 'Рафинированная руда', 'GregTech'))
--
	local line_4_1 = body:tag('tr')
	line_4_1:wikitext(addGTCell(line_4_1, 'Дробитель:gt5', {["Уровень"] = '2', ["Шанс2"] = '10', ["Ресурс1"] = centrifuged, ["Выход1"] = dust, ["Выход2"] = ByProd3}))
	line_4_1:wikitext(addGTCell(line_4_1, 'Кузнечный молот:gt5', {["Ресурс1"] = centrifuged, ["Выход1"] = dust}))
--
	local line_4_2 = body:tag('tr')
	if ingot or oven == 'thaum:Ртуть' then
		line_4_2:wikitext(addGTCell(line_4_2, 'Печь:gt5', {["Ресурс1"] = centrifuged, ["Выход1"] = nugget}))
	elseif blast then
		line_4_2:wikitext(addGTCell(line_4_2, 'Электрическая доменная печь:gt5', {["Температура"] = temp, ["Ресурс1"] = centrifuged, ["Выход1"] = blast}))
	else
		line_4_2:wikitext('<td>Нельзя обжечь в [[GregTech/Печь|печи]].</td>')
	end
	line_4_2:wikitext(addCraftCell(line_4_2, centrifuged, dust, mod))
-----------
	body:wikitext(addHeadLine(body, dirty, 'Загрязнённая пыль', 'GregTech'))
--
	local line_5_1 = body:tag('tr')
	line_5_1:wikitext(addGTCell(line_5_1, 'Центрифуга:gt5', {["Ресурс1"] = dirty, ["Выход1"] = dust, ["Выход2"] = tiny1}))
	if ingot then
		line_5_1:wikitext(addGTCell(line_5_1, 'Печь:gt5', {["Ресурс1"] = dirty, ["Выход1"] = ingot}))
	elseif blast then
		line_5_1:wikitext(addGTCell(line_5_1, 'Электрическая доменная печь:gt5', {["Температура"] = temp, ["Ресурс1"] = dirty, ["Выход1"] = blast}))
	elseif autoclave then
		line_5_1:wikitext(addGTCell(line_5_1, 'Автоклав:gt5', {["Шанс1"] = '90;95', ["Ресурс1"] = dirty, ["РесурсЖ1"] = 'Вода; Дистиллированная вода', ["РЖК1"] = '200', ["Выход1"] = oven}))
	else
		line_5_1:wikitext('<td>Нельзя обжечь в [[GregTech/Печь|печи]]<br>или<br>кристаллизовать в [[GregTech/Автоклав|автоклаве]].</td>')
	end
-----------
	body:wikitext(addHeadLine(body, clean, 'Очищенная пыль', 'GregTech'))
--
	local line_6_1 = body:tag('tr')
	line_6_1:wikitext(addGTCell(line_6_1, 'Центрифуга:gt5', {["Ресурс1"] = clean, ["Выход1"] = dust, ["Выход2"] = tiny2}))
	if ingot then
		line_6_1:wikitext(addGTCell(line_6_1, 'Печь:gt5', {["Ресурс1"] = clean, ["Выход1"] = ingot}))
	elseif blast then
		line_6_1:wikitext(addGTCell(line_6_1, 'Электрическая доменная печь:gt5', {["Температура"] = temp, ["Ресурс1"] = clean, ["Выход1"] = blast}))
	elseif autoclave then
		line_6_1:wikitext(addGTCell(line_6_1, 'Автоклав:gt5', {["Шанс1"] = '90;95', ["Ресурс1"] = clean, ["РесурсЖ1"] = 'Вода; Дистиллированная вода', ["РЖК1"] = '200', ["Выход1"] = oven}))
	else
		line_6_1:wikitext('<td>Нельзя обжечь в [[GregTech/Печь|печи]]<br>или<br>кристаллизовать в [[GregTech/Автоклав|автоклаве]].</td>')
	end
--
	if magnet then
		local line_6_2 = body:tag('tr')
		local mt = {["Железо"] = {'железн','Кусочек железа'},["Золото"] = {'золот','v:Кусочек золота'},["Неодим"] = {'неодимов','Кусочек неодима'}}
		line_6_2:wikitext(addGTCell(line_6_2, 'Электромагнитный разделитель:gt5', {["Шанс2"] = '40', ["Шанс3"] = '20', ["Ресурс1"] = clean, ["Выход1"] = dust, ["Выход2"] = 'Кучка ' .. mt[magnet][1] .. 'ой пыли', ["Выход3"] = mt[magnet][2]}))
		line_6_2:wikitext('<td>&nbsp;</td>')
	end
	return tostring( mw.html.create( 'table' ):node( body ) )
end

return p