Difference: JmcTutorial (4 vs. 5)

Revision 52009-10-25 - Dr_046Lance

Line: 1 to 1
 
META TOPICPARENT name="ClientList"
Источник оригинала на английском языке:
http://mudlogs.foghaven.net/mudlogs.php?article=jmctutorial
Оригинальное название: "JMC Tutorial - Version 1.0"
Авторы оригинального текста: Derek и Jasper

Changed:
<
<
Перевод: Dr.Lance, 16.06.2009 г., 20.06.2009 г., 25.06.2009 г., 29.06.2009 г.
>
>
Перевод: Dr.Lance, 16.06.2009 г.-29.06.2009 г., 25.10.2009 г.
  [Оригинальный текст учебника изложен моноширинным шрифтом без иллюстраций. Возможно, это сделано для того, чтобы
Line: 83 to 83
  7.1) Для чего нужна команда #showme 7.2) Используем команду #showme
Changed:
<
<
8) Связываем изученное воедино 8.1) Алиасы с переменными 8.2) Алиасы, которые вызывают запуск команд

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

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

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

  10) Ведение логов 10.1) Для чего нужно вести логи
Line: 819 to 819
 данном случае, если нам не нужен алиас, созданный в примере, достаточно удалить этот алиас, как описано в главе 2 этого учебника, после чего и сообщение "ПРИВЕТ, ДРУГ!" перестанет появляться.
Added:
>
>
8) Связываем изученное воедино
8.1) Алиасы с переменными

На данный момент мы изучили основные объекты JMC. Теперь будет полезно узнать, как использовать эти объекты совместно друг с другом. Давайте рассмотрим несколько простейших примеров, как это можно делать; более сложные примеры рассмотрим позднее.

Итак, переменные бывают очень полезны, но какой же это гемор -- вводить каждый раз что-то вроде:

#variable {оружие} {меч}

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

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

#alias {усторужие %0} {#variable {оружие} {%%0}; #showme {green} {Теперь оружие установлено в $оружие}}

Примечание к примеру: несмотря на то, что здесь, в тексте учебника, вторая часть команды перенесена на другую строку, вы должны вводить эту команду в одну строку, без переносов. Также приглядитесь к символу ";". Как уже упоминалось в главе 4, он называется разделителем команд. Он используется для того, чтобы можно было разместить несколько команд в одной строке, а также разделитель команд действует как заменитель перевода каретки (клавиша Enter). Для чего здесь нужна команда #showme? Она используется для информирования пользователя об изменении переменной "оружие", то есть для отладки нашего примера (о возможности использования #showme при отладке говорилось в главе 7). Если сообщение команды #showme не появится, мы поймем -- что-то пошло не так, значит нужно проверить синтаксис команды.

Также обратите внимание на конструкцию "%%0". Дополнительный символ процента "%" сложно объяснить. Для начинающих: число символов процента "%" определяется в зависимости от того, к переменной какого уровня мы хотим обратиться. Поясню на примере.

Одна из второстепенных команд, доступных в JMC -- #loop, которая реализует в JMC циклы (ранее мы ее не обсуждали).

КОМАНДА: #loop СИНТАКСИС: #loop {А,Б} {%0.что-нибудь}

Первые скобки содержат список из двух чисел -- А и Б. Вторые скобки содержат какой-нибудь текст для передачи на игровой сервер с использованием частевой переменной %0. Команда #loop запускает цикл с количеством итераций Б. Счетчик тикает по единичке от А до Б. Текущее значение счетчика содержится в частевой переменной %0.

ПРИМЕР:

#loop {1,4} {взять все %0.труп}

В результате на игровой сервер будут посланы команды:

взять все 1.труп взять все 2.труп взять все 3.труп взять все 4.труп

Теперь, когда мы умеем пользоваться командой #loop, давайте предположим, что мы хотим сделать цикл из примера более гибким, так, чтобы он мог срабатывать на любом контейнере (вспомните алиас "вв" из главы 4.2). Для этого скомбинируем в одной команде алиас и цикл:

#alias {вв %0} {#loop {1,4} {взять все %0.%%0}}

Команда #loop помещена внутрь команды #alias (то есть в этой сложной команде есть два уровня -- внутренний (или "нижний") уровень команды #loop и внешний (или "верхний") уровень команды #alias). Теоретически уровней может быть и больше двух. На каждом уровне частевая переменная %0 содержит разные значения: на верхнем -- название контейнера, на нижнем -- текущее значение счетчика. Поэтому, чтобы JMC смог различить значение частевой переменной %0 верхнего и нижнего уровней, мы ставим разное количество символов процента "%". Чем больше символов процента "%", тем на более высокого уровня частевую переменную мы ссылаемся.

Теперь введем, к примеру:

вв сундук

Тогда на игровой сервер уйдет следующее:

взять все 1.сундук взять все 2.сундук взять все 3.сундук взять все 4.сундук

Если вы только начали осваивать премудрости игры в многопользовательских мирах, то все эти объяснения могут вам показаться заковыристыми. Не опускайте руки, пройдет немного времени и вы поймете, что все это не так уж и сложно. 8.2) Алиасы, которые вызывают запуск команд

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

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

#alias {ограблениевкл} {#action {%0 умер! Мир праху его.} {взять все.монеты труп}}

#alias {ограблениевыкл} {#unaction {%0 умер! Мир праху его.}}

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

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

ПРИМЕР:

#alias {ограблениевкл} {{#action {%0 умер! Мир праху его.} {взять все.монеты труп}; #action {^Кучка стальных монет.} {взять все.монеты}}

#alias {ограблениевыкл} {#unaction {%0 умер! Мир праху его.}; #unaction {^Кучка стальных монет.}}

Приведенные здесь примеры очень просты, но, уловив их суть, вы сможете создавать более сложные скрипты, например, для PK (Player's Kill -- охота на персонажей других игроков и их убийство и (или) грабеж). В начале главы вы хотели иметь некий инструмент, с помощью которого в определенный момент вы бы смогли очень быстро создавать ряд неких триггеров и также быстро их выключать. Включающие-выключающие алиасы -- это именно то, что вам требуется. 9) Дополнительные функции JMC


9.1) Дополнительное окно для вывода информации (output window)

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

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

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

ПРИМЕР: #output {green} {БУУ!}

Введите команду из примера. Вы увидите, что в дополнительном окне появилась зеленая надпись "БУУ!". Если у вас создана переменная $оружие, которая содержит название оружия, которым вы вооружены, и вы хотите вывести сообщение об этом оружии в дополнительное окно, то можно ввести следующую команду:

#output (red) (ГЛАВНОЕ ОРУЖИЕ: $оружие)

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

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

#action {%0 сказал вам '%1} {#output {white} {%0 сказал вам '%1}}

"Но здесь же опечатка?!" - скажете вы. Нет. Вы можете спросить: "А почему бы не сделать так?":

#action {%0 сказал вам '%1'} {#output {white} {%0 сказал вам '%1'}} ^ | На самом деле, эта заключающая кавычка вызовет проблему. Частевая переменная %1 в этом случае будет соответствовать куску текста ДО заключающей кавычки, а текст после нее не будет учтен. Например, кто-то прислал вам сообщение:

Лорд Сот сказал вам: 'Впереди - 'Логово дракона'. Лучше пошли на восток.'

Вот, что будет выведено в дополнительное окно, если в команде использована заключающая кавычка:

Лорд Сот сказал вам: 'Впереди - '

Без заключающей кавычки, как мы сделали сначала, частевая переменная %1 будет соответствовать всему сообщению, несмотря на возможные вложенные кавычки, и сообщение будет полностью выведено в дополнительное окно.

Таким образом, в дополнительное окно можно отфильтровывать статистику группы, сообщения согруппников, вопли, крики и т.п., то есть все, что вы пожелаете. Дополнительное окно -- это что-то вроде фокуса, в котором вы выделяете для себя главное из потока разнообразного текста, бегущего в главном окне. 9.3) Используем ячейки панели состояния

Для начала выясним, что такое ячейки панели состояния и где они находятся.

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

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

КОМАНДА: #status СИНТАКСИС: #status {номер ячейки: 1,2,3} {сообщение} {цвет (необязательно указывать)}

ПРИМЕР: #status {1} {БУУ!} {green}

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

#action {^Вы возложили ваши руки на %0 и произнесли молитву.} {#status {1} {ВОЗЛОЖИТЬ: ИСТРАЧЕНО} {yellow}}

#action {^Вы почувствовали, что в ваши руки возвратилась сила, позволяющая вам исцелять.} {#status {1} {ВОЗЛОЖИТЬ: ВОССТАНОВЛЕНО} {green}}

Давайте рассмотрим действие этих команд подробнее. Очевидно, что когда паладин только что использовал свое умение "Возложить", он не может сразу же использовать его еще раз. Приходится ждать определенное количество тиков перед тем, как паладин снова сможет использовать это свое умение. Как только сила для умения восстановится, игра выдаст указанное в триггере сообщение. Вероятно, здесь вы подумали: "Хорошо, если я получу сообщение, зачем мне нужно еще одно сообщение в ячейке состояния?". К примеру, если вы находитесь в середине яростного сражения и получите это сообщение, то очень легко можете его пропустить. Либо вы можете его просто забыть. Сообщение в ячейке состояния послужит вам напоминанием и в какой-то момент поможет сохранить кому-нибудь жизнь. 9.4) Используем звук как предупреждающий сигнал

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

КОМАНДА: #bell СИНТАКСИС: #bell ПРИМЕР: #action {^Мощнейшим ударом %0 заставил вас растянуться на земле.} {#bell}

Думаю, всем понятно, как это работает. Если нашего персонажа сбили, мы получим звуковой сигнал, если, конечно, наш компьютер оборудован звуковой системой.

  ...продолжение следует...
 
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.