Пример 2 (квест главаря разбойников): #4400 приветствие 1~ 0 q0 100 ~ *тип триггера - игрок вошел в комнату *проверка - если не найден моб 4420 (главарь) - прекращаем работу триггера if !(%exist.mob(4420)%) halt end wait 1 *иначе - приветствуем: msend %actor% - Здраве тебе, %actor.name%! msend %actor% - Нечасто бывают у меня здесь гости. msend %actor% Старик тяжело вздохнул. *И, если квест еще не взят, просим помощи (нет переменной %questor44%) if !%questor44% msend %actor% - Но коль уж забрел%actor.g% ты сюда - не откажи в помощи старику. attach 4401 %self.id% end ~ #4401 Выдача самого квеста~ 0 d0 1 конечно помогу слушаю~ *тип триггера - персонаж сказал фразу *проверка - если персонаж-моб или главарь уже убит то прекращаем работу триггера if %actor.vnum% != -1 || !(%exist.mob(4420)%) halt end wait 1 *если квест уже взят (есть переменная questor44 в которой записан указатель на игрока *взявшего квест if %questor44% *проверка по полу игрока взявшего квест - в зависимости от него выдаем сообщения if %questor44sex% == 1 say Я уже просил тут помочь одного молодца, %questor44.tname% кличут, так вот найди его, передай, что нехорошо старых обманывать. wait 1 say Обещал помочь и сгинул, бахвалился, что разбойничков не боится, а иж как, струсил наверно. halt else say Я уже просил тут помочь одну браву девицу, %questor44.tname% кличут, так вот найди ее, передай, что нехорошо старых обманывать. wait 1 say Обещала помочь и сгинула, бахвалилась, что разбойничков не боится, а иж как, струсила наверно. Пусть детей рожает, а не подвиги ратные совершает. halt end end *если квест еще не взят запоминаем игрока в переменной questor44 makeuid questor44 %actor.id% global questor44 msend %actor% - Есть в лесу святое место, там, - старик махнул рукой на север. msend %actor% Предки наши ходили туда поклониться Богам, принести свои дары им. msend %actor% Нет-нет, и теперь ходят. msend %actor% - Но осквернили погост лихие люди, теперь уж и тропинка туда заросла. msend %actor% Разбойничают, честному люду проходу не дают. Душегубы проклятые. msend %actor% Старик разгневанно помахал кулаком... wait 2s msend %actor% - А недавно приходил один, большой такой, одноглазый, совета просил, msend %actor% золото предлагал. Только ведаю я - нечистое это золото, ох, нечистое. msend %actor% Кровь и беды лежат на нем. msend %actor% - Прогнал я его, а он посмотрел так зло, но ничего не сказал, ушел восвояси. msend %actor% - Я уже старик, мне бояться нечего, а вот других - жалко. msend %actor% - Негоже мне вмешиваться в дела мирские, а ты еще молод, да и есть в тебе msend %actor% что-то такое, вижу, что найдешь в себе силы справиться с этим злом. if (%actor.sex% == 1) msend %actor% - Ступай, сынок, очисти святое место от этого недостойного человека... elseif (%actor.sex% == 2) msend %actor% - Ступай, дочка, освободи землю от сей непосильной ноши... elseif msend %actor% - Ступай, принеси мне его труп. end msend %actor% - Старик воздел глаза к небу и что-то прошептал... *кастуем !освящение! на игрока dg_cast 'освящение' %actor.name%! *и подключаем триггер 4402 к себе (self) attach 4402 %self.id% ~ #4402 Оплата квеста~ 0 j0 100 ~ *тип триггера - мобу дали предмет return 0 *помещаем в переменную itemname имя объекта (точнее, его именительный падеж) set itemname %object.iname% msend %actor% Вы показали %self.dname% %itemname%. *если игрок, давший предмет не квестор, или квест еще никто не брал - то выдаем сообщения *бросаем предмет и завершаем триггер if (!%questor44% || !(%questor44.id% == %actor.id%)) msend %actor% - Спасибо, но зачем мне это ? msend Старик ласково улыбнулся. брос %object.name% halt end *если имя предмета не содержит строчку "главаря разбойников" *то выдаем сообщение и завершает триггер if (!%itemname.contains(главаря разбойников)%) msend %actor% - Нет у меня в этом нужды, %actor.name%. msend %actor% Старик беспомощно пожал плечами. halt end return 1 wait 1 *если главаря убил не квестор, или он вообще умер по непонятной причине :) *то ругаем квестора и прекращаем триггер *переменная killer44 создается в триггера "убили главаря" if !%killer44% || !(%killer44.id% == %questor44.id%) msend %actor% - Не к лицу тебе, %actor.name%, присваивать чужие дела ! msend %actor% Старик гневно посмотрел на Вас и топнул ногой. брос %object.name% halt end *И, наконец, если все в порядке - уничтожаем труп и выдаем награду *в зависимости от профессии игрока mpurge труп.глав wait 2s if (%actor.sex% == 1) msend %actor% - Спасибо, сынок, что не отказал в моей просьбе. msend %actor% Старик пожал Вам руку. elseif (%actor.sex% == 2) msend %actor% - Спасибо тебе, дочка, уважила старика. msend %actor% Старик ласково погладил Вас по волосам. else msend %actor% - Спасибо тебе, %actor.name%, помог ты всем своим делом. msend %actor% Старик низко поклонился Вам. end *уничтожаем переменные unset questor44 unset killer44 *определяем профессию игрока и выдаем награду switch %actor.class% case 0 mspellturn %actor.name% освящение set break case 1 mspellturn %actor.name% шаров.молн set break case 2 mskillturn %actor.name% подножка set break case 3 mskillturn %actor.name% богатырский.молот set break case 4 mskillturn %actor.name% отравить set break case 5 mskillturn %actor.name% осторожный.стиль set break case 6 mspellturn %actor.name% длит.молч set break case 7 break mspellturn %actor.name% оцепенение set case 8 mspellturn %actor.name% сеть set break case 9 if %random.2% == 1 mskillturn %actor.name% лидерство set else mskillturn %actor.name% точный.стиль set end break case 10 mskillturn %actor.name% лидерство set break case 11 mskillturn %actor.name% оглушить set break case 12 if %random.3% == 1 mspellturn %actor.name% насыщение set else mskillturn %actor.name% метнуть set end break case 13 if ((%random.2% == 1) && (%world.curobjs(214)% < 50)) mload obj 214 дать рун %actor.name% end break default break done eval rnd %random.100% if %rnd% < 4 mload obj 4413 дать свиток %actor.name% elseif %rnd% < 7 mload obj 4411 дать береста %actor.name% elseif %rnd% < 10 mload obj 4412 дать свиток %actor.name% elseif (%rnd% < 30) && (%world.curobjs(4407)% < 30) mload obj 4407 дать тесак %actor.name% else msend %actor% Старик дал Вам немного денег. %actor.gold(+500)% end detach 4402 %self.id% halt ~ #4403 Убит главарь~ 0 f0 100 0~ *тип триггера - моб убит *если убийца-игрок, создаем переменную killer44, помещаем в нее указатель *на квестора и копируем эту переменную к мобу 4417 (отшельнику) if (%actor.vnum% == -1) makeuid killer44 %actor.id% calcuid questor 4417 mob remote killer44 %questor.id% end return 1 ~ #4404 Обновление переменных~ 2 f0 100 ~ *тип триггера - при перезагрузке зоны *ищем моба-квестора (отшельника) calcuid questor 4417 mob if %questor% *отключаем и подлючаем занвоо триггера attach 4400 %questor.id% detach 4401 %questor.id% detach 4402 %questor.id% detach 4405 %questor.id% *и удаляем с отшельника все глобальные переменные созданные по квесту rdelete questor44 %questor.id% rdelete killer44 %questor.id% end *переменные с главаря не удаляются, потому что переменная killer44 создается в момент смерти *главаря :) так что удалять ее просто не с кого - главарь в зоне после перезагрузке при удачно *выполненном квесте - это уже другой экземпляр моба "главарь разбйников" ~