<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://lcw1.spark108.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0</id>
	<title>Модуль:ТестОбработка - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://lcw1.spark108.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3A%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;action=history"/>
	<updated>2026-05-10T13:36:04Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;diff=7314&amp;oldid=prev</id>
		<title>Spark108: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;diff=7314&amp;oldid=prev"/>
		<updated>2025-06-08T10:18:51Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 10:18, 8 июня 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&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>Spark108</name></author>
	</entry>
	<entry>
		<id>https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;diff=7313&amp;oldid=prev</id>
		<title>minecraftwiki&gt;Cook Me Plox: rebase staging changes onto prod</title>
		<link rel="alternate" type="text/html" href="https://lcw1.spark108.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A2%D0%B5%D1%81%D1%82%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0&amp;diff=7313&amp;oldid=prev"/>
		<updated>2023-11-28T15:52:30Z</updated>

		<summary type="html">&lt;p&gt;rebase staging changes onto prod&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Экспортируемые функции&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Внутренние функции&lt;br /&gt;
local h = {}&lt;br /&gt;
&lt;br /&gt;
---- Локальные переменные модуля&lt;br /&gt;
local slot = require(&amp;#039;Модуль:Инвентарный слот&amp;#039;).slot&lt;br /&gt;
local baseSprite = require(&amp;#039;Модуль:Спрайт&amp;#039;).base&lt;br /&gt;
&lt;br /&gt;
-- Параметры машины&lt;br /&gt;
local versions = {&lt;br /&gt;
	[&amp;quot;GregTech 4&amp;quot;] = &amp;#039;GregTech 4&amp;#039;,&lt;br /&gt;
	[&amp;quot;gt4&amp;quot;] = &amp;#039;GregTech 4&amp;#039;,&lt;br /&gt;
	[&amp;quot;GT4&amp;quot;] = &amp;#039;GregTech 4&amp;#039;,&lt;br /&gt;
	[&amp;quot;GregTech 5&amp;quot;] = &amp;#039;GregTech 5&amp;#039;,&lt;br /&gt;
	[&amp;quot;gt5&amp;quot;] = &amp;#039;GregTech 5&amp;#039;,&lt;br /&gt;
	[&amp;quot;GT5&amp;quot;] = &amp;#039;GregTech 5&amp;#039;,&lt;br /&gt;
	[&amp;quot;GregTech 5 Unofficial&amp;quot;] = &amp;#039;GregTech 5 Unofficial&amp;#039;,&lt;br /&gt;
	[&amp;quot;gt5u&amp;quot;] = &amp;#039;GregTech 5 Unofficial&amp;#039;,&lt;br /&gt;
	[&amp;quot;GT5U&amp;quot;] = &amp;#039;GregTech 5 Unofficial&amp;#039;,&lt;br /&gt;
	[&amp;quot;GregTech 6&amp;quot;] = &amp;#039;GregTech 6&amp;#039;,&lt;br /&gt;
	[&amp;quot;gt6&amp;quot;] = &amp;#039;GregTech 6&amp;#039;,&lt;br /&gt;
	[&amp;quot;GT6&amp;quot;] = &amp;#039;GregTech 6&amp;#039;,&lt;br /&gt;
	[&amp;quot;IndustrialCraft 2&amp;quot;] = &amp;#039;IndustrialCraft 2&amp;#039;,&lt;br /&gt;
	[&amp;quot;ic2&amp;quot;] = &amp;#039;IndustrialCraft 2&amp;#039;,&lt;br /&gt;
	[&amp;quot;IC2&amp;quot;] = &amp;#039;IndustrialCraft 2&amp;#039;,&lt;br /&gt;
	&amp;#039;&amp;amp;4Неизвестна&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
---- Локальные функции модуля&lt;br /&gt;
-- Быстрее mw.text.trim, но не может обработать юникодные пробелы.&lt;br /&gt;
function h.fast_trim(str)&lt;br /&gt;
	return (str:gsub(&amp;quot;^%s+&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;%s+$&amp;quot;, &amp;quot;&amp;quot;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Должна быть быстрее mw.text.split.&lt;br /&gt;
-- Адаптировано отсюда: https://help.gamepedia.com/Extension:Scribunto#mw.text.split_is_very_slow&lt;br /&gt;
function h.split_on_semi(str)&lt;br /&gt;
    local parts = {}&lt;br /&gt;
    local start_index = 1&lt;br /&gt;
	local num_parts = 1&lt;br /&gt;
	&lt;br /&gt;
    local split_start, split_end = str:find(&amp;#039;;&amp;#039;, start_index, true)&lt;br /&gt;
    while split_start do&lt;br /&gt;
        parts[num_parts] = h.fast_trim(str:sub(start_index, split_start - 1))&lt;br /&gt;
        start_index = split_end + 1&lt;br /&gt;
        split_start, split_end = str:find(&amp;#039;;&amp;#039;, start_index, true)&lt;br /&gt;
        &lt;br /&gt;
        num_parts = num_parts + 1&lt;br /&gt;
    end&lt;br /&gt;
    parts[num_parts] = h.fast_trim(str:sub(start_index))&lt;br /&gt;
    &lt;br /&gt;
    return ipairs(parts)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Добавление слота&lt;br /&gt;
function h.addSlot(where, item, mod, Back_ID, class, style)&lt;br /&gt;
	where:wikitext(slot{&lt;br /&gt;
		item, [&amp;quot;мод&amp;quot;] = mod, [&amp;quot;класс&amp;quot;] = class, [&amp;quot;Фон ИД&amp;quot;] = Back_ID, [&amp;quot;стиль&amp;quot;] = style&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
-- Анимирование текста&lt;br /&gt;
function h.animate(txt)&lt;br /&gt;
	if not txt:find(&amp;#039;;&amp;#039;, 1, true) then&lt;br /&gt;
		return txt&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = {&amp;#039;&amp;lt;span class=&amp;quot;animated&amp;quot;&amp;gt;&amp;#039;}&lt;br /&gt;
	&lt;br /&gt;
	local index = 2&lt;br /&gt;
	for _, text in h.split_on_semi(txt) do&lt;br /&gt;
		if text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			result[index] = &amp;#039;&amp;lt;span&amp;gt;&amp;#039;&lt;br /&gt;
			result[index + 1] = text&lt;br /&gt;
			result[index + 2] = &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			index = index + 3&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	result[index] = &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if index &amp;gt; 2 then&lt;br /&gt;
		result[2] = &amp;#039;&amp;lt;span class=&amp;quot;active&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( result )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Конструктор текста с подсказкой&lt;br /&gt;
function h.help_string(HTitle, HText)&lt;br /&gt;
	return mw.html.create(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:cssText(&amp;quot;border-bottom:1px dotted;cursor: help;&amp;quot;)&lt;br /&gt;
		:attr(&amp;#039;title&amp;#039;, HText)&lt;br /&gt;
		:wikitext(HTitle)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function h.splitOnSemi1(arg, format)&lt;br /&gt;
	if not arg then&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local result = {}&lt;br /&gt;
	&lt;br /&gt;
	for _, text in h.split_on_semi(arg) do&lt;br /&gt;
		if text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert( result, format:format(text) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.interface = function(f)&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = f:getParent().args&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Контейнер интерфейса	&lt;br /&gt;
	local body = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	local recipe = body:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;gui-recipe&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-------------------------------------- Используемые функции ---------------------------------------&lt;br /&gt;
	&lt;br /&gt;
	-- Конструктор строк потребления&lt;br /&gt;
	local h_size, EStrings&lt;br /&gt;
	local EString = function(EBody_Title, EBody_Help, arg, EBody_Unit)&lt;br /&gt;
		if not arg then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		EStrings = EStrings or body:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;gui-energy-lines&amp;#039;)&lt;br /&gt;
		h_size = h_size + 22&lt;br /&gt;
		&lt;br /&gt;
		return EStrings&lt;br /&gt;
		    :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		    :node(h.help_string(EBody_Title, EBody_Help))&lt;br /&gt;
		    :wikitext(&amp;#039; &amp;#039;, h.animate(arg), &amp;#039; &amp;#039;, EBody_Unit)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local progress = args[&amp;quot;Прогресс&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
	local machine_list = {}&lt;br /&gt;
	local machine = {}&lt;br /&gt;
	local furnace_like = true&lt;br /&gt;
	local class2 = &amp;#039;invslot-large&amp;#039;&lt;br /&gt;
	if progress then&lt;br /&gt;
		version = args[&amp;quot;Версия&amp;quot;] or mw.ustring.match(progress, &amp;#039;:%s*([a-zA-Zа-яА-ЯёЁ 0-9]+)&amp;#039;) or args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
		progress = mw.ustring.match(progress, &amp;#039;([a-zA-Zа-яА-ЯёЁ 0-9]+):&amp;#039;) or progress&lt;br /&gt;
		if version then&lt;br /&gt;
			if versions[version] then &lt;br /&gt;
				version = versions[version]&lt;br /&gt;
				machine_list = mw.loadData(&amp;#039;Модуль:ТестОбработка/&amp;#039; .. version)&lt;br /&gt;
				machine = machine_list[progress]&lt;br /&gt;
				furnace_like = false&lt;br /&gt;
				class2 = machine[&amp;quot;Out_class&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			version = versions[1]&lt;br /&gt;
			body:wikitext(&amp;#039;[[Категория:Страницы с неизвестной версией машин]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		machine = {&lt;br /&gt;
			[&amp;quot;Image&amp;quot;] = &amp;quot;[[Файл:Layout_fire.png|link=|36px|class=pixel-image]]&amp;quot;,&lt;br /&gt;
			[&amp;quot;Def_args&amp;quot;] = {[&amp;quot;Топливо&amp;quot;] = &amp;quot;v:Любое топливо&amp;quot;}&lt;br /&gt;
		}&lt;br /&gt;
		progress = &amp;#039;Печь&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if furnace_like then&lt;br /&gt;
		machine[&amp;#039;fuel_input&amp;#039;] = 1&lt;br /&gt;
	end&lt;br /&gt;
	local mod = args[&amp;quot;Мод&amp;quot;] or machine_list[&amp;#039;def_mod&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
	local back_ids = machine.slot_back or {}&lt;br /&gt;
&lt;br /&gt;
	-- Предопределённые аргументы&lt;br /&gt;
	for k, v in pairs(machine[&amp;quot;Def_args&amp;quot;] or {}) do&lt;br /&gt;
		args[k] = args[k] or v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Конфигурация ячеек&lt;br /&gt;
	local byte_zero = (&amp;#039;0&amp;#039;):byte()&lt;br /&gt;
	local machine_code = args[&amp;quot;Машина&amp;quot;] or machine[1] or &amp;#039;11110000&amp;#039;&lt;br /&gt;
	local input_rows, input_cols,&lt;br /&gt;
	      output_rows, output_cols,&lt;br /&gt;
	      fluid_input_rows, fluid_input_cols,&lt;br /&gt;
	      fluid_output_rows, fluid_output_cols = machine_code:byte(1, 8)&lt;br /&gt;
	input_rows = input_rows - byte_zero&lt;br /&gt;
	input_cols = input_cols - byte_zero&lt;br /&gt;
	output_rows = output_rows - byte_zero&lt;br /&gt;
	output_cols = output_cols - byte_zero&lt;br /&gt;
	fluid_input_rows = fluid_input_rows - byte_zero&lt;br /&gt;
	fluid_input_cols = fluid_input_cols - byte_zero&lt;br /&gt;
	fluid_output_rows = fluid_output_rows - byte_zero&lt;br /&gt;
	fluid_output_cols = fluid_output_cols - byte_zero&lt;br /&gt;
&lt;br /&gt;
	-- Определитель стиля&lt;br /&gt;
	local class1 = &amp;#039;&amp;#039;&lt;br /&gt;
	local large = (class2 == &amp;#039;invslot-large&amp;#039;) and 16 or 0&lt;br /&gt;
	local style = machine_list[&amp;quot;Skin&amp;quot;] or &amp;#039;craft-gui&amp;#039;&lt;br /&gt;
	if machine[&amp;quot;Skin&amp;quot;] then&lt;br /&gt;
		style = style .. &amp;#039;-&amp;#039; .. machine[&amp;quot;Skin&amp;quot;]&lt;br /&gt;
		class1 = machine[&amp;quot;Skin&amp;quot;] .. &amp;#039;_invslot&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Иконка реакции&lt;br /&gt;
	local input_pic = 1&lt;br /&gt;
	local machine_image = machine[&amp;quot;Image&amp;quot;]&lt;br /&gt;
	local machine_list_image = machine_list[&amp;quot;Image&amp;quot;]&lt;br /&gt;
	local expense_arg = args[&amp;quot;Расход&amp;quot;]&lt;br /&gt;
	if (machine_list_image or machine_image) and machine_image ~= &amp;#039;None&amp;#039; then&lt;br /&gt;
		fuelImg = machine_image or machine_list_image&lt;br /&gt;
	elseif expense_arg then &lt;br /&gt;
		fuelImg = &amp;#039;[[Файл:Grid layout &amp;#039; ..expense_arg .. &amp;#039; (&amp;#039; .. version .. &amp;#039;).png|link=]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		input_pic = 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Переопределение количества получаемых предметов (1-4)&lt;br /&gt;
	local levelArg = args[&amp;quot;Уровень&amp;quot;]&lt;br /&gt;
	if levelArg then&lt;br /&gt;
		output_rows = math.floor(levelArg / 4) + 1&lt;br /&gt;
		output_cols = levelArg / output_rows&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Предопределение или конвертация некоторых аргументов	&lt;br /&gt;
	args[&amp;quot;Шанс1&amp;quot;] = args[&amp;quot;Шанс1&amp;quot;] or args[&amp;quot;Шанс&amp;quot;]&lt;br /&gt;
	args[&amp;quot;Ресурс1&amp;quot;] = args[&amp;quot;Ресурс1&amp;quot;] or args[&amp;quot;Ресурс&amp;quot;] or args[1]&lt;br /&gt;
	args[&amp;quot;Выход1&amp;quot;] = args[&amp;quot;Выход1&amp;quot;] or args[&amp;quot;Выход&amp;quot;] or args[2]&lt;br /&gt;
	args[&amp;quot;Опыт&amp;quot;] = args[&amp;quot;Опыт&amp;quot;] or args[3]&lt;br /&gt;
	args[&amp;quot;РесурсЖ1&amp;quot;] = args[&amp;quot;РесурсЖ1&amp;quot;] or args[&amp;quot;РесурсЖ&amp;quot;]&lt;br /&gt;
	args[&amp;quot;РЖК1&amp;quot;] = args[&amp;quot;РЖК1&amp;quot;] or args[&amp;quot;РЖК&amp;quot;]&lt;br /&gt;
	args[&amp;quot;РЖТ1&amp;quot;] = args[&amp;quot;РЖТ1&amp;quot;] or args[&amp;quot;РЖТ&amp;quot;]&lt;br /&gt;
	args[&amp;quot;ВыходЖ1&amp;quot;] = args[&amp;quot;ВыходЖ1&amp;quot;] or args[&amp;quot;ВыходЖ&amp;quot;]&lt;br /&gt;
	args[&amp;quot;ВЖК1&amp;quot;] = args[&amp;quot;ВЖК1&amp;quot;] or args[&amp;quot;ВЖК&amp;quot;]&lt;br /&gt;
	args[&amp;quot;ВЖТ1&amp;quot;] = args[&amp;quot;ВЖТ1&amp;quot;] or args[&amp;quot;ВЖТ&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
	if args[&amp;quot;Выход7&amp;quot;] and progress == &amp;#039;Просеиватель&amp;#039; and version == &amp;#039;GregTech 6&amp;#039; then&lt;br /&gt;
		args[&amp;quot;Шанс1&amp;quot;] = &amp;#039;0.01&amp;#039;&lt;br /&gt;
		args[&amp;quot;Шанс2&amp;quot;] = &amp;#039;01&amp;#039;&lt;br /&gt;
		args[&amp;quot;Шанс3&amp;quot;] = &amp;#039;04&amp;#039;&lt;br /&gt;
		args[&amp;quot;Шанс4&amp;quot;] = &amp;#039;15&amp;#039;&lt;br /&gt;
		args[&amp;quot;Шанс5&amp;quot;] = &amp;#039;20&amp;#039;&lt;br /&gt;
		args[&amp;quot;Шанс6&amp;quot;] = &amp;#039;40&amp;#039;&lt;br /&gt;
		args[&amp;quot;Шанс7&amp;quot;] = &amp;#039;50&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Параметры стрелки прогресса&lt;br /&gt;
	local param = machine_list[&amp;#039;Параметры&amp;#039;] or {&lt;br /&gt;
		[&amp;#039;sprite_size&amp;#039;] = 140,&lt;br /&gt;
		[&amp;#039;scale&amp;#039;] = 2,&lt;br /&gt;
		[&amp;quot;default_ID&amp;quot;] = 1,&lt;br /&gt;
		[&amp;quot;arrow_width&amp;quot;] = 28,&lt;br /&gt;
		[&amp;quot;arrow_height&amp;quot;] = 24&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	local size = param[&amp;#039;arrow_width&amp;#039;]									-- ширина спрайта в пикселях&lt;br /&gt;
	local v_size = param[&amp;#039;arrow_height&amp;#039;]								-- высота спрайта в пикселях&lt;br /&gt;
	local pos = (machine[&amp;#039;arrow_ID&amp;#039;] or param[&amp;quot;default_ID&amp;quot;]) - 1 		-- положение спрайта в таблице&lt;br /&gt;
	local sheetWidth = param[&amp;#039;sprite_size&amp;#039;] 							-- ширина таблицы спрайта в пикселях&lt;br /&gt;
	local tiles = sheetWidth / size 									-- количество спрайтов в одной строке&lt;br /&gt;
	local left = pos % tiles * size 									-- горизонтальная координата спрайта &lt;br /&gt;
	local top = math.floor(pos / tiles) * v_size 						-- вертикальная координата спрайта&lt;br /&gt;
	local scale = param[&amp;#039;scale&amp;#039;] 										-- масштаб спрайта (во сколько раз увеличить или уменьшить размер)&lt;br /&gt;
	local arrow_width = (machine[&amp;#039;arrow_width&amp;#039;] or size) * scale		-- ширина спрайта с учётом масштаба&lt;br /&gt;
	local arrow_height = (machine[&amp;#039;arrow_height&amp;#039;] or v_size) * scale	-- высота спрайта с учётом масштаба&lt;br /&gt;
&lt;br /&gt;
	-- Размеры  и отступы шаблона&lt;br /&gt;
	input_size = math.max(input_cols, fluid_input_cols) * 36&lt;br /&gt;
	output_size = math.max(output_cols, fluid_output_cols) * (36 + large)&lt;br /&gt;
&lt;br /&gt;
	local h_margin = (272 - output_size - input_size - arrow_width) / 2	&lt;br /&gt;
	if (input_rows + fluid_input_rows) &amp;gt; 3 or (output_rows + fluid_output_rows) &amp;gt; 3 then&lt;br /&gt;
		h_size = 152&lt;br /&gt;
	else&lt;br /&gt;
		h_size = 130&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	recipe:cssText((&amp;quot;margin:0 %spx;height:%spx;display:inline-flex;&amp;quot;):format(&lt;br /&gt;
		math.floor(0.75 * h_margin),&lt;br /&gt;
		h_size&lt;br /&gt;
	))&lt;br /&gt;
&lt;br /&gt;
	local v_margin_input, v_margin_output&lt;br /&gt;
	local fuel_row = machine[&amp;#039;fuel_input&amp;#039;] or 0&lt;br /&gt;
	if ( fluid_input_rows * fluid_output_rows * input_rows * output_rows ) &amp;gt; 0 then&lt;br /&gt;
		local max_fluid_rows = math.max(fluid_output_rows,fluid_input_rows)&lt;br /&gt;
		v_margin_input = (h_size - 36 * (input_rows + max_fluid_rows)) / 2 - 1&lt;br /&gt;
		v_margin_output = (h_size - 36 * (output_rows + max_fluid_rows)) / 2 - 1&lt;br /&gt;
	else&lt;br /&gt;
		v_margin_input = (h_size - 36 * (input_rows + fluid_input_rows + input_pic + fuel_row)) / (3 - 0 ^ input_rows - 0 ^ fluid_input_rows)		&lt;br /&gt;
		v_margin_output = (h_size - (36 + large) * (output_rows + fluid_output_rows)) / (3 - 0 ^ output_rows - 0 ^ fluid_output_rows)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	------------------------------------------ Ячейки ресурсов ----------------------------------------&lt;br /&gt;
	local input = recipe:tag(&amp;#039;span&amp;#039;):addClass(&amp;#039;gt-input&amp;#039;)&lt;br /&gt;
	input:cssText((&amp;#039;width:%spx;&amp;#039;):format(input_size))&lt;br /&gt;
	if input_rows &amp;gt; 0 then&lt;br /&gt;
		local item_input = input&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:cssText((&amp;#039;margin-top:%spx;text-align:right;&amp;#039;):format(v_margin_input))	&lt;br /&gt;
		local param_arg = args[&amp;quot;Параметр&amp;quot;]&lt;br /&gt;
		for i = 1, input_rows * input_cols do&lt;br /&gt;
			local resource_n = args[&amp;quot;Ресурс&amp;quot; .. i]&lt;br /&gt;
			if resource_n and param_arg and resource_n:find(&amp;#039;Интегральная схема&amp;#039;) then &lt;br /&gt;
				resource_n = resource_n .. &amp;quot;[&amp;amp;7 Параметр: &amp;quot; .. param_arg .. &amp;quot;/]&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			h.addSlot(item_input, resource_n, mod, back_ids[&amp;#039;in&amp;#039; .. i] or back_ids[&amp;#039;in&amp;#039;], class1)&lt;br /&gt;
			&lt;br /&gt;
			if input_pic == 1 and fuel_row == 0 and i == input_rows * input_cols then&lt;br /&gt;
				input:wikitext(fuelImg)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
	end&lt;br /&gt;
	if fuel_row &amp;gt; 0 then&lt;br /&gt;
		input:wikitext(fuelImg .. &amp;#039;&amp;lt;br&amp;gt;&amp;#039;)&lt;br /&gt;
		fuel = args[&amp;#039;Топливо&amp;#039;] or args[&amp;#039;топливо&amp;#039;] or args[&amp;#039;Ресурс&amp;#039; .. input_rows * input_cols + 1]&lt;br /&gt;
		h.addSlot(input, fuel, mod, back_ids[&amp;#039;fuel&amp;#039;], class1)&lt;br /&gt;
	end&lt;br /&gt;
	if progress == &amp;#039;Режущий механизм&amp;#039; then&lt;br /&gt;
		h.addSlot(input, args[&amp;#039;Диск&amp;#039;], mod, nil, &amp;#039;invslot-plain&amp;#039;, &amp;#039;position:absolute; top:55px; left:116px&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if machine[&amp;quot;Mid_input&amp;quot;] then&lt;br /&gt;
		h.addSlot(input, args[&amp;#039;РесурсЦ&amp;#039;], mod, back_ids[&amp;#039;mid&amp;#039;], &amp;#039;&amp;#039;, &amp;#039;position:absolute; top:96px; left:&amp;#039; .. 6 + h_margin + input_size + (arrow_width - 36) / 2 .. &amp;#039;px&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-------------------------------------- Ячейки жидких ресурсов -------------------------------------&lt;br /&gt;
	if fluid_input_rows &amp;gt; 0 then&lt;br /&gt;
		local fluid_input = input&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		if input_pic ~= 1 then&lt;br /&gt;
			fluid_input:cssText((&amp;#039;margin-top:%spx;text-align:right;&amp;#039;):format(v_margin_input))	&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		for i = 1, fluid_input_rows * fluid_input_cols do&lt;br /&gt;
			local resource_num = args[&amp;quot;РесурсЖ&amp;quot; .. i]&lt;br /&gt;
			&lt;br /&gt;
			if resource_num then&lt;br /&gt;
				local fl_quantity = h.splitOnSemi1(args[&amp;quot;РЖК&amp;quot; .. i], &amp;#039;/&amp;amp;9 Объём: %s мВ/&amp;#039;)&lt;br /&gt;
				local fl_temp = h.splitOnSemi1(args[&amp;quot;РЖТ&amp;quot; .. i], &amp;#039;&amp;amp;c Температура: %s К/&amp;#039;)&lt;br /&gt;
				local default_quantity = fl_quantity[1] or &amp;#039;&amp;#039;&lt;br /&gt;
				local default_temp = fl_temp[1] or &amp;#039;&amp;#039;&lt;br /&gt;
				&lt;br /&gt;
				local fl_split = {}&lt;br /&gt;
				local c = 0&lt;br /&gt;
				&lt;br /&gt;
				if fl_quantity[1] or fl_temp[1] then&lt;br /&gt;
					for _, text in h.split_on_semi(resource_num) do&lt;br /&gt;
						if text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
							c = c + 1&lt;br /&gt;
							text = text .. &amp;#039;[&amp;#039; .. (fl_quantity[c] or default_quantity) .. (fl_temp[c] or default_temp) .. &amp;#039;]&amp;#039;&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( fl_split, text )&lt;br /&gt;
					end&lt;br /&gt;
					resource_num = table.concat(fl_split, &amp;#039;;&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			h.addSlot(fluid_input, resource_num, mod, back_ids[&amp;#039;fl_in&amp;#039; .. i] or back_ids[&amp;#039;fl_in&amp;#039;], &amp;#039;fluid_invslot&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	---------------------------------------- Стрелка прогресса ----------------------------------------&lt;br /&gt;
	local arrowtext = &amp;#039;&amp;amp;3&amp;#039; .. progress&lt;br /&gt;
	if machine[2] then&lt;br /&gt;
		arrowtext = arrowtext .. &amp;#039;/&amp;amp;9&amp;#039; .. machine[2] --англ. название&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if version then&lt;br /&gt;
		arrowtext = arrowtext .. &amp;#039;//&amp;amp;7Модификация:/&amp;#039; .. version&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local arrow = recipe&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;minetip&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;data-minetip-title&amp;#039;,&amp;#039;Обработчик:&amp;#039;)&lt;br /&gt;
		:attr(&amp;#039;data-minetip-text&amp;#039;, arrowtext)&lt;br /&gt;
		:cssText((&amp;#039;margin:auto %spx;&amp;#039;):format(math.floor(0.25 * h_margin)))&lt;br /&gt;
	&lt;br /&gt;
	if not furnace_like then&lt;br /&gt;
		arrow:wikitext(&amp;#039;[[&amp;#039; .. version .. &amp;#039;/&amp;#039; .. progress .. &amp;#039;|&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;sprite arrow-&amp;#039; .. machine_list[&amp;quot;Arrows&amp;quot;])&lt;br /&gt;
				:cssText((&amp;quot;height:%spx;width:%spx;background-position:-%spx -%spx;background-size:%spx auto;&amp;quot;):format(&lt;br /&gt;
					arrow_height,&lt;br /&gt;
					arrow_width,&lt;br /&gt;
					left * scale,&lt;br /&gt;
					top * scale,&lt;br /&gt;
					sheetWidth * scale&lt;br /&gt;
				))&lt;br /&gt;
			:done()&lt;br /&gt;
			:wikitext(&amp;#039;]]&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		if progress ~= &amp;#039;Печь&amp;#039; and mod then&lt;br /&gt;
			arrow:wikitext(&amp;#039;[[Файл:Grid layout &amp;#039; .. progress .. &amp;#039; Progress (&amp;#039; .. mod .. &amp;#039;).png|link=&amp;#039; .. mod .. &amp;#039;/&amp;#039; .. progress .. &amp;#039;]]&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			arrow:wikitext(&amp;#039;[[Файл:Grid_layout_Furnace_Progress.png|link=Печь]]&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		arrow:cssText((&amp;#039;width:%spx&amp;#039;):format(arrow_width))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local modeArg = args[&amp;quot;Режим&amp;quot;]&lt;br /&gt;
	if progress == &amp;#039;Формовщик металла&amp;#039; and modeArg then&lt;br /&gt;
		local mode = recipe&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;minetip&amp;#039;)&lt;br /&gt;
			:cssText(&amp;#039;position:absolute;top:86px;left:113px;&amp;#039;)&lt;br /&gt;
			:attr(&amp;#039;data-minetip-title&amp;#039;, &amp;#039;Режим: &amp;#039; .. modeArg)&lt;br /&gt;
			:wikitext(&amp;#039;[[Файл:Формовщик металла_(&amp;#039; .. modeArg .. &amp;#039;)_(IndustrialCraft 2).png|link=]]&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	----------------------------------------- Ячейки продуктов ----------------------------------------&lt;br /&gt;
	local output = recipe&lt;br /&gt;
		:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
		:addClass(&amp;#039;gt-output&amp;#039;)&lt;br /&gt;
		:cssText((&amp;#039;width:%spx;&amp;#039;):format(output_size))&lt;br /&gt;
	if output_rows &amp;gt; 0 then&lt;br /&gt;
		local item_output = output&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:cssText((&amp;#039;margin-top:%spx;&amp;#039;):format(v_margin_output))&lt;br /&gt;
		for i = 1, output_rows * output_cols do&lt;br /&gt;
			local chance_num = args[&amp;quot;Шанс&amp;quot; .. i]&lt;br /&gt;
			local output_num = args[&amp;quot;Выход&amp;quot; .. i]&lt;br /&gt;
			if chance_num then&lt;br /&gt;
				local pr_chance = h.splitOnSemi1(chance_num, &amp;#039;[&amp;amp;7 Шанс получения: %s%%/]&amp;#039;)&lt;br /&gt;
				local default_chance = pr_chance[1] or &amp;#039;&amp;#039;&lt;br /&gt;
				&lt;br /&gt;
				local pr_split = {}&lt;br /&gt;
				local c = 0&lt;br /&gt;
				&lt;br /&gt;
				for _, text in h.split_on_semi(output_num) do&lt;br /&gt;
					if text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
						c = c + 1&lt;br /&gt;
						text = text .. (pr_chance[c] or default_chance)&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
					table.insert(pr_split, text)&lt;br /&gt;
				end&lt;br /&gt;
					&lt;br /&gt;
				output_num = table.concat(pr_split, &amp;#039;;&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			h.addSlot(item_output, output_num, mod, back_ids[&amp;#039;out&amp;#039; .. i] or back_ids[&amp;#039;out&amp;#039;], class1 .. &amp;#039; &amp;#039; .. class2)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Строка текста под получаемыми ресурсами&lt;br /&gt;
	local arg_t = args[&amp;quot;Температура&amp;quot;]&lt;br /&gt;
	local arg_exp = args[&amp;quot;Опыт&amp;quot;]&lt;br /&gt;
	if arg_t or arg_exp then&lt;br /&gt;
		local margin_out_2 = output&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:cssText(&amp;#039;margin-top:6px;&amp;#039;)&lt;br /&gt;
		if arg_t then&lt;br /&gt;
			margin_out_2&lt;br /&gt;
				:node(h.help_string(h.animate(arg_t) .. &amp;#039; К&amp;#039;, &amp;#039;Необходимая температура печи в кельвинах.&amp;#039;))&lt;br /&gt;
		elseif arg_exp then&lt;br /&gt;
			margin_out_2&lt;br /&gt;
				:cssText(&amp;#039;font-family:Minecraft-ru, sans-serif;&amp;#039;)&lt;br /&gt;
				:wikitext(baseSprite{ [&amp;#039;имякласса&amp;#039;] = &amp;#039;xp-orb-sprite&amp;#039;, [&amp;#039;выравн&amp;#039;] = &amp;#039;text-bottom&amp;#039; })&lt;br /&gt;
				:node(h.help_string(h.animate(arg_exp), &amp;#039;Дробная часть показывает вероятность получения единицы опыта.&amp;#039;))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-------------------------------------- Ячейки жидких продуктов ------------------------------------&lt;br /&gt;
	if fluid_output_rows &amp;gt; 0 then&lt;br /&gt;
		local fluid_output = output&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:cssText((&amp;#039;margin-top:%spx;text-align:left;&amp;#039;):format(v_margin_output))&lt;br /&gt;
	&lt;br /&gt;
		for i = 1, fluid_output_rows * fluid_output_cols do&lt;br /&gt;
			local output_num = args[&amp;quot;ВыходЖ&amp;quot; .. i]&lt;br /&gt;
			if output_num then&lt;br /&gt;
				local fl_quantity = h.splitOnSemi1(args[&amp;quot;ВЖК&amp;quot; .. i], &amp;#039;/&amp;amp;9 Объём: %s мВ/&amp;#039;)&lt;br /&gt;
				local fl_temp = h.splitOnSemi1(args[&amp;quot;ВЖТ&amp;quot; .. i], &amp;#039;&amp;amp;c Температура: %s К/&amp;#039;)&lt;br /&gt;
				local default_quantity = fl_quantity[1] or &amp;#039;&amp;#039;&lt;br /&gt;
				local default_temp = fl_temp[1] or &amp;#039;&amp;#039;&lt;br /&gt;
				&lt;br /&gt;
				local fl_split = {}&lt;br /&gt;
				local c = 0&lt;br /&gt;
				&lt;br /&gt;
				if fl_quantity[1] or fl_temp[1] then&lt;br /&gt;
					for _, text in h.split_on_semi(output_num) do&lt;br /&gt;
						if text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
							c = c + 1&lt;br /&gt;
							text = text .. &amp;#039;[&amp;#039; .. (fl_quantity[c] or default_quantity) .. (fl_temp[c] or default_temp) .. &amp;#039;]&amp;#039;&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert(fl_split, text)&lt;br /&gt;
					end&lt;br /&gt;
					&lt;br /&gt;
				output_num = table.concat(fl_split, &amp;#039;;&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			h.addSlot(fluid_output, output_num, mod, back_ids[&amp;#039;fl_out&amp;#039; .. i] or back_ids[&amp;#039;fl_out&amp;#039;], &amp;#039;fluid_invslot&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	---------------------------------------- Строки потребления ---------------------------------------&lt;br /&gt;
	local steam_estring = EString (&amp;#039;Пар:&amp;#039; , &amp;#039;Объём пара, требующийся для проведения операции.&amp;#039; , args[&amp;quot;Пар&amp;quot;])&lt;br /&gt;
	if steam_estring then&lt;br /&gt;
		steam_estring:node(h.help_string(&amp;#039;мВ&amp;#039;, &amp;#039;Милливедро (мВ) — единица объёма условно равная 1/1000 части ведра.&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	EString (&amp;#039;Старт:&amp;#039; , &amp;#039;Энергия, требующаяся на запуск процесса.&amp;#039; , args[&amp;quot;Старт&amp;quot;], &amp;#039;[[IndustrialCraft_2|еЭ]]&amp;#039;)&lt;br /&gt;
	EString (&amp;#039;Энергия:&amp;#039; , &amp;#039;Энергия, затрачиваемая на каждую операцию.&amp;#039; , args[&amp;quot;Энергия&amp;quot;], &amp;#039;[[IndustrialCraft_2|еЭ]]&amp;#039;)&lt;br /&gt;
	EString (&amp;#039;Потребление:&amp;#039; , &amp;#039;Скорость потребления энергии.&amp;#039; , args[&amp;quot;Потребление&amp;quot;], &amp;#039;[[IndustrialCraft_2|еЭ]]/[[Такт|т]]&amp;#039;)&lt;br /&gt;
	EString (&amp;#039;Напряжение:&amp;#039; , &amp;#039;Требуемое для операции напряжение.&amp;#039; , args[&amp;quot;Напряжение&amp;quot;], &amp;#039;[[IndustrialCraft_2|еЭ]]/[[Такт|т]]&amp;#039;)&lt;br /&gt;
	EString (&amp;#039;Сила тока:&amp;#039; , &amp;#039;Требуемая для операции сила тока.&amp;#039; , args[&amp;quot;Сила тока&amp;quot;])&lt;br /&gt;
	EString (&amp;#039;Время:&amp;#039; , &amp;#039;Время, затрачиваемое на операцию.&amp;#039; , args[&amp;quot;Время&amp;quot;], &amp;#039;сек.&amp;#039;)&lt;br /&gt;
	---------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
	if machine_list[&amp;quot;Logo&amp;quot;] and not machine[&amp;quot;Logo&amp;quot;] then&lt;br /&gt;
		local GTlogo = body&lt;br /&gt;
			:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;gt-pic&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;gt-&amp;#039; .. (machine[&amp;quot;Skin&amp;quot;] or machine_list[&amp;quot;Logo&amp;quot;]) .. &amp;#039;-pic&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if h_size &amp;gt; 140 then&lt;br /&gt;
		body:cssText((&amp;#039;height:%spx&amp;#039;):format(h_size))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	body:addClass(&amp;#039;gui-set &amp;#039; .. style .. &amp;#039; gui&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
	return tostring(body)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>minecraftwiki&gt;Cook Me Plox</name></author>
	</entry>
</feed>