alias harm {cast harm %1}
При вводе harm drunk на сервер будет
отправлена команда cast harm drunk. Или, к
примеру, алиас с двумя параметрами,
предназначенный для ремонта вещей у
кузнеца. Как известно, некоторые вещи могут
надеваться на несколько слотов... К примеру -
легкий щит.
#
alias ремонт {
remove %1
repair %1
wear %1 %2
}
В том случае, если дать команду ремонт
лампа, второй параметр будет пустым, и
на сервер соответственно будут отправлены
команды remove лампа; repair лампа;wear лампа,
однако, в случае команды ремонт щит
спину получим remove щит; repair щит; wear
щит спину. Что предпринять, если
команда remove щит снимает не легкий
щит со спины, а основной, к примеру, щит,
окованный серебром? Если дать команду ремонт
легкий щит спину, то первым параметром
будет легкий, а вторым - щит, и опять
команда будет неправильной. Для того, чтобы
передать в алиас параметр, состоящий больше,
чем из одного слова, необходимо указывать
этот параметр в кавычках: ремонт "легкий
щит" спину.
Многие игроки допускают классическую
ошибку в использовании алиаса, эффект
которой, так нелюбимый Аспером, выражается
в наличии пробела перед фразой при
расцветке каналов. Вот пример ошибочного
алиаса, в котором производится попытка
раскрасить канал OOC в красный цвет.
#
alias мечтать {ooc &R}
Посмотрим, что происходит, когда игрок
дает команду мечтать о тике. MUD-клиент
находит в начале команды алиас мечтать,
разворачивает его (заменяет на ooc &R),
и продолжает проверять строку... остаток - ' о
тике' остается неизменным. Обратите
внимание, что перед буквой 'о' в фразе есть
пробел, и между командой MUD ooc и
цветом &R также есть пробел. Отсюда
и получается лишний пробел ooc &R о тике.
Правильным вариантом будет такой.
#
alias мечтать {ooc &R%1}
Таким образом, про вводе мечтать о тике
первым параметром будет буква 'о', а пробел
между именем алиаса и первым параметром не
будет отправлен ooc &Rо тике. Правда,
при таком раскладе, сколько бы пробелов ни
поставить перед буквой 'о', их все равно не
будет в начале строки. Еще один минус такого
подхода - после ваших высказываний в канале
цвет следующей строки, полученной всеми
игроками, останется красным, что,
согласитесь, не может не злить. Попытка
решения, обрамляющая единственный параметр
цветами, выглядит простой в реализации, но
весьма сложной при использовании.
#
alias мечтать {ooc &R%1&w}
Дело в том, что при использовании такого
алиаса придется всю фразу заключать в
кавычки, иначе красным цветом выделится
только первое слово. Естественно, что
передать кавычки в этой фразе будет еще
труднее - для этого придется каждую кавычку предварять
знаком тильды: мечтать "о слове
~"в кавычках~"". Однако, даже эта
проблема отлично обходима, но об этом позже,
в рассказе про триггеры.
Ветвления по условию.
Замечательное свойство алиаса -
возможность выполнять разные действия в
зависимости от значений параметров или
других внешних условий. Для ветвления
выполнения используется конструкция #if.
#
if (<
условие>) {<
действия_истина>} [{<
действия_ложь>}]
Условие - это любая логическая
величина. Знакомые с языком C тут же
увидят родную конструкцию. Для остальных
поясню. Условие считается истинным, если
значение, вычисленное в качестве условия
является непустым или не равно нулю. То есть,
это может быть либо значение параметра
алиаса или переменной, результат
вычисления встроенной функции или логического
оператора. Логические операторы в Tintin,
как и в C, возвращают числовое значение. Если
оператор выполняется, значение отлично от
нуля, если же нет - это ноль. Набор команд действия_истина
будет выполнен в том случае, если условие
истинно, необязательный набор команд действие_ложь
будет выполнен только тогда, когда
условие считается ложным. В случае, если
условие не выполнено, а набор команд действие_ложь
опущен, не будет выполнено никаких команд.
В zMUD есть следующие логические операторы (большинство
из которых работает и в других МАД-клиентах).
a=b - параметр а равен параметру b
a!=b - параметр a не равен параметру b
a<>b - параметр a не равен параметру b (только zMUD)
a<b - параметр a меньше параметра b
a<=b - параметр a меньше или равен параметру b
a>b - параметр a больше параметра b
a>=b - параметр a больше или равен параметра b
a=~b - строковый параметр a удовлетворяет строковой маске b (см.
триггеры)
!a - не a, истина, если a не выполняется, ложь, если a выполняется
#
alias пздр {
#
if ((%
begins(%1,'Альба'))
or (%
begins(%1,'Имри'))) {
chat Орки все равно победят, фиг тебе, %1!
} {
#
if ((%
begins(%1,'Загр'))
or (%
begins(%1,'Гродер'))) {
chat Орки, Хой! Давай, %1!
} {
chat Gratz, %1
}
}
}
Теперь достаточно набрать пздр Имя,
и получим соответствующее сообщение. Здесь
для сравнения строковых параметров
используется встроенная функция zMUD %begins(a,b),
которая возвращает истину только в том
случае, если строка a начинается с подстроки
b.
Циклическое повторение действия.
В алиасах zMUD (не уверена насчет
классического Tintin) есть возможность
повторить одно и то же действие несколько
раз.
loop [<
нижний_предел>,]<
верхний_предел> {<
действия>}
Необязательный числовой параметр нижний_предел
определяет, с какого значения начнется
выполнение цикла. Числовой параметр верхний_предел
- до какого значения он будет выполняться. В
случае, если нижний_предел опущен, цикл
будет выполняться с нуля. Цикл прекращается,
как только значение переменной цикла
превосходит верхний предел. Для того, чтобы
определить, на какой итерации находится
цикл, необходимо воспользоваться
встроенной переменной zMUD %i. Простой
пример иллюстрирует, как взять все книги из
нескольких трупов, валяющихся в комнате (параметром
алиасу необходимо указать количество тел в
комнате).
alias взятькнигиструпов {
#
loop 1,%1 {
get book %{i}.corpse
// Переменная i в фигурных скобках, поскольку это связано с особенностями работы zMUD.
// В случае, если %i является параметром функции или другого алиаса, а не нумератором
// объекта в Арде, фигурные скобки можно опустить.
}
}
взятькнигиструпов 5
get book 1.corpse
get book 2.corpse
get book 3.corpse
get book 4.corpse
get book 5.corpse
Не рекомендуется применять вложенные
алиасы с циклами.
Основные преимущества работы с
повторениями в алиасах будут понятны тогда,
когда мы будем обсуждать списковые
переменные zMUD.
Ну и теперь несколько общих рекомендаций.
- Называйте ваши алиасы так, чтобы легко
было понять, какие функции выполняет
алиас, особенно если он вызывается только
из других алиасов, а не из командной
строки. Длинное имя алиаса в командной
строке можно дописывать по TAB AUTOCOMPLETE (об
этом позже).
- Помните, что алиасы можно назначать
горячим клавишам, обработчику таймера, а
также употреблять в других алиасах и
телах триггеров.
- Группируйте ваши алиасы по смыслу в классы
zMUD.
- Избегайте повторяющихся имен алиасов в
разных классах - отследить такую
ошибку очень трудно.
- Не создавайте слишком длинных тел
алиасов - с ними трудно работать.
Отдавайте предпочтение вызову одних
алиасов из других с передачей параметров.