<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://playzone.in.ua/wiki/mc//index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0</id>
		<title>Модуль:Использование для крафта - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://playzone.in.ua/wiki/mc//index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0"/>
		<link rel="alternate" type="text/html" href="https://playzone.in.ua/wiki/mc//index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0&amp;action=history"/>
		<updated>2026-05-09T11:29:26Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.28.3</generator>

	<entry>
		<id>https://playzone.in.ua/wiki/mc//index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0&amp;diff=13272&amp;oldid=prev</id>
		<title>Softer: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://playzone.in.ua/wiki/mc//index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0&amp;diff=13272&amp;oldid=prev"/>
				<updated>2017-01-17T22:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style='vertical-align: top;' lang='ru'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 22:27, 17 января 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' lang='ru'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Softer</name></author>	</entry>

	<entry>
		<id>https://playzone.in.ua/wiki/mc//index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0&amp;diff=13271&amp;oldid=prev</id>
		<title>Atributz в 17:04, 18 ноября 2016</title>
		<link rel="alternate" type="text/html" href="https://playzone.in.ua/wiki/mc//index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BA%D1%80%D0%B0%D1%84%D1%82%D0%B0&amp;diff=13271&amp;oldid=prev"/>
				<updated>2016-11-18T17:04:14Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Модуль для отображения списка рецептов крафта, в котором тот или иной предмет используется.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.dpl( f )&lt;br /&gt;
	local args = f:getParent().args&lt;br /&gt;
	local slot = require(&amp;quot;Модуль:Инвентарный слот&amp;quot;)&lt;br /&gt;
	local ingredients = args[1] and mw.text.split( args[1], '%s*,%s*' ) or { mw.title.getCurrentTitle().text }&lt;br /&gt;
	local matchTypes = args[&amp;quot;фрагмент&amp;quot;] and mw.ustring.find(args[&amp;quot;фрагмент&amp;quot;], ',' ) and mw.text.split( args[&amp;quot;фрагмент&amp;quot;], '%s*,%s*' ) or args[&amp;quot;фрагмент&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
	local argList = {&lt;br /&gt;
		'игнорировать', 'запланированное', 'имя', 'ингредиенты', 'группыарг',&lt;br /&gt;
		1, 2, 3, 4, 5, 6, 7, 8, 9,&lt;br /&gt;
		'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3',&lt;br /&gt;
		'Выход', 'описание', 'фиксированный', 'нефиксировано'&lt;br /&gt;
	}&lt;br /&gt;
	local anonToShaped = { 'A1', 'B1', 'C1', 'A2', 'B2', 'C2', 'A3', 'B3', 'C3' }&lt;br /&gt;
	local shapedToAnon = { A1 = 1, B1 = 2, C1 = 3, A2 = 4, B2 = 5, C2 = 6, A3 = 7, B3 = 8, C3 = 9 }&lt;br /&gt;
&lt;br /&gt;
	local data = ''&lt;br /&gt;
	if args[&amp;quot;категория&amp;quot;] then&lt;br /&gt;
		data = f:callParserFunction( '#dpl:', {&lt;br /&gt;
			category = args[&amp;quot;категория&amp;quot;],&lt;br /&gt;
			nottitleregexp = args[&amp;quot;игнорировать&amp;quot;],&lt;br /&gt;
			include = '{Крафт}:' .. table.concat( argList, ':' ),&lt;br /&gt;
			mode = 'userformat',&lt;br /&gt;
			secseparators = '====',&lt;br /&gt;
			multisecseparators = '====',&lt;br /&gt;
		} )&lt;br /&gt;
	else&lt;br /&gt;
		-- #dpl может обрабатывать максимум 4 категории сразу, поэтому обрабатываем группами по 4&lt;br /&gt;
		for i = 1, #ingredients, 4 do&lt;br /&gt;
			data = data .. f:callParserFunction( '#dpl:', {&lt;br /&gt;
				category = table.concat( ingredients, ' как ингредиент для крафта|', i, math.min( i + 3, #ingredients ) ) .. ' как ингредиент для крафта',&lt;br /&gt;
				nottitleregexp = args[&amp;quot;игнорировать&amp;quot;],&lt;br /&gt;
				include = '{Крафт}:' .. table.concat( argList, ':' ),&lt;br /&gt;
				mode = 'userformat',&lt;br /&gt;
				secseparators = '====',&lt;br /&gt;
				multisecseparators = '====',&lt;br /&gt;
			} )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Закомментируйте следующую строку, если псевдонимы не поддерживаются&lt;br /&gt;
	local aliases = mw.loadData( 'Модуль:Инвентарный слот/Псевдонимы' )&lt;br /&gt;
	&lt;br /&gt;
	local function matchPattern( ingredient, ingredientNum )&lt;br /&gt;
		local matchType = matchTypes&lt;br /&gt;
		if type( matchType ) == 'table' then&lt;br /&gt;
			matchType = matchTypes[ingredientNum]&lt;br /&gt;
		end&lt;br /&gt;
		local pattern&lt;br /&gt;
		local escaped = mw.ustring.lower(mw.ustring.gsub(ingredient, '([%(%)])', '%%%1' ))&lt;br /&gt;
		if matchType == 'начало' then&lt;br /&gt;
			pattern = '[;:%]]%s*' .. escaped&lt;br /&gt;
		elseif matchType == 'конец' then&lt;br /&gt;
			pattern = escaped .. '%s*[,;%[]'&lt;br /&gt;
		elseif matchType == 'любое' then&lt;br /&gt;
			pattern = escaped&lt;br /&gt;
		else&lt;br /&gt;
			pattern = '[;:%]]%s*' .. escaped .. '%s*[,;%[]'&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return pattern&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function compareTables( a, b )&lt;br /&gt;
		for k, v in pairs( a ) do&lt;br /&gt;
			if type( b[k] ) ~= type( v ) then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
			if type( v ) == 'table' then&lt;br /&gt;
				if not compareTables( v, b[k] ) then&lt;br /&gt;
					return false&lt;br /&gt;
				end&lt;br /&gt;
			elseif v ~= b[k] then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( b ) do&lt;br /&gt;
			if a[k] == nil then&lt;br /&gt;
				return false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local out = {}&lt;br /&gt;
	local showDesciption&lt;br /&gt;
	local templates = {}&lt;br /&gt;
	for template in mw.text.gsplit( data, '====' ) do&lt;br /&gt;
		-- Если параметр «игнорировать» не установлен...&lt;br /&gt;
		if mw.ustring.find(template, '^%s*|' ) then&lt;br /&gt;
			local tArgs = {}&lt;br /&gt;
			local i = 0&lt;br /&gt;
			-- Разбор аргументов из запроса DPL&lt;br /&gt;
			for tArg in mw.text.gsplit( template, '\n|' ) do&lt;br /&gt;
				i = i + 1&lt;br /&gt;
				if tArg ~= '' then&lt;br /&gt;
					local key = argList[i]&lt;br /&gt;
					tArgs[key] = tArg&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local craftingArgs = {&lt;br /&gt;
				tArgs[1] or tArgs.A1 or '', tArgs[2] or tArgs.B1 or '', tArgs[3] or tArgs.C1 or '',&lt;br /&gt;
				tArgs[4] or tArgs.A2 or '', tArgs[5] or tArgs.B2 or '', tArgs[6] or tArgs.C2 or '',&lt;br /&gt;
				tArgs[7] or tArgs.A3 or '', tArgs[8] or tArgs.B3 or '', tArgs[9] or tArgs.C3 or '',&lt;br /&gt;
				[&amp;quot;Выход&amp;quot;] = tArgs[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			local expandedFrames = {}&lt;br /&gt;
			local hasIngredient&lt;br /&gt;
			local argsWithIngredient = {}&lt;br /&gt;
			local argGroups = {}&lt;br /&gt;
			for i, v in pairs( craftingArgs ) do&lt;br /&gt;
				if v ~= '' then&lt;br /&gt;
					if aliases then&lt;br /&gt;
						expandedFrames[i] = {}&lt;br /&gt;
						local expandedFrame = {}&lt;br /&gt;
						for frame in mw.text.gsplit( v, '%s*;%s*' ) do&lt;br /&gt;
							local parts = slot.getParts( frame )&lt;br /&gt;
							local alias = aliases[parts.name]&lt;br /&gt;
							if alias then&lt;br /&gt;
								local expandedAlias = mw.ustring.gsub(slot.expandAlias( parts, alias ), '%s*([%[%]:,;])%s*', '%1' )&lt;br /&gt;
								expandedFrames[i][frame] = mw.ustring.gsub(expandedAlias, '([%(%)])', '%%%1' )&lt;br /&gt;
								table.insert( expandedFrame, expandedAlias )&lt;br /&gt;
							else&lt;br /&gt;
								table.insert( expandedFrame, frame )&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						v = table.concat( expandedFrame, ';' )&lt;br /&gt;
						craftingArgs[i] = v&lt;br /&gt;
					end&lt;br /&gt;
					if i ~= 'Выход' then&lt;br /&gt;
						local delimitedFrames = ';' .. mw.ustring.lower(v) .. ';'&lt;br /&gt;
						for ingredientNum, ingredient in pairs( ingredients ) do&lt;br /&gt;
							if mw.ustring.find(delimitedFrames, matchPattern( ingredient, ingredientNum ) ) then&lt;br /&gt;
								if not mw.ustring.find(v, ';' ) then&lt;br /&gt;
									hasIngredient = 'static'&lt;br /&gt;
								elseif not hasIngredient then&lt;br /&gt;
									hasIngredient = 'animated'&lt;br /&gt;
								end&lt;br /&gt;
								&lt;br /&gt;
								argsWithIngredient[i] = true&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					if not tArgs[&amp;quot;группыарг&amp;quot;] and hasIngredient ~= 'static' then&lt;br /&gt;
						local _, frameCount = v:gsub( ';', '' )&lt;br /&gt;
						if frameCount &amp;gt; 0 then&lt;br /&gt;
							frameCount = frameCount + 1&lt;br /&gt;
							local group = argGroups[frameCount]&lt;br /&gt;
							if not group then&lt;br /&gt;
								group = { args = {} }&lt;br /&gt;
								argGroups[frameCount] = group&lt;br /&gt;
							end&lt;br /&gt;
							group.count = frameCount&lt;br /&gt;
							group.args[i] = true&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if hasIngredient then&lt;br /&gt;
				if tArgs[&amp;quot;описание&amp;quot;] then&lt;br /&gt;
					showDescription = true&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if hasIngredient == 'animated' then&lt;br /&gt;
					if tArgs[&amp;quot;группыарг&amp;quot;] then&lt;br /&gt;
						for argGroup in mw.text.gsplit( tArgs[&amp;quot;группыарг&amp;quot;], '%s*;%s*' ) do&lt;br /&gt;
							local group = {}&lt;br /&gt;
							local _, frameCount&lt;br /&gt;
							for arg in mw.text.gsplit( argGroup, '%s*,%s*' ) do&lt;br /&gt;
								if not tArgs[1] then&lt;br /&gt;
									arg = shapedToAnon[arg]&lt;br /&gt;
								end&lt;br /&gt;
								if not frameCount then&lt;br /&gt;
									_, frameCount = mw.ustring.gsub(craftingArgs[arg], ';', '' )&lt;br /&gt;
								end&lt;br /&gt;
								group[arg] = true&lt;br /&gt;
							end&lt;br /&gt;
							table.insert( argGroups, { count = frameCount + 1, args = group } )&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					for _, groupData in pairs( argGroups ) do&lt;br /&gt;
						local frameCount = groupData.count&lt;br /&gt;
						local group = groupData.args&lt;br /&gt;
						local requiredFrames = {}&lt;br /&gt;
						local requiredFramesCount = 0&lt;br /&gt;
						for arg in pairs( group ) do&lt;br /&gt;
							if argsWithIngredient[arg] then&lt;br /&gt;
								local frames = craftingArgs[arg]&lt;br /&gt;
								local frameNum = 0&lt;br /&gt;
								for frame in mw.text.gsplit( frames, '%s*;%s*' ) do&lt;br /&gt;
									frameNum = frameNum + 1&lt;br /&gt;
									if not requiredFrames[frameNum] then&lt;br /&gt;
										local delimitedFrame = ';' .. frame .. ';'&lt;br /&gt;
										for ingredientNum, ingredient in pairs( ingredients ) do&lt;br /&gt;
											if mw.ustring.find(delimitedFrame, matchPattern( ingredient, ingredientNum ) ) then&lt;br /&gt;
												requiredFrames[frameNum] = true&lt;br /&gt;
												requiredFramesCount = requiredFramesCount + 1&lt;br /&gt;
											end&lt;br /&gt;
										end&lt;br /&gt;
									end&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						-- Будут показаны не все фреймы...&lt;br /&gt;
						if requiredFramesCount &amp;gt; 0 and requiredFramesCount &amp;lt; frameCount then&lt;br /&gt;
							for arg in pairs( group ) do&lt;br /&gt;
								local frames = craftingArgs[arg]&lt;br /&gt;
								local newFrames = {}&lt;br /&gt;
								local frameNum = 0&lt;br /&gt;
								for frame in mw.text.gsplit( frames, '%s*;%s*' ) do&lt;br /&gt;
									frameNum = frameNum + 1&lt;br /&gt;
									if requiredFrames[frameNum] then&lt;br /&gt;
										table.insert( newFrames, frame )&lt;br /&gt;
									end&lt;br /&gt;
								end&lt;br /&gt;
								newFrames = table.concat( newFrames, ';' )&lt;br /&gt;
								&lt;br /&gt;
								-- Если весь разобранный псевдоним остался, заново соберём его&lt;br /&gt;
								if expandedFrames[arg] then&lt;br /&gt;
									for frame, expandedAlias in pairs( expandedFrames[arg] ) do&lt;br /&gt;
										--newFrames = 'blah' .. expandedAlias&lt;br /&gt;
										newFrames = mw.ustring.gsub(newFrames, expandedAlias, frame )&lt;br /&gt;
									end&lt;br /&gt;
								end&lt;br /&gt;
								&lt;br /&gt;
								local tArg = arg&lt;br /&gt;
								if arg ~= 'Выход' and not tArgs[1] then&lt;br /&gt;
									tArg = anonToShaped[arg]&lt;br /&gt;
								end&lt;br /&gt;
								tArgs[tArg] = newFrames&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Заботу о колонках имени и ингредиентов возложим на модуль Крафт&lt;br /&gt;
							tArgs[&amp;quot;имя&amp;quot;] = nil&lt;br /&gt;
							tArgs[&amp;quot;ингредиенты&amp;quot;] = nil&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				tArgs[&amp;quot;некат&amp;quot;] = '1'&lt;br /&gt;
&lt;br /&gt;
				local found = false&lt;br /&gt;
				for i, v in ipairs( templates ) do&lt;br /&gt;
					if compareTables( v, tArgs ) then&lt;br /&gt;
						found = true&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if not found then&lt;br /&gt;
					table.insert( templates, tArgs )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #templates == 0 then&lt;br /&gt;
		return '[[Категория:Пустые перечисления использования для крафта]]'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	templates[1][&amp;quot;глава&amp;quot;] = '1'&lt;br /&gt;
	templates[1][&amp;quot;показатьимя&amp;quot;] = '1'&lt;br /&gt;
	if showDescription and args[&amp;quot;показатьописание&amp;quot;] ~= '0' or args[&amp;quot;показатьописание&amp;quot;] == '1' then&lt;br /&gt;
		templates[1][&amp;quot;показатьописание&amp;quot;] = '1'&lt;br /&gt;
	end&lt;br /&gt;
	if not args[&amp;quot;продолжить&amp;quot;] then&lt;br /&gt;
		templates[#templates][&amp;quot;подвал&amp;quot;] = '1'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local crafting = require( 'Модуль:Крафт' )&lt;br /&gt;
	local out = {}&lt;br /&gt;
	for i, v in ipairs( templates ) do&lt;br /&gt;
		table.insert( out, crafting.table( v ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( out, '\n' )&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Atributz</name></author>	</entry>

	</feed>