В этой главе излагаются основы написания триггеров.
Шаг за шагом, мы покажем последовательность действий и основные вопросы на которые надо ответить, чтобы
написать триггер.
Решите что Ваш триггер должен делать.
Первое, определите как моб, предмет или комната должны себя вести. Сделав это до того как начать
думать что может быть реализовано а что нет, не даст Вам ограничить себя тем что, как Вы видели, делают
другие триггера. И в результате позволит Вам сделать более интересными триггера.
Например, Вы хотите сделать стражу в небольшом городе. Правитель этого города решил взимать плату за
прохождение городских ворот со всех путников посещающих его территорию. Страж у ворот должен соответственно
приветствовать путников, собтрать с них деньги за вход, пропускать тех кто заплатил пошлину в город, и
закрывать за ними ворота. Это будет триггер моба.
Решите какой тип триггера Вам для этого необходим.
Просмотрите раздел Триггера и найдите необходимый Вам тип.
Если такого нет в списке - возможно Имплементор МАДа добавит новый тип.
Наш стражник должен реагировать на пять различных событий:
Игрок пришедший с севера, куда уходит дорога из города, должен проинформировать пришедшего о цене за вход.
Это будет greet триггер.
Когда стражнику дадут 10 монет, он должен открыть ворота и сообщит заплатившему что он может проходить.
Это будет сделано bribe триггером.
Если стражу дали меньше десяти монет, он должен сообщить игроку что этого недостаточно. Это можно сделать
в том же bribe триггере.
Когда кто-то прошел через ворота в город, стражник должен закрыть за ним ворота.
Это будет сделано act триггером.
Когда ворота открываются с другой стороны, страж должен закрыть их через некоторое время, чтобы дать
желающим выйти из города. Это будет еще один act триггер.
Определите аргумент и числовой аргумент для Ваших триггеров.
Прочитайте описание триггера в разделе Триггера
и определите какие значения должны быть у аргументов, чтобы Ваши триггера реагировали на нужные события.
Аргумент для greet триггера не используется. Числовой аргумент -
это вероятность того что триггер будет запущен когда произойдет нужное событие. Так как Вам нужно чтобы
стражник приветствовал каждого в комнату, числовой аргумент должен быть равен 100.
Аргумент для bribe триггера не используется. Числовой аргумент -
это минимальная сумма денег которую должны дать стражу чтобы он открыл ворота. В нашем случае это 10 монет,
значит числовой аргумент равен 10.
Для этого bribe триггера, так как страж должен сообщить что
денег для прохода в город недостаточно, числовой аргумент будет равен 1.
Аргумент для act триггера это текст на который должен среагировать страж.
Так как Вы хотите чтобы страж реагировал на то, что кто-то ушел на юг, аргумент будет
ушел на юг. Так как аргумент это фраза, то числовой аргумент равен 0.
Аргумент для этого act триггера будет
Ворота открылись с другой стороны, поэтому триггер будет срабатывать
всякий раз когда кто-либо будет открывать ворота изнутри. И снова, числовой аргумент равен 0 для фразы.
Напишите список команд которые должны быть выполнены триггеров.
Это самая сложная и долгая часть при написании триггера. Список команд которые Вы можете использовать
в триггерах описан в разделе Команды.
Переменные и выражения,
которые тоже используются в списке команд, описаны в соответствующих разделах.
Для greet триггера, Вы хотите чтобы страж информировал каждого
кто входит в комнату с севера что вход в город платный. Вы должны проверить пришел ли игрок с севера, и если это так
страж должен сказать игроку стоимость входа в город. Список команд в данном случае будет следующим:
if (%direction% == north)
wait 1
emote встал по стойке смирно при Вашем появлении.
wait 1
say Сбор со всех посетителей города 10 монет.
end
Посмотрев на список команд greet триггера, мы видим что переменная
"direction" установлена в значение направления с которого
игрок пришел. Знак процента перед и после direction означает что
это переменная. Два знака равенства сравнивают значение переменной со значением
"north". Если они равны, команды между этой строкой и
строкой "end" будут выполнены. Команда
"wait 1" ждет некоторое время пока игрок закончит свое движение.
(greet триггер в действительности проверяется перед тем как игрок
входит в комнату, поэтому без этой команды игрок не увидит как страж встанет по стойке смирно.)
После следующей небольшой паузы страж сообщает стоимость прохода в город.
Страж должен открыть ворота если игрок дал ему 10 или больше монет. Список команд будет таким:
wait 1
отпереть ворота
открыть ворота
wait 20 s
закрыть ворота
запереть ворота
Через небольшой промежуток времени страж отопрет ворота и откроет их.
Через 20 секунд страж закроет и запрет ворота, даже если никто не пройдет через ворота.
Страж должен проинформировать игрока, что плата была недостаточной и вернуть ему деньги.
Список команд будет таким:
if (%amount% < 10)
wait 1
гов К сожалению этого недостаточно.
дать %amount% монет %actor%
end
В строке "дать %amount% монет %actor%" используются переменные
amount и actor, они обе устанавливаются в момент вызова триггера, и в результате страж
возвращает нужное количество монет нужному игроку.
Для первого act триггера Вы хотите чтобы страж закрывал и запирал
ворота после того как кто-то прошел через ворота в город. Страж должен подождать немного чтобы не хлопнуть створками
ворот по спине прошедшего, и закрыть и запереть ворота. Список команд будет таким:
wait 1
закрыть ворота
запереть ворота
Для последнего act триггера, по которому страж будет закрывать и
запирать ворота в случае если их откроют с другой стороны список команд будет таким:
wait 5
закрыть ворота
запереть ворота
Команда "wait 5" дает тому кто открыл ворота изнутри пройти
через них.
Определите последовательность выполнения триггеров. Триггера выполняются начиная с первого.
Если у Вас есть несколько триггеров одного типа, выполнится только первый из них.
У Вас есть два набора триггеров одного типа, это bribe и
act триггера. Если bribe
триггер с числовым аргументом 1 будет первым, то второй никогда не будет выполнен, так как 10 или больше монет
все равно больше чем одна. В этом случае, чтобы триггера работали правильно, bribe
триггер с числовым аргументом 10 должен быть перед триггером с числовым аргументом равным 1. В случае с
act триггерами, конфликта не будет, так как их аргументы таковы, что
не могут случиться одновременно. Значит последовательность этих триггеров не имеет значения.
Создайте файл триггеров.
Просто используйте редактор триггеров, и он сохранит Ваши триггера в нужном формате.
Подключите триггера в игру.
В редакторе объектов (мобов, предметов или комнат соответственно) пропишите ваши триггера тем
объектам для которых они были написаны.
Это так же можно сделать вручную. Откройте файл объектов (мобов, предметов или комнат соответственно)
в текстовом редакторе. Перед началом описания объекта следующего за тем к которому вы хотите
присоединить триггер вставьте строку
T vnum где vnum - это
номер триггера. Если триггеров принадлежащих этому объекту несколько, то соответственно
вставьте несколько строк.
T vnum1
T vnum2
T vnum3
и тд.
И еще раз, порядок триггеров важен!
Если два триггера могут вызваться одновременно, только первый из них в списке триггеров
соответствующих данному мобу (предмету или комнате) будет активирован.
Протестируйте Ваши триггера.
Посмотрите как триггер работает, и посмотрите как игроки реагируют на него.
Часто после этого Вы сможете внести в них усовершенствования.