<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://w.hil.su/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Popstop</id>
		<title>Hilarious Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://w.hil.su/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Popstop"/>
		<link rel="alternate" type="text/html" href="https://w.hil.su/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Popstop"/>
		<updated>2026-05-22T05:50:11Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.27.1</generator>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D0%B8%D0%B3%D1%80%D0%B5/%D0%B4%D0%BE%D0%BA&amp;diff=7021</id>
		<title>Руководство по игре/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D0%B8%D0%B3%D1%80%D0%B5/%D0%B4%D0%BE%D0%BA&amp;diff=7021"/>
				<updated>2018-12-17T20:18:31Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Страница создана для документации Шаблон:Сервер&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Шаблон:Сервер/док]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%94%D0%BE%D0%BA/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=7020</id>
		<title>Док/Команды</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%94%D0%BE%D0%BA/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=7020"/>
				<updated>2018-12-17T20:18:15Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Страница создана для документации Шаблон:Сервер&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Шаблон:Сервер/док]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=Blood_Magic/%D0%A1%D0%B8%D0%B3%D0%B8%D0%BB_%D1%83%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7019</id>
		<title>Blood Magic/Сигил удержания</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=Blood_Magic/%D0%A1%D0%B8%D0%B3%D0%B8%D0%BB_%D1%83%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7019"/>
				<updated>2018-12-17T20:11:17Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Предмет&lt;br /&gt;
|изображение=Сигил удержания&lt;br /&gt;
|инвизображение=Сигил удержания&lt;br /&gt;
|тип=Инструмент&lt;br /&gt;
|прочн=Нет&lt;br /&gt;
|склад=Нет&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Сигил удержания&amp;#039;&amp;#039;&amp;#039; - предмет, добавляемый модификацией [[Blood Magic]].&lt;br /&gt;
&lt;br /&gt;
== Рецепт ==&lt;br /&gt;
{{Blood Magic/Алхимическая матрица&lt;br /&gt;
|A1=Blood Magic:Реагент удержания&lt;br /&gt;
|B1=Blood Magic:Пропитанная плитка&lt;br /&gt;
|выход=Blood Magic:Сигил удержания&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Потребление ==&lt;br /&gt;
Не потребляет LP за использование.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
Сигил используется для хранения в нём 5 других сигилов. Для того, чтобы положить туда сигилы, необходимо нажать на клавишу, которая установлена в настройках управления в пункте &amp;#039;&amp;#039;&amp;#039;Open Sigil of Holding&amp;#039;&amp;#039;&amp;#039;(По умолчанию - клавиша H). Положить ещё один такой же сигил в этот сигил нельзя. Сигилы, хранящиеся внутри Сигил удержания, можно выбирать с помощью клавиши Shift и колёсика мыши.&lt;br /&gt;
&lt;br /&gt;
Добавленный в сигил удержания [[Blood_Magic/Сигил_предсказания|сигил предсказания]] или [[Blood_Magic/Сигил_зрения|сигил зрения]] не будет показывать информацию при наведении на алтарь.&lt;br /&gt;
&lt;br /&gt;
Сигил удержания используется для крафта сигила дополненного удержания&lt;br /&gt;
&lt;br /&gt;
[[Категория:Сигилы]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=Blood_Magic/%D0%A1%D0%B8%D0%B3%D0%B8%D0%BB_%D1%83%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7018</id>
		<title>Blood Magic/Сигил удержания</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=Blood_Magic/%D0%A1%D0%B8%D0%B3%D0%B8%D0%BB_%D1%83%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7018"/>
				<updated>2018-12-17T20:10:02Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Предмет&lt;br /&gt;
|изображение=Сигил удержания&lt;br /&gt;
|тип=Инструмент&lt;br /&gt;
|прочн=Нет&lt;br /&gt;
|склад=Нет&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Сигил удержания&amp;#039;&amp;#039;&amp;#039; - предмет, добавляемый модификацией [[Blood Magic]].&lt;br /&gt;
&lt;br /&gt;
== Рецепт ==&lt;br /&gt;
{{Blood Magic/Алхимическая матрица&lt;br /&gt;
|A1=Blood Magic:Реагент удержания&lt;br /&gt;
|B1=Blood Magic:Пропитанная плитка&lt;br /&gt;
|выход=Blood Magic:Сигил удержания&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Потребление ==&lt;br /&gt;
Не потребляет LP за использование.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
Сигил используется для хранения в нём 5 других сигилов. Для того, чтобы положить туда сигилы, необходимо нажать на клавишу, которая установлена в настройках управления в пункте &amp;#039;&amp;#039;&amp;#039;Open Sigil of Holding&amp;#039;&amp;#039;&amp;#039;(По умолчанию - клавиша H). Положить ещё один такой же сигил в этот сигил нельзя. Сигилы, хранящиеся внутри Сигил удержания, можно выбирать с помощью клавиши Shift и колёсика мыши.&lt;br /&gt;
&lt;br /&gt;
Добавленный в сигил удержания [[Blood_Magic/Сигил_предсказания|сигил предсказания]] или [[Blood_Magic/Сигил_зрения|сигил зрения]] не будет показывать информацию при наведении на алтарь.&lt;br /&gt;
&lt;br /&gt;
Сигил удержания используется для крафта сигила дополненного удержания&lt;br /&gt;
&lt;br /&gt;
[[Категория:Сигилы]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popstop/SimpleNavbox&amp;diff=7017</id>
		<title>Участник:Popstop/SimpleNavbox</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popstop/SimpleNavbox&amp;diff=7017"/>
				<updated>2018-12-17T20:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Полностью удалено содержимое страницы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=Sandbox/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=7016</id>
		<title>Sandbox/Команды</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=Sandbox/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=7016"/>
				<updated>2018-12-17T20:02:58Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Косметические изменения&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Support}}&lt;br /&gt;
&lt;br /&gt;
== Дом ==&lt;br /&gt;
{{Команда|home}} - Телепортироваться домой&lt;br /&gt;
&lt;br /&gt;
{{Команда|home delete}}- Удалить дом&lt;br /&gt;
&lt;br /&gt;
{{Команда|home limit}} - Отобразить количество домов, которые вы (или другой игрок) можете установить&lt;br /&gt;
&lt;br /&gt;
{{Команда|home list}} - Список домов&lt;br /&gt;
&lt;br /&gt;
{{Команда|home set &amp;lt;имя&amp;gt;}} - Устанавливает название дома с указанным именем&lt;br /&gt;
&lt;br /&gt;
== Инвентарь ==&lt;br /&gt;
===Интерфейсы===&lt;br /&gt;
{{Команда|anvil}} - Открывает Открывает меню наковальни&lt;br /&gt;
&lt;br /&gt;
{{Команда|enchantingtable}} - Открывает меню зачарования&lt;br /&gt;
&lt;br /&gt;
{{Команда|workbench}} - Открывает меню крафта&lt;br /&gt;
&lt;br /&gt;
===Предметы===&lt;br /&gt;
{{Команда|clear}} - Очищает инвентарь&lt;br /&gt;
&lt;br /&gt;
{{Команда|repair}} - Ремонт предмета в руке&lt;br /&gt;
&lt;br /&gt;
{{Команда|trash}} - Открывает окно инвентаря, которое действует как единица утилизации, удаляя предметы, помещенные в него&lt;br /&gt;
&lt;br /&gt;
== Набор ресурсов ==&lt;br /&gt;
{{Команда|kit list}} - Весь список наборов&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit start}} - Стартовый набор&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit food}} - Набор еды&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit champion}} - Набор привилегии &amp;quot;Чемпион&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit favorite}} - Набор привилегии &amp;quot;Фаворит&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit lider}} - Набор привилегии &amp;quot;Лидер&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit legend}} - Набор привилегии &amp;quot;Легенда&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Команда|kit hero}} - Набор привилегии &amp;quot;Герой&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Общение ==&lt;br /&gt;
===Почта===&lt;br /&gt;
{{Команда|mail}} - Просмотреть почту отправленную вам&lt;br /&gt;
&lt;br /&gt;
{{Команда|mail clear}} - Очищает всю почту в вашем почтовом ящике&lt;br /&gt;
&lt;br /&gt;
{{Команда|mail send ?}} - Отправить почту указанному игроку&lt;br /&gt;
&lt;br /&gt;
=== Сообщения ===&lt;br /&gt;
{{Команда|t ? ?}} - Написать личное сообщение указанному игроку&lt;br /&gt;
&lt;br /&gt;
{{Команда|r ?}} - Ответить игроку&lt;br /&gt;
&lt;br /&gt;
== Телепортация ==&lt;br /&gt;
{{Команда|rtp}} - Телепортация в случайное место&lt;br /&gt;
&lt;br /&gt;
{{Команда|tpa}} - Отправить запрос игроку чтобы телепортироваться к нему&lt;br /&gt;
&lt;br /&gt;
{{Команда|tpaccept}} - Принять запрос телепорта&lt;br /&gt;
&lt;br /&gt;
{{Команда|tpdeny}} - Отказать запрос телепорта&lt;br /&gt;
&lt;br /&gt;
{{Команда|back}} - Вернуться на свое место до смерти&lt;br /&gt;
&lt;br /&gt;
== Прочее ==&lt;br /&gt;
{{Команда|ping}} - Узнать текущую задержку соединения с сервером&lt;br /&gt;
&lt;br /&gt;
{{Команда|suicide}} - Суицид&lt;br /&gt;
&lt;br /&gt;
{{Команда|afk}} - Включает режим AFK&lt;br /&gt;
&lt;br /&gt;
{{Команда|god}} - Режим Бога&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=HiPower&amp;diff=7015</id>
		<title>HiPower</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=HiPower&amp;diff=7015"/>
				<updated>2018-12-17T19:56:55Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Актуализация информации v1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Сервер&lt;br /&gt;
| название=HiPower&lt;br /&gt;
| изображение=[[File:server_icon_hp.png]]&lt;br /&gt;
| версия=1.12.2&lt;br /&gt;
| сложность=Средняя&lt;br /&gt;
| pvp=Нет&lt;br /&gt;
| приваты=2 по 500&amp;#039;000 блоков&lt;br /&gt;
| радиус=4000 блоков&lt;br /&gt;
| обт=1&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HiPower&amp;#039;&amp;#039;&amp;#039; - cервер с высокотехнологичными модификациями, добавляющими в мир Minecraft электричество и другие виды энергии, различные генераторы и приборы, позволяющие автоматизировать если не все, то многие действия.&lt;br /&gt;
&lt;br /&gt;
== Особенности ==&lt;br /&gt;
*Множество модификаций&lt;br /&gt;
*Карьер и автошахтеры&lt;br /&gt;
*Электричество и напряжение&lt;br /&gt;
*Электроинструменты&lt;br /&gt;
*Реактивные ранцы&lt;br /&gt;
*Декоративные блоки и лампы&lt;br /&gt;
&lt;br /&gt;
== Модификации и плагины ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:20%&amp;quot; | Название !! style=&amp;quot;width:80%&amp;quot; | Описание&lt;br /&gt;
|-&lt;br /&gt;
|[[Auction|&amp;#039;&amp;#039;&amp;#039;Аукцион&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
| Модификация, которая является собственной разработка Hilarious. Позволяет переводить вещи с сервера на сервер и торговать с игроками по всему проекту.&lt;br /&gt;
|-&lt;br /&gt;
|[[Applied Energistics 2]]&lt;br /&gt;
| Обширная техническая модификация, которая добавляет блоки и механизмы для получения и использования энергии. Большая часть функций этой модификации сосредоточена на основной механике - материальной энергии (МЭ).&lt;br /&gt;
|-&lt;br /&gt;
|AquaCulture &lt;br /&gt;
|Модификация, добавляющая множество новых рыб, которые спавнятся в разных биомах.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:BuildCraft | &amp;#039;&amp;#039;&amp;#039;BuildCraft&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
|Добавляет различные механизмы, необходимые для автоматизации: автошахтер, помпу (насос) для выкачивания воды, лавы, нефти и других жидкостей, трубы, цистерны для жидкостей и многое другое.&lt;br /&gt;
|-&lt;br /&gt;
|Chisel&lt;br /&gt;
|Модификация, добавляющая множество декоративных блоков.&lt;br /&gt;
|-&lt;br /&gt;
|Chisels&amp;amp;Bits&lt;br /&gt;
|Модификация, добавляющая множество декоративных блоков.&lt;br /&gt;
|-&lt;br /&gt;
|CustomNPCs&lt;br /&gt;
|Техническая модификация. Используется для написания квестов, создания боссов и сложных игровых алгоритмов.&lt;br /&gt;
|-&lt;br /&gt;
|[[EnderIO]]&lt;br /&gt;
|Техническая модификация, добавляющая генераторы энергии, настраиваемые механизмы и фермы, мощные инструменты и доспехи, удобные трубы для транспортировки и ёмкости для хранения предметов, жидкостей, газов и энергии.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:Forestry | &amp;#039;&amp;#039;&amp;#039;Forestry&amp;#039;&amp;#039;&amp;#039;]] &lt;br /&gt;
|Модификация, добавляющая пчеловодство и немного генетики, позволяющее практически бесконечно получать некоторые ресурсы.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:Gravitation_Suite | &amp;#039;&amp;#039;&amp;#039;Gravitation Suite&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
| Дополнение для IndustrialCraft 2. Добавляет новую броню и инструменты.&lt;br /&gt;
|-&lt;br /&gt;
|[[GriefPrevention]]&lt;br /&gt;
|Плагин, защищающий вашу территорию от других игроков.&lt;br /&gt;
|-&lt;br /&gt;
|[[ImmersiveCables]]&lt;br /&gt;
|Дополнение для Applied Energetics, добавляющее новые провода в стиле проводов из модификации Immersive Engineering.&lt;br /&gt;
|-&lt;br /&gt;
|[[Immersive Engineering]]&lt;br /&gt;
|Глобальная индустриальная модификация. Все механизмы в ней нацелены на реалистичность, что делает её необычайно увлекательной.&lt;br /&gt;
|-&lt;br /&gt;
|[[Immersive Petroleum]]&lt;br /&gt;
|Дополнение для Immersive Engineering, добавляющее механизмы для добычи, обработки и использования нефти.&lt;br /&gt;
|-&lt;br /&gt;
|[[Immersive Tech]]&lt;br /&gt;
|Дополнение для Immersive Engineering, добавляющее мультиблоковые структуры для выработки RF-энергии, используя солнечные лучи в качестве источника.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:IndustrialCraft_2 | &amp;#039;&amp;#039;&amp;#039;IndustrialCraft 2&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
| Модификация, добавляющая электричество, электрические приборы, броня и инструменты, которые не ломаются. Их просто надо время от времени заряжать энергией. Новые ресурсы, растения, селекция (выведение новых сортов растений), возможность дробить руду и переплавлять порошки, получая больше ресурсов, а также множество других интересных вещей.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:Iron_Chests | &amp;#039;&amp;#039;&amp;#039;Iron Chests&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
|Модификация, добавляющая сундуки различной вместимости.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:OpenComputers | &amp;#039;&amp;#039;&amp;#039;OpenComputers&amp;#039;&amp;#039;&amp;#039;]] &lt;br /&gt;
|Модификация, добавляющая в игру компьютерную технику, программирование и роботов, открывая невероятно широкие возможности перед игроками.&lt;br /&gt;
|-&lt;br /&gt;
|[[Pam`s HarvestCraft]]&lt;br /&gt;
|Модификация, добавляющая множество(более 200) новой еды.&lt;br /&gt;
|-&lt;br /&gt;
|[[Simply Jetpacks 2]]&lt;br /&gt;
|Дополнение для EnderIO, добавляющее несколько видов реактивных ранцев.&lt;br /&gt;
|-&lt;br /&gt;
|[[mc:Thermal Expansion| &amp;#039;&amp;#039;&amp;#039;Thermal Expansion&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
|Модификация, добавляющая новую механику обработки ресурсов, новые ресурсы, энергию и устройства её производства и хранения.&lt;br /&gt;
|-&lt;br /&gt;
|[[Thermal Cultivation]]&lt;br /&gt;
|Модификация, добавляющая в игру набор специальных леек, которые поливают большую площадь земли. Во время полива растения растут очень быстро.&lt;br /&gt;
|-&lt;br /&gt;
|[[Thermal Dynamics]]&lt;br /&gt;
|Модификация, добавляющая новые трубы.&lt;br /&gt;
|-&lt;br /&gt;
|[[Thermal Foundation]]&lt;br /&gt;
|Модификация, добавляющая генерацию руд, инструменты, броню, оружие.&lt;br /&gt;
|-&lt;br /&gt;
|[[Thermal Innovation]]&lt;br /&gt;
|Модификация, добавляющая буры, пилы, и многое другое для обработки и добычи блоков.&lt;br /&gt;
|-&lt;br /&gt;
|[[Totem Expansion]]&lt;br /&gt;
|Модификация, добавляющая несколько новых тотемов, которые могут спасти Вас от смерти, от взрывов, от лавы и многого другого.&lt;br /&gt;
|-&lt;br /&gt;
|Zombie Awareness&lt;br /&gt;
|Модификация, которая делает зомби и скелетов гораздо умнее и сильнее.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Запреты потом суньте --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%90%D1%83%D0%BA%D1%86%D0%B8%D0%BE%D0%BD/%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6852</id>
		<title>Аукцион/Блок хранилища</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%90%D1%83%D0%BA%D1%86%D0%B8%D0%BE%D0%BD/%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6852"/>
				<updated>2018-11-03T18:29:10Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Блок&lt;br /&gt;
|тип=твёрдый&lt;br /&gt;
|гравит=нет&lt;br /&gt;
|прозрачность=нет&lt;br /&gt;
|инструмент=деревянная кирка&lt;br /&gt;
|склад=Да (64)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Используется для перевода вещей между хранилищем аукциона и сервером. За загрузку некоторых предметов взимается плата (комиссия) в игровой валюте. &lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=Обсидиан |B1=Алмазный блок |C1=Обсидиан&lt;br /&gt;
|A2=Изумрудный блок |B2=Око Края |C2=Изумрудный блок&lt;br /&gt;
|A3=Обсидиан |B3=Алмазный блок |C3=Обсидиан&lt;br /&gt;
|Выход=Аукцион:Блок хранилища&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Комиссия на ввод ресурсов ==&lt;br /&gt;
Взимается в червонцах и зависит от коэффициентов, устанавливаемых администрацией, а также средней рыночной цены.&lt;br /&gt;
* Classic - дешевый вывод всех ресурсов&lt;br /&gt;
* HiTech, HiPower - дешевый вывод предметов из индустриальных модификаций, классические - дорого&lt;br /&gt;
* Magick - дешевый вывод предметов из магических модификаций, классические - дорого &lt;br /&gt;
[[Категория:Блоки]]&lt;br /&gt;
[[Категория:Аукцион]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6845</id>
		<title>Обсуждение:Блок хранилища</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6845"/>
				<updated>2018-11-03T18:23:50Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Popstop переименовал страницу Обсуждение:Блок хранилища в Обсуждение:Аукцион/Блок хранилища&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Обсуждение:Аукцион/Блок хранилища]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%90%D1%83%D0%BA%D1%86%D0%B8%D0%BE%D0%BD/%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6842</id>
		<title>Аукцион/Блок хранилища</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%90%D1%83%D0%BA%D1%86%D0%B8%D0%BE%D0%BD/%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6842"/>
				<updated>2018-11-03T18:23:50Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Popstop переименовал страницу Блок хранилища в Аукцион/Блок хранилища&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Блок&lt;br /&gt;
|название=&lt;br /&gt;
|изображение=Блок аукциона (Auction).png&lt;br /&gt;
|тип=твёрдый&lt;br /&gt;
|гравит=нет&lt;br /&gt;
|прозрачность=нет&lt;br /&gt;
|инструмент=деревянная кирка&lt;br /&gt;
|склад=Да (64)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Используется для перевода вещей между хранилищем аукциона и сервером. За загрузку некоторых предметов взимается плата (комиссия) в игровой валюте. &lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=Обсидиан |B1=Алмазный блок |C1=Обсидиан&lt;br /&gt;
|A2=Изумрудный блок |B2=Око Края |C2=Изумрудный блок&lt;br /&gt;
|A3=Обсидиан |B3=Алмазный блок |C3=Обсидиан&lt;br /&gt;
|Выход=Блок аукциона (Auction)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Комиссия на ввод ресурсов ==&lt;br /&gt;
Взимается в червонцах и зависит от коэффициентов, устанавливаемых администрацией, а также средней рыночной цены.&lt;br /&gt;
* Classic - дешевый вывод всех ресурсов&lt;br /&gt;
* HiTech, HiPower - дешевый вывод предметов из индустриальных модификаций, классические - дорого&lt;br /&gt;
* Magick - дешевый вывод предметов из магических модификаций, классические - дорого &lt;br /&gt;
[[Категория:Блоки]]&lt;br /&gt;
[[Категория:Аукцион]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6843</id>
		<title>Блок хранилища</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6843"/>
				<updated>2018-11-03T18:23:50Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Popstop переименовал страницу Блок хранилища в Аукцион/Блок хранилища&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Аукцион/Блок хранилища]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%90%D1%83%D0%BA%D1%86%D0%B8%D0%BE%D0%BD/%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6844</id>
		<title>Обсуждение:Аукцион/Блок хранилища</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%90%D1%83%D0%BA%D1%86%D0%B8%D0%BE%D0%BD/%D0%91%D0%BB%D0%BE%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0&amp;diff=6844"/>
				<updated>2018-11-03T18:23:50Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Popstop переименовал страницу Обсуждение:Блок хранилища в Обсуждение:Аукцион/Блок хранилища&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;А какая плата взимается? Где информация?&lt;br /&gt;
[[User:MailGik|MailGik]] ([http://w.hil.su/User_talk:MailGik &amp;lt;span class=&amp;quot;invslot-plain&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;sprite item-sprite invslot-item&amp;quot; style=&amp;quot;background-position:-176px -176px&amp;quot; data-minetip-title=&amp;quot;Обсуждение участника MailGik&amp;quot;&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;]) 18:23, 9 декабря 2016 (UTC)&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%B0%D1%80%D1%82%D0%BE%D1%87%D0%BA%D0%B0&amp;diff=6804</id>
		<title>Модуль:Карточка</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%B0%D1%80%D1%82%D0%BE%D1%87%D0%BA%D0%B0&amp;diff=6804"/>
				<updated>2018-11-03T15:19:49Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Добавление поддержки gif и svg изображений (при необходимости)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
function p.infobox( f )&lt;br /&gt;
	local args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge( true )&lt;br /&gt;
	local titleObject = mw.title.getCurrentTitle()&lt;br /&gt;
	local title = args[&amp;#039;название&amp;#039;] or titleObject.subpageText&lt;br /&gt;
	local invtitle = args[&amp;#039;инвизображение&amp;#039;] or args[&amp;quot;инвизображение1&amp;quot;] or args[&amp;#039;название&amp;#039;] or titleObject.subpageText&lt;br /&gt;
	local modtitle = args[&amp;#039;мод&amp;#039;] or titleObject.rootText&lt;br /&gt;
	if modtitle == &amp;#039;нет&amp;#039; then&lt;br /&gt;
		modification = &amp;#039;&amp;#039;&lt;br /&gt;
		invmodification = &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		modification = &amp;#039; (&amp;#039; .. modtitle .. &amp;#039;)&amp;#039;&lt;br /&gt;
		invmodification = modtitle .. &amp;#039;:&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local imageArea = args[&amp;#039;изображения&amp;#039;]&lt;br /&gt;
	if not imageArea and imageArea ~= &amp;#039;none&amp;#039; then&lt;br /&gt;
		local images = {}&lt;br /&gt;
		local invImages = {}&lt;br /&gt;
		local defaultImageSize = args[&amp;quot;умолчразмеризобр&amp;quot;] or &amp;#039;150px&amp;#039;&lt;br /&gt;
		args[&amp;quot;изображение1&amp;quot;] = args[&amp;quot;изображение1&amp;quot;] or args[&amp;quot;изображение&amp;quot;] or &amp;#039;title&amp;#039;&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 &amp;#039;title&amp;#039;&lt;br /&gt;
		args[&amp;quot;мод&amp;quot;] = args[&amp;quot;мод&amp;quot;]&lt;br /&gt;
		&lt;br /&gt;
		local imgCount = {}&lt;br /&gt;
		local invImgCount = {}&lt;br /&gt;
		for k, v in pairs( args ) do&lt;br /&gt;
			if type( k ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				local image, num = mw.ustring.match(k, &amp;#039;^(изображение)(%d+)$&amp;#039; )&lt;br /&gt;
				local invImage, invNum = mw.ustring.match(k, &amp;#039;^(инвизображение)(%d+)$&amp;#039; )&lt;br /&gt;
				if mw.ustring.lower(v) ~= &amp;#039;нет&amp;#039; then&lt;br /&gt;
					if image then&lt;br /&gt;
						table.insert( imgCount, tonumber( num ) )&lt;br /&gt;
					elseif invImage then&lt;br /&gt;
						table.insert( invImgCount, tonumber( invNum ) )&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.sort( imgCount )&lt;br /&gt;
		local animate&lt;br /&gt;
		for k, v in ipairs( imgCount ) do&lt;br /&gt;
			local image = args[&amp;#039;изображение&amp;#039; .. v]&lt;br /&gt;
			local size = args[&amp;#039;изобр&amp;#039; .. v .. &amp;#039;разм&amp;#039;] or defaultImageSize&lt;br /&gt;
			if image == &amp;#039;title&amp;#039; then&lt;br /&gt;
				oimage = &amp;#039;.png&amp;#039;&lt;br /&gt;
				local imageTitle = mw.title.new( &amp;#039;Файл:&amp;#039; .. title .. modification .. oimage )&lt;br /&gt;
				if imageTitle and imageTitle.exists then&lt;br /&gt;
					image = &amp;#039;[[Файл:&amp;#039; .. title .. modification .. oimage .. &amp;#039;|&amp;#039; .. size .. &amp;#039;]]&amp;#039;&lt;br /&gt;
				elseif titleObject.namespace == 0 then&lt;br /&gt;
					image = &amp;#039;[[Файл:No image.svg|&amp;#039; .. size .. &amp;#039;|link=Файл:&amp;#039; .. title .. modification .. oimage .. &amp;#039;|Загрузить&amp;#039; .. title .. modification .. oimage .. &amp;#039;]]&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					image = &amp;#039;[[Файл:No image.svg|&amp;#039; .. size .. &amp;#039;|link=]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			elseif mw.ustring.match(image, &amp;#039;svg&amp;#039; ) then&lt;br /&gt;
				oimage = &amp;#039;.svg&amp;#039;&lt;br /&gt;
				title = mw.ustring.sub(image, 0, -5)&lt;br /&gt;
				image = &amp;#039;[[Файл:&amp;#039; .. title .. modification .. oimage .. &amp;#039;|&amp;#039; .. size .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			elseif mw.ustring.match(image, &amp;#039;gif&amp;#039; ) then&lt;br /&gt;
				oimage = &amp;#039;.gif&amp;#039;&lt;br /&gt;
				title = mw.ustring.sub(image, 0, -5)&lt;br /&gt;
				image = &amp;#039;[[Файл:&amp;#039; .. title .. modification .. oimage .. &amp;#039;|&amp;#039; .. size .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			elseif mw.ustring.match(image, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				if not animate then&lt;br /&gt;
					animate = require( &amp;#039;Модуль:Анимация&amp;#039; ).animate&lt;br /&gt;
				end&lt;br /&gt;
				image = animate{ image, size }&lt;br /&gt;
			else&lt;br /&gt;
				oimage = &amp;#039;.png&amp;#039;&lt;br /&gt;
				image = &amp;#039;[[Файл:&amp;#039; .. image .. modification .. oimage .. &amp;#039;|&amp;#039; .. size .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;div&amp;gt;&amp;#039; .. image .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		images = table.concat( images, &amp;#039;\n&amp;#039; )&lt;br /&gt;
		&lt;br /&gt;
		if #invImgCount &amp;gt; 0 then&lt;br /&gt;
			table.sort( invImgCount )&lt;br /&gt;
			local grid&lt;br /&gt;
			local invIds = mw.loadData( [[Модуль:ИнвСпрайт/ID]] )[&amp;quot;IDы&amp;quot;]&lt;br /&gt;
			for k, v in ipairs( invImgCount ) do&lt;br /&gt;
				local image = args[&amp;#039;инвизображение&amp;#039; .. v]&lt;br /&gt;
				if image == &amp;#039;title&amp;#039; then&lt;br /&gt;
					local imageExists&lt;br /&gt;
					if invIds[title] then&lt;br /&gt;
						imageExists = true&lt;br /&gt;
					else&lt;br /&gt;
						local imageTitle = mw.title.new( &amp;#039;Файл:Grid &amp;#039; .. title .. modification .. oimage )&lt;br /&gt;
						imageExists = imageTitle and imageTitle.exists&lt;br /&gt;
					end&lt;br /&gt;
					if imageExists then&lt;br /&gt;
						image = title&lt;br /&gt;
					else&lt;br /&gt;
						image = false&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if image == &amp;#039;----&amp;#039; then&lt;br /&gt;
					table.insert( invImages, &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding-top:.5em&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
				elseif image ~= &amp;#039;----&amp;#039; then&lt;br /&gt;
					if not grid then&lt;br /&gt;
						grid = require( &amp;#039;Модуль:Инвентарный слот&amp;#039; ).slot&lt;br /&gt;
					end&lt;br /&gt;
					table.insert( invImages, grid{ invmodification .. invtitle, [&amp;#039;ссылка&amp;#039;] = &amp;#039;нет&amp;#039; } )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if grid and #invImages &amp;gt; 0 then&lt;br /&gt;
				invImages = &amp;#039;&amp;lt;div class=&amp;quot;infobox-invimages&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;#039; .. table.concat( invImages, &amp;#039;&amp;#039; ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				invImages = &amp;#039;[[Файл:No image.svg|link=]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			invImages = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if images ~= &amp;#039;&amp;#039; or invImages ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			imageArea = images .. &amp;#039;\n&amp;#039; .. invImages&lt;br /&gt;
		else&lt;br /&gt;
			imageArea = &amp;#039;нет&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if imageArea and imageArea ~= &amp;#039;нет&amp;#039; then&lt;br /&gt;
		imageArea = &amp;#039;&amp;lt;div class=&amp;quot;infobox-imagearea&amp;quot;&amp;gt;&amp;#039; .. imageArea .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		imageArea = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local footer = args[&amp;quot;подвал&amp;quot;]&lt;br /&gt;
	if footer then&lt;br /&gt;
		footer = &amp;#039;| class=&amp;quot;infobox-footer&amp;quot; colspan=&amp;quot;2&amp;quot; | &amp;#039; .. footer&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local bgcolor = args[&amp;quot;цвет&amp;quot;]&lt;br /&gt;
	if bgcolor then&lt;br /&gt;
		bgcolor = &amp;#039; style=&amp;quot;background:#&amp;#039; .. bgcolor .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = {&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;notaninfobox&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;div class=&amp;quot;mcwiki-header infobox-title&amp;quot;&amp;#039;, bgcolor or &amp;#039;&amp;#039;, &amp;#039;&amp;gt;&amp;#039; .. title .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
			imageArea,&lt;br /&gt;
			&amp;#039;{| class=&amp;quot;infobox-rows&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;|-&amp;#039;,&lt;br /&gt;
			args[&amp;quot;ряды&amp;quot;] or &amp;#039;&amp;#039;,&lt;br /&gt;
			footer or &amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;|}&amp;#039;,&lt;br /&gt;
		&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( html, &amp;#039;\n&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=6756</id>
		<title>Модуль:Анимация</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=6756"/>
				<updated>2018-11-03T10:41:25Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Обновление модуля&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
	&lt;br /&gt;
function p.animate( 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;
	end&lt;br /&gt;
	local files = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local size = args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if size ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		size = &amp;#039;|&amp;#039; .. size&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local images = {}&lt;br /&gt;
	for image in mw.text.gsplit( files, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
		if image == &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;span&amp;gt;[[Файл:&amp;#039; .. image .. modification .. &amp;#039;.png&amp;#039; ..size .. &amp;#039;]]&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	images[1] = images[1]:gsub( &amp;#039;^&amp;lt;span&amp;gt;&amp;#039;, &amp;#039;&amp;lt;span class=&amp;quot;active&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;animated&amp;quot;&amp;gt;&amp;#039; .. table.concat( images ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=6755</id>
		<title>Модуль:Анимация</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=6755"/>
				<updated>2018-11-03T10:34:39Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local modification = &amp;#039; (&amp;#039; .. mw.title.getCurrentTitle().rootText .. &amp;#039;)&amp;#039;&lt;br /&gt;
function p.animate( 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;
	end&lt;br /&gt;
	local files = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local size = args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if size ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		size = &amp;#039;|&amp;#039; .. size&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local images = {}&lt;br /&gt;
	for image in mw.text.gsplit( files, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
		if image == &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;span&amp;gt;[[Файл:&amp;#039; .. image .. modification .. &amp;#039;.png&amp;#039; ..size .. &amp;#039;]]&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	images[1] = images[1]:gsub( &amp;#039;^&amp;lt;span&amp;gt;&amp;#039;, &amp;#039;&amp;lt;span class=&amp;quot;active&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;animated&amp;quot;&amp;gt;&amp;#039; .. table.concat( images ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=Blood_Magic/%D0%A0%D1%83%D0%BD%D0%B0_%D0%B6%D0%B5%D1%80%D1%82%D0%B2%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=6754</id>
		<title>Blood Magic/Руна жертвоприношения</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=Blood_Magic/%D0%A0%D1%83%D0%BD%D0%B0_%D0%B6%D0%B5%D1%80%D1%82%D0%B2%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=6754"/>
				<updated>2018-11-03T10:28:16Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Блок&lt;br /&gt;
|тип=твёрдый блок&lt;br /&gt;
|гравит=нет&lt;br /&gt;
|грязь=нет&lt;br /&gt;
|прозр=нет&lt;br /&gt;
|свет=нет&lt;br /&gt;
|взрывоуст=нет&lt;br /&gt;
|инструмент=Железная кирка&lt;br /&gt;
|склад=да(64)&lt;br /&gt;
|восплам=нет&lt;br /&gt;
|дроп=этот же блок&lt;br /&gt;
|текст_id=bloodmagic:blood_rune&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Руна жертвоприношения&amp;#039;&amp;#039;&amp;#039; - блок, добавляемый модификацией [[Blood Magic]].&lt;br /&gt;
&lt;br /&gt;
== Рецепт ==&lt;br /&gt;
{{Крафт&lt;br /&gt;
|глава=1&lt;br /&gt;
|показатьимя=0&lt;br /&gt;
|A1=Камень|B1=Blood Magic:Укреплённая плитка|C1=Камень&lt;br /&gt;
|A2=Золотой слиток|B2=Blood Magic:Чистая руна|C2=Золотой слиток&lt;br /&gt;
|A3=Камень|B3=bm:Любой Кровавый шар (2)|C3=Камень&lt;br /&gt;
|Выход=Blood Magic:Руна жертвоприношения&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=Камень|B1=Камень|C1=Камень&lt;br /&gt;
|A2=Камень|B2=Blood Arsenal:Gem of Sacrifice|C2=Камень&lt;br /&gt;
|A3=Камень|B3=Камень|C3=Камень&lt;br /&gt;
|Выход=Blood Magic:Руна жертвоприношения, 4&lt;br /&gt;
|подвал=1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
Руна жертвоприношения используется для улучшения {{Ссылка/Blood_Magic|Кровавый алтарь|кровавого алтаря|ссылка=Кровавый_алтарь#Улучшение_алтаря}}. Каждая руна на 10% увеличивает количество LP, получаемого с помощью ритуала [[Blood_Magic/Колодец_страданий|колодец страданий]] или {{Ссылка/Blood_Magic|Кинжал жертвоприношения|кинжала жертвоприношения}}.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Blood Magic]]&lt;br /&gt;
[[Категория:Руны]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%B0%D1%80%D1%82%D0%BE%D1%87%D0%BA%D0%B0&amp;diff=6753</id>
		<title>Модуль:Карточка</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D0%B0%D1%80%D1%82%D0%BE%D1%87%D0%BA%D0%B0&amp;diff=6753"/>
				<updated>2018-11-03T10:27:03Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Обновление модуля&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
function p.infobox( f )&lt;br /&gt;
	local args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge( true )&lt;br /&gt;
	local titleObject = mw.title.getCurrentTitle()&lt;br /&gt;
	local title = args[&amp;#039;название&amp;#039;] or titleObject.subpageText&lt;br /&gt;
	local invtitle = args[&amp;#039;инвизображение&amp;#039;] or args[&amp;quot;инвизображение1&amp;quot;] or args[&amp;#039;название&amp;#039;] or titleObject.subpageText&lt;br /&gt;
	local modtitle = args[&amp;#039;мод&amp;#039;] or titleObject.rootText&lt;br /&gt;
	if modtitle == &amp;#039;нет&amp;#039; then&lt;br /&gt;
		modification = &amp;#039;&amp;#039;&lt;br /&gt;
		invmodification = &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		modification = &amp;#039; (&amp;#039; .. modtitle .. &amp;#039;)&amp;#039;&lt;br /&gt;
		invmodification = modtitle .. &amp;#039;:&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local imageArea = args[&amp;#039;изображения&amp;#039;]&lt;br /&gt;
	if not imageArea and imageArea ~= &amp;#039;none&amp;#039; then&lt;br /&gt;
		local images = {}&lt;br /&gt;
		local invImages = {}&lt;br /&gt;
		local defaultImageSize = args[&amp;quot;умолчразмеризобр&amp;quot;] or &amp;#039;150px&amp;#039;&lt;br /&gt;
		args[&amp;quot;изображение1&amp;quot;] = args[&amp;quot;изображение1&amp;quot;] or args[&amp;quot;изображение&amp;quot;] or &amp;#039;title&amp;#039;&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 &amp;#039;title&amp;#039;&lt;br /&gt;
		args[&amp;quot;мод&amp;quot;] = args[&amp;quot;мод&amp;quot;]&lt;br /&gt;
		&lt;br /&gt;
		local imgCount = {}&lt;br /&gt;
		local invImgCount = {}&lt;br /&gt;
		for k, v in pairs( args ) do&lt;br /&gt;
			if type( k ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				local image, num = mw.ustring.match(k, &amp;#039;^(изображение)(%d+)$&amp;#039; )&lt;br /&gt;
				local invImage, invNum = mw.ustring.match(k, &amp;#039;^(инвизображение)(%d+)$&amp;#039; )&lt;br /&gt;
				if mw.ustring.lower(v) ~= &amp;#039;нет&amp;#039; then&lt;br /&gt;
					if image then&lt;br /&gt;
						table.insert( imgCount, tonumber( num ) )&lt;br /&gt;
					elseif invImage then&lt;br /&gt;
						table.insert( invImgCount, tonumber( invNum ) )&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		table.sort( imgCount )&lt;br /&gt;
		local animate&lt;br /&gt;
		for k, v in ipairs( imgCount ) do&lt;br /&gt;
			local image = args[&amp;#039;изображение&amp;#039; .. v]&lt;br /&gt;
			local size = args[&amp;#039;изобр&amp;#039; .. v .. &amp;#039;разм&amp;#039;] or defaultImageSize&lt;br /&gt;
			if image == &amp;#039;title&amp;#039; then&lt;br /&gt;
				local imageTitle = mw.title.new( &amp;#039;Файл:&amp;#039; .. title .. modification ..&amp;#039;.png&amp;#039; )&lt;br /&gt;
				if imageTitle and imageTitle.exists then&lt;br /&gt;
					image = &amp;#039;[[Файл:&amp;#039; .. title .. modification .. &amp;#039;.png|&amp;#039; .. size .. &amp;#039;]]&amp;#039;&lt;br /&gt;
				elseif titleObject.namespace == 0 then&lt;br /&gt;
					image = &amp;#039;[[Файл:No image.svg|&amp;#039; .. size .. &amp;#039;|link=Файл:&amp;#039; .. title .. modification .. &amp;#039;.png|Загрузить &amp;#039; .. title .. modification .. &amp;#039;.png]]&amp;#039;&lt;br /&gt;
				else&lt;br /&gt;
					image = &amp;#039;[[Файл:No image.svg|&amp;#039; .. size .. &amp;#039;|link=]]&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
			elseif mw.ustring.match(image, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				if not animate then&lt;br /&gt;
					animate = require( &amp;#039;Модуль:Анимация&amp;#039; ).animate&lt;br /&gt;
				end&lt;br /&gt;
				image = animate{ image, size }&lt;br /&gt;
			else&lt;br /&gt;
				image = &amp;#039;[[Файл:&amp;#039; .. image .. modification .. &amp;#039;.png&amp;#039; .. &amp;#039;|&amp;#039; .. size .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;div&amp;gt;&amp;#039; .. image .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		images = table.concat( images, &amp;#039;\n&amp;#039; )&lt;br /&gt;
		&lt;br /&gt;
		if #invImgCount &amp;gt; 0 then&lt;br /&gt;
			table.sort( invImgCount )&lt;br /&gt;
			local grid&lt;br /&gt;
			local invIds = mw.loadData( [[Модуль:ИнвСпрайт/ID]] )[&amp;quot;IDы&amp;quot;]&lt;br /&gt;
			for k, v in ipairs( invImgCount ) do&lt;br /&gt;
				local image = args[&amp;#039;инвизображение&amp;#039; .. v]&lt;br /&gt;
				if image == &amp;#039;title&amp;#039; then&lt;br /&gt;
					local imageExists&lt;br /&gt;
					if invIds[title] then&lt;br /&gt;
						imageExists = true&lt;br /&gt;
					else&lt;br /&gt;
						local imageTitle = mw.title.new( &amp;#039;Файл:Grid &amp;#039; .. title .. modification .. &amp;#039;.png&amp;#039; )&lt;br /&gt;
						imageExists = imageTitle and imageTitle.exists&lt;br /&gt;
					end&lt;br /&gt;
					if imageExists then&lt;br /&gt;
						image = title&lt;br /&gt;
					else&lt;br /&gt;
						image = false&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if image == &amp;#039;----&amp;#039; then&lt;br /&gt;
					table.insert( invImages, &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding-top:.5em&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
				elseif image ~= &amp;#039;----&amp;#039; then&lt;br /&gt;
					if not grid then&lt;br /&gt;
						grid = require( &amp;#039;Модуль:Инвентарный слот&amp;#039; ).slot&lt;br /&gt;
					end&lt;br /&gt;
					table.insert( invImages, grid{ invmodification .. invtitle, [&amp;#039;ссылка&amp;#039;] = &amp;#039;нет&amp;#039; } )&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if grid and #invImages &amp;gt; 0 then&lt;br /&gt;
				invImages = &amp;#039;&amp;lt;div class=&amp;quot;infobox-invimages&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;#039; .. table.concat( invImages, &amp;#039;&amp;#039; ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
			else&lt;br /&gt;
				invImages = &amp;#039;[[Файл:No image.svg|link=]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			invImages = &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if images ~= &amp;#039;&amp;#039; or invImages ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			imageArea = images .. &amp;#039;\n&amp;#039; .. invImages&lt;br /&gt;
		else&lt;br /&gt;
			imageArea = &amp;#039;нет&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if imageArea and imageArea ~= &amp;#039;нет&amp;#039; then&lt;br /&gt;
		imageArea = &amp;#039;&amp;lt;div class=&amp;quot;infobox-imagearea&amp;quot;&amp;gt;&amp;#039; .. imageArea .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		imageArea = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local footer = args[&amp;quot;подвал&amp;quot;]&lt;br /&gt;
	if footer then&lt;br /&gt;
		footer = &amp;#039;| class=&amp;quot;infobox-footer&amp;quot; colspan=&amp;quot;2&amp;quot; | &amp;#039; .. footer&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local bgcolor = args[&amp;quot;цвет&amp;quot;]&lt;br /&gt;
	if bgcolor then&lt;br /&gt;
		bgcolor = &amp;#039; style=&amp;quot;background:#&amp;#039; .. bgcolor .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = {&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;notaninfobox&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
			&amp;#039;&amp;lt;div class=&amp;quot;mcwiki-header infobox-title&amp;quot;&amp;#039;, bgcolor or &amp;#039;&amp;#039;, &amp;#039;&amp;gt;&amp;#039; .. title .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;,&lt;br /&gt;
			imageArea,&lt;br /&gt;
			&amp;#039;{| class=&amp;quot;infobox-rows&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;|-&amp;#039;,&lt;br /&gt;
			args[&amp;quot;ряды&amp;quot;] or &amp;#039;&amp;#039;,&lt;br /&gt;
			footer or &amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;|}&amp;#039;,&lt;br /&gt;
		&amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	return table.concat( html, &amp;#039;\n&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
mw.log()&lt;br /&gt;
mw.logObject()&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=6752</id>
		<title>Модуль:Анимация</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F&amp;diff=6752"/>
				<updated>2018-11-03T10:27:00Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Обновление модуля&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local modification = &amp;#039; (&amp;#039; .. mw.title.getCurrentTitle().rootText .. &amp;#039;)&amp;#039;&lt;br /&gt;
function p.animate( 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;
	end&lt;br /&gt;
	local files = args[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local size = args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if size ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		size = &amp;#039;|&amp;#039; .. size&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local images = {}&lt;br /&gt;
	for image in mw.text.gsplit( files, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
		if image == &amp;#039;&amp;#039; then&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		else&lt;br /&gt;
			table.insert( images, &amp;#039;&amp;lt;span&amp;gt;[[Файл:&amp;#039; .. image .. modification .. size .. &amp;#039;]]&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	images[1] = images[1]:gsub( &amp;#039;^&amp;lt;span&amp;gt;&amp;#039;, &amp;#039;&amp;lt;span class=&amp;quot;active&amp;quot;&amp;gt;&amp;#039; )&lt;br /&gt;
	&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;animated&amp;quot;&amp;gt;&amp;#039; .. table.concat( images ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=Blood_Magic/%D0%9A%D1%80%D0%BE%D0%B2%D0%B0%D0%B2%D1%8B%D0%B9_%D1%88%D0%B0%D1%80&amp;diff=6751</id>
		<title>Blood Magic/Кровавый шар</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=Blood_Magic/%D0%9A%D1%80%D0%BE%D0%B2%D0%B0%D0%B2%D1%8B%D0%B9_%D1%88%D0%B0%D1%80&amp;diff=6751"/>
				<updated>2018-10-29T18:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{НеодСтраница}} Ссылки, имеющие один и тот же заголовок или похожие значения: *{{Ссылка/Blood…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{НеодСтраница}}&lt;br /&gt;
Ссылки, имеющие один и тот же заголовок или похожие значения:&lt;br /&gt;
*{{Ссылка/Blood Magic|Слабый кровавый шар}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар ученика}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар мага}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар мастера}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар архимага}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Необыкновенный кровавый шар}}&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=Blood_Magic/%D0%9A%D1%80%D0%BE%D0%B2%D0%B0%D0%B2%D1%8B%D0%B9_%D1%88%D0%B0%D1%80_(2)&amp;diff=6750</id>
		<title>Blood Magic/Кровавый шар (2)</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=Blood_Magic/%D0%9A%D1%80%D0%BE%D0%B2%D0%B0%D0%B2%D1%8B%D0%B9_%D1%88%D0%B0%D1%80_(2)&amp;diff=6750"/>
				<updated>2018-10-29T18:50:57Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{НеодСтраница}} Ссылки, имеющие один и тот же заголовок или похожие значения: *{{Ссылка/Blood…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{НеодСтраница}}&lt;br /&gt;
Ссылки, имеющие один и тот же заголовок или похожие значения:&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар ученика}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар мага}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар мастера}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Кровавый шар архимага}}&lt;br /&gt;
*{{Ссылка/Blood Magic|Необыкновенный кровавый шар}}&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popstop/common.js&amp;diff=6749</id>
		<title>Участник:Popstop/common.js</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Popstop/common.js&amp;diff=6749"/>
				<updated>2018-10-29T18:49:30Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.using([&amp;#039;mediawiki.api&amp;#039;]).then(function() {&lt;br /&gt;
	&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	var api = new mw.Api();&lt;br /&gt;
	var element = null;&lt;br /&gt;
&lt;br /&gt;
	var ratelimit = null;&lt;br /&gt;
	var request = null;&lt;br /&gt;
	var count = 0;&lt;br /&gt;
&lt;br /&gt;
	function status(message) {&lt;br /&gt;
		message = message === undefined ? &amp;quot;Очищено: &amp;quot; + count : message;&lt;br /&gt;
		if (element)&lt;br /&gt;
			element.text(message);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function error(message) {&lt;br /&gt;
		status(&amp;quot;Ошибка.&amp;quot;);&lt;br /&gt;
		message = message === undefined ? &amp;quot;unknown error&amp;quot; : message;&lt;br /&gt;
		console.log(&amp;quot;purge.js: &amp;quot; + message);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function calcGCD(x, y) {&lt;br /&gt;
		if (x &amp;lt; y) {&lt;br /&gt;
			var tmp = x;&lt;br /&gt;
			x = y;&lt;br /&gt;
			y = tmp;&lt;br /&gt;
		}&lt;br /&gt;
		while (true) {&lt;br /&gt;
			if (y === 0)&lt;br /&gt;
				return x;&lt;br /&gt;
			x %= y;&lt;br /&gt;
			if (x === 0)&lt;br /&gt;
				return y;&lt;br /&gt;
			y %= x;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function updateRatelimit(callback) {&lt;br /&gt;
		if (typeof purgejs_ratelimit !== &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
			ratelimit = purgejs_ratelimit;&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		api.get({&lt;br /&gt;
			meta: &amp;#039;userinfo&amp;#039;,&lt;br /&gt;
			uiprop: &amp;#039;rights|ratelimits&amp;#039;&lt;br /&gt;
		}).done(function(data) {&lt;br /&gt;
			if (data &amp;amp;&amp;amp; data.query &amp;amp;&amp;amp; data.query.userinfo) {&lt;br /&gt;
				var ratelimits = data.query.userinfo.ratelimits;&lt;br /&gt;
				var rights = data.query.userinfo.rights;&lt;br /&gt;
				if (ratelimits &amp;amp;&amp;amp; ratelimits.purge) {&lt;br /&gt;
					if (ratelimits.purge.user) {&lt;br /&gt;
						ratelimit = ratelimits.purge.user;&lt;br /&gt;
					} else if (ratelimits.purge.ip) {&lt;br /&gt;
						ratelimit = ratelimits.purge.ip;&lt;br /&gt;
					} else {&lt;br /&gt;
						return error(&amp;quot;unnable to parse ratelimits&amp;quot;);&lt;br /&gt;
					}&lt;br /&gt;
					var gcd = calcGCD(ratelimit.hits, ratelimit.seconds);&lt;br /&gt;
					if (gcd &amp;gt; 1) {&lt;br /&gt;
						ratelimit.hits /= gcd;&lt;br /&gt;
						ratelimit.seconds /= gcd;&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					if (rights &amp;amp;&amp;amp; rights.indexOf(&amp;quot;apihighlimits&amp;quot;) !== -1) {&lt;br /&gt;
						ratelimit = { hits: 500, seconds: 0 };&lt;br /&gt;
					} else {&lt;br /&gt;
						ratelimit = { hits: 50, seconds: 0 };&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				return error(&amp;quot;unnable to get userinfo&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			if (callback)&lt;br /&gt;
				callback();&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function processPurge(continueinfo) {&lt;br /&gt;
		api.post($.extend({}, request, continueinfo))&lt;br /&gt;
			.done(function(data) {&lt;br /&gt;
				if (data &amp;amp;&amp;amp; data.purge &amp;amp;&amp;amp; data.purge.length) {&lt;br /&gt;
					count += data.purge.length;&lt;br /&gt;
				} else {&lt;br /&gt;
					return error(&amp;quot;empty response&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				if (data.warnings) {&lt;br /&gt;
					error(&amp;quot;warning recieved&amp;quot;);&lt;br /&gt;
					console.log(data.warnings);&lt;br /&gt;
					return;&lt;br /&gt;
				}&lt;br /&gt;
				if (data[&amp;quot;continue&amp;quot;]) {&lt;br /&gt;
					status();&lt;br /&gt;
					setTimeout(function() {&lt;br /&gt;
						processPurge(data[&amp;quot;continue&amp;quot;]);&lt;br /&gt;
					}, 1000 * ratelimit.seconds);&lt;br /&gt;
				} else {&lt;br /&gt;
					status(&amp;quot;Готово.&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
			})&lt;br /&gt;
			.fail(function() {&lt;br /&gt;
				error(&amp;quot;request failed&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function startPurge(prefix, generator, linkupdate) {&lt;br /&gt;
		request = { &amp;quot;action&amp;quot;: &amp;quot;purge&amp;quot; };&lt;br /&gt;
		if (linkupdate) {&lt;br /&gt;
			request.forcelinkupdate = &amp;quot;1&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		$.extend(request, generator);&lt;br /&gt;
&lt;br /&gt;
		updateRatelimit(function() {&lt;br /&gt;
			var limit = prefix + &amp;quot;limit&amp;quot;;&lt;br /&gt;
			if (linkupdate) {&lt;br /&gt;
				request[limit] = 1;&lt;br /&gt;
			} else {&lt;br /&gt;
				request[limit] = ratelimit.hits;&lt;br /&gt;
			}&lt;br /&gt;
			count = 0;&lt;br /&gt;
			status();&lt;br /&gt;
			processPurge(null);&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function addButton() {&lt;br /&gt;
		var pagename = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
		var namespace = mw.config.get(&amp;quot;wgCanonicalNamespace&amp;quot;);&lt;br /&gt;
		var action = mw.config.get(&amp;quot;wgAction&amp;quot;);&lt;br /&gt;
		var exists = mw.config.get(&amp;quot;wgArticleId&amp;quot;) !== 0;&lt;br /&gt;
&lt;br /&gt;
		if (!(&lt;br /&gt;
			action === &amp;quot;view&amp;quot; ||&lt;br /&gt;
			namespace === &amp;quot;Category&amp;quot; &amp;amp;&amp;amp; action === &amp;quot;edit&amp;quot; &amp;amp;&amp;amp; !exists&lt;br /&gt;
		)) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		var prefix, generator;&lt;br /&gt;
		var comment = &amp;quot;&amp;quot;;&lt;br /&gt;
		if (namespace === &amp;quot;&amp;quot;) {&lt;br /&gt;
			prefix = &amp;quot;gbl&amp;quot;;&lt;br /&gt;
			generator = {&lt;br /&gt;
				&amp;quot;generator&amp;quot;: &amp;quot;backlinks&amp;quot;,&lt;br /&gt;
				&amp;quot;gbltitle&amp;quot;: pagename&lt;br /&gt;
			};&lt;br /&gt;
			comment = &amp;quot;Сбросить кэш на страницах, ссылающихся на данную. &amp;quot;;&lt;br /&gt;
		} else if (namespace === &amp;quot;File&amp;quot;) {&lt;br /&gt;
			prefix = &amp;quot;gfu&amp;quot;;&lt;br /&gt;
			generator = {&lt;br /&gt;
				&amp;quot;generator&amp;quot;: &amp;quot;fileusage&amp;quot;,&lt;br /&gt;
				&amp;quot;titles&amp;quot;: pagename&lt;br /&gt;
			};&lt;br /&gt;
			comment = &amp;quot;Сбросить кэш на страницах, включающих данный файл. &amp;quot;;&lt;br /&gt;
		} else if (namespace === &amp;quot;Template&amp;quot;) {&lt;br /&gt;
			prefix = &amp;quot;gti&amp;quot;;&lt;br /&gt;
			generator = {&lt;br /&gt;
				&amp;quot;generator&amp;quot;: &amp;quot;transcludedin&amp;quot;,&lt;br /&gt;
				&amp;quot;titles&amp;quot;: pagename&lt;br /&gt;
			};&lt;br /&gt;
			comment = &amp;quot;Сбросить кэш на страницах, включающих данный шаблон. &amp;quot;;&lt;br /&gt;
		} else if (namespace === &amp;quot;Category&amp;quot;) {&lt;br /&gt;
			prefix = &amp;quot;gcm&amp;quot;;&lt;br /&gt;
			generator = {&lt;br /&gt;
				&amp;quot;generator&amp;quot;: &amp;quot;categorymembers&amp;quot;,&lt;br /&gt;
				&amp;quot;gcmtitle&amp;quot;: pagename&lt;br /&gt;
			};&lt;br /&gt;
			comment = &amp;quot;Сбросить кэш на страницах, включённых в данную категорию. &amp;quot;;&lt;br /&gt;
		} else if (&lt;br /&gt;
			(namespace === &amp;quot;User&amp;quot; || namespace === &amp;quot;Wikiproject&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
			pagename.indexOf(&amp;quot;/&amp;quot;) != -1&lt;br /&gt;
		) {&lt;br /&gt;
			prefix = &amp;quot;gpl&amp;quot;;&lt;br /&gt;
			generator = {&lt;br /&gt;
				&amp;quot;generator&amp;quot;: &amp;quot;links&amp;quot;,&lt;br /&gt;
				&amp;quot;titles&amp;quot;: pagename&lt;br /&gt;
			};&lt;br /&gt;
			comment = &amp;quot;Сбросить кэш на страницах, на которые ведут ссылки с данной. &amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (prefix &amp;amp;&amp;amp; generator) {&lt;br /&gt;
			var link = $(&amp;quot;&amp;lt;a&amp;gt;&amp;quot;, {&lt;br /&gt;
				title: comment + &amp;quot;Ctrl+клик — сделать нулевую правку.&amp;quot;,&lt;br /&gt;
				text: &amp;quot;Сбросить кэш&amp;quot;&lt;br /&gt;
			}).css({cursor: &amp;#039;pointer&amp;#039;});&lt;br /&gt;
			link.click(function(ev) {&lt;br /&gt;
				startPurge(prefix, generator, ev.ctrlKey);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			element = $(&amp;quot;&amp;lt;li&amp;gt;&amp;quot;, { id: &amp;quot;t-purge&amp;quot; })&lt;br /&gt;
				.addClass(&amp;quot;plainlinks&amp;quot;)&lt;br /&gt;
				.append(link);&lt;br /&gt;
&lt;br /&gt;
			$(&amp;quot;#p-tb div ul&amp;quot;).append(element);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	addButton();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
mw.loader.using([&amp;#039;mediawiki.util&amp;#039;, &amp;#039;mediawiki.api&amp;#039;])&lt;br /&gt;
	.then(function() {&lt;br /&gt;
		var count, wait;&lt;br /&gt;
		var step = 1;&lt;br /&gt;
		var depth = 5;&lt;br /&gt;
		var api = new mw.Api();&lt;br /&gt;
&lt;br /&gt;
		function collectSubCategories(cat) {&lt;br /&gt;
			console.log(&amp;#039;cat: &amp;#039; + cat);&lt;br /&gt;
			return $.getJSON(&amp;#039;https://petscan.wmflabs.org&amp;#039;, {&lt;br /&gt;
					language: &amp;#039;ru&amp;#039;,&lt;br /&gt;
					project: &amp;#039;wikipedia&amp;#039;,&lt;br /&gt;
					depth: depth - 1,&lt;br /&gt;
					categories: cat.substring(cat.indexOf(&amp;#039;:&amp;#039;) + 1),&lt;br /&gt;
					&amp;#039;ns[14]&amp;#039;: 1,&lt;br /&gt;
					interface_language: &amp;#039;en&amp;#039;,&lt;br /&gt;
					active_tab: &amp;#039;tab_output&amp;#039;,&lt;br /&gt;
					doit: &amp;#039;&amp;#039;,&lt;br /&gt;
					format: &amp;#039;json&amp;#039;&lt;br /&gt;
				})&lt;br /&gt;
				.done(function(d) {&lt;br /&gt;
					purge([cat].concat(d[&amp;#039;*&amp;#039;][0].a[&amp;#039;*&amp;#039;].map(function(q) {&lt;br /&gt;
						return &amp;quot;Категория:&amp;quot; + q.title;&lt;br /&gt;
					}))&lt;br /&gt;
						.reverse());&lt;br /&gt;
				})&lt;br /&gt;
				.fail(function() {&lt;br /&gt;
					alert(&amp;quot;Сбор подкатегорий не удался&amp;quot;);&lt;br /&gt;
					purge([cat]);&lt;br /&gt;
				});&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function purge(cats) {&lt;br /&gt;
			if (cats.length &amp;lt;= 0) {&lt;br /&gt;
				alert(&amp;quot;Нуль-правки успешно завершены!&amp;quot;);&lt;br /&gt;
				document.location.reload();&lt;br /&gt;
			} else&lt;br /&gt;
				postPurge(cats[0], cats);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		function postPurge(cat, cats, addParams) {&lt;br /&gt;
			console.log(&amp;#039;catnext: &amp;#039; + cat);&lt;br /&gt;
			var apiParams = $.extend({&lt;br /&gt;
				action: &amp;#039;purge&amp;#039;,&lt;br /&gt;
				generator: &amp;#039;categorymembers&amp;#039;,&lt;br /&gt;
				&amp;#039;gcmtitle&amp;#039;: cat,&lt;br /&gt;
				&amp;#039;gcmlimit&amp;#039;: step,&lt;br /&gt;
				forcelinkupdate: 1&lt;br /&gt;
			}, addParams);&lt;br /&gt;
			api.post(apiParams)&lt;br /&gt;
				.done(function(d) {&lt;br /&gt;
					console.log(d);&lt;br /&gt;
					count += step;&lt;br /&gt;
					if (d.warnings === undefined &amp;amp;&amp;amp; d[&amp;quot;continue&amp;quot;] !== undefined &amp;amp;&amp;amp;&lt;br /&gt;
						d[&amp;quot;continue&amp;quot;].gcmcontinue) {&lt;br /&gt;
						mw.notify(count + &amp;quot; страниц перепостроены&amp;quot;);&lt;br /&gt;
						setTimeout(function() {&lt;br /&gt;
							postPurge(cat, cats, d[&amp;quot;continue&amp;quot;]);&lt;br /&gt;
						}, wait);&lt;br /&gt;
					} else {&lt;br /&gt;
						alert(&amp;quot;Нуль-правки успешно завершены! (&amp;quot; + cat.replace(/_/g, &amp;quot; &amp;quot;) + &amp;quot;)&amp;quot;);&lt;br /&gt;
						cats.shift();&lt;br /&gt;
						purge(cats);&lt;br /&gt;
					}&lt;br /&gt;
				})&lt;br /&gt;
				.fail(function() {&lt;br /&gt;
					alert(&amp;quot;Неудача&amp;quot;);&lt;br /&gt;
				});&lt;br /&gt;
		}&lt;br /&gt;
		if (mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) == 14) {&lt;br /&gt;
			wait = 1000;&lt;br /&gt;
			api.get({&lt;br /&gt;
					meta: &amp;#039;userinfo&amp;#039;,&lt;br /&gt;
					uiprop: &amp;#039;ratelimits&amp;#039;&lt;br /&gt;
				})&lt;br /&gt;
				.done(function(d) {&lt;br /&gt;
					if (d &amp;amp;&amp;amp; d.query &amp;amp;&amp;amp; d.query.userinfo &amp;amp;&amp;amp; d.query.userinfo.ratelimits &amp;amp;&amp;amp;&lt;br /&gt;
						d.query.userinfo.ratelimits.purge)&lt;br /&gt;
						wait = 2000;&lt;br /&gt;
					$( &amp;quot;#p-tb div ul&amp;quot; ).append( $(&amp;#039;&amp;lt;li&amp;gt;&amp;#039;).addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
						.append( $(&amp;#039;&amp;lt;a&amp;gt;&amp;#039;).text(&amp;#039;Нуль-правки&amp;#039;).css({cursor: &amp;#039;pointer&amp;#039;})&lt;br /&gt;
						.click( function() {&lt;br /&gt;
							count = 0;&lt;br /&gt;
							collectSubCategories(mw.config.get(&amp;#039;wgPageName&amp;#039;)&lt;br /&gt;
								.replace(/_/g, &amp;quot; &amp;quot;));&lt;br /&gt;
						} ) ) );&lt;br /&gt;
				});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
if (mw.config.get( &amp;#039;wgAction&amp;#039; ) == &amp;#039;edit&amp;#039; || mw.config.get( &amp;#039;wgAction&amp;#039; ) == &amp;#039;submit&amp;#039;) {&lt;br /&gt;
( function() {&lt;br /&gt;
  var buttons = [&lt;br /&gt;
  [&lt;br /&gt;
    &amp;#039;//w.hil.su/images/c/cb/Grid_%D0%9A%D1%80%D0%BE%D0%B2%D0%B0%D0%B2%D1%8B%D0%B9_%D0%B0%D0%BB%D1%82%D0%B0%D1%80%D1%8C_%28Blood_Magic%29.png&amp;#039;,&lt;br /&gt;
    &amp;#039;Вставить шаблон кровавого алтаря&amp;#039;,&lt;br /&gt;
    &amp;#039;{&amp;#039;+&amp;#039;{Blood Magic/Кровавый алтарь\n|вход=\n|выход=\n|уровень=\n|LP=\n|расход=\n|потери=\n&amp;#039;,&lt;br /&gt;
    &amp;#039;}}&amp;#039;,&lt;br /&gt;
    &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;button-bloodaltar&amp;#039;&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    &amp;#039;//d1u5p3l4wpay3k.cloudfront.net/minecraft_ru_gamepedia/0/06/%D0%9F%D0%B0%D0%BB%D0%BA%D0%B0.png?version=b9bf1cabc365d86a601e4e872c84c165&amp;#039;,&lt;br /&gt;
    &amp;#039;Вставить шаблон предмета&amp;#039;,&lt;br /&gt;
    &amp;#039;{&amp;#039;+&amp;#039;{Предмет\n|изображение=\n|инвизображение=\n|тип=\n|прочн=\n|склад=\n|текст_id=\n&amp;#039;,&lt;br /&gt;
    &amp;#039;}}&amp;#039;,&lt;br /&gt;
    &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;button-item&amp;#039;&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    &amp;#039;//d1u5p3l4wpay3k.cloudfront.net/minecraft_ru_gamepedia/0/04/%D0%97%D0%B5%D0%BC%D0%BB%D1%8F.png?version=f0b569469bb185914c9394c44f1686bf&amp;#039;,&lt;br /&gt;
    &amp;#039;Вставить шаблон блока&amp;#039;,&lt;br /&gt;
    &amp;#039;{&amp;#039;+&amp;#039;{Блок\n|изображение=\n|инвизображение=\n|тип=\n|гравит=\n|грязь=\n|прозр=\n|свет=\n|взрывоуст=\n|прочн=\n|инструмент=\n|склад=\n|восплам=\n|текст_id=\n&amp;#039;,&lt;br /&gt;
    &amp;#039;}}&amp;#039;,&lt;br /&gt;
    &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;button-block&amp;#039;&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    &amp;#039;//d1u5p3l4wpay3k.cloudfront.net/minecraft_ru_gamepedia/5/5f/Grid_%D0%96%D0%B0%D1%80%D0%B5%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D0%B8%D0%BD%D0%B8%D0%BD%D0%B0.png?version=332e7af745e3e442f4d36b41d567f53d&amp;#039;,&lt;br /&gt;
    &amp;#039;Вставить шаблон еды&amp;#039;,&lt;br /&gt;
    &amp;#039;{&amp;#039;+&amp;#039;{Еда\n|изображение=\n|инвизображение=\n|тип=\n|готов=\n|восст=\n|текст_id=\n|некат=\n&amp;#039;,&lt;br /&gt;
    &amp;#039;}}&amp;#039;,&lt;br /&gt;
    &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;button-food&amp;#039;&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    &amp;#039;//w.hil.su/images/e/e5/%D0%A2%D0%B5%D0%BB%D0%B5%D0%BF%D0%BE%D0%B7%D0%B5%D1%80_%28Blood_Magic%29.png&amp;#039;,&lt;br /&gt;
    &amp;#039;Вставить шаблон модификации&amp;#039;,&lt;br /&gt;
    &amp;#039;{&amp;#039;+&amp;#039;{Модификация\n|изображение=\n|версия=\n|mcверсия=\n|требования=\n|forge=\n|дополнения=\n|серверы=\n&amp;#039;,&lt;br /&gt;
    &amp;#039;}}&amp;#039;,&lt;br /&gt;
    &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;button-modification&amp;#039;&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    &amp;#039;//w.hil.su/images/2/28/%D0%9D%D0%B5%D0%BE%D0%B4%D0%A1%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0.png&amp;#039;,&lt;br /&gt;
    &amp;#039;Вставить шаблон дизамбига&amp;#039;,&lt;br /&gt;
    &amp;#039;{&amp;#039;+&amp;#039;{НеодСтраница&amp;#039;,&lt;br /&gt;
    &amp;#039;}}&amp;#039;,&lt;br /&gt;
    &amp;#039;&amp;#039;,&lt;br /&gt;
    &amp;#039;button-disambiguation&amp;#039;&lt;br /&gt;
  ]&lt;br /&gt;
];&lt;br /&gt;
	$.each( buttons, function() { mw.toolbar.addButton.apply( null, this ); } );&lt;br /&gt;
} ) ();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
(function() {&lt;br /&gt;
	&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    var $ = window.jQuery;&lt;br /&gt;
	var action = mw.config.get(&amp;quot;wgAction&amp;quot;);&lt;br /&gt;
	var pagename = mw.config.get(&amp;quot;wgCanonicalSpecialPageName&amp;quot;);&lt;br /&gt;
	if (!pagename &amp;amp;&amp;amp; action !== &amp;quot;history&amp;quot;) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function changeLinkLimit(link, limit) {&lt;br /&gt;
		var oldLimit = link.text();&lt;br /&gt;
&lt;br /&gt;
		function replace(attr, prefix) {&lt;br /&gt;
			if (prefix === undefined)&lt;br /&gt;
				prefix = &amp;quot;&amp;quot;;&lt;br /&gt;
			var value = link.attr(attr);&lt;br /&gt;
			value = value.replace(prefix + oldLimit, prefix + limit);&lt;br /&gt;
			return link.attr(attr, value);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		link.text(limit);&lt;br /&gt;
		replace(&amp;quot;title&amp;quot;);&lt;br /&gt;
		replace(&amp;quot;href&amp;quot;, &amp;quot;limit=&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		return link;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var links;&lt;br /&gt;
	if (pagename === &amp;quot;Whatlinkshere&amp;quot;) {&lt;br /&gt;
		links = $(&amp;quot;#mw-content-text &amp;gt; a:last-child&amp;quot;);&lt;br /&gt;
	} else {&lt;br /&gt;
		links = $(&amp;quot;a.mw-numlink:contains(500)&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	for (var i = 0; i &amp;lt; links.length; i++) {&lt;br /&gt;
		var link = $(links[i]);&lt;br /&gt;
		link&lt;br /&gt;
			.after(changeLinkLimit(link.clone(), &amp;quot;5000&amp;quot;))&lt;br /&gt;
			.after(&amp;quot; | &amp;quot;)&lt;br /&gt;
			.after(changeLinkLimit(link.clone(), &amp;quot;1000&amp;quot;))&lt;br /&gt;
			.after(&amp;quot; | &amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
mw.util.addPortletLink (&amp;#039;p-tb&amp;#039;, &amp;#039;/Служебная:Новые_страницы&amp;#039;, &amp;#039;Новые статьи&amp;#039;, &amp;#039;t-new&amp;#039;, &amp;#039;Новые статьи&amp;#039;);&lt;br /&gt;
mw.util.addPortletLink (&amp;#039;p-tb&amp;#039;, &amp;#039;/Служебная:Указатель_по_началу_названия/&amp;#039;+mw.config.get( &amp;#039;wgPageName&amp;#039; )+&amp;#039;/&amp;#039;, &amp;#039;Подстраницы&amp;#039; , &amp;#039;t-subpages&amp;#039;, &amp;#039;Подстраницы&amp;#039;);&lt;br /&gt;
mw.util.addPortletLink (&amp;#039;p-tb&amp;#039;, &amp;#039;/Служебная:Требуемые_страницы&amp;#039;, &amp;#039;Требуемые статьи&amp;#039;, &amp;#039;t-pages&amp;#039;, &amp;#039;Требуемые страницы&amp;#039;);&lt;br /&gt;
mw.util.addPortletLink (&amp;#039;p-tb&amp;#039;, &amp;#039;/Служебная:Список_файлов&amp;#039;, &amp;#039;Список файлов&amp;#039;, &amp;#039;t-files&amp;#039;, &amp;#039;Список файлов&amp;#039;);&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Blood_Magic/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BD%D0%B8%D0%BC%D1%8B&amp;diff=6743</id>
		<title>Модуль:ИнвСпрайт/Blood Magic/Псевдонимы</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Blood_Magic/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BD%D0%B8%D0%BC%D1%8B&amp;diff=6743"/>
				<updated>2018-10-29T18:39:27Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local russian = mw.language.new(&amp;#039;ru&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local aliases_Blood_Magic = {&lt;br /&gt;
	[&amp;#039;Любой Кровавый шар&amp;#039;] = &amp;#039;Слабый кровавый шар; Кровавый шар ученика; Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар&amp;#039;,&lt;br /&gt;
	[&amp;#039;Любой Кровавый шар (2)&amp;#039;] = &amp;#039;Кровавый шар ученика; Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар&amp;#039;,&lt;br /&gt;
	[&amp;#039;Любой Кровавый шар (3)&amp;#039;] = &amp;#039;Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар&amp;#039;,&lt;br /&gt;
	[&amp;#039;Любой Кровавый шар (4)&amp;#039;] = &amp;#039;Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар&amp;#039;,&lt;br /&gt;
	[&amp;#039;Любой Кровавый шар (5)&amp;#039;] = &amp;#039;Кровавый шар архимага; Необыкновенный кровавый шар&amp;#039;,&lt;br /&gt;
	[&amp;#039;Любой Адский камень (сырая энергия)&amp;#039;] = &amp;#039;Мелкий адский камень (сырая энергия); Небольшой адский камень (сырая энергия); Обычный адский камень (сырая энергия); Большой адский камень (сырая энергия); Великий адский камень (сырая энергия)&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return aliases_Blood_Magic&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Blood_Magic/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BD%D0%B8%D0%BC%D1%8B&amp;diff=6740</id>
		<title>Модуль:ИнвСпрайт/Blood Magic/Псевдонимы</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Blood_Magic/%D0%9F%D1%81%D0%B5%D0%B2%D0%B4%D0%BE%D0%BD%D0%B8%D0%BC%D1%8B&amp;diff=6740"/>
				<updated>2018-10-29T18:32:13Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local russian = mw.language.new(&amp;#039;ru&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local aliases_Blood_Magic = {&lt;br /&gt;
	[&amp;#039;Любой Кровавый шар&amp;#039;] = &amp;#039;Слабый кровавый шар; Кровавый шар ученика; Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар&amp;#039;,&lt;br /&gt;
	[&amp;#039;Любой Адский камень (сырая энергия)&amp;#039;] = &amp;#039;Мелкий адский камень (сырая энергия); Небольшой адский камень (сырая энергия); Обычный адский камень (сырая энергия); Большой адский камень (сырая энергия); Великий адский камень (сырая энергия)&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return aliases_Blood_Magic&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6733</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6733"/>
				<updated>2018-10-27T20:25:33Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Откат&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6732</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6732"/>
				<updated>2018-10-27T20:21:54Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	local modredirect = {ic2 = 1, mch = 1, MineChem = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		elseif mod == &amp;#039;ic2&amp;#039; or modredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. &amp;#039;[[mc:&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6731</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6731"/>
				<updated>2018-10-27T20:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}&lt;br /&gt;
	if mod == mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
		page = &amp;#039;mc:&amp;#039; .. mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1, ic2 = 1, mch = 1, MineChem = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6730</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6730"/>
				<updated>2018-10-27T20:15:52Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	elseif mod == mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
		page = &amp;#039;mc:&amp;#039; .. mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1, ic2 = 1, mch = 1, MineChem = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6729</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6729"/>
				<updated>2018-10-27T20:10:39Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; or mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
		page = &amp;#039;mc:&amp;#039; .. mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1, ic2 = 1, mch = 1, MineChem = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6728</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6728"/>
				<updated>2018-10-27T20:09:09Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; or mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
		page = &amp;#039;mc:&amp;#039; .. mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6727</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6727"/>
				<updated>2018-10-27T20:06:02Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1}&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; or mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
		page = &amp;#039;mc:&amp;#039; .. mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6726</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6726"/>
				<updated>2018-10-27T20:03:09Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	local mcredirect = {ic2 = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		elseif mod == &amp;#039;ic2&amp;#039; or mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. &amp;#039;mc:&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=6725</id>
		<title>Модуль:Модификации</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8&amp;diff=6725"/>
				<updated>2018-10-27T20:01:17Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
    [&amp;quot;as&amp;quot;] = &amp;quot;Astral Sorcery&amp;quot;,&lt;br /&gt;
    [&amp;quot;bm&amp;quot;] = &amp;quot;Blood Magic&amp;quot;,&lt;br /&gt;
    [&amp;quot;ba&amp;quot;] = &amp;quot;Blood Arsenal&amp;quot;,&lt;br /&gt;
    [&amp;quot;w&amp;quot;] = &amp;quot;Wizardry&amp;quot;,&lt;br /&gt;
    [&amp;quot;pe&amp;quot;] = &amp;quot;ProjectE&amp;quot;,&lt;br /&gt;
    [&amp;quot;mch&amp;quot;] = &amp;quot;MineChem&amp;quot;,&lt;br /&gt;
    [&amp;quot;fl&amp;quot;] = &amp;quot;Flan&amp;#039;s&amp;quot;,&lt;br /&gt;
    [&amp;quot;ic2&amp;quot;] = &amp;quot;IndustrialCraft 2&amp;quot;,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6724</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6724"/>
				<updated>2018-10-27T19:58:27Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	local mcredirect = {IndustrialCraft_2 = 1, ic2 = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		elseif mod == mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. &amp;#039;mc:&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6723</id>
		<title>Модуль:Крафт</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%9A%D1%80%D0%B0%D1%84%D1%82&amp;diff=6723"/>
				<updated>2018-10-27T19:53:57Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Тест&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Модуль для создания таблиц с рецептами для крафта.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local slot = require( [[Модуль:Инвентарный слот]] )&lt;br /&gt;
local getParts = slot.getParts&lt;br /&gt;
local prefixes = slot.prefixes&lt;br /&gt;
&lt;br /&gt;
-- Сервисная функция&lt;br /&gt;
local function prefixedLink( name, mod )&lt;br /&gt;
	local prefix = &amp;#039;&amp;#039;&lt;br /&gt;
	for _, thisPrefix in pairs( prefixes ) do&lt;br /&gt;
		if mw.ustring.find(name, &amp;#039;^&amp;#039; .. thisPrefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
			prefix = thisPrefix .. &amp;#039; &amp;#039;&lt;br /&gt;
			name = mw.ustring.gsub(name, &amp;#039;^&amp;#039; .. prefix, &amp;#039;&amp;#039; )&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local page = &amp;#039;&amp;#039;&lt;br /&gt;
	local mcredirect = {IndustrialCraft_2 = 1}&lt;br /&gt;
	if mod and mod ~= &amp;#039;&amp;#039; or mcredirect[mw.ustring.lower(mod)] then&lt;br /&gt;
		page = mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		page = &amp;#039;mc:&amp;#039; .. mod .. &amp;#039;/&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}&lt;br /&gt;
	if mod == &amp;#039;&amp;#039; or vanilla[mw.ustring.lower(mod)] then&lt;br /&gt;
			return prefix .. name&lt;br /&gt;
		else&lt;br /&gt;
			return prefix .. &amp;#039;[[&amp;#039; .. page .. name .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Строительство таблицы&lt;br /&gt;
function p.table( f )&lt;br /&gt;
	local args = f&lt;br /&gt;
	if f == mw.getCurrentFrame() then&lt;br /&gt;
		args = require( &amp;#039;Модуль:ProcessArgs&amp;#039; ).merge()&lt;br /&gt;
	else&lt;br /&gt;
		f = mw.getCurrentFrame()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Начинать таблицу при необходимости&lt;br /&gt;
	local multirow = f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;multirow&amp;#039; )&lt;br /&gt;
	if multirow ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
		multirow = nil&lt;br /&gt;
	end&lt;br /&gt;
	local head = args[&amp;quot;глава&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		head = &amp;#039;&amp;#039;&lt;br /&gt;
	elseif head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		multirow = 1&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
	else&lt;br /&gt;
		head = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Заканчивать таблицу при необходимости&lt;br /&gt;
	local foot = args[&amp;quot;подвал&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if multirow then&lt;br /&gt;
		if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			multirow = nil&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;multirow&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		foot = 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local header = &amp;#039;&amp;#039;&lt;br /&gt;
	if head ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local name = &amp;#039;&amp;#039;&lt;br /&gt;
		local description = &amp;#039;&amp;#039;&lt;br /&gt;
		if args[&amp;quot;показатьимя&amp;quot;] == &amp;#039;1&amp;#039; or multirow and args[&amp;quot;показатьимя&amp;quot;] ~= &amp;#039;0&amp;#039; then&lt;br /&gt;
			name = &amp;#039;!! Результат&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		if args[&amp;quot;показатьописание&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
			description = &amp;#039; !! class=&amp;quot;unsortable&amp;quot; | Описание&amp;#039;&lt;br /&gt;
			f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;1&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		local class = args[&amp;quot;класс&amp;quot;] or &amp;#039;&amp;#039;&lt;br /&gt;
		local recipeClass = &amp;#039;&amp;#039;&lt;br /&gt;
		if multirow then&lt;br /&gt;
			class = &amp;#039;sortable collapsible &amp;#039; .. class&lt;br /&gt;
			recipeClass = &amp;#039;class=&amp;quot;unsortable&amp;quot; |&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		header = table.concat( {&lt;br /&gt;
			&amp;#039; {| style=&amp;quot;text-align:center&amp;quot; class=&amp;quot;wikitable &amp;#039; .. class .. &amp;#039;&amp;quot; data-description=&amp;quot;Рецепты крафта&amp;quot;&amp;#039;,&lt;br /&gt;
			&amp;#039;! &amp;#039; .. &amp;#039;Ингредиенты !! &amp;#039; .. recipeClass .. &amp;#039; Рецепты [[крафт]]а&amp;#039; .. name .. description,&lt;br /&gt;
			&amp;#039;|-&amp;#039;&lt;br /&gt;
		}, &amp;#039;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с названием&lt;br /&gt;
	local nameCell&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingname&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		if args[&amp;quot;название&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			nameCell = args[&amp;quot;название&amp;quot;]&lt;br /&gt;
		else&lt;br /&gt;
			local names = {}&lt;br /&gt;
			local links = {}&lt;br /&gt;
			for v in mw.text.gsplit( args[&amp;quot;Выход&amp;quot;] or &amp;#039;&amp;#039;, &amp;#039;%s*;%s*&amp;#039; ) do&lt;br /&gt;
				parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				if not names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] then&lt;br /&gt;
					table.insert( links, prefixedLink( parts.name, parts.mod ) )&lt;br /&gt;
					names[parts.mod .. &amp;#039;:&amp;#039; .. parts.name] = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			nameCell = table.concat( links, &amp;#039;&amp;amp;nbsp;или&amp;lt;br&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if nameCell and args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
		nameCell = nameCell .. &amp;#039;&amp;lt;br&amp;gt;(&amp;#039; .. args[&amp;quot;запланированное&amp;quot;] .. &amp;#039;)&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создать список ингредиентов&lt;br /&gt;
	local ingredients = {}&lt;br /&gt;
	local ingredientKeys = {}&lt;br /&gt;
	local animatedIngredients = {}&lt;br /&gt;
	local animatedKeys = {}&lt;br /&gt;
	for k, v in pairs( args ) do&lt;br /&gt;
		v = mw.text.trim( v )&lt;br /&gt;
		if v ~= &amp;#039;&amp;#039; and mw.ustring.find(tostring( k ), &amp;#039;^%u?%d%d?$&amp;#039; ) then&lt;br /&gt;
			if mw.ustring.find(v, &amp;#039;;&amp;#039; ) then&lt;br /&gt;
				table.insert( animatedKeys, v )&lt;br /&gt;
			else&lt;br /&gt;
				local parts = getParts( v, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
				parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
				local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
				if not ingredients[fullName] then&lt;br /&gt;
					table.insert( ingredientKeys, fullName )&lt;br /&gt;
					ingredients[fullName] = { mod = parts.mod, name = parts.name }&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in ipairs( animatedKeys ) do&lt;br /&gt;
		local frames = mw.text.split( v, &amp;#039;%s*;%s*&amp;#039; )&lt;br /&gt;
		local length = #frames&lt;br /&gt;
		for k2, v2 in ipairs( frames ) do&lt;br /&gt;
			local parts = getParts( v2, args[&amp;quot;Мод&amp;quot;] )&lt;br /&gt;
			parts.mod = parts.mod or &amp;#039;&amp;#039;&lt;br /&gt;
			local fullName = parts.mod .. &amp;#039;:&amp;#039; .. parts.name&lt;br /&gt;
			if v2 ~= &amp;#039;&amp;#039; and not ingredients[fullName] and not animatedIngredients[fullName] then&lt;br /&gt;
				table.insert( ingredientKeys, fullName )&lt;br /&gt;
				animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с ингредиентами&lt;br /&gt;
	local ingredientsCell&lt;br /&gt;
	if args[&amp;quot;ингредиенты&amp;quot;] or &amp;#039;&amp;#039; ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		ingredientsCell = args[&amp;quot;ингредиенты&amp;quot;]&lt;br /&gt;
	else&lt;br /&gt;
		ingredientsCell = {}&lt;br /&gt;
		for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
			local separator = &amp;#039;&amp;amp;nbsp;+&amp;#039;&lt;br /&gt;
			if k == #ingredientKeys then&lt;br /&gt;
				separator = &amp;#039;&amp;#039;&lt;br /&gt;
			elseif animatedIngredients[v] and not animatedIngredients[v].final then&lt;br /&gt;
				separator = &amp;#039;&amp;amp;nbsp;или&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local mod = ( ingredients[v] or animatedIngredients[v] ).mod&lt;br /&gt;
			local name = ( ingredients[v] or animatedIngredients[v] ).name&lt;br /&gt;
			table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ingredientsCell = table.concat( ingredientsCell, &amp;#039;&amp;lt;br&amp;gt;\n&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Автоматическое расположение ингредиентов в бесформенном рецепте&lt;br /&gt;
	local newArgs = {}&lt;br /&gt;
	if args[1] then&lt;br /&gt;
		newArgs[&amp;quot;бесформенный&amp;quot;] = 1&lt;br /&gt;
		if args[7] then&lt;br /&gt;
			newArgs.A1 = args[1]&lt;br /&gt;
			newArgs.B1 = args[2]&lt;br /&gt;
			newArgs.C1 = args[3]&lt;br /&gt;
			newArgs.A2 = args[4]&lt;br /&gt;
			newArgs.B2 = args[5]&lt;br /&gt;
			newArgs.C2 = args[6]&lt;br /&gt;
			if args[8] then&lt;br /&gt;
				-- ◼◼◼      ◼◼◼&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[7]&lt;br /&gt;
				newArgs.B3 = args[8]&lt;br /&gt;
				newArgs.C3 = args[9]&lt;br /&gt;
				if args[9] then&lt;br /&gt;
					local identical = true&lt;br /&gt;
					for i = 1, 8 do&lt;br /&gt;
						if args[i] ~= args[i + 1] then&lt;br /&gt;
							identical = false&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if identical then&lt;br /&gt;
						newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◼◼◼&lt;br /&gt;
				-- ◻◼◻&lt;br /&gt;
				newArgs.B3 = args[7]&lt;br /&gt;
			end&lt;br /&gt;
		elseif args[2] then&lt;br /&gt;
			newArgs.A2 = args[1]&lt;br /&gt;
			newArgs.B2 = args[2]&lt;br /&gt;
			if args[5] then&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◼  OR  ◼◼◼&lt;br /&gt;
				-- ◼◼◼      ◼◼◻&lt;br /&gt;
				newArgs.C2 = args[3]&lt;br /&gt;
				newArgs.A3 = args[4]&lt;br /&gt;
				newArgs.B3 = args[5]&lt;br /&gt;
				newArgs.C3 = args[6]&lt;br /&gt;
			elseif args[4] then&lt;br /&gt;
				-- ◻◻◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				-- ◼◼◻&lt;br /&gt;
				newArgs.A3 = args[3]&lt;br /&gt;
				newArgs.B3 = args[4]&lt;br /&gt;
			else&lt;br /&gt;
				-- ◻◻◻      ◻◻◻&lt;br /&gt;
				-- ◼◼◻  OR  ◼◼◻&lt;br /&gt;
				-- ◻◼◻      ◻◻◻&lt;br /&gt;
				newArgs.B3 = args[3]&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			-- ◻◼◻&lt;br /&gt;
			-- ◻◻◻&lt;br /&gt;
			newArgs.B2 = args[1]&lt;br /&gt;
			newArgs[&amp;quot;бесформенный&amp;quot;] = nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		newArgs.A1 = args.A1&lt;br /&gt;
		newArgs.B1 = args.B1&lt;br /&gt;
		newArgs.C1 = args.C1&lt;br /&gt;
		newArgs.A2 = args.A2&lt;br /&gt;
		newArgs.B2 = args.B2&lt;br /&gt;
		newArgs.C2 = args.C2&lt;br /&gt;
		newArgs.A3 = args.A3&lt;br /&gt;
		newArgs.B3 = args.B3&lt;br /&gt;
		newArgs.C3 = args.C3&lt;br /&gt;
		newArgs[&amp;quot;фиксированный&amp;quot;] = args[&amp;quot;фиксированный&amp;quot;]&lt;br /&gt;
		newArgs[&amp;quot;нефиксировано&amp;quot;] = args[&amp;quot;нефиксировано&amp;quot;]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Остальные аргументы&lt;br /&gt;
	newArgs[&amp;quot;Мод&amp;quot;] = args[&amp;quot;Мод&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;Выход&amp;quot;] = args[&amp;quot;Выход&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВНазв&amp;quot;] = args[&amp;quot;ВНазв&amp;quot;]&lt;br /&gt;
	newArgs[&amp;quot;ВСсылка&amp;quot;] = args[&amp;quot;ВСсылка&amp;quot;]&lt;br /&gt;
	&lt;br /&gt;
	-- Ячейка с рецептом&lt;br /&gt;
	local recipeCell = require( &amp;#039;Модуль:Интерфейс&amp;#039; ).craftingTable( newArgs )&lt;br /&gt;
	&lt;br /&gt;
	local row = {&lt;br /&gt;
		&amp;#039;|\n&amp;#039; .. ingredientsCell,&lt;br /&gt;
		&amp;#039;style=&amp;quot;padding:1px&amp;quot; |\n&amp;#039; .. recipeCell&lt;br /&gt;
	}&lt;br /&gt;
	if nameCell then&lt;br /&gt;
		table.insert( row, 3, &amp;#039;&amp;lt;b&amp;gt;&amp;#039; .. nameCell .. &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if f:callParserFunction( &amp;#039;#dplvar&amp;#039;, &amp;#039;craftingdescription&amp;#039; ) == &amp;#039;1&amp;#039; then&lt;br /&gt;
		table.insert( row, args[&amp;quot;описание&amp;quot;] or &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	row = table.concat( row, &amp;#039;\n|&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
	local footer = &amp;#039;&amp;#039;&lt;br /&gt;
	if foot ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		footer = &amp;#039;|}&amp;#039;&lt;br /&gt;
		f:callParserFunction( &amp;#039;#dplvar:set&amp;#039;, &amp;#039;craftingname&amp;#039;, &amp;#039;0&amp;#039;, &amp;#039;craftingdescription&amp;#039;, &amp;#039;0&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Создание различных категорий для DPL&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	local categories = &amp;#039;&amp;#039;&lt;br /&gt;
	if args[&amp;quot;некат&amp;quot;] ~= &amp;#039;1&amp;#039; and title.namespace == 0 and not title.isSubpage then&lt;br /&gt;
		categories = {}&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;запланированное&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Запланированные материалы]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;тип&amp;quot;] then&lt;br /&gt;
			table.insert( categories, &amp;#039;[[Категория:Рецепты/&amp;#039; .. args[&amp;quot;тип&amp;quot;] .. &amp;#039;]]&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if args[&amp;quot;игнорировать&amp;quot;] ~= &amp;#039;1&amp;#039; then&lt;br /&gt;
			local dyes = {&lt;br /&gt;
				&amp;#039;Оранжевый краситель&amp;#039;, &amp;#039;Сиреневый краситель&amp;#039;, &amp;#039;Светло-синий краситель&amp;#039;, &amp;#039;Жёлтый краситель&amp;#039;, &amp;#039;Лаймовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Розовый краситель&amp;#039;, &amp;#039;Серый краситель&amp;#039;, &amp;#039;Светло-серый краситель&amp;#039;, &amp;#039;Бирюзовый краситель&amp;#039;, &amp;#039;Фиолетовый краситель&amp;#039;,&lt;br /&gt;
				&amp;#039;Лазурит&amp;#039;, &amp;#039;Какао-бобы&amp;#039;, &amp;#039;Кактусовая зелень&amp;#039;, &amp;#039;Красный краситель&amp;#039;, &amp;#039;Чернильный мешок&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:&lt;br /&gt;
			local variants = {&lt;br /&gt;
				&amp;#039;древесина&amp;#039;, &amp;#039;доски&amp;#039;, &amp;#039;окрашенное стекло&amp;#039;, &amp;#039;окрашенная стеклянная панель&amp;#039;, &amp;#039;шерсть&amp;#039;,&lt;br /&gt;
				&amp;#039;песчаник&amp;#039;, &amp;#039;ступени&amp;#039;, &amp;#039;плита&amp;#039;, &amp;#039;нажимная пластина&amp;#039;, &amp;#039;звёздочка&amp;#039;,&lt;br /&gt;
				&amp;#039;каменный кирпич&amp;#039;, &amp;#039;андезит&amp;#039;, &amp;#039;диорит&amp;#039;, &amp;#039;гранит&amp;#039;, &amp;#039;щит&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			for k, v in ipairs( ingredientKeys ) do&lt;br /&gt;
				v = mw.ustring.sub(v, 2 )&lt;br /&gt;
				if not mw.ustring.find(v, &amp;#039;:&amp;#039; ) then&lt;br /&gt;
					if v == &amp;#039;Любой краситель&amp;#039; or v == &amp;#039;Любой цветной краситель&amp;#039; then&lt;br /&gt;
						if v == &amp;#039;Любой краситель&amp;#039; then&lt;br /&gt;
							table.insert( dyes, 1, &amp;#039;Костная мука&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						for _, dye in ipairs( dyes ) do&lt;br /&gt;
							-- В оригинале название категории имеет формат «Recipe using &amp;lt;предмет&amp;gt;». Прямо переводится&lt;br /&gt;
							-- эта конструкция как «Рецепт, использующий &amp;lt;предмет&amp;gt;». При этом название предмета должно&lt;br /&gt;
							-- было быть в винительном падеже, но на данный момент быстро склонять название предметов&lt;br /&gt;
							-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве&lt;br /&gt;
							-- перевода используется близкая по смыслу конструкция, не требующая склонения.&lt;br /&gt;
							table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. dye .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						if v == &amp;#039;Липкий поршень&amp;#039; then v = &amp;#039;Поршень&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Любой гриб&amp;#039; or v == &amp;#039;Красный гриб&amp;#039; or v == &amp;#039;Коричневый гриб&amp;#039; then v = &amp;#039;Гриб&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Красный песок&amp;#039; then v = &amp;#039;Песок&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Древесный уголь&amp;#039; then v = &amp;#039;Уголь&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;красный песчаник$&amp;#039; ) then v = &amp;#039;Песчаник&amp;#039;&lt;br /&gt;
						elseif mw.ustring.find(v, &amp;#039;^Флаг &amp;#039;) or mw.ustring.find(v, &amp;#039; флаг$&amp;#039;) then v = &amp;#039;Флаг&amp;#039;&lt;br /&gt;
						elseif v == &amp;#039;Кварцевый пилон&amp;#039; or v == &amp;#039;Резной кварцевый блок&amp;#039; then v = &amp;#039;Кварцевый блок&amp;#039;&lt;br /&gt;
						else&lt;br /&gt;
							-- Объединить категории вариантов, описываемых на единой странице&lt;br /&gt;
							for _, variant in pairs( variants ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039; &amp;#039; .. variant .. &amp;#039;$&amp;#039; ) then&lt;br /&gt;
									v = variant&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
							&lt;br /&gt;
							-- Убрать приставки&lt;br /&gt;
							for _, prefix in pairs( prefixes ) do&lt;br /&gt;
								if mw.ustring.find(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039; ) then&lt;br /&gt;
									v = mw.ustring.gsub(v, &amp;#039;^&amp;#039; .. prefix .. &amp;#039; &amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
									break&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						&lt;br /&gt;
						table.insert( categories, &amp;#039;[[Категория:&amp;#039; .. v .. &amp;#039; как ингредиент для крафта]]&amp;#039; )&lt;br /&gt;
 					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		categories = table.concat( categories, &amp;#039;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if args[&amp;quot;отладка&amp;quot;] == &amp;#039;1&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; .. header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories .. &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return header .. &amp;#039;\n&amp;#039; .. row .. &amp;#039;\n|-\n&amp;#039; .. footer .. categories&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=IndustrialCraft_2/%D0%9A%D0%BE%D1%80%D0%BF%D1%83%D1%81_%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC%D0%B0&amp;diff=6722</id>
		<title>IndustrialCraft 2/Корпус механизма</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=IndustrialCraft_2/%D0%9A%D0%BE%D1%80%D0%BF%D1%83%D1%81_%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC%D0%B0&amp;diff=6722"/>
				<updated>2018-10-27T19:28:21Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Перенаправление на mc:IndustrialCraft 2/Основной корпус машины&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[mc:IndustrialCraft 2/Основной_корпус_машины]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=IndustrialCraft_2/%D0%9C%D0%B5%D0%B4%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%81%D1%82%D0%B8%D0%BD%D0%B0&amp;diff=6721</id>
		<title>IndustrialCraft 2/Медная пластина</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=IndustrialCraft_2/%D0%9C%D0%B5%D0%B4%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%81%D1%82%D0%B8%D0%BD%D0%B0&amp;diff=6721"/>
				<updated>2018-10-27T19:27:27Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Перенаправление на mc:IndustrialCraft 2/Медная пластина&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[mc:IndustrialCraft_2/Медная_пластина]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=MK/%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA_%D1%8D%D0%BD%D0%B5%D1%80%D0%B3%D0%B8%D0%B8&amp;diff=6719</id>
		<title>MK/Счетчик энергии</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=MK/%D0%A1%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA_%D1%8D%D0%BD%D0%B5%D1%80%D0%B3%D0%B8%D0%B8&amp;diff=6719"/>
				<updated>2018-10-27T19:13:37Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Блок&lt;br /&gt;
|название=Счетчик энергии&lt;br /&gt;
|инвизображение=MK:Счетчик энергии&lt;br /&gt;
|тип=Механизм&lt;br /&gt;
|гравит=Нет&lt;br /&gt;
|прозр=Нет&lt;br /&gt;
|свет=0&lt;br /&gt;
|взрывоуст=?&lt;br /&gt;
|инструмент=Кирка&lt;br /&gt;
|склад=Да (64)&lt;br /&gt;
|перввер=1.7.10&lt;br /&gt;
|номер=559&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Счетчик энергии&amp;#039;&amp;#039;&amp;#039; - механизм, используемый в качестве регулируемого [[Industrial Craft|трансформатора]] с указанием возвращаемого напряжения.&lt;br /&gt;
&lt;br /&gt;
== Крафт ==&lt;br /&gt;
&lt;br /&gt;
{{Крафт&lt;br /&gt;
|Мод=MK&lt;br /&gt;
|A1=IndustrialCraft 2: Медная пластина |B1=OpenComputers: Микрочип (Уровень 2) |C1=IndustrialCraft 2: Медная пластина&lt;br /&gt;
|A2=IndustrialCraft 2: Стекловолокно |B2=IndustrialCraft 2: Корпус механизма |C2=IndustrialCraft 2: Стекловолокно&lt;br /&gt;
|A3=IndustrialCraft 2: Медная пластина |B3=IndustrialCraft 2: Медная пластина |C3=IndustrialCraft 2: Медная пластина&lt;br /&gt;
|Выход=Счетчик энергии&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Счетчик энергии имеет собственный интерфейс, доступный по нажатию правой кнопки мыши:&lt;br /&gt;
&lt;br /&gt;
[[Файл: Интерфейс счетчика энергии (Mod MK).png|link=]]&lt;br /&gt;
&lt;br /&gt;
Цифры на центральном экране показывают текущее напряжение, установленное владельцем прибора. С помощью кнопок управления в правом и левом нижних углах интерфейса можно изменять количество энергии, передаваемое лицевой стороной счетчика.&lt;br /&gt;
&lt;br /&gt;
== OpenComputers ==&lt;br /&gt;
&lt;br /&gt;
Счетчик энергии может подключаться кабелем к компьютерам для автоматической обработки показаний (на основе этого, например, можно сделать систему тарификации). Взаимодействие с ним производится также, как и со всеми остальными периферийными устройствами. &lt;br /&gt;
Название компонента: &amp;lt;code&amp;gt;eu_counter&amp;lt;/code&amp;gt;&lt;br /&gt;
Список доступных методов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Функция&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;value(): number&amp;lt;/code&amp;gt;&lt;br /&gt;
| Возвращает количество энергии, прошедшей через счетчик&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;current(): number&amp;lt;/code&amp;gt;&lt;br /&gt;
| Возвращает ток, текущий через счетчик (в единицах энергии в секунду)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voltage(): number&amp;lt;/code&amp;gt;&lt;br /&gt;
| Возвращает установленное напряжение&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;voltage(x: number)&amp;lt;/code&amp;gt;&lt;br /&gt;
| Устанавливает новое напряжение&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mod MK}}&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D0%B5%D1%87%D0%BA%D0%B0/%D0%B4%D0%BE%D0%BA&amp;diff=6718</id>
		<title>Шаблон:Печка/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9F%D0%B5%D1%87%D0%BA%D0%B0/%D0%B4%D0%BE%D0%BA&amp;diff=6718"/>
				<updated>2018-10-27T19:09:10Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Lua|Интерфейс}}&lt;br /&gt;
Этот шаблон используется для создания интерфейса печки.&lt;br /&gt;
&lt;br /&gt;
Для создания таблиц с рецептами обжига на страницах с описанием предметов используйте лучше шаблон {{tl|Обжиг}}.&lt;br /&gt;
== Использование ==&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&amp;lt;pre style=&amp;quot;max-width: 246px&amp;quot;&amp;gt;{{Печка&lt;br /&gt;
|Мод=Название мода&lt;br /&gt;
|Ресурс=Мод:Предмет для обжига,Количество&lt;br /&gt;
|Выход=Мод:Результат,Количество&lt;br /&gt;
|Топливо=Мод:Название топлива,Количество&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример использования ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;max-width: 128px&amp;quot;&amp;gt;{{Печка&lt;br /&gt;
|Ресурс=Песок,17&lt;br /&gt;
|Выход=Стекло,2&lt;br /&gt;
|Топливо=Уголь,3&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;выведет:&lt;br /&gt;
{{Печка&lt;br /&gt;
|Ресурс=Песок,17&lt;br /&gt;
|Выход=Стекло,2&lt;br /&gt;
|Топливо=Уголь,3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Анимация ===&lt;br /&gt;
Чтобы сделать слоты анимированными, составьте список из предметов и блоков, разделенных точкой с запятой (&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;pre style=&amp;quot;max-width: 232px&amp;quot;&amp;gt;{{Печка&lt;br /&gt;
|Ресурс=Песок,17; Древесина,10&lt;br /&gt;
|Выход=Стекло,2; Древесный уголь,10&lt;br /&gt;
|Топливо=Уголь,3&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;выведет:&lt;br /&gt;
{{Печка&lt;br /&gt;
|Ресурс=Песок,17; Древесина,10&lt;br /&gt;
|Выход=Стекло,2; Древесный уголь,10&lt;br /&gt;
|Топливо=Уголь,3&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Моды ===&lt;br /&gt;
Изображения предметов из модов и обычные предметы могут быть совмещены также, как в обычном слоте.&lt;br /&gt;
&lt;br /&gt;
Когда загружаете изображение с предметом из мода, к названию файла нужно добавить мод в скобках. Например, Гаечный ключ (BuildCraft).&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;Мод&amp;lt;/code&amp;gt; устанавливается по-умолчанию для всех слотов, это лучше использовать, если в рецепте в основном предметы из этого мода, или если название мода слишком длинное, и использование параметра &amp;lt;code&amp;gt;vanilla (v)&amp;lt;/code&amp;gt; в таблице было бы быстрее. Вы также можете использовать короткие названия модификаций, указанные на странице [[Модуль:Модификации]]&lt;br /&gt;
&amp;lt;pre style=&amp;quot;max-width: 250px&amp;quot;&amp;gt;{{Печка&lt;br /&gt;
|Ресурс=ProjectE:Блок топлива мебиуса&lt;br /&gt;
|Выход=ProjectE:Алхимический уголь&lt;br /&gt;
|Топливо=Уголь,5&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
;или&lt;br /&gt;
&amp;lt;pre style=&amp;quot;max-width: 250px&amp;quot;&amp;gt;{{Печка&lt;br /&gt;
|Ресурс=pe:Блок топлива Мёбиуса&lt;br /&gt;
|Выход=pe:Алхимический уголь&lt;br /&gt;
|Топливо=Уголь,5&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;выведет:&lt;br /&gt;
{{Печка&lt;br /&gt;
|Ресурс=pe:Блок топлива Мёбиуса&lt;br /&gt;
|Выход=pe:Алхимический уголь&lt;br /&gt;
|Топливо=Уголь,5&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Изображения расхода и прогресса можно изменить с помощью параметров &amp;lt;code&amp;gt;Расход=&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Прогресс=&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;max-width: 282px&amp;quot;&amp;gt;{{Печка&lt;br /&gt;
|Мод=Aether&lt;br /&gt;
|Ресурс=Священный камень&lt;br /&gt;
|Выход=Лечащий камень&lt;br /&gt;
|Топливо=Амброзиум&lt;br /&gt;
|Расход=Трансмутация&lt;br /&gt;
|Прогресс=Трансмутация&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
;выведет&lt;br /&gt;
{{Печка&lt;br /&gt;
|Мод=Aether&lt;br /&gt;
|Ресурс=Священный камень&lt;br /&gt;
|Выход=Лечащий камень&lt;br /&gt;
|Топливо=Амброзиум&lt;br /&gt;
|Расход=Трансмутация&lt;br /&gt;
|Прогресс=Трансмутация&lt;br /&gt;
}}&lt;br /&gt;
Формат изображений: &amp;lt;code&amp;gt;Расход (Мод).png&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Прогресс Progress (Мод).png&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
{{См. также Интерфейс}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны интерфейса]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D0%B0%D1%80%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D0%BE%D0%B9%D0%BA%D0%B0/%D0%B4%D0%BE%D0%BA&amp;diff=6717</id>
		<title>Шаблон:Варочная стойка/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%92%D0%B0%D1%80%D0%BE%D1%87%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D0%BE%D0%B9%D0%BA%D0%B0/%D0%B4%D0%BE%D0%BA&amp;diff=6717"/>
				<updated>2018-10-27T19:02:16Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Lua|Интерфейс}}&lt;br /&gt;
Этот шаблон используется для создания интерфейса варочной стойки.&lt;br /&gt;
&lt;br /&gt;
Для создания таблиц с варкой на страницах с описанием предметов используйте лучше шаблон {{tl|Варка}}.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width: 218px&amp;quot;&amp;gt;{{Варочная стойка&lt;br /&gt;
|Ресурс=Адский нарост&lt;br /&gt;
|Выход1=Грубое зелье&lt;br /&gt;
|Выход2=Грубое зелье&lt;br /&gt;
|Выход3=Грубое зелье&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;выведет:&lt;br /&gt;
{{Варочная стойка&lt;br /&gt;
|Ресурс=Адский нарост&lt;br /&gt;
|Выход1=Грубое зелье&lt;br /&gt;
|Выход2=Грубое зелье&lt;br /&gt;
|Выход3=Грубое зелье&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Анимация ===&lt;br /&gt;
Чтобы сделать слот анимированным, составьте список из предметов, разделенных точкой с запятой (&amp;lt;code&amp;gt;;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width: 388px&amp;quot;&amp;gt;{{Варочная стойка&lt;br /&gt;
|Ресурс=Адский нарост,10; Красная пыль,64&lt;br /&gt;
|Выход1=Грубое зелье; Взрывающееся непримечательное зелье&lt;br /&gt;
|Выход2=Грубое зелье; Взрывающееся непримечательное зелье&lt;br /&gt;
|Выход3=Грубое зелье; Взрывающееся непримечательное зелье&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;выведет:&lt;br /&gt;
{{Варочная стойка&lt;br /&gt;
|Ресурс=Адский нарост,10; Красная пыль,64&lt;br /&gt;
|Выход1=Грубое зелье; Взрывающееся непримечательное зелье&lt;br /&gt;
|Выход2=Грубое зелье; Взрывающееся непримечательное зелье&lt;br /&gt;
|Выход3=Грубое зелье; Взрывающееся непримечательное зелье&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Моды ===&lt;br /&gt;
Когда загружаете изображение с предметом из мода, к названию файла нужно добавить мод в скобках. Например, Гаечный ключ (BuildCraft).&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;Мод&amp;lt;/code&amp;gt; устанавливается по-умолчанию для всех слотов, это лучше использовать, если в рецепте в основном предметы из этого мода, или если название мода слишком длинное, и использование параметра &amp;lt;code&amp;gt;vanilla (v)&amp;lt;/code&amp;gt; в таблице было бы быстрее.&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width: 230px&amp;quot;&amp;gt;{{Варочная стойка&lt;br /&gt;
|Ресурс=v:Красная пыль,2&lt;br /&gt;
|Выход1=MineChem:Водород&lt;br /&gt;
|Выход2=v:Светопыль&lt;br /&gt;
|Выход3=MineChem:Гелий&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
;или&lt;br /&gt;
&amp;lt;pre style=&amp;quot;width: 352px&amp;quot;&amp;gt;{{Варочная стойка&lt;br /&gt;
|Мод=MineChem&lt;br /&gt;
|Ресурс=v:Красная пыль,2&lt;br /&gt;
|Выход1=Водород&lt;br /&gt;
|Выход2=v:Светопыль&lt;br /&gt;
|Выход3=Гелий&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;выведет:&lt;br /&gt;
{{Варочная стойка&lt;br /&gt;
|Мод=MineChem&lt;br /&gt;
|Ресурс=v:Красная пыль,4&lt;br /&gt;
|Выход1=Водород&lt;br /&gt;
|Выход2=v:Светопыль&lt;br /&gt;
|Выход3=Гелий&lt;br /&gt;
}}&lt;br /&gt;
== См. также ==&lt;br /&gt;
{{См. также Интерфейс}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны интерфейса]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9A%D1%80%D0%B0%D1%84%D1%82/%D0%B4%D0%BE%D0%BA&amp;diff=6716</id>
		<title>Шаблон:Крафт/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%9A%D1%80%D0%B0%D1%84%D1%82/%D0%B4%D0%BE%D0%BA&amp;diff=6716"/>
				<updated>2018-10-27T18:58:41Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
&amp;lt;!-- Документацию следует размещать здесь --&amp;gt;&lt;br /&gt;
{{Lua}}&lt;br /&gt;
&lt;br /&gt;
Этот шаблон предназначен для добавления на страницы таблиц с рецептами крафта для различных блоков и предметов игры. Эти таблицы состоят обычно из трёх столбцов (граф), где соответственно указываются название предмета, рецепт которого показан, ингредиенты для этого рецепта, и размещение их на сетке верстака (к ним может добавляться и столбец с примечанием). Обычно такие таблицы устанавливают в раздел «Крафт». &lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
&lt;br /&gt;
Основным вариантом вызова этого шаблона является следующий:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=&amp;lt;предмет1&amp;gt; |B1=&amp;lt;предмет2&amp;gt; |C1=&amp;lt;предмет3&amp;gt;&lt;br /&gt;
|A2=&amp;lt;предмет4&amp;gt; |B2=&amp;lt;предмет5&amp;gt; |C2=&amp;lt;предмет6&amp;gt;&lt;br /&gt;
|A3=&amp;lt;предмет7&amp;gt; |B3=&amp;lt;предмет8&amp;gt; |C3=&amp;lt;предмет9&amp;gt;&lt;br /&gt;
|Выход=&amp;lt;результат&amp;gt;, &amp;lt;количество&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Параметры {{п|A&amp;#039;&amp;#039;x&amp;#039;&amp;#039;}}, {{п|B&amp;#039;&amp;#039;x&amp;#039;&amp;#039;}} и {{п|C&amp;#039;&amp;#039;x&amp;#039;&amp;#039;}} (&amp;#039;&amp;#039;x&amp;#039;&amp;#039; — число от 1 до 3) предназначены для указания расположения ингредиентов на верстаке. Их значением являются названия блоков или предметов. Если в одной и той же ячейке в рецепте могут использоваться различные предметы, то их названия указываются вместе, разделённые точкой с запятой. Ингредиенты для рецепта перечисляются во второй графе таблицы.&lt;br /&gt;
* Параметр {{п|Выход}} (обязательно пишется с большой буквы) используется для указания того, что в итоге образуется после крафта. Значение его состоит из разделённых запятой названия предмета и количества, которое производится. Иконка предмета (с количеством) отображается в большей ячейке сетки верстака, а его название упоминается в первой графе таблицы.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться и другие параметры:&lt;br /&gt;
* Если несколько шаблонов {{((}}Крафт{{))}} вызываются последовательно, то может быть целесообразно создать единую таблицу из нескольких вызовов. В таком случае в первом шаблоне указывается параметр {{п|глава}}, установленный в 1, а в последнем — {{п|подвал}}, также установленный в 1.&lt;br /&gt;
* Параметр {{п|бесформенный}} указывает, что рецепт бесформенный, то есть его ингредиенты можно размещать беспорядочным образом. В этом случае параметры можно указывать без привязки к ячейкам, то есть без названий параметров {{п|A&amp;#039;&amp;#039;x&amp;#039;&amp;#039;}}, {{п|B&amp;#039;&amp;#039;x&amp;#039;&amp;#039;}} и {{п|C&amp;#039;&amp;#039;x&amp;#039;&amp;#039;}} с последующим знаком «равно» (=).&lt;br /&gt;
* Параметр {{п|фиксированный}} указывает, что рецепт фиксированный, что его нельзя даже зеркально отразить по вертикальной оси. Но некоторые ингредиенты в некоторых случаях всё же можно перемещать. Они, &amp;#039;&amp;#039;в родительном падеже&amp;#039;&amp;#039;, указываются в параметре {{п|нефиксировано}}.&lt;br /&gt;
* Параметр {{п|описание}} указывает описание (примечание) к рецепту. Для отображения столбца с примечаниями нужно в первом шаблоне, составляющем таблицу из нескольких рецептов, добавить параметр {{п|показатьописание}}.&lt;br /&gt;
* Параметр {{п|запланированное}} указывает будущую версию, в которой рецепт появится.&lt;br /&gt;
* Параметр {{п|тип}} указывает категорию, к которому рецепт относится. Это используется для отображения рецептов по группам на подстраницах статьи [[Крафт]].&lt;br /&gt;
* Параметр {{п|название}} позволяет переопределить название предмета, указываемое в первой графе.&lt;br /&gt;
* Параметр {{п|показатьимя}} позволяет контролировать отображения графы с названием. Если он установлен в 1, то графа отображается (что, впрочем, происходит и без указания параметра), а если он равен 0, то она, наоборот, не отображается.&lt;br /&gt;
* Параметр {{п|ингредиенты}} позволяет переопределить список ингредиентов, указываемый во второй графе.&lt;br /&gt;
* Параметр {{п|некат}} отключает установку категорий полностью. Без него она отключается только на подстраницах некоторых статей, а также вне пространства статей.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Крафт&lt;br /&gt;
|глава=1&lt;br /&gt;
|показатьописание=1&lt;br /&gt;
|B2=Уголь, Древесный уголь&lt;br /&gt;
|B3=Палка&lt;br /&gt;
|Выход=Факел, 4&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=Железный слиток&lt;br /&gt;
|B2=Кремень&lt;br /&gt;
|Выход=Огниво&lt;br /&gt;
|описание=Это описание&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|Железный слиток&lt;br /&gt;
|Кремень&lt;br /&gt;
|Выход=Огниво&lt;br /&gt;
|запланированное=1.7.2&lt;br /&gt;
|описание=Это всего лишь пример. Версия 1.7.2 уже давно как вышла.&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|название=Меч&lt;br /&gt;
|ингредиенты=Палка +&amp;lt;br&amp;gt;Любые доски, или&amp;lt;br&amp;gt;булыжник, или&amp;lt;br&amp;gt;железные или&amp;lt;br&amp;gt;золотые слитки, или&amp;lt;br&amp;gt;алмазы&lt;br /&gt;
|B1=Доски; Булыжник; Железный слиток; Золотой слиток; Алмаз&lt;br /&gt;
|B2=Доски; Булыжник: Железный слиток; Золотой слиток; Алмаз&lt;br /&gt;
|B3=Палка&lt;br /&gt;
|Выход=Деревянный меч; Каменный меч; Железный меч; Золотой меч; Алмазный меч&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|Мод=MineChem&lt;br /&gt;
|A1=Водород|B1=Водород|C1=Водород&lt;br /&gt;
|A2=Водород|B2=Водород|C2=Водород&lt;br /&gt;
|A3=vanilla:Ведро|B3=Водород|C3=Водород&lt;br /&gt;
|Выход=Ведро химиката (H)&lt;br /&gt;
|описание=Из модификации MineChem.&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=v:Обсидиан|B1=Blood Magic:Ритуальный камень|C1=v:Обсидиан&lt;br /&gt;
|A2=Blood Magic:Ритуальный камень|B2=Blood Magic:Любой кровавый шар|C2=Blood Magic:Ритуальный камень&lt;br /&gt;
|A3=v:Обсидиан|B3=Blood Magic:Ритуальный камень|C3=v:Обсидиан&lt;br /&gt;
|Выход=Blood Magic:Главный ритуальный камень&lt;br /&gt;
|подвал=1&lt;br /&gt;
|описание=Из модификации Blood Magic.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
отобразит:&lt;br /&gt;
{{Крафт&lt;br /&gt;
|глава=1&lt;br /&gt;
|показатьописание=1&lt;br /&gt;
|B2=Уголь; Древесный уголь&lt;br /&gt;
|B3=Палка&lt;br /&gt;
|Выход=Факел, 4&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=Железный слиток&lt;br /&gt;
|B2=Кремень&lt;br /&gt;
|Выход=Огниво&lt;br /&gt;
|описание=Это описание&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|Железный слиток&lt;br /&gt;
|Кремень&lt;br /&gt;
|Выход=Огниво&lt;br /&gt;
|запланированное=1.7.2&lt;br /&gt;
|описание=Это всего лишь пример. Версия 1.7.2 уже давно как вышла.&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|название=Меч&lt;br /&gt;
|ингредиенты=Палка +&amp;lt;br&amp;gt;Любые доски, или&amp;lt;br&amp;gt;булыжник, или&amp;lt;br&amp;gt;железные или&amp;lt;br&amp;gt;золотые слитки, или&amp;lt;br&amp;gt;алмазы&lt;br /&gt;
|B1=Доски; Булыжник; Железный слиток; Золотой слиток; Алмаз&lt;br /&gt;
|B2=Доски; Булыжник; Железный слиток; Золотой слиток; Алмаз&lt;br /&gt;
|B3=Палка&lt;br /&gt;
|Выход=Деревянный меч; Каменный меч; Железный меч; Золотой меч; Алмазный меч&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|Мод=MineChem&lt;br /&gt;
|A1=Водород|B1=Водород|C1=Водород&lt;br /&gt;
|A2=Водород|B2=Водород|C2=Водород&lt;br /&gt;
|A3=vanilla:Ведро|B3=Водород|C3=Водород&lt;br /&gt;
|Выход=Ведро химиката (H)&lt;br /&gt;
|описание=Из модификации MineChem.&lt;br /&gt;
}}&lt;br /&gt;
{{Крафт&lt;br /&gt;
|A1=v:Обсидиан|B1=Blood Magic:Ритуальный камень|C1=v:Обсидиан&lt;br /&gt;
|A2=Blood Magic:Ритуальный камень|B2=Blood Magic:Любой кровавый шар|C2=Blood Magic:Ритуальный камень&lt;br /&gt;
|A3=v:Обсидиан|B3=Blood Magic:Ритуальный камень|C3=v:Обсидиан&lt;br /&gt;
|Выход=Blood Magic:Главный ритуальный камень&lt;br /&gt;
|подвал=1&lt;br /&gt;
|описание=Из модификации Blood Magic.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
[[Категория:Шаблоны]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Flan%27s&amp;diff=6715</id>
		<title>Модуль:ИнвСпрайт/Flan&#039;s</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Flan%27s&amp;diff=6715"/>
				<updated>2018-10-27T18:44:54Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	[&amp;quot;имя&amp;quot;] = &amp;quot;Flan&amp;#039;s&amp;quot;,&lt;br /&gt;
	[&amp;quot;имякласса&amp;quot;] = &amp;quot;flans-mod-inv-sprite&amp;quot;,&lt;br /&gt;
	[&amp;quot;IDы&amp;quot;] = &amp;quot;ИнвСпрайт/Flan&amp;#039;s/ID&amp;quot;,&lt;br /&gt;
	[&amp;quot;изобр&amp;quot;] = &amp;quot;Flan&amp;#039;sModCSS.png&amp;quot;,&lt;br /&gt;
	[&amp;quot;формат&amp;quot;] = 512,&lt;br /&gt;
	[&amp;quot;разм&amp;quot;] = 32,&lt;br /&gt;
	[&amp;quot;таблстилей&amp;quot;] = false,&lt;br /&gt;
	[&amp;quot;модпсевдонимы&amp;quot;] = &amp;quot;ИнвСпрайт/Flan&amp;#039;s/Псевдонимы&amp;quot;,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%B0%D0%BD%D0%B4%D0%B8%D0%B4%D0%B0%D1%82%D1%8B_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B7%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=6714</id>
		<title>Категория:Кандидаты на разъединение</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%B0%D0%BD%D0%B4%D0%B8%D0%B4%D0%B0%D1%82%D1%8B_%D0%BD%D0%B0_%D1%80%D0%B0%D0%B7%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=6714"/>
				<updated>2018-10-27T18:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «Категория:Статьи»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Статьи]]&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/ProjectE/ID/%D0%B4%D0%BE%D0%BA&amp;diff=6713</id>
		<title>Модуль:ИнвСпрайт/ProjectE/ID/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/ProjectE/ID/%D0%B4%D0%BE%D0%BA&amp;diff=6713"/>
				<updated>2018-10-27T16:18:44Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}} &amp;lt;includeonly&amp;gt; &amp;lt;!-- Здесь следует ра…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Astral_Sorcery/%D0%B4%D0%BE%D0%BA&amp;diff=6712</id>
		<title>Модуль:Спрайт/Astral Sorcery/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Astral_Sorcery/%D0%B4%D0%BE%D0%BA&amp;diff=6712"/>
				<updated>2018-10-27T16:18:20Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=Astral Sorcery|изобр=AstralSorcery}} &amp;lt;includeonly&amp;gt; &amp;lt;!-- Здесь след…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=Astral Sorcery|изобр=AstralSorcery}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82/ID/%D0%B4%D0%BE%D0%BA&amp;diff=6711</id>
		<title>Модуль:Спрайт/Предмет/ID/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82/ID/%D0%B4%D0%BE%D0%BA&amp;diff=6711"/>
				<updated>2018-10-27T16:17:42Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=Предмет|изобр=Item}} &amp;lt;includeonly&amp;gt; &amp;lt;!-- Здесь следует р…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=Предмет|изобр=Item}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/ProjectRed/%D0%B4%D0%BE%D0%BA&amp;diff=6710</id>
		<title>Модуль:Спрайт/ProjectRed/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/ProjectRed/%D0%B4%D0%BE%D0%BA&amp;diff=6710"/>
				<updated>2018-10-27T16:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=ProjectRed|изобр=ProjectRed}} &amp;lt;includeonly&amp;gt; &amp;lt;!-- Здесь следует…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=ProjectRed|изобр=ProjectRed}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Astral_Sorcery/%D0%B4%D0%BE%D0%BA&amp;diff=6709</id>
		<title>Модуль:ИнвСпрайт/Astral Sorcery/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Astral_Sorcery/%D0%B4%D0%BE%D0%BA&amp;diff=6709"/>
				<updated>2018-10-27T16:16:27Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=Astral Sorcery|изобр=AstralSorcery}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Astral_Sorcery/%D0%B4%D0%BE%D0%BA&amp;diff=6708</id>
		<title>Модуль:ИнвСпрайт/Astral Sorcery/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/Astral_Sorcery/%D0%B4%D0%BE%D0%BA&amp;diff=6708"/>
				<updated>2018-10-27T16:16:11Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=Astral Sorcery|изобр=Astral Sorcery}} &amp;lt;includeonly&amp;gt; &amp;lt;!-- Здесь след…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=Astral Sorcery|изобр=Astral Sorcery}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/MineChem/%D0%B4%D0%BE%D0%BA&amp;diff=6707</id>
		<title>Модуль:Спрайт/MineChem/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/MineChem/%D0%B4%D0%BE%D0%BA&amp;diff=6707"/>
				<updated>2018-10-27T16:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} &amp;lt;!-- Документацию следует размещать здесь --&amp;gt;  {{Lua|Спрайт|данные=Спрай…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
&amp;lt;!-- Документацию следует размещать здесь --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Lua|Спрайт|данные=Спрайт/MineChem|данные2=ИнвСпрайт/MineChem/ID}}&lt;br /&gt;
&lt;br /&gt;
[[Файл:MineChemCSS.png|thumb|Список изображений для спрайтов.]]&lt;br /&gt;
&lt;br /&gt;
Этот шаблон показывает изображение из мода [[MineChem]] при применении шаблона {{tl|Ссылка/MineChem}}.&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Спрайт/MineChem|Гелий}}&lt;br /&gt;
{{Спрайт/MineChem|Водород}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Спрайт/MineChem|Гелий}}&lt;br /&gt;
&lt;br /&gt;
{{Спрайт/MineChem|Водород}}&lt;br /&gt;
&lt;br /&gt;
== Список изображений ==&lt;br /&gt;
&lt;br /&gt;
{{#invoke: Спрайт|doc|Спрайт/MineChem}}&lt;br /&gt;
{{Спрайт/Навигация|мод=MineChem|изобр=MineChem}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Категория:Спрайтовые шаблоны]]&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	<entry>
		<id>https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/ProjectE/%D0%B4%D0%BE%D0%BA&amp;diff=6706</id>
		<title>Модуль:ИнвСпрайт/ProjectE/док</title>
		<link rel="alternate" type="text/html" href="https://w.hil.su/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%98%D0%BD%D0%B2%D0%A1%D0%BF%D1%80%D0%B0%D0%B9%D1%82/ProjectE/%D0%B4%D0%BE%D0%BA&amp;diff=6706"/>
				<updated>2018-10-27T16:12:34Z</updated>
		
		<summary type="html">&lt;p&gt;Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}} &amp;lt;includeonly&amp;gt; &amp;lt;!-- Здесь следует ра…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Документация/Шапка}}&lt;br /&gt;
{{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики шаблона --&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- Здесь следует размещать категории и интервики документации --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Popstop</name></author>	</entry>

	</feed>