Источник оригинала на английском языке:
http://mudlogs.foghaven.net/mudlogs.php?article=jmctutorial
Оригинальное название: "JMC Tutorial - Version 1.0"
Авторы оригинального текста: Derek и Jasper
Перевод: Dr.Lance, 16.06.2009 г., 20.06.2009 г., 25.06.2009 г., 29.06.2009 г.

[Оригинальный текст учебника изложен моноширинным шрифтом
без иллюстраций. Возможно, это сделано для того, чтобы
желающие могли включить текст учебника непосредственно в
справочную систему игры -- прим.пер.]

Учебник по JMC -- редакция 1.0
===============================

ВВЕДЕНИЕ:
---------
Большинство игроков выбирает для игры в MUD специализированные
MUD-клиенты. Многие из них, однако, слабо представляют реальные
возможности клиентов, которыми они пользуются. Для некоторых это
не так и важно, но кому-то этот учебник поможет поднять игру на
новый уровень. Какого бы типа игроком вы ни были, мы с удовольствием
снабдим вас информацией о том, как заставить ваш клиент работать
в полную силу.

Этот учебник посвящен, в основном, MUD-клиенту JMC, однако, многие
из обсуждаемых здесь понятий применимы к другим MUD-клиентам,
поэтому этот учебник будет полезен вам, даже если вы и не являетесь
пользователем JMC.

Вы можете бесплатно скачать JMC по адресу:
http://mudlogs.foghaven.net/clients/jmc/

[Так как для скачивания предлагается JMC версии 3.26, то вероятно,
что именно по этой версии авторы и писали этот учебник -- прим.пер.]

==============================================================

СОДЕРЖАНИЕ:
------------
1) Познакомимся с клиентом
     1.1) Разберемся с кнопками на панели инструментов
     1.2) Что такое "профиль"
     1.3) Создаем соединение с MUD через JMC
     1.4) Закрываем соединение с MUD

2) Алиасы (alias) и горячие клавиши (hotkey)
     2.1) Разберемся, чем они отличаются друг от друга
     2.2) Создание простого алиаса
     2.3) Создание простой горячей клавиши
     2.4) Удаление ненужного алиаса
     2.5) Удаление ненужной горячей клавиши

3) Цветовыделители (highlight)
     3.1) Зачем нужны цветовыделители
     3.2) Создание цветовыделителя
     3.3) Удаление ненужного цветовыделителя

4) Переменные
     4.1) Зачем нужны переменные
     4.2) Частевые переменные (partial variable)
     4.3) Создание переменной
     4.4) Используем переменную
     4.5) Удаление ненужной переменной

5) Триггеры (action)
     5.1) Что такое "триггер"
     5.2) Создание триггера
     5.3) Обеспечение безопасности триггера
     5.4) Удаление ненужного триггера

6) Подстановки (substitution)
     6.1) Что такое "подстановка" (substitute)
     6.2) Что такое "заглушка" (gag)
     6.3) Создание подстановки
     6.4) Создание заглушки
     6.5) Удаление ненужной подстановки
     6.6) Удаление ненужной заглушки

7) Команда #showme
     7.1) Для чего нужна команда #showme
     7.2) Используем команду #showme

8) Связываем изученное воедино
     8.1) Алиасы с переменными
     8.2) Алиасы, которые вызывают запуск команд

9) Дополнительные функции JMC
     9.1) Дополнительное окно для вывода информации (output window)
     9.2) Создание команды вывода информации в дополнительное окно
     9.3) Используем ячейки панели статуса
     9.4) Используем звук, чтобы привлечь внимание

10) Ведение логов
     10.1) Для чего нужно вести логи
     10.2) Пишем лог в файл
     10.3) Закрываем файл лога
     10.4) Где хранятся логи

11) Условные выражения
     11.1) Выражения с ключевым словом if (команда #if)
     11.2) Используем условные выражения
     11.3) Математика в JMC
     11.4) Используем математические выражения

12) Регулярные выражения
     12.1) Что такое "регулярные выражения" и для чего они нужны
     12.2) Создание простейших регулярных выражений
     12.3) Подробнее о регулярных выражениях

13) Заключение

Замечание авторов: где не оговаривается специально, по умолчанию
считается, что тексты примеров вводятся в командной строке клиента.
Перед тем, как нажать клавишу ввода, проверьте правильность кода.
Также имейте ввиду, что регистр букв имеет значение.

==============================================================

1) Познакомимся с клиентом
---------------------------

1.1) Разберемся с кнопками на панели инструментов

-- Кнопка с белым листом (новый профиль) создает новый файл для
кода. Если вы не создадите такой файл, ваши настройки по умолчанию
будут сохранены в файл с именем "default". Некоторые люди заводят
в игре персонажей разных классов и предпочитают разделять настройки
для каждого класса.

-- Кнопка с открывающейся папкой (загрузить профиль) позволяет
пользователю открыть профиль, сохраненный ранее. Перед открытием
нового профиля текущий профиль будет сохранен автоматически. Вообще,
это хорошая идея -- всегда сохранять свой труд.

-- Кнопка с дискетой (сохранить профиль) нужна, чтобы сохранить
текущий профиль.

-- Кнопка с радугой (цвета) позволяет настроить цветовую гамму игры.
Можно установить цвет фона или цвет текста по умолчанию.

-- Кнопка с буквами "Ff" (шрифты) позволяет выбрать шрифт текста,
его начертание и размер.

-- Кнопка с синим гаечным ключом (настройки программы) -- для
продвинутых пользователей. Предполагается, что вы не будете
баловаться с этими настройками, пока не познакомитесь с JMC поближе.

-- Кнопка с белой коробкой (редактирование объектов JMC) позволяет
вручную настраивать алиасы, триггеры, цветовыделители и горячие
клавиши.

-- Кнопка с красным кругом (пауза) замораживает текст игры в окне JMC.

-- Кнопка с буквой "S" (добавить скрипт) -- для продвинутых
пользователей. Возможность добавить скрипты, расширяющие встроенные
возможности JMC, на разных языках программирования.

-- Кнопка с красным иксом (прервать скрипт) -- также для продвинутых
пользователей.

-- Кнопка с жучком (отладка) открывает текст скрипта в программе,
которую вы используете для отладки своих программ, например Microsoft
Development Kit (комплект разработчика программ от фирмы Microsoft).
Для продвинутых пользователей.

-- Кнопка с вопросом (о программе) дает краткую информацию о
программном продукте (то есть о JMC).

-- Все вышеперечисленные задачи могут решаться с помощью выпадающих
меню (которые обычно находятся выше кнопок). Мы рассмотрим только те
выпадающие меню, которые выполняют задачи, отличные от перечисленных.

-- Выпадающее меню View (внешний вид) имеет несколько дополнительных
функций. Пункт меню Toolbar (панель инструментов) всегда должен быть
отмечен галкой. Другие пункты этого меню -- Status bar (строка статуса)
и Output window (дополнительное окно вывода) -- могут быть включены
позже, когда вы узнаете из этого руководства, для чего они нужны и как
их можно использовать.

-- Выпадающее меню Options (настройки программы). Будет хорошей идеей
установить Scroll buffer (буфер прокрутки -- область памяти, которая
хранит содержимое части документа, которая находится за пределами
экрана) в значение 30000. Это максимум, который можно установить. Эта
цифра означает, что если вам нужно прокрутить текст игры назад, то вы
можете открутить назад на 30000 строк.

-- Выпадающее меню Help (помощь) -- поможет вам, если вы запутались в
синтаксисе командного языка или не можете вспомнить, как пользоваться
какой-либо функцией JMC. Но здесь дается только краткая информация,
которая не является исчерпывающей.

1.2) Что такое "профиль"

Весь код (триггеры, алиасы, подстановки и т.д.) записывается в
профиль. Пока не определено иное, все это попадает в профиль "по
умолчанию" (default). Хорошим решением будет сохранять в профиль "по
умолчанию" все универсальное, что может использоваться всеми вашими
персонажами. Затем, каждый раз при создании нового профиля достаточно
будет открыть профиль "по умолчанию", нажать на кнопку создания нового
профиля -- при этом JMC спросит вас, хотите ли вы загрузить в
создаваемый профиль код текущего профиля. Этот универсальный для разных
персонажей код, хранящийся в профиле "по умолчанию", должен быть
полезен для любого вашего профиля. Такой сборник универсальных кодов не
является чем-то абсолютно необходимым, но иметь его при себе очень
удобно. Для разных классов персонажей можно написать специализированные
профили. Например, вы можете задать команду "b" (bash - сбить) для
профиля персонажа класса "воин" и ту же команду "b" (backstab - удар
кинжалом сзади) для профиля персонажа класса "вор". Если вам пока
непонятны эти объяснения, не отчаивайтесь, все станет яснее, когда вы
начнете писать свой код для своих профилей.

1.3) Создаем соединение с MUD через JMC

Что хорошего в том, чтобы владеть MUD-клиентом и не знать, как создать
соединение с любимым MUD? Полагаю, что многие из читателей этого
справочника играют в MUD под названием "Arctic", поэтому и использую
этот MUD в примере.

КОМАНДА: #connect
СИНТАКСИС: #connect адрес_сервера_игры номер_порта

ПРИМЕР: #connect mud.arctic.org 2700

После ввода этой команды на экране появится тот же текст, который
появляется, если вы пользуетесь простым Telnet-клиентом. Очевидно, что
каждый раз вводить такую длинную команду для входа в игру вам быстро
надоест, поэтому будет удобно написать простой алиас, помогающий
избавиться от этой проблемы. Что такое "алиас" -- я объясню позже, а
сейчас просто введите следующее:

#alias {z} {#connect mud.arctic.org 2700}

Теперь, введя букву "z", вы подключитесь к MUD под названием "Arctic".

1.4) Закрываем соединение с MUD

Если по какой-либо причине вам требуется разорвать соединение
с MUD, в который вы играете в данный момент, вы можете ввести:

КОМАНДА: #zap
СИНТАКСИС: #zap

Ввод команды #zap инициирует закрытие соединения с игрой. Не буду
рассказывать детально, в каких случаях может понадобиться эта
команда, но она срабатывает хорошо, если требуется очистить очередь
из множества команд, наспамленных вами же и создающих лаг (задержку
реакции сервера игры на ваши команды) в неподходящий момент.

2) Алиасы (alias) и горячие клавиши (hotkey)
--------------------------------------------

2.1) Разберемся, чем они отличаются друг от друга

Обе эти функции очень полезны. Сам я предпочитаю пользоваться
алиасами во всех случаях, но некоторые люди жить не могут без горячих
клавиш. Обе рассматриваемые функции похожи друг на друга тем, что
являются быстрым способом ввода длинных команд. Отличие в том, что
алиасы все же требуют набора нескольких символов и нажатия клавиши
Enter перед тем, как команды будут переданы в игру. Горячая клавиша
же сработает сразу, как только вы нажмете соответствующую клавишу.
В тех редких случаях, когда я пользовался горячими клавишами, это
были функциональные клавиши (F1-F12). На самом деле, в качестве
горячей можно использовать любую клавишу, но использование обычных
буквенных клавиш в качестве горячих -- не самая удачная идея. Можно
пользовать в качестве горячей клавиши клавиши вроде тильды (~) или
комбинации клавиш, например "CTRL+A".

2.2) Создание простого алиаса

КОМАНДА: #alias
СИНТАКСИС: #alias {короткое имя-текст для вызова} {полный текст команд}

ПРИМЕР: #alias {ввт} {взять все труп}

Теперь, когда вы убьете моба, все, что нужно сделать, чтобы ограбить
его труп, это ввести "ввт". Такие сокращения (алиасы) позволяют нам
стать намного быстрее, особенно, если вы делаете много опечаток или
чувствуете себя неуверенно с длинными командами вроде
"к !магическая стрела! мышь".

2.3) Создание простой горячей клавиши

КОМАНДА: #hotkey
СИНТАКСИС: #hotkey {клавиша} {полный текст команд}

ПРИМЕР: #hotkey {F1} {взять все труп}

Аналог примера с алиасом. Теперь, когда вы убьете моба, чтобы ограбить
его труп, достаточно нажать на клавишу F1.

2.4) Удаление ненужного алиаса

КОМАНДА: #unalias
СИНТАКСИС: #unalias {короткое имя-текст для вызова}

ПРИМЕР: #unalias {ввт}

Теперь алиас, который мы создали ранее, будет удален. Удалять алиасы
также можно, вызвав специальный диалог кнопкой с белой коробкой на
панели инструментов (редактирование объектов JMC), далее -- вкладка
"Алиасы" (Aliases), выбрать алиас "ввт", кликнуть мышью кнопку
"Удалить" (Remove), хотя лично я нахожу такой путь слишком длинным и
оттого нудным. Я предпочитаю первый способ.

2.5) Удаление ненужной горячей клавиши

КОМАНДА: #unhotkey
СИНТАКСИС: #unhotkey {клавиша}

ПРИМЕР: #unhotkey {F1}

Теперь горячая клавиша, которую мы создали ранее, будет удалена.
Удалять горячие клавиши можно также способом, описанным выше, только в
диалоге выбирается вкладка "Горячие клавиши" (Hotkeys) вместо "Алиасы"
(Aliases).

3) Цветовыделители (highlight)
------------------------------

3.1) Зачем нужны цветовыделители

Многие знают, что использование цветов в игре помогает отличать друг от
друга игроков и предметы, монстров и тому подобное, и что это
цветоделение очень удобно. Если вы раньше не пользовались цветами
стандарта консоли ANSI (кратко -- цвета ANSI) и вы играете, к примеру,
в MUD под названием "Arctic", предлагаю вам ввести команду "opt ansi"
[в русском MUD под названием "Былины" аналогом этой команды будет "цвет
полный" -- прим.пер.]. Сначала у вас будет немного рябить в глазах, но
побегав в игре с цветами ANSI подольше, вы от этого уже не откажетесь.
JMC поддерживает цвета стандарта консоли ANSI. Имена некоторых
персонажей в игре или какая-то информация от сервера игры могут для вас
быть важнее других имен или другой информации и поэтому мы не хотели бы
пропустить их в потоке текста. Выделение такой информации цветом --
один из способов не пропустить ее.

3.2) Создание цветовыделителя

КОМАНДА: #highlight
СИНТАКСИС: #highlight {цвет} {информация для выделения цветом}

ПРИМЕР: #highlight {green} {Петр}

Теперь каждый раз, когда в потоке текста от сервера игры вам попадется
имя "Петр", оно будет автоматически выделено зеленым (green) цветом.
Однако, нужно иметь ввиду, что из-за того, что, к примеру, в слове
"Петрович" тоже присутствует "Петр", часть слова "Петрович" тоже будет
выделена зеленым.

Узнать, какие цвета для выделения текста вам доступны, можно, нажав
кнопку с радугой на панели инструментов JMC. Вот список цветов, которые
точно там будут (кроме этих там могут быть и другие цвета):

ЦВЕТА: yellow (желтый), red (красный), green (зеленый),
       brown (коричневый), blue (синий), magenta (пурпурный),
       cyan (голубой), light red (ярко-красный),
       light green (ярко-зеленый), light blue (ярко-синий),
       light cyan (ярко-голубой), light magenta (ярко-пурпурный)

3.3) Удаление ненужного цветовыделителя

КОМАНДА: #unhighlight
СИНТАКСИС: #unhighlight {информация для выделения цветом}

ПРИМЕР: #unhighlight {Петр}

Имя "Петр", которое, благодаря команде из прошлой главы, выделялось
цветом, теперь будет выводиться цветом по умолчанию. Можно удалить
ненужный цветовыделитель и с помощью кнопки с белой коробкой на панели
инструментов JMC -- в открывшемся диалоге выбрать вкладку HighLights
(Цветовыделители), выбрать ненужный цветовыделитель в списке, нажать
кнопку Remove (Удалить) справа.

4) Переменные
--------------

4.1) Зачем нужны переменные

У переменных есть множество применений. С их помощью можно хранить
значения, которые позже использовать для различных вычислений. В
переменной можно хранить имя какого-нибудь триггера или алиаса, либо
нам просто может понадобиться заполнитель (placeholder) в
строке-шаблоне, соответствующий любому сочетанию символов
строки-оригинала.

4.2) Частевые переменные (partial variable)

Это в своей основе те же заполнители, что были упомянуты выше. Эти
переменные не определяются пользователем, они встроенные и
соответствуют любому сочетанию символов строки-оригинала. Обращение к
частевым переменным производится по их именам, которые состоят из знака
процента и цифры, то есть %0, %1, %2, ..., %9 -- всего их десять.

Предположим, MUD (в данном случае -- игровой сервер), в который мы
играем, может выдавать строки-оригиналы такого вида:

          Ворон прилетел с юга.

Используя частевую переменную (заполнитель), мы можем написать такую
строку-шаблон:

          %0 прилетел с юга.

Так как частевая переменная %0 соответствует в данном случае любому
сочетанию символов, находящемуся в строке-оригинале в части слева от
символов " прилетел с юга.", то кто бы ни прилетел с юга -- ворон,
Бэтмен, Петя, Мерилин Монро -- наша строка-шаблон будет соответствовать
строке-оригиналу.

Сейчас эти объяснения могут вам показаться очень простыми, а
использование частевых переменных -- неудобным, но эти переменные вам
понадобятся, когда мы начнем обсуждать использование триггеров.

Также эти переменные могут понадобиться для того, чтобы сделать наши
алиасы и подстановки (substitution) более гибкими.

Предположим, мы захотели, чтобы сообщение о том, что кто-то (кто
угодно) влетает в комнату (с любого направления), выделялось зеленым
цветом.

Используем предыдущий пример:

          Ворон прилетел с юга.

Сделаем нашу строку-шаблон более универсальной:

          %0 прилетел с %1

Теперь мы можем встроить полученную строку-шаблон в цветовыделитель:

          #highlight {green} {%0 прилетел с %1}

Теперь кто бы ни прилетел в комнату, причем с какого угодно
направления, сообщение об этом, полученное от игрового сервера, будет
выделено зеленым цветом.

Можно сделать алиас более универсальным, добавив в него цель-параметр
(target). Например, в случае, когда вы хотите открыть некий контейнер,
взять все из него и закрыть его, вы введете команды, похожие на
следующие:

          открыть сумка
          взять все сумка
          закрыть сумка

Чтобы автоматизировать эту операцию, создаем алиас так, как рассказано
в главе выше, посвященной алиасам, то есть вводим:

          #alias {вв} {открыть сумка; взять все сумка; закрыть сумка}

Теперь, когда вы введете "вв", произойдет то же самое, что и при вводе
трех команд выше. Точка с запятой здесь используется как разделитель
команд; с помощью разделителя команд можно расположить несколько команд
в одной строке.

Далее предположим, что мы хотим изменить этот алиас так, чтобы он
работал с любым контейнером. Это можно сделать следующим образом:

          #alias {вв %0} {открыть %0; взять все %0; закрыть %0}

Теперь мы можем вводить команды, подобные следующим:

          вв сумка
          вв сундук
          вв кошелек

...и наш алиас срабатывает с любым из этих контейнеров.

Только помните, что частевые переменные (%0 или %5 или %3 и т.п.)
должны использоваться не в любом порядке, а так, чтобы соответствовать
следующим друг за другом кускам текста.

4.3) Создание переменной

Кроме частевых, в JMC есть обычные переменные, то есть такие, которые
пользователь определяет сам и которые содержат определенные значения,
нужные нам.

КОМАНДА: #variable
СИНТАКСИС: #variable {имя переменной} {значение переменной}

ПРИМЕР: #variable {оружие} {копье}

Используя переменную в объектах JMC вроде алиасов, триггеров и т.п.,
можно превратить эти объекты в универсальный и очень мощный инструмент
в игре.

4.4) Используем переменную

Все это прекрасно, но что полезного приносят обычные переменные,
определенные пользователем, то есть нами? Итак, чтобы получить значение
переменной (например, определенной в предыдущей главе), нужно поставить
символ "$" перед именем переменной, тогда JMC поймет, откуда извлечь
значение.

Давайте введем такую команду:

          вооружиться $оружие

В результате JMC отобразит на экране и пошлет на игровой сервер
следующее:

          вооружиться копье

Работа с переменной приобретет большое значение в следующих главах,
когда мы начнем пользоваться переменными чаще.

Заметьте, что если бы вы перед последним примером не создали б
переменную $оружие, на игровой сервер была бы отправлена точно такая
последовательность символов, как вы написали, то есть "вооружиться
$оружие"; то же самое верно и для любых других выражений с переменными,
которые вы пишете для отсылки на игровой сервер.

Перед использованием переменной убедитесь, что ваша переменная
существует и ей присвоено какое-либо значение!

4.5) Удаление ненужной переменной

КОМАНДА: #unvariable
СИНТАКСИС: #unvariable {имя переменной}

ПРИМЕР: #unvariable {оружие}

Переменной с именем "оружие" больше не существует и ее значение
("копье") также стерто.

5) Триггеры (action)
--------------------

5.1) Что такое "триггер"

"Действия" (actions), также известные под названием "триггеры",
представляют собой команду (последовательность команд), которая будет
автоматически запущена на исполнение, когда от игрового сервера будет
получена определенная в триггере строка. Триггеры запускают команды на
исполнение без участия игрока.

5.2) Создание триггера

КОМАНДА: #action
СИНТАКСИС: #action {событие} {действия, которые будут выполнены}

ПРИМЕР: #action {0% отдал концы. Мир праху его!} {взять монеты труп}

Теперь, когда кто-либо погибнет в одной комнате с нашим персонажем, наш
клиент для игры в MUD автоматически пошлет на игровой сервер команду
"взять монеты труп". Этот триггер будет срабатывать, кто бы ни отдал
концы, так как %0 -- заполнитель (то есть соответствует любой
последовательности символов; смотри о заполнителях главу 4
"Переменные").

5.3) Обеспечение безопасности триггера

Любой, кто играл в MUD, знаком с таким явлением, как попытки некоторых
игроков навредить персонажам других игроков (жертвам) с помощью
собственных триггеров жертв. То есть когда другие игроки (либо,
изредка, какое-то неучтенное вами при написании триггера событие)
заставляют ваши триггеры срабатывать в такой момент (или таким
образом), когда (как) вам этого совсем не нужно. Такое употребление во
зло ваших же триггеров может закончиться для вашего персонажа утратой
экипировки, денег, а то и смертью. Все это означает, что умение писать
безопасные триггера является для игрока в MUD необходимостью. Приведем
несколько очень важных примеров, которые помогут понять, почему
триггеры могут быть небезопасны для ваших персонажей. Предположим, вы
всего лишь хотите, чтобы триггер срабатывал, когда появляется строка:

          Петя отдал концы. Мир праху его!

Напишите какой-нибудь триггер специально для этого события. Чем
универсальнее триггеры вы пишете, тем больше проблем может встать перед
вами при срабатывании триггера.

С помощью специального символа-якоря можно улучшить безопасность
триггера. Просто введите символ "^" в начале строки, определенной в
триггере как событие, при котором триггер срабатывает -- это убережет
триггер от криков игроков (и некоторых других вещей), которые содержат
текст, от которого ваши триггеры срабатывают. Однако, этим приемом
можно пользоваться только тогда, когда сочетание символов, от которого
срабатывает триггер, располагается в игре с самого начала строки.
Давайте разберемся, что это означает.

          Петя отдал концы. Мир праху его!

Эта строка-событие, полученная от игрового сервера, запустит ваш
триггер, если, к примеру, произойдет одно из следующих событий:

          Вова сказал вам: "Петя отдал концы. Мир праху его!"
          Аристарх закричал: "Петя отдал концы. Мир праху его!"
          Света завопила: "Петя отдал концы. Мир праху его!"

Если же вы определите вашу строку-событие так:

          ^Петя отдал концы. Мир праху его!

То ваш триггер сработает только тогда, когда персонаж по имени "Петя"
действительно отдаст концы, а не когда об этом кто-то завопит.

Если же мы определим строку-событие триггера так:

          ^Мир праху его!

То наш триггер сработает только тогда, когда игровой сервер выдаст в
точности строку:

          Мир праху его!

До тех пор, пока этого не случится, символ-якорь удержит триггер от
срабатывания, кто бы там что ни кричал.

Использование в триггерах частевых переменных (о частевых переменных
смотрите главу 4 "Переменные") делает обеспечение безопасности
триггеров намного сложнее. Эти переменные в триггерах используются
также, как в подстановках (о "подстановках" смотрите главу 6) и
алиасах.

Давайте рассмотрим строку-событие:

          Тут 432 монеты.

Мы можем создать триггер, который при возникновении такого события
будет автоматически делить кучку монет среди членов группы:

          #action {Тут %0 монеты.} {разделить %0}

Этот триггер помогает автоматизировать достаточно тривиальную задачу и
одновременно ставит перед игроком проблему -- этот триггер также
сработает на следующую строку-событие:

          Петя сказал: "Тут 4000;quit; монет."

При срабатывании по этому событию созданный выше триггер разделит 4000
монет и выведет вас из игры, а все из-за того, что триггер не привязан
к началу строки. Усовершенствуем этот триггер:

          #action {^Тут %0 монеты.} {разделить %0}

Эта версия сработает, только если строка-событие будет начинаться с
последовательности символов "Тут ".

Проблема может возникнуть даже при использовании символа-якоря "^",
если вы будете использовать его неправильно. Предположим, вы создаете
триггер, благодаря которому вы сможете приследовать кого-либо, когда он
покидает комнату:

          #action {^%0 ушел на %1.} {%1}

Вы можете думать, что раз вы использовали символ "^" перед
строкой-событием, то триггер для вас безопасен. Но это не так. Частевые
переменные %0, %1 и так далее, как уже писалось выше, соответствуют
ЛЮБОЙ последовательности символов между соответствующими частями
строки-оригинала. Положим, от игрового сервера пришла строка-событие:

          Петя сказал: "Мышь ушла на запад".
         ^^----------------^
         |        |__________
         |                  |
        Это начало строки.  |
                            |
                   Этой части строки соответствует %0.
                   Ошибка автора триггера в том, что он
                   считает, что %0 соответствует лишь
                   одному слову.

Как залатать прореху в безопасности триггера для данного случая? Есть
три вещи, которые можно сделать:
1) Отправить все триггеры в мусорное ведро.
2) Переделать триггер так, чтобы в строке-событии первой всегда шла
часть, которая является простым текстом, а не частевой переменной.
3) Воспользоваться для написания триггеров регулярными выражениями,
которые будут описаны позже, в главе 12 "Регулярные выражения".

5.4) Удаление ненужного триггера

КОМАНДА: #unaction
СИНТАКСИС: #unaction {событие}

ПРИМЕР: #unaction {^%0 отдал концы! Мир праху его!}

Теперь, если кто-то отдаст концы, то ваш клиент для игры в MUD
автоматически не выполнит команд, заданных вами при создании этого
триггера. Еще один способ удалить триггер -- нажатием кнопки с белой
коробкой на панели инструментов JMC вызвать диалог, выбрать вкладку
"Actions", выбрать в списке ненужный триггер и нажать на кнопку
"Remove" справа.

6) Подстановки (substitution)
-----------------------------

6.1) Что такое "подстановка" (substitute)

Всем игрокам довольно быстро надоедают некоторые из стандартных
сообщений при игре в MUD. Было бы замечательно, если бы можно было б
настроить игру так, чтобы вместо стандартных сообщений мы видели что-то
более интересное или смешное. Кроме этого, было бы очень удобно как-то
выделять наиболее важные сообщения. Мы уже рассмотрели цветовыделители
(глава 3), которые являются одним из методов выделения. Подстановки --
еще один из таких методов. Также можно комбинировать эти два метода,
чтобы выделить нечто наиболее важное.

6.2) Что такое "заглушка" (gag)

Вдобавок к надоедливым стандартным сообщениям при игре в MUD есть такие
сообщения, которые мы вообще не желаем видеть. Возможность избавиться
от некой бесполезной информации может очень помочь нам сосредоточиться
на действительно насущных задачах в игре. Если вы вспомнили сейчас
подобные случаи, то теперь вы можете "заглушить" этот нежелательный
текст.

6.3) Создание подстановки

КОМАНДА: #substitute
СИНТАКСИС: #substitute {оригинальный текст} {желаемый текст}

ПРИМЕР: #substitute {Мощнейшим ударом %0 заставил вас растянуться на
земле.} {----> %0 <---- СБИЛ ВАС !!!}

Примечание к примеру: несмотря на то, что здесь, в тексте учебника,
часть команды перенесена на следующую строку, вы должны в командной
строке клиента для игры в MUD ввести весь текст команды в одной строке.

Теперь, каждый раз, когда от игрового севера придет сообщение:

          Мощнейшим ударом Мелькор заставил вас растянуться на земле.

Вместо него вы увидите:

          ----> Мелькор <---- СБИЛ ВАС !!!

6.4) Создание заглушки

КОМАНДА: #gag
СИНТАКСИС: #gag {текст, который нужно заглушить}

ПРИМЕР: #gag {Вы не видите ничего необычного.}

Если мы, к примеру, введем команду "scan" (оглядеться) в MUD под
названием "Arctic", то довольно часто будем получать следующее (если
вокруг не видно ничего необычного):

          Вы посмотрели на север:
          Вы не видите ничего необычного.
          Вы посмотрели на восток:
          Вы не видите ничего необычного.
          Вы посмотрели на юг:
          Вы не видите ничего необычного.
          Вы посмотрели на запад:
          Вы не видите ничего необычного.
          Вы посмотрели вверх:
          Вы не видите ничего необычного.
          Вы посмотрели вниз:
          Вы не видите ничего необычного.

Но после создания нашей заглушки (пример выше), когда мы введем команду
"scan", то увидим следующее:

          Вы посмотрели на север:
          Вы посмотрели на восток:
          Вы посмотрели на юг:
          Вы посмотрели на запад:
          Вы посмотрели вверх:
          Вы посмотрели вниз:

6.5) Удаление ненужной подстановки

КОМАНДА: #unsubstitute
СИНТАКСИС: #unsubstitute {строка, на которую была создана подстановка}

ПРИМЕР: #unsubstitute {Мощнейшим ударом %0 заставил вас растянуться на
земле.}

Теперь, когда мы получим от игрового сервера такую строку, мы ее и
увидим, в точно таком же виде, как и до подстановки.

6.6) Удаление ненужной заглушки

КОМАНДА: #ungag
СИНТАКСИС: #ungag {текст, который глушился}

ПРИМЕР: #ungag {Вы не видите ничего необычного.}

Теперь это сообщение снова будет показываться, к примеру, когда вы
введете команду "scan" в MUD под названием "Arctic".

7) Команда #showme
-------------------

7.1) Для чего нужна команда #showme

Команда #showme может быть применена множеством способов. Вы можете
использовать ее, чтобы предупреждать себя о каких-либо событиях; можно
использовать ее для поиска ошибок в ваших скриптах или чтобы показать
себе некое полезное сообщение. Давай прямо сейчас разберемся, как
пользоваться этой командой в простых задачах. К сложным перейдем
позднее.

7.2) Используем команду #showme

КОМАНДА: #showme
СИНТАКСИС: #showme {цвет (необязательно указывать)} {текст сообщения}

ПРИМЕРЫ: #alias {тест} {#showme {ПРИВЕТ, ДРУГ!}}
         #alias {тест} {#showme {green} {ПРИВЕТ, ДРУГ!}}

Оба этих примера синтаксически правильны, но каждый из них имеет свои
плюсы и минусы.

Замечание к примеру: это первый пример, в котором мы комбинируем больше
одного объекта JMC в одном выражении. Это очень простой пример, который
очень хорошо подходит для иллюстрации такого комбинирования.

Теперь, каждый раз, когда мы будем вводить алиас "тест", мы будем
получать сообщение:

          ПРИВЕТ, ДРУГ!

Очевидно, что для команды #showme не существует команды-отмены. В
данном случае, если нам не нужен алиас, созданный в примере, достаточно
удалить этот алиас, как описано в главе 2 этого учебника, после чего и
сообщение "ПРИВЕТ, ДРУГ!" перестанет появляться.

...продолжение следует...

Замечания по учебнику можно высказать в специальной теме форума.

 

Русский !МАД-коннектор
The Russian MUD Connector
mudconnector.su

This site is powered by the TWiki collaboration platform Copyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.