Пример 3 (квест кладбища в первой родовой): #14500 раскопатьлаз~ 2 c 0 раскопать разгрести расширить~ *тип триггера wld_command if !%arg.contains(лаз)% *если аргумент команды не содержит слово "лаз" возвращаем значение 1 - команда обработана *таким образом движок при введении команды не ответит вообще ничего - что воспринимается *как подсказка - команда введена правильно, но необходим еще какой-то аргумент. return 1 halt *..и завершаем триггер end *если команда и аргумент введены верно *выдаем сообщения: wait 1 wsend %actor% Вы начали расширять лаз. wechoaround %actor% %actor.name% попытал%actor.u% расширить лаз. wait 2s wecho Земля с шумом обвалилась, открыв старый проход... *и создаем простой, не имеющий двери, нескрытый проход из комнаты 14510 вниз, в комнату *14522, wdoor 14510 down flags a wdoor 14510 down room 14522 * :а из комнаты 14522 в комнату вверх в комнату 14510 wdoor 14522 up flags a wdoor 14522 up room 14510 *и отключаем триггер 14500 от себя detach 14500 %self.id% ~ #14501 убитадуша~ 0 f 100 ~ *тип триггера mob_death - подключен к душе супостата *подключаем триггер 14502 к комнате 14525 calcuid qroom 14525 room attach 14502 %qroom.id% mecho Душа со сдавленным стоном растворилась в пустоте... ~ #14502 оплатаквеста~ 2 c 0 воткнуть вонзить~ calcuid corpse 14500 obj *проверяем, существует ли в мире объект 14500 - костяк, и содержит ли аргумент слово "меч" if !%corpse% || !%arg.contains(меч)% *если нет - завершаем триггер return 1 halt end *проверяем, вооружен ли введший команду объектом 14507 - "старый меч" *если нет - завершаем триггер calcuid gladius 14507 obj if %actor.eq(16)% != %gladius% return 1 halt end *если все верно - выдаем сообщения: wait 1 wsend %actor% Вы воткнули старинный меч в полуразвалившийся костяк... wechoaround %actor% %actor.name% воткнул%actor.g% старинный меч в полуразвалившийся костяк... wecho Меч вспыхнул ярким пламенем и костяк исчез... *уничтожаем костяк wpurge %corpse% *и уничтожаем меч wpurge %gladius% *проверяем - если квестор-волхв, то загружаем руну, отключаем от комнаты триггер и завершаем *его. Теоретически, после команды detach текущего триггера нет необходимости использовать *еще и команду wait, end etc. Однако их отсутствие является дурным тоном. if (%actor.class% == 13) if (%world.curobjs(230)% < 50 && %random.2%==2) wecho На этом месте осталась лишь древняя руна... wload obj 230 detach 14502 %self.id% halt end end *если квестор не волхв - запускаем оператор выбора по случайному числу от 1 до 6 switch %random.6% case 1 if (%world.gameobs(14501)% < 10) wecho На этом месте остался лишь потрескавший от времени щит... wload obj 14501 end break case 2 if (%world.gameobs(14502)% < 10) wecho На этом месте осталось лишь почерневшее от времени лезвие... wload obj 14502 end break case 3 if (%world.curobjs(14503)% < 15) wecho На этом месте осталось лишь темное колечко... wload obj 14503 end break case 4 if (%world.curobjs(14504)% < 15) wecho На этом месте осталась лишь обугленная кость... wload obj 14504 end break case 5 if (%world.curobjs(14505)% < 15) wecho На этом месте осталась лишь погнутая железная пластина... wload obj 14505 end break case 6 if (%world.curobjs(230)% < 50) wecho На этом месте осталась лишь древняя руна... wload obj 230 end break done * в каждом случае при выпадении какого-либо варианта проверяется количество объектов в мире, *и если таких объектов меньше указанного количества - он загружается. *если же такие объекты в замаксе - квестор не получит вообще ничего. *отключаем триггер 14502 от текущей комнаты detach 14502 %self.id% ~ #14503 исчезновениедуши~ 2 z 0 ~ return 1 *хмммм судя по всему - неиспользуемый триггер :) calcuid spirit 14500 mob wpurge %spirit% ~ #14504 приветствие~ 0 q 100 ~ *приветствие у священника - триггер mob_PC_enter wait 1 *проверяем, есть ли на руках у священника "старинный меч" м- если есть удаляем. *такое может случится, если кто-то сказал ключевую фразу, а потом, к примеру, выскочил *из комнаты. if %self.haveobj(14507)% mpurge старинный end *а вот пример логической ошибки: меч уничтожается при выходе из зоны, а также в начале этого *триггера, если он на руках у моба-священника. Выдается же он при взятии квеста, в момент *которого триггер 14504 (тот, что мы сейчас рассматриваем) будет отключен. Таким образом, *ситуация, когда квест не взят, а меч находится на руках невозможна - потому что зона *перезагружается лишь при выходе из нее игроков. Тем не менее она предусмотрена, и *обрабатывается в следующем операторе: Впрочем, никакого вреда, кроме нескольких лишних *байт в файле триггеров, от этого нет. *если меч у кого-то на руках - приветствуем игрока и завершаем триггер if (%exist.obj(14507)% == 1) msend %actor% Старик осенил Вас размашистым крестом. halt end *если квест не взят и меча на руках нет - приветствуем и просим помощи. msend %actor% - Здраве буде, %actor.name%, да будет твой путь по земле долгим. msend %actor% Священник наклонил голову, приветствуя Вас. wait 2s msend %actor% - Вот что скажу я тебе - все беды от грехов наших тяжких. msend %actor% - Ведь как бывает - грешат деды, а к ответу и внуков призовут. msend %actor% Старик что-то прошептал про себя. wait 2s msend %actor% - Был грех, был, все мы человеки, слаба плоть, не устоит перед искусом. msend %actor% - А все гордыня наша, губит она нас, в объятья Сатаны гонит. msend %actor% Старик перекрестился. wait 2s msend %actor% - Да видно не интересно тебе это, молод%actor.g% ты еще, msend %actor% - рано тебе грехи вспоминать давние. msend %actor% Старик замолк. ~ #14505 выдачаквеста~ 0 d 1 слушаю продолжай~ *выдаем квест - тип триггера mob_speech *если сказавший фразу - моб, завершаем триггер if %actor.vnum% != -1 halt end wait 1 *выдаем квест msend %actor% - Было это давно, городища почитай не было. msend %actor% Глаза старика заблестели. msend %actor% - Пришел ворог, много его было, все поле чернело, как после пахоты. msend %actor% - Сеча была лютая, до самой ночи бились, да и при луне еще добивались. msend %actor% - Много наших легло, ой много. msend %actor% Старик смахнул слезу со щеки. wait 2s msend %actor% - Насыпали курган, да ты его видал%actor.g% небось, на горе, где кладбище. msend %actor% - Там и покоятся защитники, в битве порушенные. wait 2s msend %actor% - Да вот только не всех предали земле, не всех. Самого главного, что msend %actor% - у супостата навроде князя был, положили в колоде осиновой под курганом, msend %actor% - чтобы не нашла его душа его дороги к своим идолищам. msend %actor% - Не по божески это, ой не по божески. msend %actor% Старик осенил себя размашистым крестом. wait 1s msend %actor% - Вот и выходит его душа ночами, прибежища ищет. msend %actor% - Упокоить душу можно только вот этим мечом. msend %actor% (старик достал из-за божицы проржавевшее лезвие) msend %actor% - Просто воткни его в костяк, душа сама путь найдет. msend %actor% - Только лаз сперва раскопай, чтобы к колоде пройти. *загружаем объект 14707 и даем его игроку: *тут следует учитывать различные обстоятельства - видит ли моб невидимых, и т.д. mload obj 14507 дать старинный.меч %actor.name% *колдуем "защиту от тьмы" на квестора dg_cast 'защита от тьмы' %actor.name% *отключаем триггер-приветствие и триггер выдачи квеста от себя detach 14504 %self.id% detach 14505 %self.id% ~ #14510 обновлениепеременных~ 2 f 100 0~ *рестор квеста - уничтожаем все созданные проходы и подключаем триггер к могиле. wdoor 14510 down purge wdoor 14522 up purge calcuid qroom 14510 room attach 14500 %qroom.id% detach 14502 %self.id% ~