Модуль:Сетка

Материал из Playzone Minecraft Wiki
Перейти к: навигация, поиск

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

local p = {}

-- Отдельная ячейка
function p.cell(f)
	local args = f.args or f
	if f == mw.getCurrentFrame() and args[1] == nil then
		args = f:getParent().args
	end
	args[1] = mw.text.trim( args[1] or '' )
	
	local animated = args[1]:find( ';' )
	local pageName = mw.title.getCurrentTitle().subpageText
	
	local class = args['класс']
	local align = args['выравн']
	local background = args['фон']
	local border = args['граница']
	local default = args['умолчание']
	local defaultCSS = args['умолчаниеCSS']
	
	local mods = {}
	if args['моды'] then
		for mod in mw.text.gsplit(args['моды'], '%s*;%s*') do
			table.insert(mods, mod)
		end
	end
	local title = args['назв']
	local link = args['ссылка']
	
	local result = {'<span class="grid ' .. (class or '')}
	table.insert(result, '"')

	if align or background or border then
		table.insert(result, 'style="')
		if align then
			table.insert(result, 'vertical-align: ' .. align .. ';')
		end
		if background then
			table.insert(result, 'background-color: ' .. background .. ';')
		end
		if border then
			table.insert(result, 'outline: 2px solid ' .. border .. ';')
		end
		table.insert(result, '"')
	end
	
	table.insert(result, '>')
	
	if class ~= 'hidden' then
		table.insert(result, '<span class="border"><span>&nbsp;</span></span>')
	end
	
	if default then
		table.insert(result, '<span class="default-image">[[Файл:Grid ' .. default .. '.png|link=]]</span>')
	end
	if defaultCSS then
		table.insert(result, '<span class="default-image">' .. defaultCSS .. '</span>')
	end
	-- Начало кода Сетка/Ячейка
	if animated then
		table.insert(result, '<span class="animated" style="overflow:hidden;display:block;width:32px">')
	end
	
	local b = false
	for frame in mw.text.gsplit(args[1], '%s*;%s*') do
		local num, mod, name
		if frame:find(',') then
			local fullname
			fullname, num = frame:match('([^,]+),(%d+)')
			if fullname:find(':') then
				name, mod = fullname:match('([^:]+):m(%d+)')
				mod = mods[tonumber(mod)]
			else
				name = fullname
				mod = nil
			end
		else
			num = nil
			if frame:find(':') then
				name, mod = frame:match('([^:]+):m(%d+)')
				mod = mods[tonumber(mod)]
			else 
				name = frame
				mod = nil
			end
		end
		
		if b then
			table.insert(result, '<span class="image active">')
			b = false
		else
			table.insert(result, '<span class="image">')
		end
		-- Начало кода Сетка/Спрайт
		table.insert(result, '<span class="gridsprite" ')
		if title then
			if mw.ustring.lower(title) ~= 'нет' then
				table.insert(result, 'title="' .. title .. '"')
			end
		else
			if frame ~= '' then
				if mw.ustring.lower(link or '') == 'нет' then
					table.insert(result, 'title="' .. name .. '"')
				end
			end
		end
		table.insert(result, '>')
		
		if frame ~= '' then
			table.insert(result, '[[Файл:Grid ')
			if mod then
				table.insert(result, name .. ' (' .. mod .. ')')
			else
				table.insert(result, name)
			end
			table.insert(result, '.png|32px|link=')
			if not title then
				if link then
					if mw.ustring.lower(link) ~= 'нет' then
						if mod then
							table.insert(result, mod .. '/' .. link)
						else
							table.insert(result, link)
						end
					end
				else
					if mod then
						table.insert(result, mod .. '/' .. name)
					else
						table.insert(result, name)
					end
				end
			end
			table.insert(result, ']]')
			if tonumber(num) then
				num = tonumber(num)
				if (num > 1) and (num < 1000) then
					table.insert(result, '<span class="number" ')
					if title then
						if mw.ustring.lower(title) ~= 'нет' then
							table.insert(result, 'title="' .. title .. '"')
						end
					else
						if frame ~= '' then
							if mw.ustring.lower(link or '') == 'нет' then
								table.insert(result, 'title="' .. name .. '"')
							end
						end
					end
					table.insert(result, '>')
					if title then
						table.insert(result, tostring(num))
					else
						if link then
							if mw.ustring.lower(link) == 'нет' then
								table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>')
							else
								table.insert(result, '[[')
								if mod then
									table.insert(result, mod .. '/' .. name)
								else
									table.insert(result, name)
								end
								table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>]]')
							end
						else
							table.insert(result, '[[')
							if mod then
								table.insert(result, mod .. '/' .. name)
							else
								table.insert(result, name)
							end
							table.insert(result, '|' .. tostring(num) .. '<span>' .. tostring(num) .. '</span>]]')
						end
					end
					table.insert(result, '</span>')
				end
			end
		else
			table.insert(result, '[[Файл:Grid layout Empty.png|32px|link=]]')
		end
		table.insert(result, '</span>')
		table.insert(result, '</span>')
		-- Конец кода Сетка/Спрайт
	end
	if animated then
		table.insert(result, '</span>')
	end
	-- Конец кода Сетка/Ячейка
	table.insert(result, '</span>')
	return table.concat(result)
end

--- Варианты сеток; прописаны в модуле для избежания многочисленных вызовов {{#invoke:}} на одну сетку
-- Верстак
function p.craftingTable( f )
        local args = f.args or f
        if f == mw.getCurrentFrame() and f.args["Выход"] == nil then
                args = f:getParent().args
        end
       
        local arrow = 'Arrow (small)'
        local shapeless = ''
       
        if args["Стрелка"] or '' ~= '' then
                arrow = args["Стрелка"]
        end
        if args["бесформенный"] or '' ~= '' then
                shapeless = '<span title="Этот рецепт&nbsp;&mdash; бесформенный; ресурсы могут располагаться в сетке верстака в любом порядке.">[[Файл:Grid layout Shapeless.png|link=]]</span>'
        elseif args["фиксированный"] or '' ~= '' then
                local notFixed = ''
                if args["нефиксировано"] or '' ~= '' then
                        notFixed = ', кроме ' .. args["нефиксировано"]
                end
                shapeless = '<span title="Этот рецепт&nbsp;&mdash; фиксированный, его ингредиенты не могут быть перемещены или зеркально отражены' .. notFixed .. '.">[[Файл:Grid layout Fixed.png|link=]]</span>'
        end
       
        local html = {
                '{| class="grid-Crafting_Table" cellpadding="0" cellspacing="0"',
                '| ' .. p.cell{ args.A1, ["моды"] = args["Моды"], ["ссылка"] = args["A1Ссылка"], ["назв"] = args["A1Назв"] },
                '| ' .. p.cell{ args.B1, ["моды"] = args["Моды"], ["ссылка"] = args["B1Ссылка"], ["назв"] = args["B1Назв"] },
                '| ' .. p.cell{ args.C1, ["моды"] = args["Моды"], ["ссылка"] = args["C1Ссылка"], ["назв"] = args["C1Назв"] },
                '| rowspan="2" class="arrow" | [[Файл:Grid layout ' .. arrow .. '.png|link=]]',
                '| rowspan="3" | ' .. p.cell{ args["Выход"], ["моды"] = args["Моды"], ["ссылка"] = args["ВСсылка"], ["назв"] = args["ВНазв"], ["класс"] = 'output' },
                '|-',
                '| ' .. p.cell{ args.A2, ["моды"] = args["Моды"], ["ссылка"] = args["A2Ссылка"], ["назв"] = args["A2Назв"] },
                '| ' .. p.cell{ args.B2, ["моды"] = args["Моды"], ["ссылка"] = args["B2Ссылка"], ["назв"] = args["B2Назв"] },
                '| ' .. p.cell{ args.C2, ["моды"] = args["Моды"], ["ссылка"] = args["C2Ссылка"], ["назв"] = args["C2Назв"] },
                '|-',
                '| ' .. p.cell{ args.A3, ["моды"] = args["Моды"], ["ссылка"] = args["A3Ссылка"], ["назв"] = args["A3Назв"] },
                '| ' .. p.cell{ args.B3, ["моды"] = args["Моды"], ["ссылка"] = args["B3Ссылка"], ["назв"] = args["B3Назв"] },
                '| ' .. p.cell{ args.C3, ["моды"] = args["Моды"], ["ссылка"] = args["C3Ссылка"], ["назв"] = args["C3Назв"] },
                '| class="shapeless" | ' .. shapeless,
                '|}'
        }
       
        return table.concat( html, '\n' );
end

-- Печка
function p.furnace(f)
	local args = f
	if f == mw.getCurrentFrame() then
		args = f:getParent().args
	end
	args = require( 'Module:ProcessArgs' ).norm( args )
	
	local progress = 'Furnace Progress'
	local burning = ' (in-active)'
	local smelting = burning
	local fuelUsage = 'Fire'
	
	if args["Прогресс"] then
		progress = args["Прогресс"] .. ' Progress'
		if args["ТМод"] then
			progress = progress .. ' (' .. args["ТМод"] .. ')'
		end
	end

	if args["Ресурс"] and args["Топливо"] then
		burning = ''
		if args["Выход"] then
			smelting = ''
		end
	end
	
	if args["Расход"] then
		fuelUsage = args["Расход"]
		if args["ТМод"] then
			fuelUsage = fuelUsage .. ' (' .. args["ТМод"] .. ')'
		end
	end
	
	local html = {
		'{| class="grid-Furnace" cellpadding="0" cellspacing="0"',
		'| ' .. p.cell{ args["Ресурс"], ["моды"] = args["Моды"], ["ссылка"] = args["РСсылка"], ["назв"] = args["РНазв"] },
		'| rowspan="3" class="arrow" | [[Файл:Grid layout ' .. progress .. smelting .. '.png|link=]]',
		'| rowspan="3" class="output" | ' .. p.cell{ args["Выход"], ["моды"] = args["Моды"], ["ссылка"] = args["ВСсылка"], ["назв"] = args["ВНазв"], ["класс"] = 'output' },
		'|-',
		'| [[Файл:Grid layout ' .. fuelUsage .. burning .. '.png|link=]]',
		'|-',
		'| ' .. p.cell{ args["Топливо"], ["моды"] = args["Моды"], ["ссылка"] = args["ТСсылка"], ["назв"] = args["ТНазв"] },
		'|}'
	}
	
	return table.concat( html, '\n' );
end

-- Варочная стойка
function p.brewingStand( f )
	local args = f
	if f == mw.getCurrentFrame() then
		args = f:getParent().args
	end
	args = require( 'Module:ProcessArgs' ).norm( args )
	
	local inactive = ' (In-active)'
	if args["Ресурс"] and ( args["Выход1"] or args["Выход2"] or args["Выход3"] ) then
		inactive = ''
	end
	
	local html = {
		'<div class="grid-Brewing_Stand">',
			'{| cellpadding="0" cellspacing="0"',
			'| class="bubbles" | [[Файл:Grid layout Brewing Bubbles.gif|link=]]',
			'| class="input" | ' .. p.cell{ args["Ресурс"], ["моды"] = args["Моды"], ["ссылка"] = args["РСсылка"], ["назв"] = args["РНазв"] },
			'| [[Файл:Grid layout Brewing Arrow' .. inactive .. '.png|link=]]',
			'|-',
			'| class="output1" | ' .. p.cell{ args["Выход1"], ["моды"] = args["Моды"], ["ссылка"] = args["В1Ссылка"], ["назв"] = args["В1Назв"], ["умолчание"] = 'layout Brewing Empty' },
			'| class="output2" | ' .. p.cell{ args["Выход2"], ["моды"] = args["Моды"], ["ссылка"] = args["В2Ссылка"], ["назв"] = args["В2Назв"], ["умолчание"] = 'layout Brewing Empty' },
			'| class="output3" | ' .. p.cell{ args["Выход3"], ["моды"] = args["Моды"], ["ссылка"] = args["В3Ссылка"], ["назв"] = args["В3Назв"], ["умолчание"] = 'layout Brewing Empty' },
			'|-',
			'| class="paths" colspan="3" | [[Файл:Grid layout Brewing Paths.png|link=]]',
			'|}',
		'</div>'
	}
	
	return table.concat( html, '\n' );
end
 
return p