https://w.hil.su/api.php?action=feedcontributions&user=Popstop&feedformat=atom
Hilarious Wiki - Вклад участника [ru]
2024-03-28T13:27:30Z
Вклад участника
MediaWiki 1.27.1
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&diff=7021
Руководство по игре/док
2018-12-17T20:18:31Z
<p>Popstop: Страница создана для документации Шаблон:Сервер</p>
<hr />
<div>#перенаправление [[Шаблон:Сервер/док]]</div>
Popstop
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&diff=7020
Док/Команды
2018-12-17T20:18:15Z
<p>Popstop: Страница создана для документации Шаблон:Сервер</p>
<hr />
<div>#перенаправление [[Шаблон:Сервер/док]]</div>
Popstop
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&diff=7019
Blood Magic/Сигил удержания
2018-12-17T20:11:17Z
<p>Popstop: Тест</p>
<hr />
<div>{{Предмет<br />
|изображение=Сигил удержания<br />
|инвизображение=Сигил удержания<br />
|тип=Инструмент<br />
|прочн=Нет<br />
|склад=Нет<br />
}}<br />
'''Сигил удержания''' - предмет, добавляемый модификацией [[Blood Magic]].<br />
<br />
== Рецепт ==<br />
{{Blood Magic/Алхимическая матрица<br />
|A1=Blood Magic:Реагент удержания<br />
|B1=Blood Magic:Пропитанная плитка<br />
|выход=Blood Magic:Сигил удержания<br />
}}<br />
<br />
== Потребление ==<br />
Не потребляет LP за использование.<br />
<br />
== Использование ==<br />
Сигил используется для хранения в нём 5 других сигилов. Для того, чтобы положить туда сигилы, необходимо нажать на клавишу, которая установлена в настройках управления в пункте '''Open Sigil of Holding'''(По умолчанию - клавиша H). Положить ещё один такой же сигил в этот сигил нельзя. Сигилы, хранящиеся внутри Сигил удержания, можно выбирать с помощью клавиши Shift и колёсика мыши.<br />
<br />
Добавленный в сигил удержания [[Blood_Magic/Сигил_предсказания|сигил предсказания]] или [[Blood_Magic/Сигил_зрения|сигил зрения]] не будет показывать информацию при наведении на алтарь.<br />
<br />
Сигил удержания используется для крафта сигила дополненного удержания<br />
<br />
[[Категория:Сигилы]]</div>
Popstop
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&diff=7018
Blood Magic/Сигил удержания
2018-12-17T20:10:02Z
<p>Popstop: Test</p>
<hr />
<div>{{Предмет<br />
|изображение=Сигил удержания<br />
|тип=Инструмент<br />
|прочн=Нет<br />
|склад=Нет<br />
}}<br />
'''Сигил удержания''' - предмет, добавляемый модификацией [[Blood Magic]].<br />
<br />
== Рецепт ==<br />
{{Blood Magic/Алхимическая матрица<br />
|A1=Blood Magic:Реагент удержания<br />
|B1=Blood Magic:Пропитанная плитка<br />
|выход=Blood Magic:Сигил удержания<br />
}}<br />
<br />
== Потребление ==<br />
Не потребляет LP за использование.<br />
<br />
== Использование ==<br />
Сигил используется для хранения в нём 5 других сигилов. Для того, чтобы положить туда сигилы, необходимо нажать на клавишу, которая установлена в настройках управления в пункте '''Open Sigil of Holding'''(По умолчанию - клавиша H). Положить ещё один такой же сигил в этот сигил нельзя. Сигилы, хранящиеся внутри Сигил удержания, можно выбирать с помощью клавиши Shift и колёсика мыши.<br />
<br />
Добавленный в сигил удержания [[Blood_Magic/Сигил_предсказания|сигил предсказания]] или [[Blood_Magic/Сигил_зрения|сигил зрения]] не будет показывать информацию при наведении на алтарь.<br />
<br />
Сигил удержания используется для крафта сигила дополненного удержания<br />
<br />
[[Категория:Сигилы]]</div>
Popstop
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&diff=7017
Участник:Popstop/SimpleNavbox
2018-12-17T20:04:59Z
<p>Popstop: Полностью удалено содержимое страницы</p>
<hr />
<div></div>
Popstop
https://w.hil.su/index.php?title=Sandbox/%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&diff=7016
Sandbox/Команды
2018-12-17T20:02:58Z
<p>Popstop: Косметические изменения</p>
<hr />
<div>{{Support}}<br />
<br />
== Дом ==<br />
{{Команда|home}} - Телепортироваться домой<br />
<br />
{{Команда|home delete}}- Удалить дом<br />
<br />
{{Команда|home limit}} - Отобразить количество домов, которые вы (или другой игрок) можете установить<br />
<br />
{{Команда|home list}} - Список домов<br />
<br />
{{Команда|home set <имя>}} - Устанавливает название дома с указанным именем<br />
<br />
== Инвентарь ==<br />
===Интерфейсы===<br />
{{Команда|anvil}} - Открывает Открывает меню наковальни<br />
<br />
{{Команда|enchantingtable}} - Открывает меню зачарования<br />
<br />
{{Команда|workbench}} - Открывает меню крафта<br />
<br />
===Предметы===<br />
{{Команда|clear}} - Очищает инвентарь<br />
<br />
{{Команда|repair}} - Ремонт предмета в руке<br />
<br />
{{Команда|trash}} - Открывает окно инвентаря, которое действует как единица утилизации, удаляя предметы, помещенные в него<br />
<br />
== Набор ресурсов ==<br />
{{Команда|kit list}} - Весь список наборов<br />
<br />
{{Команда|kit start}} - Стартовый набор<br />
<br />
{{Команда|kit food}} - Набор еды<br />
<br />
{{Команда|kit champion}} - Набор привилегии "Чемпион"<br />
<br />
{{Команда|kit favorite}} - Набор привилегии "Фаворит"<br />
<br />
{{Команда|kit lider}} - Набор привилегии "Лидер"<br />
<br />
{{Команда|kit legend}} - Набор привилегии "Легенда"<br />
<br />
{{Команда|kit hero}} - Набор привилегии "Герой"<br />
<br />
== Общение ==<br />
===Почта===<br />
{{Команда|mail}} - Просмотреть почту отправленную вам<br />
<br />
{{Команда|mail clear}} - Очищает всю почту в вашем почтовом ящике<br />
<br />
{{Команда|mail send ?}} - Отправить почту указанному игроку<br />
<br />
=== Сообщения ===<br />
{{Команда|t ? ?}} - Написать личное сообщение указанному игроку<br />
<br />
{{Команда|r ?}} - Ответить игроку<br />
<br />
== Телепортация ==<br />
{{Команда|rtp}} - Телепортация в случайное место<br />
<br />
{{Команда|tpa}} - Отправить запрос игроку чтобы телепортироваться к нему<br />
<br />
{{Команда|tpaccept}} - Принять запрос телепорта<br />
<br />
{{Команда|tpdeny}} - Отказать запрос телепорта<br />
<br />
{{Команда|back}} - Вернуться на свое место до смерти<br />
<br />
== Прочее ==<br />
{{Команда|ping}} - Узнать текущую задержку соединения с сервером<br />
<br />
{{Команда|suicide}} - Суицид<br />
<br />
{{Команда|afk}} - Включает режим AFK<br />
<br />
{{Команда|god}} - Режим Бога</div>
Popstop
https://w.hil.su/index.php?title=HiPower&diff=7015
HiPower
2018-12-17T19:56:55Z
<p>Popstop: Актуализация информации v1.0</p>
<hr />
<div>{{Сервер<br />
| название=HiPower<br />
| изображение=[[File:server_icon_hp.png]]<br />
| версия=1.12.2<br />
| сложность=Средняя<br />
| pvp=Нет<br />
| приваты=2 по 500'000 блоков<br />
| радиус=4000 блоков<br />
| обт=1<br />
}}<br />
'''HiPower''' - cервер с высокотехнологичными модификациями, добавляющими в мир Minecraft электричество и другие виды энергии, различные генераторы и приборы, позволяющие автоматизировать если не все, то многие действия.<br />
<br />
== Особенности ==<br />
*Множество модификаций<br />
*Карьер и автошахтеры<br />
*Электричество и напряжение<br />
*Электроинструменты<br />
*Реактивные ранцы<br />
*Декоративные блоки и лампы<br />
<br />
== Модификации и плагины ==<br />
{| class="wikitable"<br />
|-<br />
! style="width:20%" | Название !! style="width:80%" | Описание<br />
|-<br />
|[[Auction|'''Аукцион''']]<br />
| Модификация, которая является собственной разработка Hilarious. Позволяет переводить вещи с сервера на сервер и торговать с игроками по всему проекту.<br />
|-<br />
|[[Applied Energistics 2]]<br />
| Обширная техническая модификация, которая добавляет блоки и механизмы для получения и использования энергии. Большая часть функций этой модификации сосредоточена на основной механике - материальной энергии (МЭ).<br />
|-<br />
|AquaCulture <br />
|Модификация, добавляющая множество новых рыб, которые спавнятся в разных биомах.<br />
|-<br />
|[[mc:BuildCraft | '''BuildCraft''']]<br />
|Добавляет различные механизмы, необходимые для автоматизации: автошахтер, помпу (насос) для выкачивания воды, лавы, нефти и других жидкостей, трубы, цистерны для жидкостей и многое другое.<br />
|-<br />
|Chisel<br />
|Модификация, добавляющая множество декоративных блоков.<br />
|-<br />
|Chisels&Bits<br />
|Модификация, добавляющая множество декоративных блоков.<br />
|-<br />
|CustomNPCs<br />
|Техническая модификация. Используется для написания квестов, создания боссов и сложных игровых алгоритмов.<br />
|-<br />
|[[EnderIO]]<br />
|Техническая модификация, добавляющая генераторы энергии, настраиваемые механизмы и фермы, мощные инструменты и доспехи, удобные трубы для транспортировки и ёмкости для хранения предметов, жидкостей, газов и энергии.<br />
|-<br />
|[[mc:Forestry | '''Forestry''']] <br />
|Модификация, добавляющая пчеловодство и немного генетики, позволяющее практически бесконечно получать некоторые ресурсы.<br />
|-<br />
|[[mc:Gravitation_Suite | '''Gravitation Suite''']]<br />
| Дополнение для IndustrialCraft 2. Добавляет новую броню и инструменты.<br />
|-<br />
|[[GriefPrevention]]<br />
|Плагин, защищающий вашу территорию от других игроков.<br />
|-<br />
|[[ImmersiveCables]]<br />
|Дополнение для Applied Energetics, добавляющее новые провода в стиле проводов из модификации Immersive Engineering.<br />
|-<br />
|[[Immersive Engineering]]<br />
|Глобальная индустриальная модификация. Все механизмы в ней нацелены на реалистичность, что делает её необычайно увлекательной.<br />
|-<br />
|[[Immersive Petroleum]]<br />
|Дополнение для Immersive Engineering, добавляющее механизмы для добычи, обработки и использования нефти.<br />
|-<br />
|[[Immersive Tech]]<br />
|Дополнение для Immersive Engineering, добавляющее мультиблоковые структуры для выработки RF-энергии, используя солнечные лучи в качестве источника.<br />
|-<br />
|[[mc:IndustrialCraft_2 | '''IndustrialCraft 2''']]<br />
| Модификация, добавляющая электричество, электрические приборы, броня и инструменты, которые не ломаются. Их просто надо время от времени заряжать энергией. Новые ресурсы, растения, селекция (выведение новых сортов растений), возможность дробить руду и переплавлять порошки, получая больше ресурсов, а также множество других интересных вещей.<br />
|-<br />
|[[mc:Iron_Chests | '''Iron Chests''']]<br />
|Модификация, добавляющая сундуки различной вместимости.<br />
|-<br />
|[[mc:OpenComputers | '''OpenComputers''']] <br />
|Модификация, добавляющая в игру компьютерную технику, программирование и роботов, открывая невероятно широкие возможности перед игроками.<br />
|-<br />
|[[Pam`s HarvestCraft]]<br />
|Модификация, добавляющая множество(более 200) новой еды.<br />
|-<br />
|[[Simply Jetpacks 2]]<br />
|Дополнение для EnderIO, добавляющее несколько видов реактивных ранцев.<br />
|-<br />
|[[mc:Thermal Expansion| '''Thermal Expansion''']]<br />
|Модификация, добавляющая новую механику обработки ресурсов, новые ресурсы, энергию и устройства её производства и хранения.<br />
|-<br />
|[[Thermal Cultivation]]<br />
|Модификация, добавляющая в игру набор специальных леек, которые поливают большую площадь земли. Во время полива растения растут очень быстро.<br />
|-<br />
|[[Thermal Dynamics]]<br />
|Модификация, добавляющая новые трубы.<br />
|-<br />
|[[Thermal Foundation]]<br />
|Модификация, добавляющая генерацию руд, инструменты, броню, оружие.<br />
|-<br />
|[[Thermal Innovation]]<br />
|Модификация, добавляющая буры, пилы, и многое другое для обработки и добычи блоков.<br />
|-<br />
|[[Totem Expansion]]<br />
|Модификация, добавляющая несколько новых тотемов, которые могут спасти Вас от смерти, от взрывов, от лавы и многого другого.<br />
|-<br />
|Zombie Awareness<br />
|Модификация, которая делает зомби и скелетов гораздо умнее и сильнее.<br />
|-<br />
|}<br />
<br />
<!-- Запреты потом суньте --></div>
Popstop
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&diff=6852
Аукцион/Блок хранилища
2018-11-03T18:29:10Z
<p>Popstop: </p>
<hr />
<div>{{Блок<br />
|тип=твёрдый<br />
|гравит=нет<br />
|прозрачность=нет<br />
|инструмент=деревянная кирка<br />
|склад=Да (64)<br />
}}<br />
<br />
Используется для перевода вещей между хранилищем аукциона и сервером. За загрузку некоторых предметов взимается плата (комиссия) в игровой валюте. <br />
{{Крафт<br />
|A1=Обсидиан |B1=Алмазный блок |C1=Обсидиан<br />
|A2=Изумрудный блок |B2=Око Края |C2=Изумрудный блок<br />
|A3=Обсидиан |B3=Алмазный блок |C3=Обсидиан<br />
|Выход=Аукцион:Блок хранилища<br />
}}<br />
<br />
== Комиссия на ввод ресурсов ==<br />
Взимается в червонцах и зависит от коэффициентов, устанавливаемых администрацией, а также средней рыночной цены.<br />
* Classic - дешевый вывод всех ресурсов<br />
* HiTech, HiPower - дешевый вывод предметов из индустриальных модификаций, классические - дорого<br />
* Magick - дешевый вывод предметов из магических модификаций, классические - дорого <br />
[[Категория:Блоки]]<br />
[[Категория:Аукцион]]</div>
Popstop
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&diff=6845
Обсуждение:Блок хранилища
2018-11-03T18:23:50Z
<p>Popstop: Popstop переименовал страницу Обсуждение:Блок хранилища в Обсуждение:Аукцион/Блок хранилища</p>
<hr />
<div>#перенаправление [[Обсуждение:Аукцион/Блок хранилища]]</div>
Popstop
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&diff=6842
Аукцион/Блок хранилища
2018-11-03T18:23:50Z
<p>Popstop: Popstop переименовал страницу Блок хранилища в Аукцион/Блок хранилища</p>
<hr />
<div>{{Блок<br />
|название=<br />
|изображение=Блок аукциона (Auction).png<br />
|тип=твёрдый<br />
|гравит=нет<br />
|прозрачность=нет<br />
|инструмент=деревянная кирка<br />
|склад=Да (64)<br />
}}<br />
<br />
Используется для перевода вещей между хранилищем аукциона и сервером. За загрузку некоторых предметов взимается плата (комиссия) в игровой валюте. <br />
{{Крафт<br />
|A1=Обсидиан |B1=Алмазный блок |C1=Обсидиан<br />
|A2=Изумрудный блок |B2=Око Края |C2=Изумрудный блок<br />
|A3=Обсидиан |B3=Алмазный блок |C3=Обсидиан<br />
|Выход=Блок аукциона (Auction)<br />
}}<br />
<br />
== Комиссия на ввод ресурсов ==<br />
Взимается в червонцах и зависит от коэффициентов, устанавливаемых администрацией, а также средней рыночной цены.<br />
* Classic - дешевый вывод всех ресурсов<br />
* HiTech, HiPower - дешевый вывод предметов из индустриальных модификаций, классические - дорого<br />
* Magick - дешевый вывод предметов из магических модификаций, классические - дорого <br />
[[Категория:Блоки]]<br />
[[Категория:Аукцион]]</div>
Popstop
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&diff=6843
Блок хранилища
2018-11-03T18:23:50Z
<p>Popstop: Popstop переименовал страницу Блок хранилища в Аукцион/Блок хранилища</p>
<hr />
<div>#перенаправление [[Аукцион/Блок хранилища]]</div>
Popstop
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&diff=6844
Обсуждение:Аукцион/Блок хранилища
2018-11-03T18:23:50Z
<p>Popstop: Popstop переименовал страницу Обсуждение:Блок хранилища в Обсуждение:Аукцион/Блок хранилища</p>
<hr />
<div>А какая плата взимается? Где информация?<br />
[[User:MailGik|MailGik]] ([http://w.hil.su/User_talk:MailGik <span class="invslot-plain"><span class="sprite item-sprite invslot-item" style="background-position:-176px -176px" data-minetip-title="Обсуждение участника MailGik"><br/></span></span>]) 18:23, 9 декабря 2016 (UTC)</div>
Popstop
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&diff=6804
Модуль:Карточка
2018-11-03T15:19:49Z
<p>Popstop: Добавление поддержки gif и svg изображений (при необходимости)</p>
<hr />
<div>local p = {}<br />
function p.infobox( f )<br />
local args = require( 'Модуль:ProcessArgs' ).merge( true )<br />
local titleObject = mw.title.getCurrentTitle()<br />
local title = args['название'] or titleObject.subpageText<br />
local invtitle = args['инвизображение'] or args["инвизображение1"] or args['название'] or titleObject.subpageText<br />
local modtitle = args['мод'] or titleObject.rootText<br />
if modtitle == 'нет' then<br />
modification = ''<br />
invmodification = ''<br />
else<br />
modification = ' (' .. modtitle .. ')'<br />
invmodification = modtitle .. ':'<br />
end<br />
<br />
local imageArea = args['изображения']<br />
if not imageArea and imageArea ~= 'none' then<br />
local images = {}<br />
local invImages = {}<br />
local defaultImageSize = args["умолчразмеризобр"] or '150px'<br />
args["изображение1"] = args["изображение1"] or args["изображение"] or 'title'<br />
args["изобр1разм"] = args["изобр1разм"] or args["изобрразм"]<br />
args["инвизображение1"] = args["инвизображение1"] or args["инвизображение"] or 'title'<br />
args["мод"] = args["мод"]<br />
<br />
local imgCount = {}<br />
local invImgCount = {}<br />
for k, v in pairs( args ) do<br />
if type( k ) == 'string' then<br />
local image, num = mw.ustring.match(k, '^(изображение)(%d+)$' )<br />
local invImage, invNum = mw.ustring.match(k, '^(инвизображение)(%d+)$' )<br />
if mw.ustring.lower(v) ~= 'нет' then<br />
if image then<br />
table.insert( imgCount, tonumber( num ) )<br />
elseif invImage then<br />
table.insert( invImgCount, tonumber( invNum ) )<br />
end<br />
end<br />
end<br />
end<br />
<br />
table.sort( imgCount )<br />
local animate<br />
for k, v in ipairs( imgCount ) do<br />
local image = args['изображение' .. v]<br />
local size = args['изобр' .. v .. 'разм'] or defaultImageSize<br />
if image == 'title' then<br />
oimage = '.png'<br />
local imageTitle = mw.title.new( 'Файл:' .. title .. modification .. oimage )<br />
if imageTitle and imageTitle.exists then<br />
image = '[[Файл:' .. title .. modification .. oimage .. '|' .. size .. ']]'<br />
elseif titleObject.namespace == 0 then<br />
image = '[[Файл:No image.svg|' .. size .. '|link=Файл:' .. title .. modification .. oimage .. '|Загрузить' .. title .. modification .. oimage .. ']]'<br />
else<br />
image = '[[Файл:No image.svg|' .. size .. '|link=]]'<br />
end<br />
elseif mw.ustring.match(image, 'svg' ) then<br />
oimage = '.svg'<br />
title = mw.ustring.sub(image, 0, -5)<br />
image = '[[Файл:' .. title .. modification .. oimage .. '|' .. size .. ']]'<br />
elseif mw.ustring.match(image, 'gif' ) then<br />
oimage = '.gif'<br />
title = mw.ustring.sub(image, 0, -5)<br />
image = '[[Файл:' .. title .. modification .. oimage .. '|' .. size .. ']]'<br />
elseif mw.ustring.match(image, ';' ) then<br />
if not animate then<br />
animate = require( 'Модуль:Анимация' ).animate<br />
end<br />
image = animate{ image, size }<br />
else<br />
oimage = '.png'<br />
image = '[[Файл:' .. image .. modification .. oimage .. '|' .. size .. ']]'<br />
end<br />
<br />
table.insert( images, '<div>' .. image .. '</div>' )<br />
end<br />
images = table.concat( images, '\n' )<br />
<br />
if #invImgCount > 0 then<br />
table.sort( invImgCount )<br />
local grid<br />
local invIds = mw.loadData( [[Модуль:ИнвСпрайт/ID]] )["IDы"]<br />
for k, v in ipairs( invImgCount ) do<br />
local image = args['инвизображение' .. v]<br />
if image == 'title' then<br />
local imageExists<br />
if invIds[title] then<br />
imageExists = true<br />
else<br />
local imageTitle = mw.title.new( 'Файл:Grid ' .. title .. modification .. oimage )<br />
imageExists = imageTitle and imageTitle.exists<br />
end<br />
if imageExists then<br />
image = title<br />
else<br />
image = false<br />
end<br />
end<br />
<br />
if image == '----' then<br />
table.insert( invImages, '</div><div style="padding-top:.5em">' )<br />
elseif image ~= '----' then<br />
if not grid then<br />
grid = require( 'Модуль:Инвентарный слот' ).slot<br />
end<br />
table.insert( invImages, grid{ invmodification .. invtitle, ['ссылка'] = 'нет' } )<br />
end<br />
end<br />
<br />
if grid and #invImages > 0 then<br />
invImages = '<div class="infobox-invimages"><div>' .. table.concat( invImages, '' ) .. '</div></div>'<br />
else<br />
invImages = '[[Файл:No image.svg|link=]]'<br />
end<br />
else<br />
invImages = ''<br />
end<br />
<br />
if images ~= '' or invImages ~= '' then<br />
imageArea = images .. '\n' .. invImages<br />
else<br />
imageArea = 'нет'<br />
end<br />
end<br />
if imageArea and imageArea ~= 'нет' then<br />
imageArea = '<div class="infobox-imagearea">' .. imageArea .. '</div>'<br />
else<br />
imageArea = ''<br />
end<br />
<br />
local footer = args["подвал"]<br />
if footer then<br />
footer = '| class="infobox-footer" colspan="2" | ' .. footer<br />
end<br />
<br />
local bgcolor = args["цвет"]<br />
if bgcolor then<br />
bgcolor = ' style="background:#' .. bgcolor .. '"'<br />
end<br />
<br />
local html = {<br />
'<div class="notaninfobox">',<br />
'<div class="mcwiki-header infobox-title"', bgcolor or '', '>' .. title .. '</div>',<br />
imageArea,<br />
'{| class="infobox-rows" cellspacing="1" cellpadding="4"',<br />
'|-',<br />
args["ряды"] or '',<br />
footer or '',<br />
'|}',<br />
'</div>'<br />
}<br />
<br />
return table.concat( html, '\n' )<br />
end<br />
<br />
return p</div>
Popstop
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&diff=6756
Модуль:Анимация
2018-11-03T10:41:25Z
<p>Popstop: Обновление модуля</p>
<hr />
<div>local p = {}<br />
<br />
function p.animate( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = f:getParent().args<br />
end<br />
local files = args[1] or ''<br />
local size = args[2] or ''<br />
<br />
if size ~= '' then<br />
size = '|' .. size<br />
end<br />
<br />
local images = {}<br />
for image in mw.text.gsplit( files, '%s*;%s*' ) do<br />
if image == '' then<br />
table.insert( images, '<span><br></span>' )<br />
else<br />
table.insert( images, '<span>[[Файл:' .. image .. modification .. '.png' ..size .. ']]</span>' )<br />
end<br />
end<br />
images[1] = images[1]:gsub( '^<span>', '<span class="active">' )<br />
<br />
return '<span class="animated">' .. table.concat( images ) .. '</span>'<br />
end<br />
return p</div>
Popstop
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&diff=6755
Модуль:Анимация
2018-11-03T10:34:39Z
<p>Popstop: </p>
<hr />
<div>local p = {}<br />
local modification = ' (' .. mw.title.getCurrentTitle().rootText .. ')'<br />
function p.animate( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = f:getParent().args<br />
end<br />
local files = args[1] or ''<br />
local size = args[2] or ''<br />
<br />
if size ~= '' then<br />
size = '|' .. size<br />
end<br />
<br />
local images = {}<br />
for image in mw.text.gsplit( files, '%s*;%s*' ) do<br />
if image == '' then<br />
table.insert( images, '<span><br></span>' )<br />
else<br />
table.insert( images, '<span>[[Файл:' .. image .. modification .. '.png' ..size .. ']]</span>' )<br />
end<br />
end<br />
images[1] = images[1]:gsub( '^<span>', '<span class="active">' )<br />
<br />
return '<span class="animated">' .. table.concat( images ) .. '</span>'<br />
end<br />
return p</div>
Popstop
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&diff=6754
Blood Magic/Руна жертвоприношения
2018-11-03T10:28:16Z
<p>Popstop: Тест</p>
<hr />
<div>{{Блок<br />
|тип=твёрдый блок<br />
|гравит=нет<br />
|грязь=нет<br />
|прозр=нет<br />
|свет=нет<br />
|взрывоуст=нет<br />
|инструмент=Железная кирка<br />
|склад=да(64)<br />
|восплам=нет<br />
|дроп=этот же блок<br />
|текст_id=bloodmagic:blood_rune<br />
}}<br />
<br />
'''Руна жертвоприношения''' - блок, добавляемый модификацией [[Blood Magic]].<br />
<br />
== Рецепт ==<br />
{{Крафт<br />
|глава=1<br />
|показатьимя=0<br />
|A1=Камень|B1=Blood Magic:Укреплённая плитка|C1=Камень<br />
|A2=Золотой слиток|B2=Blood Magic:Чистая руна|C2=Золотой слиток<br />
|A3=Камень|B3=bm:Любой Кровавый шар (2)|C3=Камень<br />
|Выход=Blood Magic:Руна жертвоприношения<br />
}}<br />
{{Крафт<br />
|A1=Камень|B1=Камень|C1=Камень<br />
|A2=Камень|B2=Blood Arsenal:Gem of Sacrifice|C2=Камень<br />
|A3=Камень|B3=Камень|C3=Камень<br />
|Выход=Blood Magic:Руна жертвоприношения, 4<br />
|подвал=1<br />
}}<br />
<br />
== Использование ==<br />
Руна жертвоприношения используется для улучшения {{Ссылка/Blood_Magic|Кровавый алтарь|кровавого алтаря|ссылка=Кровавый_алтарь#Улучшение_алтаря}}. Каждая руна на 10% увеличивает количество LP, получаемого с помощью ритуала [[Blood_Magic/Колодец_страданий|колодец страданий]] или {{Ссылка/Blood_Magic|Кинжал жертвоприношения|кинжала жертвоприношения}}.<br />
<br />
[[Категория:Blood Magic]]<br />
[[Категория:Руны]]</div>
Popstop
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&diff=6753
Модуль:Карточка
2018-11-03T10:27:03Z
<p>Popstop: Обновление модуля</p>
<hr />
<div>local p = {}<br />
function p.infobox( f )<br />
local args = require( 'Модуль:ProcessArgs' ).merge( true )<br />
local titleObject = mw.title.getCurrentTitle()<br />
local title = args['название'] or titleObject.subpageText<br />
local invtitle = args['инвизображение'] or args["инвизображение1"] or args['название'] or titleObject.subpageText<br />
local modtitle = args['мод'] or titleObject.rootText<br />
if modtitle == 'нет' then<br />
modification = ''<br />
invmodification = ''<br />
else<br />
modification = ' (' .. modtitle .. ')'<br />
invmodification = modtitle .. ':'<br />
end<br />
<br />
local imageArea = args['изображения']<br />
if not imageArea and imageArea ~= 'none' then<br />
local images = {}<br />
local invImages = {}<br />
local defaultImageSize = args["умолчразмеризобр"] or '150px'<br />
args["изображение1"] = args["изображение1"] or args["изображение"] or 'title'<br />
args["изобр1разм"] = args["изобр1разм"] or args["изобрразм"]<br />
args["инвизображение1"] = args["инвизображение1"] or args["инвизображение"] or 'title'<br />
args["мод"] = args["мод"]<br />
<br />
local imgCount = {}<br />
local invImgCount = {}<br />
for k, v in pairs( args ) do<br />
if type( k ) == 'string' then<br />
local image, num = mw.ustring.match(k, '^(изображение)(%d+)$' )<br />
local invImage, invNum = mw.ustring.match(k, '^(инвизображение)(%d+)$' )<br />
if mw.ustring.lower(v) ~= 'нет' then<br />
if image then<br />
table.insert( imgCount, tonumber( num ) )<br />
elseif invImage then<br />
table.insert( invImgCount, tonumber( invNum ) )<br />
end<br />
end<br />
end<br />
end<br />
<br />
table.sort( imgCount )<br />
local animate<br />
for k, v in ipairs( imgCount ) do<br />
local image = args['изображение' .. v]<br />
local size = args['изобр' .. v .. 'разм'] or defaultImageSize<br />
if image == 'title' then<br />
local imageTitle = mw.title.new( 'Файл:' .. title .. modification ..'.png' )<br />
if imageTitle and imageTitle.exists then<br />
image = '[[Файл:' .. title .. modification .. '.png|' .. size .. ']]'<br />
elseif titleObject.namespace == 0 then<br />
image = '[[Файл:No image.svg|' .. size .. '|link=Файл:' .. title .. modification .. '.png|Загрузить ' .. title .. modification .. '.png]]'<br />
else<br />
image = '[[Файл:No image.svg|' .. size .. '|link=]]'<br />
end<br />
elseif mw.ustring.match(image, ';' ) then<br />
if not animate then<br />
animate = require( 'Модуль:Анимация' ).animate<br />
end<br />
image = animate{ image, size }<br />
else<br />
image = '[[Файл:' .. image .. modification .. '.png' .. '|' .. size .. ']]'<br />
end<br />
<br />
table.insert( images, '<div>' .. image .. '</div>' )<br />
end<br />
images = table.concat( images, '\n' )<br />
<br />
if #invImgCount > 0 then<br />
table.sort( invImgCount )<br />
local grid<br />
local invIds = mw.loadData( [[Модуль:ИнвСпрайт/ID]] )["IDы"]<br />
for k, v in ipairs( invImgCount ) do<br />
local image = args['инвизображение' .. v]<br />
if image == 'title' then<br />
local imageExists<br />
if invIds[title] then<br />
imageExists = true<br />
else<br />
local imageTitle = mw.title.new( 'Файл:Grid ' .. title .. modification .. '.png' )<br />
imageExists = imageTitle and imageTitle.exists<br />
end<br />
if imageExists then<br />
image = title<br />
else<br />
image = false<br />
end<br />
end<br />
<br />
if image == '----' then<br />
table.insert( invImages, '</div><div style="padding-top:.5em">' )<br />
elseif image ~= '----' then<br />
if not grid then<br />
grid = require( 'Модуль:Инвентарный слот' ).slot<br />
end<br />
table.insert( invImages, grid{ invmodification .. invtitle, ['ссылка'] = 'нет' } )<br />
end<br />
end<br />
<br />
if grid and #invImages > 0 then<br />
invImages = '<div class="infobox-invimages"><div>' .. table.concat( invImages, '' ) .. '</div></div>'<br />
else<br />
invImages = '[[Файл:No image.svg|link=]]'<br />
end<br />
else<br />
invImages = ''<br />
end<br />
<br />
if images ~= '' or invImages ~= '' then<br />
imageArea = images .. '\n' .. invImages<br />
else<br />
imageArea = 'нет'<br />
end<br />
end<br />
if imageArea and imageArea ~= 'нет' then<br />
imageArea = '<div class="infobox-imagearea">' .. imageArea .. '</div>'<br />
else<br />
imageArea = ''<br />
end<br />
<br />
local footer = args["подвал"]<br />
if footer then<br />
footer = '| class="infobox-footer" colspan="2" | ' .. footer<br />
end<br />
<br />
local bgcolor = args["цвет"]<br />
if bgcolor then<br />
bgcolor = ' style="background:#' .. bgcolor .. '"'<br />
end<br />
<br />
local html = {<br />
'<div class="notaninfobox">',<br />
'<div class="mcwiki-header infobox-title"', bgcolor or '', '>' .. title .. '</div>',<br />
imageArea,<br />
'{| class="infobox-rows" cellspacing="1" cellpadding="4"',<br />
'|-',<br />
args["ряды"] or '',<br />
footer or '',<br />
'|}',<br />
'</div>'<br />
}<br />
<br />
return table.concat( html, '\n' )<br />
end<br />
mw.log()<br />
mw.logObject()<br />
return p</div>
Popstop
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&diff=6752
Модуль:Анимация
2018-11-03T10:27:00Z
<p>Popstop: Обновление модуля</p>
<hr />
<div>local p = {}<br />
local modification = ' (' .. mw.title.getCurrentTitle().rootText .. ')'<br />
function p.animate( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = f:getParent().args<br />
end<br />
local files = args[1] or ''<br />
local size = args[2] or ''<br />
<br />
if size ~= '' then<br />
size = '|' .. size<br />
end<br />
<br />
local images = {}<br />
for image in mw.text.gsplit( files, '%s*;%s*' ) do<br />
if image == '' then<br />
table.insert( images, '<span><br></span>' )<br />
else<br />
table.insert( images, '<span>[[Файл:' .. image .. modification .. size .. ']]</span>' )<br />
end<br />
end<br />
images[1] = images[1]:gsub( '^<span>', '<span class="active">' )<br />
<br />
return '<span class="animated">' .. table.concat( images ) .. '</span>'<br />
end<br />
return p</div>
Popstop
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&diff=6751
Blood Magic/Кровавый шар
2018-10-29T18:51:44Z
<p>Popstop: Новая страница: «{{НеодСтраница}} Ссылки, имеющие один и тот же заголовок или похожие значения: *{{Ссылка/Blood…»</p>
<hr />
<div>{{НеодСтраница}}<br />
Ссылки, имеющие один и тот же заголовок или похожие значения:<br />
*{{Ссылка/Blood Magic|Слабый кровавый шар}}<br />
*{{Ссылка/Blood Magic|Кровавый шар ученика}}<br />
*{{Ссылка/Blood Magic|Кровавый шар мага}}<br />
*{{Ссылка/Blood Magic|Кровавый шар мастера}}<br />
*{{Ссылка/Blood Magic|Кровавый шар архимага}}<br />
*{{Ссылка/Blood Magic|Необыкновенный кровавый шар}}</div>
Popstop
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)&diff=6750
Blood Magic/Кровавый шар (2)
2018-10-29T18:50:57Z
<p>Popstop: Новая страница: «{{НеодСтраница}} Ссылки, имеющие один и тот же заголовок или похожие значения: *{{Ссылка/Blood…»</p>
<hr />
<div>{{НеодСтраница}}<br />
Ссылки, имеющие один и тот же заголовок или похожие значения:<br />
*{{Ссылка/Blood Magic|Кровавый шар ученика}}<br />
*{{Ссылка/Blood Magic|Кровавый шар мага}}<br />
*{{Ссылка/Blood Magic|Кровавый шар мастера}}<br />
*{{Ссылка/Blood Magic|Кровавый шар архимага}}<br />
*{{Ссылка/Blood Magic|Необыкновенный кровавый шар}}</div>
Popstop
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&diff=6749
Участник:Popstop/common.js
2018-10-29T18:49:30Z
<p>Popstop: </p>
<hr />
<div>mw.loader.using(['mediawiki.api']).then(function() {<br />
"use strict";<br />
<br />
var api = new mw.Api();<br />
var element = null;<br />
<br />
var ratelimit = null;<br />
var request = null;<br />
var count = 0;<br />
<br />
function status(message) {<br />
message = message === undefined ? "Очищено: " + count : message;<br />
if (element)<br />
element.text(message);<br />
}<br />
<br />
function error(message) {<br />
status("Ошибка.");<br />
message = message === undefined ? "unknown error" : message;<br />
console.log("purge.js: " + message);<br />
}<br />
<br />
function calcGCD(x, y) {<br />
if (x < y) {<br />
var tmp = x;<br />
x = y;<br />
y = tmp;<br />
}<br />
while (true) {<br />
if (y === 0)<br />
return x;<br />
x %= y;<br />
if (x === 0)<br />
return y;<br />
y %= x;<br />
}<br />
}<br />
<br />
function updateRatelimit(callback) {<br />
if (typeof purgejs_ratelimit !== "undefined") {<br />
ratelimit = purgejs_ratelimit;<br />
if (callback)<br />
callback();<br />
return;<br />
}<br />
<br />
api.get({<br />
meta: 'userinfo',<br />
uiprop: 'rights|ratelimits'<br />
}).done(function(data) {<br />
if (data && data.query && data.query.userinfo) {<br />
var ratelimits = data.query.userinfo.ratelimits;<br />
var rights = data.query.userinfo.rights;<br />
if (ratelimits && ratelimits.purge) {<br />
if (ratelimits.purge.user) {<br />
ratelimit = ratelimits.purge.user;<br />
} else if (ratelimits.purge.ip) {<br />
ratelimit = ratelimits.purge.ip;<br />
} else {<br />
return error("unnable to parse ratelimits");<br />
}<br />
var gcd = calcGCD(ratelimit.hits, ratelimit.seconds);<br />
if (gcd > 1) {<br />
ratelimit.hits /= gcd;<br />
ratelimit.seconds /= gcd;<br />
}<br />
} else {<br />
if (rights && rights.indexOf("apihighlimits") !== -1) {<br />
ratelimit = { hits: 500, seconds: 0 };<br />
} else {<br />
ratelimit = { hits: 50, seconds: 0 };<br />
}<br />
}<br />
} else {<br />
return error("unnable to get userinfo");<br />
}<br />
if (callback)<br />
callback();<br />
});<br />
}<br />
<br />
function processPurge(continueinfo) {<br />
api.post($.extend({}, request, continueinfo))<br />
.done(function(data) {<br />
if (data && data.purge && data.purge.length) {<br />
count += data.purge.length;<br />
} else {<br />
return error("empty response");<br />
}<br />
if (data.warnings) {<br />
error("warning recieved");<br />
console.log(data.warnings);<br />
return;<br />
}<br />
if (data["continue"]) {<br />
status();<br />
setTimeout(function() {<br />
processPurge(data["continue"]);<br />
}, 1000 * ratelimit.seconds);<br />
} else {<br />
status("Готово.");<br />
}<br />
})<br />
.fail(function() {<br />
error("request failed");<br />
});<br />
}<br />
<br />
function startPurge(prefix, generator, linkupdate) {<br />
request = { "action": "purge" };<br />
if (linkupdate) {<br />
request.forcelinkupdate = "1";<br />
}<br />
$.extend(request, generator);<br />
<br />
updateRatelimit(function() {<br />
var limit = prefix + "limit";<br />
if (linkupdate) {<br />
request[limit] = 1;<br />
} else {<br />
request[limit] = ratelimit.hits;<br />
}<br />
count = 0;<br />
status();<br />
processPurge(null);<br />
});<br />
}<br />
<br />
function addButton() {<br />
var pagename = mw.config.get("wgPageName");<br />
var namespace = mw.config.get("wgCanonicalNamespace");<br />
var action = mw.config.get("wgAction");<br />
var exists = mw.config.get("wgArticleId") !== 0;<br />
<br />
if (!(<br />
action === "view" ||<br />
namespace === "Category" && action === "edit" && !exists<br />
)) {<br />
return;<br />
}<br />
<br />
var prefix, generator;<br />
var comment = "";<br />
if (namespace === "") {<br />
prefix = "gbl";<br />
generator = {<br />
"generator": "backlinks",<br />
"gbltitle": pagename<br />
};<br />
comment = "Сбросить кэш на страницах, ссылающихся на данную. ";<br />
} else if (namespace === "File") {<br />
prefix = "gfu";<br />
generator = {<br />
"generator": "fileusage",<br />
"titles": pagename<br />
};<br />
comment = "Сбросить кэш на страницах, включающих данный файл. ";<br />
} else if (namespace === "Template") {<br />
prefix = "gti";<br />
generator = {<br />
"generator": "transcludedin",<br />
"titles": pagename<br />
};<br />
comment = "Сбросить кэш на страницах, включающих данный шаблон. ";<br />
} else if (namespace === "Category") {<br />
prefix = "gcm";<br />
generator = {<br />
"generator": "categorymembers",<br />
"gcmtitle": pagename<br />
};<br />
comment = "Сбросить кэш на страницах, включённых в данную категорию. ";<br />
} else if (<br />
(namespace === "User" || namespace === "Wikiproject") &&<br />
pagename.indexOf("/") != -1<br />
) {<br />
prefix = "gpl";<br />
generator = {<br />
"generator": "links",<br />
"titles": pagename<br />
};<br />
comment = "Сбросить кэш на страницах, на которые ведут ссылки с данной. ";<br />
}<br />
<br />
if (prefix && generator) {<br />
var link = $("<a>", {<br />
title: comment + "Ctrl+клик — сделать нулевую правку.",<br />
text: "Сбросить кэш"<br />
}).css({cursor: 'pointer'});<br />
link.click(function(ev) {<br />
startPurge(prefix, generator, ev.ctrlKey);<br />
});<br />
<br />
element = $("<li>", { id: "t-purge" })<br />
.addClass("plainlinks")<br />
.append(link);<br />
<br />
$("#p-tb div ul").append(element);<br />
}<br />
}<br />
<br />
addButton();<br />
});<br />
<br />
mw.loader.using(['mediawiki.util', 'mediawiki.api'])<br />
.then(function() {<br />
var count, wait;<br />
var step = 1;<br />
var depth = 5;<br />
var api = new mw.Api();<br />
<br />
function collectSubCategories(cat) {<br />
console.log('cat: ' + cat);<br />
return $.getJSON('https://petscan.wmflabs.org', {<br />
language: 'ru',<br />
project: 'wikipedia',<br />
depth: depth - 1,<br />
categories: cat.substring(cat.indexOf(':') + 1),<br />
'ns[14]': 1,<br />
interface_language: 'en',<br />
active_tab: 'tab_output',<br />
doit: '',<br />
format: 'json'<br />
})<br />
.done(function(d) {<br />
purge([cat].concat(d['*'][0].a['*'].map(function(q) {<br />
return "Категория:" + q.title;<br />
}))<br />
.reverse());<br />
})<br />
.fail(function() {<br />
alert("Сбор подкатегорий не удался");<br />
purge([cat]);<br />
});<br />
}<br />
<br />
function purge(cats) {<br />
if (cats.length <= 0) {<br />
alert("Нуль-правки успешно завершены!");<br />
document.location.reload();<br />
} else<br />
postPurge(cats[0], cats);<br />
}<br />
<br />
function postPurge(cat, cats, addParams) {<br />
console.log('catnext: ' + cat);<br />
var apiParams = $.extend({<br />
action: 'purge',<br />
generator: 'categorymembers',<br />
'gcmtitle': cat,<br />
'gcmlimit': step,<br />
forcelinkupdate: 1<br />
}, addParams);<br />
api.post(apiParams)<br />
.done(function(d) {<br />
console.log(d);<br />
count += step;<br />
if (d.warnings === undefined && d["continue"] !== undefined &&<br />
d["continue"].gcmcontinue) {<br />
mw.notify(count + " страниц перепостроены");<br />
setTimeout(function() {<br />
postPurge(cat, cats, d["continue"]);<br />
}, wait);<br />
} else {<br />
alert("Нуль-правки успешно завершены! (" + cat.replace(/_/g, " ") + ")");<br />
cats.shift();<br />
purge(cats);<br />
}<br />
})<br />
.fail(function() {<br />
alert("Неудача");<br />
});<br />
}<br />
if (mw.config.get('wgNamespaceNumber') == 14) {<br />
wait = 1000;<br />
api.get({<br />
meta: 'userinfo',<br />
uiprop: 'ratelimits'<br />
})<br />
.done(function(d) {<br />
if (d && d.query && d.query.userinfo && d.query.userinfo.ratelimits &&<br />
d.query.userinfo.ratelimits.purge)<br />
wait = 2000;<br />
$( "#p-tb div ul" ).append( $('<li>').addClass('plainlinks')<br />
.append( $('<a>').text('Нуль-правки').css({cursor: 'pointer'})<br />
.click( function() {<br />
count = 0;<br />
collectSubCategories(mw.config.get('wgPageName')<br />
.replace(/_/g, " "));<br />
} ) ) );<br />
});<br />
}<br />
});<br />
<br />
if (mw.config.get( 'wgAction' ) == 'edit' || mw.config.get( 'wgAction' ) == 'submit') {<br />
( function() {<br />
var buttons = [<br />
[<br />
'//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',<br />
'Вставить шаблон кровавого алтаря',<br />
'{'+'{Blood Magic/Кровавый алтарь\n|вход=\n|выход=\n|уровень=\n|LP=\n|расход=\n|потери=\n',<br />
'}}',<br />
'',<br />
'button-bloodaltar'<br />
],<br />
[<br />
'//d1u5p3l4wpay3k.cloudfront.net/minecraft_ru_gamepedia/0/06/%D0%9F%D0%B0%D0%BB%D0%BA%D0%B0.png?version=b9bf1cabc365d86a601e4e872c84c165',<br />
'Вставить шаблон предмета',<br />
'{'+'{Предмет\n|изображение=\n|инвизображение=\n|тип=\n|прочн=\n|склад=\n|текст_id=\n',<br />
'}}',<br />
'',<br />
'button-item'<br />
],<br />
[<br />
'//d1u5p3l4wpay3k.cloudfront.net/minecraft_ru_gamepedia/0/04/%D0%97%D0%B5%D0%BC%D0%BB%D1%8F.png?version=f0b569469bb185914c9394c44f1686bf',<br />
'Вставить шаблон блока',<br />
'{'+'{Блок\n|изображение=\n|инвизображение=\n|тип=\n|гравит=\n|грязь=\n|прозр=\n|свет=\n|взрывоуст=\n|прочн=\n|инструмент=\n|склад=\n|восплам=\n|текст_id=\n',<br />
'}}',<br />
'',<br />
'button-block'<br />
],<br />
[<br />
'//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',<br />
'Вставить шаблон еды',<br />
'{'+'{Еда\n|изображение=\n|инвизображение=\n|тип=\n|готов=\n|восст=\n|текст_id=\n|некат=\n',<br />
'}}',<br />
'',<br />
'button-food'<br />
],<br />
[<br />
'//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',<br />
'Вставить шаблон модификации',<br />
'{'+'{Модификация\n|изображение=\n|версия=\n|mcверсия=\n|требования=\n|forge=\n|дополнения=\n|серверы=\n',<br />
'}}',<br />
'',<br />
'button-modification'<br />
],<br />
[<br />
'//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',<br />
'Вставить шаблон дизамбига',<br />
'{'+'{НеодСтраница',<br />
'}}',<br />
'',<br />
'button-disambiguation'<br />
]<br />
];<br />
$.each( buttons, function() { mw.toolbar.addButton.apply( null, this ); } );<br />
} ) ();<br />
}<br />
<br />
(function() {<br />
"use strict";<br />
<br />
var $ = window.jQuery;<br />
var action = mw.config.get("wgAction");<br />
var pagename = mw.config.get("wgCanonicalSpecialPageName");<br />
if (!pagename && action !== "history") {<br />
return;<br />
}<br />
<br />
function changeLinkLimit(link, limit) {<br />
var oldLimit = link.text();<br />
<br />
function replace(attr, prefix) {<br />
if (prefix === undefined)<br />
prefix = "";<br />
var value = link.attr(attr);<br />
value = value.replace(prefix + oldLimit, prefix + limit);<br />
return link.attr(attr, value);<br />
}<br />
<br />
link.text(limit);<br />
replace("title");<br />
replace("href", "limit=");<br />
<br />
return link;<br />
}<br />
<br />
var links;<br />
if (pagename === "Whatlinkshere") {<br />
links = $("#mw-content-text > a:last-child");<br />
} else {<br />
links = $("a.mw-numlink:contains(500)");<br />
}<br />
for (var i = 0; i < links.length; i++) {<br />
var link = $(links[i]);<br />
link<br />
.after(changeLinkLimit(link.clone(), "5000"))<br />
.after(" | ")<br />
.after(changeLinkLimit(link.clone(), "1000"))<br />
.after(" | ");<br />
}<br />
})();<br />
<br />
mw.util.addPortletLink ('p-tb', '/Служебная:Новые_страницы', 'Новые статьи', 't-new', 'Новые статьи');<br />
mw.util.addPortletLink ('p-tb', '/Служебная:Указатель_по_началу_названия/'+mw.config.get( 'wgPageName' )+'/', 'Подстраницы' , 't-subpages', 'Подстраницы');<br />
mw.util.addPortletLink ('p-tb', '/Служебная:Требуемые_страницы', 'Требуемые статьи', 't-pages', 'Требуемые страницы');<br />
mw.util.addPortletLink ('p-tb', '/Служебная:Список_файлов', 'Список файлов', 't-files', 'Список файлов');</div>
Popstop
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&diff=6743
Модуль:ИнвСпрайт/Blood Magic/Псевдонимы
2018-10-29T18:39:27Z
<p>Popstop: </p>
<hr />
<div>local russian = mw.language.new('ru')<br />
<br />
local aliases_Blood_Magic = {<br />
['Любой Кровавый шар'] = 'Слабый кровавый шар; Кровавый шар ученика; Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар',<br />
['Любой Кровавый шар (2)'] = 'Кровавый шар ученика; Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар',<br />
['Любой Кровавый шар (3)'] = 'Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар',<br />
['Любой Кровавый шар (4)'] = 'Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар',<br />
['Любой Кровавый шар (5)'] = 'Кровавый шар архимага; Необыкновенный кровавый шар',<br />
['Любой Адский камень (сырая энергия)'] = 'Мелкий адский камень (сырая энергия); Небольшой адский камень (сырая энергия); Обычный адский камень (сырая энергия); Большой адский камень (сырая энергия); Великий адский камень (сырая энергия)'<br />
}<br />
<br />
return aliases_Blood_Magic</div>
Popstop
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&diff=6740
Модуль:ИнвСпрайт/Blood Magic/Псевдонимы
2018-10-29T18:32:13Z
<p>Popstop: </p>
<hr />
<div>local russian = mw.language.new('ru')<br />
<br />
local aliases_Blood_Magic = {<br />
['Любой Кровавый шар'] = 'Слабый кровавый шар; Кровавый шар ученика; Кровавый шар мага; Кровавый шар мастера; Кровавый шар архимага; Необыкновенный кровавый шар',<br />
['Любой Адский камень (сырая энергия)'] = 'Мелкий адский камень (сырая энергия); Небольшой адский камень (сырая энергия); Обычный адский камень (сырая энергия); Большой адский камень (сырая энергия); Великий адский камень (сырая энергия)'<br />
}<br />
<br />
return aliases_Blood_Magic</div>
Popstop
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&diff=6733
Модуль:Крафт
2018-10-27T20:25:33Z
<p>Popstop: Откат</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
if mod and mod ~= '' then<br />
page = mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6732
Модуль:Крафт
2018-10-27T20:21:54Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
if mod and mod ~= '' then<br />
page = mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
local modredirect = {ic2 = 1, mch = 1, MineChem = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
elseif mod == 'ic2' or modredirect[mw.ustring.lower(mod)] then<br />
return prefix .. '[[mc:' .. page .. name .. '|' .. name .. ']]'<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6731
Модуль:Крафт
2018-10-27T20:18:14Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}<br />
if mod == mcredirect[mw.ustring.lower(mod)] then<br />
page = 'mc:' .. mod .. '/'<br />
else<br />
page = mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1, ic2 = 1, mch = 1, MineChem = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6730
Модуль:Крафт
2018-10-27T20:15:52Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}<br />
if mod and mod ~= '' then<br />
page = mod .. '/'<br />
elseif mod == mcredirect[mw.ustring.lower(mod)] then<br />
page = 'mc:' .. mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1, ic2 = 1, mch = 1, MineChem = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6729
Модуль:Крафт
2018-10-27T20:10:39Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}<br />
if mod and mod ~= '' or mcredirect[mw.ustring.lower(mod)] then<br />
page = mod .. '/'<br />
else<br />
page = 'mc:' .. mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1, ic2 = 1, mch = 1, MineChem = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6728
Модуль:Крафт
2018-10-27T20:09:09Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1, fl = 1, MineChem = 1}<br />
if mod and mod ~= '' or mcredirect[mw.ustring.lower(mod)] then<br />
page = mod .. '/'<br />
else<br />
page = 'mc:' .. mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6727
Модуль:Крафт
2018-10-27T20:06:02Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
local mcredirect = {ic2 = 1, IndustrialCraft_2 = 1}<br />
if mod and mod ~= '' or mcredirect[mw.ustring.lower(mod)] then<br />
page = mod .. '/'<br />
else<br />
page = 'mc:' .. mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6726
Модуль:Крафт
2018-10-27T20:03:09Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
if mod and mod ~= '' then<br />
page = mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
local mcredirect = {ic2 = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
elseif mod == 'ic2' or mcredirect[mw.ustring.lower(mod)] then<br />
return prefix .. '[[' .. 'mc:' .. page .. name .. '|' .. name .. ']]'<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6725
Модуль:Модификации
2018-10-27T20:01:17Z
<p>Popstop: Тест</p>
<hr />
<div>return {<br />
["as"] = "Astral Sorcery",<br />
["bm"] = "Blood Magic",<br />
["ba"] = "Blood Arsenal",<br />
["w"] = "Wizardry",<br />
["pe"] = "ProjectE",<br />
["mch"] = "MineChem",<br />
["fl"] = "Flan's",<br />
["ic2"] = "IndustrialCraft 2",<br />
}</div>
Popstop
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&diff=6724
Модуль:Крафт
2018-10-27T19:58:27Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
if mod and mod ~= '' then<br />
page = mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
local mcredirect = {IndustrialCraft_2 = 1, ic2 = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
elseif mod == mcredirect[mw.ustring.lower(mod)] then<br />
return prefix .. '[[' .. 'mc:' .. page .. name .. '|' .. name .. ']]'<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6723
Модуль:Крафт
2018-10-27T19:53:57Z
<p>Popstop: Тест</p>
<hr />
<div>-- Модуль для создания таблиц с рецептами для крафта.<br />
<br />
local p = {}<br />
local slot = require( [[Модуль:Инвентарный слот]] )<br />
local getParts = slot.getParts<br />
local prefixes = slot.prefixes<br />
<br />
-- Сервисная функция<br />
local function prefixedLink( name, mod )<br />
local prefix = ''<br />
for _, thisPrefix in pairs( prefixes ) do<br />
if mw.ustring.find(name, '^' .. thisPrefix .. ' ' ) then<br />
prefix = thisPrefix .. ' '<br />
name = mw.ustring.gsub(name, '^' .. prefix, '' )<br />
break<br />
end<br />
end<br />
<br />
local page = ''<br />
local mcredirect = {IndustrialCraft_2 = 1}<br />
if mod and mod ~= '' or mcredirect[mw.ustring.lower(mod)] then<br />
page = mod .. '/'<br />
else<br />
page = 'mc:' .. mod .. '/'<br />
end<br />
<br />
local vanilla = {v = 1, vanilla = 1, mc = 1, minecraft = 1}<br />
if mod == '' or vanilla[mw.ustring.lower(mod)] then<br />
return prefix .. name<br />
else<br />
return prefix .. '[[' .. page .. name .. '|' .. name .. ']]'<br />
end<br />
end<br />
<br />
-- Строительство таблицы<br />
function p.table( f )<br />
local args = f<br />
if f == mw.getCurrentFrame() then<br />
args = require( 'Модуль:ProcessArgs' ).merge()<br />
else<br />
f = mw.getCurrentFrame()<br />
end<br />
<br />
-- Начинать таблицу при необходимости<br />
local multirow = f:callParserFunction( '#dplvar', 'multirow' )<br />
if multirow ~= '1' then<br />
multirow = nil<br />
end<br />
local head = args["глава"] or ''<br />
if multirow then<br />
head = ''<br />
elseif head ~= '' then<br />
multirow = 1<br />
f:callParserFunction( '#dplvar:set', 'multirow', '1' )<br />
else<br />
head = 1<br />
end<br />
<br />
-- Заканчивать таблицу при необходимости<br />
local foot = args["подвал"] or ''<br />
if multirow then<br />
if foot ~= '' then<br />
multirow = nil<br />
f:callParserFunction( '#dplvar:set', 'multirow', '0' )<br />
end<br />
else<br />
foot = 1<br />
end<br />
<br />
local header = ''<br />
if head ~= '' then<br />
local name = ''<br />
local description = ''<br />
if args["показатьимя"] == '1' or multirow and args["показатьимя"] ~= '0' then<br />
name = '!! Результат'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '1' )<br />
end<br />
if args["показатьописание"] == '1' then<br />
description = ' !! class="unsortable" | Описание'<br />
f:callParserFunction( '#dplvar:set', 'craftingdescription', '1' )<br />
end<br />
local class = args["класс"] or ''<br />
local recipeClass = ''<br />
if multirow then<br />
class = 'sortable collapsible ' .. class<br />
recipeClass = 'class="unsortable" |'<br />
end<br />
header = table.concat( {<br />
' {| style="text-align:center" class="wikitable ' .. class .. '" data-description="Рецепты крафта"',<br />
'! ' .. 'Ингредиенты !! ' .. recipeClass .. ' Рецепты [[крафт]]а' .. name .. description,<br />
'|-'<br />
}, '\n' )<br />
end<br />
<br />
-- Ячейка с названием<br />
local nameCell<br />
if f:callParserFunction( '#dplvar', 'craftingname' ) == '1' then<br />
if args["название"] or '' ~= '' then<br />
nameCell = args["название"]<br />
else<br />
local names = {}<br />
local links = {}<br />
for v in mw.text.gsplit( args["Выход"] or '', '%s*;%s*' ) do<br />
parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
if not names[parts.mod .. ':' .. parts.name] then<br />
table.insert( links, prefixedLink( parts.name, parts.mod ) )<br />
names[parts.mod .. ':' .. parts.name] = 1<br />
end<br />
end<br />
<br />
nameCell = table.concat( links, '&nbsp;или<br>' )<br />
end<br />
end<br />
<br />
if nameCell and args["запланированное"] then<br />
nameCell = nameCell .. '<br>(' .. args["запланированное"] .. ')'<br />
end<br />
<br />
-- Создать список ингредиентов<br />
local ingredients = {}<br />
local ingredientKeys = {}<br />
local animatedIngredients = {}<br />
local animatedKeys = {}<br />
for k, v in pairs( args ) do<br />
v = mw.text.trim( v )<br />
if v ~= '' and mw.ustring.find(tostring( k ), '^%u?%d%d?$' ) then<br />
if mw.ustring.find(v, ';' ) then<br />
table.insert( animatedKeys, v )<br />
else<br />
local parts = getParts( v, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if not ingredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
ingredients[fullName] = { mod = parts.mod, name = parts.name }<br />
end<br />
end<br />
end<br />
end<br />
for k, v in ipairs( animatedKeys ) do<br />
local frames = mw.text.split( v, '%s*;%s*' )<br />
local length = #frames<br />
for k2, v2 in ipairs( frames ) do<br />
local parts = getParts( v2, args["Мод"] )<br />
parts.mod = parts.mod or ''<br />
local fullName = parts.mod .. ':' .. parts.name<br />
if v2 ~= '' and not ingredients[fullName] and not animatedIngredients[fullName] then<br />
table.insert( ingredientKeys, fullName )<br />
animatedIngredients[fullName] = { mod = parts.mod, name = parts.name, final = k2 == length }<br />
end<br />
end<br />
end<br />
<br />
-- Ячейка с ингредиентами<br />
local ingredientsCell<br />
if args["ингредиенты"] or '' ~= '' then<br />
ingredientsCell = args["ингредиенты"]<br />
else<br />
ingredientsCell = {}<br />
for k, v in ipairs( ingredientKeys ) do<br />
local separator = '&nbsp;+'<br />
if k == #ingredientKeys then<br />
separator = ''<br />
elseif animatedIngredients[v] and not animatedIngredients[v].final then<br />
separator = '&nbsp;или'<br />
end<br />
<br />
local mod = ( ingredients[v] or animatedIngredients[v] ).mod<br />
local name = ( ingredients[v] or animatedIngredients[v] ).name<br />
table.insert( ingredientsCell, prefixedLink( name, mod ) .. separator )<br />
end<br />
<br />
ingredientsCell = table.concat( ingredientsCell, '<br>\n' )<br />
end<br />
<br />
-- Автоматическое расположение ингредиентов в бесформенном рецепте<br />
local newArgs = {}<br />
if args[1] then<br />
newArgs["бесформенный"] = 1<br />
if args[7] then<br />
newArgs.A1 = args[1]<br />
newArgs.B1 = args[2]<br />
newArgs.C1 = args[3]<br />
newArgs.A2 = args[4]<br />
newArgs.B2 = args[5]<br />
newArgs.C2 = args[6]<br />
if args[8] then<br />
-- ◼◼◼ ◼◼◼<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.A3 = args[7]<br />
newArgs.B3 = args[8]<br />
newArgs.C3 = args[9]<br />
if args[9] then<br />
local identical = true<br />
for i = 1, 8 do<br />
if args[i] ~= args[i + 1] then<br />
identical = false<br />
end<br />
end<br />
if identical then<br />
newArgs["бесформенный"] = nil<br />
end<br />
end<br />
else<br />
-- ◼◼◼<br />
-- ◼◼◼<br />
-- ◻◼◻<br />
newArgs.B3 = args[7]<br />
end<br />
elseif args[2] then<br />
newArgs.A2 = args[1]<br />
newArgs.B2 = args[2]<br />
if args[5] then<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◼ OR ◼◼◼<br />
-- ◼◼◼ ◼◼◻<br />
newArgs.C2 = args[3]<br />
newArgs.A3 = args[4]<br />
newArgs.B3 = args[5]<br />
newArgs.C3 = args[6]<br />
elseif args[4] then<br />
-- ◻◻◻<br />
-- ◼◼◻<br />
-- ◼◼◻<br />
newArgs.A3 = args[3]<br />
newArgs.B3 = args[4]<br />
else<br />
-- ◻◻◻ ◻◻◻<br />
-- ◼◼◻ OR ◼◼◻<br />
-- ◻◼◻ ◻◻◻<br />
newArgs.B3 = args[3]<br />
end<br />
else<br />
-- ◻◻◻<br />
-- ◻◼◻<br />
-- ◻◻◻<br />
newArgs.B2 = args[1]<br />
newArgs["бесформенный"] = nil<br />
end<br />
else<br />
newArgs.A1 = args.A1<br />
newArgs.B1 = args.B1<br />
newArgs.C1 = args.C1<br />
newArgs.A2 = args.A2<br />
newArgs.B2 = args.B2<br />
newArgs.C2 = args.C2<br />
newArgs.A3 = args.A3<br />
newArgs.B3 = args.B3<br />
newArgs.C3 = args.C3<br />
newArgs["фиксированный"] = args["фиксированный"]<br />
newArgs["нефиксировано"] = args["нефиксировано"]<br />
end<br />
<br />
-- Остальные аргументы<br />
newArgs["Мод"] = args["Мод"]<br />
newArgs["Выход"] = args["Выход"]<br />
newArgs["ВНазв"] = args["ВНазв"]<br />
newArgs["ВСсылка"] = args["ВСсылка"]<br />
<br />
-- Ячейка с рецептом<br />
local recipeCell = require( 'Модуль:Интерфейс' ).craftingTable( newArgs )<br />
<br />
local row = {<br />
'|\n' .. ingredientsCell,<br />
'style="padding:1px" |\n' .. recipeCell<br />
}<br />
if nameCell then<br />
table.insert( row, 3, '<b>' .. nameCell .. '</b>' )<br />
end<br />
if f:callParserFunction( '#dplvar', 'craftingdescription' ) == '1' then<br />
table.insert( row, args["описание"] or '' )<br />
end<br />
row = table.concat( row, '\n|' )<br />
<br />
local footer = ''<br />
if foot ~= '' then<br />
footer = '|}'<br />
f:callParserFunction( '#dplvar:set', 'craftingname', '0', 'craftingdescription', '0' )<br />
end<br />
<br />
-- Создание различных категорий для DPL<br />
local title = mw.title.getCurrentTitle()<br />
local categories = ''<br />
if args["некат"] ~= '1' and title.namespace == 0 and not title.isSubpage then<br />
categories = {}<br />
<br />
if args["запланированное"] then<br />
table.insert( categories, '[[Категория:Запланированные материалы]]' )<br />
end<br />
<br />
if args["тип"] then<br />
table.insert( categories, '[[Категория:Рецепты/' .. args["тип"] .. ']]' )<br />
end<br />
<br />
if args["игнорировать"] ~= '1' then<br />
local dyes = {<br />
'Оранжевый краситель', 'Сиреневый краситель', 'Светло-синий краситель', 'Жёлтый краситель', 'Лаймовый краситель',<br />
'Розовый краситель', 'Серый краситель', 'Светло-серый краситель', 'Бирюзовый краситель', 'Фиолетовый краситель',<br />
'Лазурит', 'Какао-бобы', 'Кактусовая зелень', 'Красный краситель', 'Чернильный мешок'<br />
}<br />
-- Названия в следующем списке должны писаться ОБЯЗАТЕЛЬНО со строчной буквы, так как встречаются в середине названия:<br />
local variants = {<br />
'древесина', 'доски', 'окрашенное стекло', 'окрашенная стеклянная панель', 'шерсть',<br />
'песчаник', 'ступени', 'плита', 'нажимная пластина', 'звёздочка',<br />
'каменный кирпич', 'андезит', 'диорит', 'гранит', 'щит'<br />
}<br />
<br />
for k, v in ipairs( ingredientKeys ) do<br />
v = mw.ustring.sub(v, 2 )<br />
if not mw.ustring.find(v, ':' ) then<br />
if v == 'Любой краситель' or v == 'Любой цветной краситель' then<br />
if v == 'Любой краситель' then<br />
table.insert( dyes, 1, 'Костная мука' )<br />
end<br />
<br />
for _, dye in ipairs( dyes ) do<br />
-- В оригинале название категории имеет формат «Recipe using <предмет>». Прямо переводится<br />
-- эта конструкция как «Рецепт, использующий <предмет>». При этом название предмета должно<br />
-- было быть в винительном падеже, но на данный момент быстро склонять название предметов<br />
-- в именительном падеже с помощью модулей не представляется возможным. Поэтому в качестве<br />
-- перевода используется близкая по смыслу конструкция, не требующая склонения.<br />
table.insert( categories, '[[Категория:' .. dye .. ' как ингредиент для крафта]]' )<br />
end<br />
else<br />
if v == 'Липкий поршень' then v = 'Поршень'<br />
elseif v == 'Любой гриб' or v == 'Красный гриб' or v == 'Коричневый гриб' then v = 'Гриб'<br />
elseif v == 'Красный песок' then v = 'Песок'<br />
elseif v == 'Древесный уголь' then v = 'Уголь'<br />
elseif mw.ustring.find(v, 'красный песчаник$' ) then v = 'Песчаник'<br />
elseif mw.ustring.find(v, '^Флаг ') or mw.ustring.find(v, ' флаг$') then v = 'Флаг'<br />
elseif v == 'Кварцевый пилон' or v == 'Резной кварцевый блок' then v = 'Кварцевый блок'<br />
else<br />
-- Объединить категории вариантов, описываемых на единой странице<br />
for _, variant in pairs( variants ) do<br />
if mw.ustring.find(v, ' ' .. variant .. '$' ) then<br />
v = variant<br />
break<br />
end<br />
end<br />
<br />
-- Убрать приставки<br />
for _, prefix in pairs( prefixes ) do<br />
if mw.ustring.find(v, '^' .. prefix .. ' ' ) then<br />
v = mw.ustring.gsub(v, '^' .. prefix .. ' ', '' )<br />
break<br />
end<br />
end<br />
end<br />
<br />
table.insert( categories, '[[Категория:' .. v .. ' как ингредиент для крафта]]' )<br />
end<br />
end<br />
end<br />
end<br />
<br />
categories = table.concat( categories, '' )<br />
end<br />
<br />
if args["отладка"] == '1' then<br />
return '<pre>' .. header .. '\n' .. row .. '\n|-\n' .. footer .. categories .. '</pre>'<br />
else<br />
return header .. '\n' .. row .. '\n|-\n' .. footer .. categories<br />
end<br />
end<br />
return p</div>
Popstop
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&diff=6722
IndustrialCraft 2/Корпус механизма
2018-10-27T19:28:21Z
<p>Popstop: Перенаправление на mc:IndustrialCraft 2/Основной корпус машины</p>
<hr />
<div>#перенаправление [[mc:IndustrialCraft 2/Основной_корпус_машины]]</div>
Popstop
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&diff=6721
IndustrialCraft 2/Медная пластина
2018-10-27T19:27:27Z
<p>Popstop: Перенаправление на mc:IndustrialCraft 2/Медная пластина</p>
<hr />
<div>#перенаправление [[mc:IndustrialCraft_2/Медная_пластина]]</div>
Popstop
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&diff=6719
MK/Счетчик энергии
2018-10-27T19:13:37Z
<p>Popstop: </p>
<hr />
<div>{{Блок<br />
|название=Счетчик энергии<br />
|инвизображение=MK:Счетчик энергии<br />
|тип=Механизм<br />
|гравит=Нет<br />
|прозр=Нет<br />
|свет=0<br />
|взрывоуст=?<br />
|инструмент=Кирка<br />
|склад=Да (64)<br />
|перввер=1.7.10<br />
|номер=559<br />
}}<br />
<br />
'''Счетчик энергии''' - механизм, используемый в качестве регулируемого [[Industrial Craft|трансформатора]] с указанием возвращаемого напряжения.<br />
<br />
== Крафт ==<br />
<br />
{{Крафт<br />
|Мод=MK<br />
|A1=IndustrialCraft 2: Медная пластина |B1=OpenComputers: Микрочип (Уровень 2) |C1=IndustrialCraft 2: Медная пластина<br />
|A2=IndustrialCraft 2: Стекловолокно |B2=IndustrialCraft 2: Корпус механизма |C2=IndustrialCraft 2: Стекловолокно<br />
|A3=IndustrialCraft 2: Медная пластина |B3=IndustrialCraft 2: Медная пластина |C3=IndustrialCraft 2: Медная пластина<br />
|Выход=Счетчик энергии<br />
}}<br />
<br />
== Описание ==<br />
<br />
Счетчик энергии имеет собственный интерфейс, доступный по нажатию правой кнопки мыши:<br />
<br />
[[Файл: Интерфейс счетчика энергии (Mod MK).png|link=]]<br />
<br />
Цифры на центральном экране показывают текущее напряжение, установленное владельцем прибора. С помощью кнопок управления в правом и левом нижних углах интерфейса можно изменять количество энергии, передаваемое лицевой стороной счетчика.<br />
<br />
== OpenComputers ==<br />
<br />
Счетчик энергии может подключаться кабелем к компьютерам для автоматической обработки показаний (на основе этого, например, можно сделать систему тарификации). Взаимодействие с ним производится также, как и со всеми остальными периферийными устройствами. <br />
Название компонента: <code>eu_counter</code><br />
Список доступных методов:<br />
{| class="wikitable"<br />
! Функция<br />
! Описание<br />
|-<br />
| <code>value(): number</code><br />
| Возвращает количество энергии, прошедшей через счетчик<br />
|-<br />
| <code>current(): number</code><br />
| Возвращает ток, текущий через счетчик (в единицах энергии в секунду)<br />
|-<br />
| <code>voltage(): number</code><br />
| Возвращает установленное напряжение<br />
|-<br />
| <code>voltage(x: number)</code><br />
| Устанавливает новое напряжение<br />
|}<br />
<br />
{{Mod MK}}</div>
Popstop
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&diff=6718
Шаблон:Печка/док
2018-10-27T19:09:10Z
<p>Popstop: </p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Lua|Интерфейс}}<br />
Этот шаблон используется для создания интерфейса печки.<br />
<br />
Для создания таблиц с рецептами обжига на страницах с описанием предметов используйте лучше шаблон {{tl|Обжиг}}.<br />
== Использование ==<br />
<br />
=== Параметры ===<br />
<pre style="max-width: 246px">{{Печка<br />
|Мод=Название мода<br />
|Ресурс=Мод:Предмет для обжига,Количество<br />
|Выход=Мод:Результат,Количество<br />
|Топливо=Мод:Название топлива,Количество<br />
}}<br />
</pre><br />
<br />
=== Пример использования ===<br />
<br />
<pre style="max-width: 128px">{{Печка<br />
|Ресурс=Песок,17<br />
|Выход=Стекло,2<br />
|Топливо=Уголь,3<br />
}}</pre><br />
<br />
;выведет:<br />
{{Печка<br />
|Ресурс=Песок,17<br />
|Выход=Стекло,2<br />
|Топливо=Уголь,3<br />
}}<br />
<br />
=== Анимация ===<br />
Чтобы сделать слоты анимированными, составьте список из предметов и блоков, разделенных точкой с запятой (<code>;</code>).<br />
<pre style="max-width: 232px">{{Печка<br />
|Ресурс=Песок,17; Древесина,10<br />
|Выход=Стекло,2; Древесный уголь,10<br />
|Топливо=Уголь,3<br />
}}</pre><br />
<br />
;выведет:<br />
{{Печка<br />
|Ресурс=Песок,17; Древесина,10<br />
|Выход=Стекло,2; Древесный уголь,10<br />
|Топливо=Уголь,3<br />
}}<br />
<br />
=== Моды ===<br />
Изображения предметов из модов и обычные предметы могут быть совмещены также, как в обычном слоте.<br />
<br />
Когда загружаете изображение с предметом из мода, к названию файла нужно добавить мод в скобках. Например, Гаечный ключ (BuildCraft).<br />
<br />
Параметр <code>Мод</code> устанавливается по-умолчанию для всех слотов, это лучше использовать, если в рецепте в основном предметы из этого мода, или если название мода слишком длинное, и использование параметра <code>vanilla (v)</code> в таблице было бы быстрее. Вы также можете использовать короткие названия модификаций, указанные на странице [[Модуль:Модификации]]<br />
<pre style="max-width: 250px">{{Печка<br />
|Ресурс=ProjectE:Блок топлива мебиуса<br />
|Выход=ProjectE:Алхимический уголь<br />
|Топливо=Уголь,5<br />
}}</pre><br />
;или<br />
<pre style="max-width: 250px">{{Печка<br />
|Ресурс=pe:Блок топлива Мёбиуса<br />
|Выход=pe:Алхимический уголь<br />
|Топливо=Уголь,5<br />
}}</pre><br />
<br />
;выведет:<br />
{{Печка<br />
|Ресурс=pe:Блок топлива Мёбиуса<br />
|Выход=pe:Алхимический уголь<br />
|Топливо=Уголь,5<br />
}}<br />
<br />
<br />
Изображения расхода и прогресса можно изменить с помощью параметров <code>Расход=</code> и <code>Прогресс=</code>:<br />
<pre style="max-width: 282px">{{Печка<br />
|Мод=Aether<br />
|Ресурс=Священный камень<br />
|Выход=Лечащий камень<br />
|Топливо=Амброзиум<br />
|Расход=Трансмутация<br />
|Прогресс=Трансмутация<br />
}}</pre><br />
;выведет<br />
{{Печка<br />
|Мод=Aether<br />
|Ресурс=Священный камень<br />
|Выход=Лечащий камень<br />
|Топливо=Амброзиум<br />
|Расход=Трансмутация<br />
|Прогресс=Трансмутация<br />
}}<br />
Формат изображений: <code>Расход (Мод).png</code> и <code>Прогресс Progress (Мод).png</code><br />
<br />
== См. также ==<br />
{{См. также Интерфейс}}<br />
<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
[[Категория:Шаблоны интерфейса]]<br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6717
Шаблон:Варочная стойка/док
2018-10-27T19:02:16Z
<p>Popstop: </p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Lua|Интерфейс}}<br />
Этот шаблон используется для создания интерфейса варочной стойки.<br />
<br />
Для создания таблиц с варкой на страницах с описанием предметов используйте лучше шаблон {{tl|Варка}}.<br />
<br />
== Использование ==<br />
<pre style="width: 218px">{{Варочная стойка<br />
|Ресурс=Адский нарост<br />
|Выход1=Грубое зелье<br />
|Выход2=Грубое зелье<br />
|Выход3=Грубое зелье<br />
}}</pre><br />
<br />
;выведет:<br />
{{Варочная стойка<br />
|Ресурс=Адский нарост<br />
|Выход1=Грубое зелье<br />
|Выход2=Грубое зелье<br />
|Выход3=Грубое зелье<br />
}}<br />
<br />
=== Анимация ===<br />
Чтобы сделать слот анимированным, составьте список из предметов, разделенных точкой с запятой (<code>;</code>).<br />
<br />
<pre style="width: 388px">{{Варочная стойка<br />
|Ресурс=Адский нарост,10; Красная пыль,64<br />
|Выход1=Грубое зелье; Взрывающееся непримечательное зелье<br />
|Выход2=Грубое зелье; Взрывающееся непримечательное зелье<br />
|Выход3=Грубое зелье; Взрывающееся непримечательное зелье<br />
}}</pre><br />
<br />
;выведет:<br />
{{Варочная стойка<br />
|Ресурс=Адский нарост,10; Красная пыль,64<br />
|Выход1=Грубое зелье; Взрывающееся непримечательное зелье<br />
|Выход2=Грубое зелье; Взрывающееся непримечательное зелье<br />
|Выход3=Грубое зелье; Взрывающееся непримечательное зелье<br />
}}<br />
<br />
=== Моды ===<br />
Когда загружаете изображение с предметом из мода, к названию файла нужно добавить мод в скобках. Например, Гаечный ключ (BuildCraft).<br />
<br />
Параметр <code>Мод</code> устанавливается по-умолчанию для всех слотов, это лучше использовать, если в рецепте в основном предметы из этого мода, или если название мода слишком длинное, и использование параметра <code>vanilla (v)</code> в таблице было бы быстрее.<br />
<pre style="width: 230px">{{Варочная стойка<br />
|Ресурс=v:Красная пыль,2<br />
|Выход1=MineChem:Водород<br />
|Выход2=v:Светопыль<br />
|Выход3=MineChem:Гелий<br />
}}</pre><br />
;или<br />
<pre style="width: 352px">{{Варочная стойка<br />
|Мод=MineChem<br />
|Ресурс=v:Красная пыль,2<br />
|Выход1=Водород<br />
|Выход2=v:Светопыль<br />
|Выход3=Гелий<br />
}}</pre><br />
<br />
;выведет:<br />
{{Варочная стойка<br />
|Мод=MineChem<br />
|Ресурс=v:Красная пыль,4<br />
|Выход1=Водород<br />
|Выход2=v:Светопыль<br />
|Выход3=Гелий<br />
}}<br />
== См. также ==<br />
{{См. также Интерфейс}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
[[Категория:Шаблоны интерфейса]]<br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6716
Шаблон:Крафт/док
2018-10-27T18:58:41Z
<p>Popstop: </p>
<hr />
<div>{{Документация/Шапка}}<br />
<!-- Документацию следует размещать здесь --><br />
{{Lua}}<br />
<br />
Этот шаблон предназначен для добавления на страницы таблиц с рецептами крафта для различных блоков и предметов игры. Эти таблицы состоят обычно из трёх столбцов (граф), где соответственно указываются название предмета, рецепт которого показан, ингредиенты для этого рецепта, и размещение их на сетке верстака (к ним может добавляться и столбец с примечанием). Обычно такие таблицы устанавливают в раздел «Крафт». <br />
<br />
== Использование ==<br />
<br />
Основным вариантом вызова этого шаблона является следующий:<br />
<pre><br />
{{Крафт<br />
|A1=<предмет1> |B1=<предмет2> |C1=<предмет3><br />
|A2=<предмет4> |B2=<предмет5> |C2=<предмет6><br />
|A3=<предмет7> |B3=<предмет8> |C3=<предмет9><br />
|Выход=<результат>, <количество><br />
}}<br />
</pre><br />
<br />
* Параметры {{п|A''x''}}, {{п|B''x''}} и {{п|C''x''}} (''x'' — число от 1 до 3) предназначены для указания расположения ингредиентов на верстаке. Их значением являются названия блоков или предметов. Если в одной и той же ячейке в рецепте могут использоваться различные предметы, то их названия указываются вместе, разделённые точкой с запятой. Ингредиенты для рецепта перечисляются во второй графе таблицы.<br />
* Параметр {{п|Выход}} (обязательно пишется с большой буквы) используется для указания того, что в итоге образуется после крафта. Значение его состоит из разделённых запятой названия предмета и количества, которое производится. Иконка предмета (с количеством) отображается в большей ячейке сетки верстака, а его название упоминается в первой графе таблицы.<br />
<br />
Могут использоваться и другие параметры:<br />
* Если несколько шаблонов {{((}}Крафт{{))}} вызываются последовательно, то может быть целесообразно создать единую таблицу из нескольких вызовов. В таком случае в первом шаблоне указывается параметр {{п|глава}}, установленный в 1, а в последнем — {{п|подвал}}, также установленный в 1.<br />
* Параметр {{п|бесформенный}} указывает, что рецепт бесформенный, то есть его ингредиенты можно размещать беспорядочным образом. В этом случае параметры можно указывать без привязки к ячейкам, то есть без названий параметров {{п|A''x''}}, {{п|B''x''}} и {{п|C''x''}} с последующим знаком «равно» (=).<br />
* Параметр {{п|фиксированный}} указывает, что рецепт фиксированный, что его нельзя даже зеркально отразить по вертикальной оси. Но некоторые ингредиенты в некоторых случаях всё же можно перемещать. Они, ''в родительном падеже'', указываются в параметре {{п|нефиксировано}}.<br />
* Параметр {{п|описание}} указывает описание (примечание) к рецепту. Для отображения столбца с примечаниями нужно в первом шаблоне, составляющем таблицу из нескольких рецептов, добавить параметр {{п|показатьописание}}.<br />
* Параметр {{п|запланированное}} указывает будущую версию, в которой рецепт появится.<br />
* Параметр {{п|тип}} указывает категорию, к которому рецепт относится. Это используется для отображения рецептов по группам на подстраницах статьи [[Крафт]].<br />
* Параметр {{п|название}} позволяет переопределить название предмета, указываемое в первой графе.<br />
* Параметр {{п|показатьимя}} позволяет контролировать отображения графы с названием. Если он установлен в 1, то графа отображается (что, впрочем, происходит и без указания параметра), а если он равен 0, то она, наоборот, не отображается.<br />
* Параметр {{п|ингредиенты}} позволяет переопределить список ингредиентов, указываемый во второй графе.<br />
* Параметр {{п|некат}} отключает установку категорий полностью. Без него она отключается только на подстраницах некоторых статей, а также вне пространства статей.<br />
<br />
== Примеры использования ==<br />
<br />
<pre><br />
{{Крафт<br />
|глава=1<br />
|показатьописание=1<br />
|B2=Уголь, Древесный уголь<br />
|B3=Палка<br />
|Выход=Факел, 4<br />
}}<br />
{{Крафт<br />
|A1=Железный слиток<br />
|B2=Кремень<br />
|Выход=Огниво<br />
|описание=Это описание<br />
}}<br />
{{Крафт<br />
|Железный слиток<br />
|Кремень<br />
|Выход=Огниво<br />
|запланированное=1.7.2<br />
|описание=Это всего лишь пример. Версия 1.7.2 уже давно как вышла.<br />
}}<br />
{{Крафт<br />
|название=Меч<br />
|ингредиенты=Палка +<br>Любые доски, или<br>булыжник, или<br>железные или<br>золотые слитки, или<br>алмазы<br />
|B1=Доски; Булыжник; Железный слиток; Золотой слиток; Алмаз<br />
|B2=Доски; Булыжник: Железный слиток; Золотой слиток; Алмаз<br />
|B3=Палка<br />
|Выход=Деревянный меч; Каменный меч; Железный меч; Золотой меч; Алмазный меч<br />
}}<br />
{{Крафт<br />
|Мод=MineChem<br />
|A1=Водород|B1=Водород|C1=Водород<br />
|A2=Водород|B2=Водород|C2=Водород<br />
|A3=vanilla:Ведро|B3=Водород|C3=Водород<br />
|Выход=Ведро химиката (H)<br />
|описание=Из модификации MineChem.<br />
}}<br />
{{Крафт<br />
|A1=v:Обсидиан|B1=Blood Magic:Ритуальный камень|C1=v:Обсидиан<br />
|A2=Blood Magic:Ритуальный камень|B2=Blood Magic:Любой кровавый шар|C2=Blood Magic:Ритуальный камень<br />
|A3=v:Обсидиан|B3=Blood Magic:Ритуальный камень|C3=v:Обсидиан<br />
|Выход=Blood Magic:Главный ритуальный камень<br />
|подвал=1<br />
|описание=Из модификации Blood Magic.<br />
}}<br />
</pre><br />
отобразит:<br />
{{Крафт<br />
|глава=1<br />
|показатьописание=1<br />
|B2=Уголь; Древесный уголь<br />
|B3=Палка<br />
|Выход=Факел, 4<br />
}}<br />
{{Крафт<br />
|A1=Железный слиток<br />
|B2=Кремень<br />
|Выход=Огниво<br />
|описание=Это описание<br />
}}<br />
{{Крафт<br />
|Железный слиток<br />
|Кремень<br />
|Выход=Огниво<br />
|запланированное=1.7.2<br />
|описание=Это всего лишь пример. Версия 1.7.2 уже давно как вышла.<br />
}}<br />
{{Крафт<br />
|название=Меч<br />
|ингредиенты=Палка +<br>Любые доски, или<br>булыжник, или<br>железные или<br>золотые слитки, или<br>алмазы<br />
|B1=Доски; Булыжник; Железный слиток; Золотой слиток; Алмаз<br />
|B2=Доски; Булыжник; Железный слиток; Золотой слиток; Алмаз<br />
|B3=Палка<br />
|Выход=Деревянный меч; Каменный меч; Железный меч; Золотой меч; Алмазный меч<br />
}}<br />
{{Крафт<br />
|Мод=MineChem<br />
|A1=Водород|B1=Водород|C1=Водород<br />
|A2=Водород|B2=Водород|C2=Водород<br />
|A3=vanilla:Ведро|B3=Водород|C3=Водород<br />
|Выход=Ведро химиката (H)<br />
|описание=Из модификации MineChem.<br />
}}<br />
{{Крафт<br />
|A1=v:Обсидиан|B1=Blood Magic:Ритуальный камень|C1=v:Обсидиан<br />
|A2=Blood Magic:Ритуальный камень|B2=Blood Magic:Любой кровавый шар|C2=Blood Magic:Ритуальный камень<br />
|A3=v:Обсидиан|B3=Blood Magic:Ритуальный камень|C3=v:Обсидиан<br />
|Выход=Blood Magic:Главный ритуальный камень<br />
|подвал=1<br />
|описание=Из модификации Blood Magic.<br />
}}<br />
<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
[[Категория:Шаблоны]]<br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6715
Модуль:ИнвСпрайт/Flan's
2018-10-27T18:44:54Z
<p>Popstop: </p>
<hr />
<div>return {<br />
["имя"] = "Flan's",<br />
["имякласса"] = "flans-mod-inv-sprite",<br />
["IDы"] = "ИнвСпрайт/Flan's/ID",<br />
["изобр"] = "Flan'sModCSS.png",<br />
["формат"] = 512,<br />
["разм"] = 32,<br />
["таблстилей"] = false,<br />
["модпсевдонимы"] = "ИнвСпрайт/Flan's/Псевдонимы",<br />
}</div>
Popstop
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&diff=6714
Категория:Кандидаты на разъединение
2018-10-27T18:37:42Z
<p>Popstop: Новая страница: «Категория:Статьи»</p>
<hr />
<div>[[Категория:Статьи]]</div>
Popstop
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&diff=6713
Модуль:ИнвСпрайт/ProjectE/ID/док
2018-10-27T16:18:44Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}} <includeonly> <!-- Здесь следует ра…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6712
Модуль:Спрайт/Astral Sorcery/док
2018-10-27T16:18:20Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=Astral Sorcery|изобр=AstralSorcery}} <includeonly> <!-- Здесь след…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=Astral Sorcery|изобр=AstralSorcery}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6711
Модуль:Спрайт/Предмет/ID/док
2018-10-27T16:17:42Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=Предмет|изобр=Item}} <includeonly> <!-- Здесь следует р…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=Предмет|изобр=Item}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6710
Модуль:Спрайт/ProjectRed/док
2018-10-27T16:17:14Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=ProjectRed|изобр=ProjectRed}} <includeonly> <!-- Здесь следует…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=ProjectRed|изобр=ProjectRed}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6709
Модуль:ИнвСпрайт/Astral Sorcery/док
2018-10-27T16:16:27Z
<p>Popstop: </p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=Astral Sorcery|изобр=AstralSorcery}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6708
Модуль:ИнвСпрайт/Astral Sorcery/док
2018-10-27T16:16:11Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=Astral Sorcery|изобр=Astral Sorcery}} <includeonly> <!-- Здесь след…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=Astral Sorcery|изобр=Astral Sorcery}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop
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&diff=6707
Модуль:Спрайт/MineChem/док
2018-10-27T16:14:44Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} <!-- Документацию следует размещать здесь --> {{Lua|Спрайт|данные=Спрай…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
<!-- Документацию следует размещать здесь --><br />
<br />
{{Lua|Спрайт|данные=Спрайт/MineChem|данные2=ИнвСпрайт/MineChem/ID}}<br />
<br />
[[Файл:MineChemCSS.png|thumb|Список изображений для спрайтов.]]<br />
<br />
Этот шаблон показывает изображение из мода [[MineChem]] при применении шаблона {{tl|Ссылка/MineChem}}.<br />
== Примеры ==<br />
<pre>{{Спрайт/MineChem|Гелий}}<br />
{{Спрайт/MineChem|Водород}}</pre><br />
{{Спрайт/MineChem|Гелий}}<br />
<br />
{{Спрайт/MineChem|Водород}}<br />
<br />
== Список изображений ==<br />
<br />
{{#invoke: Спрайт|doc|Спрайт/MineChem}}<br />
{{Спрайт/Навигация|мод=MineChem|изобр=MineChem}}<br />
<br />
<includeonly><br />
[[Категория:Спрайтовые шаблоны]]<br />
</includeonly></div>
Popstop
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&diff=6706
Модуль:ИнвСпрайт/ProjectE/док
2018-10-27T16:12:34Z
<p>Popstop: Новая страница: «{{Документация/Шапка}} {{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}} <includeonly> <!-- Здесь следует ра…»</p>
<hr />
<div>{{Документация/Шапка}}<br />
{{Спрайт/Навигация|мод=ProjectE|изобр=ProjectE}}<br />
<includeonly><br />
<!-- Здесь следует размещать категории и интервики шаблона --><br />
</includeonly><br />
<noinclude><br />
<!-- Здесь следует размещать категории и интервики документации --><br />
</noinclude></div>
Popstop