|
Клиенты для игры Все что связано с клиентами для игры. Jmc, MMC, ZMud etc... |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]()
Срабатывает триггерт на строку, и печатает сообщение через echo(). Так вот сообщения всегда выводятся ДО строки, на которую сработал триггер. А можно ли как-то умудриться напечатать их после?
|
![]() |
![]() |
![]() |
#2 |
Старший Мадер
![]() Регистрация: 06.03.2004
Адрес: Москва
Сообщений: 239
|
![]()
Насколько мне известно, есть два способа:
1) Обрабатывать в триггере raw-текст строки, вызвавшей срабатывание триггера и находящийся в переменных $_ и $; и менять этот текст, добавляя после свой. Документация http://mmc.mud.ru/mmc.txt, описание MMC API, функция trig. 2) Возможно более простой - при срабатывании триггера создавать ещё один триггер на любую строку (^.*$), который выведет необходимый текст а затем удалится. Возможная проблема - задержка вывода текста до получения следующей строки (без "реж сж" почти невозможно, в "реж сж" вполне возможно). Также вопрос производительности, если таких систем будет довольно много - может начать тормозить. От вопросов производительности, кстати, не надо отмахиваться - я видел конфиг, который начинал тормозить на спаме из принца (какой там спам - фигня одна), не говоря уже о каких-нибудь рипеях (1,2,3). |
![]() |
![]() |
![]() |
#3 |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]()
не выходит. не дает писать на другой строке. =(
рисует квадратики вместо каретки и все. |
![]() |
![]() |
![]() |
#4 |
Отличник форума
![]() Регистрация: 24.08.2004
Сообщений: 1,026
|
![]()
почему у меня такое чувство что глубоко законспирированный раххаль все таки поигрывает в мад))
__________________
а тоже точно зарегился)) |
![]() |
![]() |
![]() |
#5 |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]()
не. я не он.
|
![]() |
![]() |
![]() |
#6 | |
Знакомый Мадера
![]() Регистрация: 03.12.2004
Сообщений: 82
|
![]()
Развивая тему $_
Код:
P::trig { $buf = $_; $: = ''; P::echo "\003I".$buf; P::echo "Итить-колотить моя строка!"; } '^Вы улыбнулись.$'; Код:
P::trig { P::timeout { P::echo("тыщ-пыщ"); } 1, 1; } '^Вы улыбнулись.$'; Цитата:
|
|
![]() |
![]() |
![]() |
#7 | |
Знакомый Мадера
![]() Регистрация: 09.11.2006
Сообщений: 54
|
![]() Цитата:
Код:
P::trig { $: = ''; P::echo CL::unparse_colors($;); P::echo "Итить колотить твоя строка!"; } '^Вы улыбнулись\.$'; |
|
![]() |
![]() |
![]() |
#8 |
Знакомый Мадера
![]() Регистрация: 03.12.2004
Сообщений: 82
|
![]()
ну, во-первых, после $: = '' будет '' и в $; и в $_, но это не суть)
по сути - спасибо) ништяк) Последний раз редактировалось zallexx; 23.05.2008 в 16:45. |
![]() |
![]() |
![]() |
#9 |
Знакомый Мадера
![]() Регистрация: 03.12.2004
Сообщений: 82
|
![]()
2 diver:
Самый имхо нормальный вариант в итоге: Код:
P::trig { P::echo CL::unparse_colors($;); P::echo "Итить-колотить моя строка!"; } '^Вы улыбнулись\.$', 'g'; |
![]() |
![]() |
![]() |
#10 |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]() |
![]() |
![]() |
![]() |
#11 | |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]() Цитата:
'-' - disable - запретить применение этого триггера (по умолчанию все триггеры создаются активными) 'g' - gag - клиент не должен печатать совпавшую строку 'm' - multiple - ищутся все вхождения <regexp> в строке, а не только первое <число> - priority - приоритет, определяющий порядок применения триггеров. Триггеры применяются в порядке уменьшения приоритетов. По умолчанию у всех триггеров приоритет равен 1000. 's'|'n' - save|nosave - сохранять ли триггер в файл конфигурации при выходе 'f' - fall-through - обычно клиент прекращает поиск триггеров, после первого совпадения. Если необходимо применять другие триггеры после этого, при его определении необходимо указать флаг 'f'. 'x<число>' - максимальное число срабатываний, после которого триггер автоматически отключатся, по умолчанию не ограничено, счетчик сбрасывается по команде /enable Пример простого триггера: action {^You are hungry\.$} {get bread $container;eat bread} 1000gs:CORE пользуюсь я этим так: Код:
P::trig { if (CheckLore ("$1") > 0) { Lenor::debug ("Предмет -$1- уже известен."); } else { Lenor::debug ("Новый предмет -$1-."); $strItemName = "$1"; P::enable ("ITEMDESCRIPTION"); }; } '^Предмет "(.+)", тип : (\S+)', f1; P::trig { P::disable ("ITEMDESCRIPTION"); Lenor::debug ("Добавляем новый предмет -$strItemName-."); AddToShortLore ($strItemName . "," . $AC . $strItemDesc . $Mat); } '^$', 'f1:ITEMDESCRIPTION'; P::trig {$AC .= "$1/";} '^защита \\(AC\\) : (\d+)', 'f1:ITEMDESCRIPTION'; и так далее доку к ммц от автора можно взять тут: http://mmc.mud.ru/mmc.txt и тут: Последний раз редактировалось diver; 24.05.2008 в 19:08. |
|
![]() |
![]() |
![]() |
#12 |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]() |
![]() |
![]() |
![]() |
#13 |
Знакомый Мадера
![]() Регистрация: 09.11.2006
Сообщений: 54
|
![]()
Я тут подумал - $:=''; убивает дальнейшие триги, которые могут хотеть сработать на эту строчку.
Короче, вот что работает (проверил) : Код:
my $str=""; P::trig { return if not $str; P::echo $str; $str = ''; } '^.*$', 'f1000'; P::trig { $str = "YO! Работает!!!"; } '^Вы улыбнулись\.', 'f1000'; |
![]() |
![]() |
![]() |
#14 |
Новичок
Регистрация: 10.07.2004
Сообщений: 40
|
![]()
Тролль
опробовал. круто. хотят тут есть один косячек на мой взгляд, тем не менее в маде работает великолепно. перешел на эту систему =) только изменил под свои нужды. Код:
our $strAfterTrig=""; P::trig { return if not $strAfterTrig; P::echo $strAfterTrig; P::disable ("PRINTAFTERTRIG"); $strAfterTrig = ''; } '^.*$', 'f10100:PRINTAFTERTRIG'; sub PrintAfter($) { $strAfterTrig = $strAfterTrig . shift; P::enable ("PRINTAFTERTRIG"); }; Последний раз редактировалось diver; 25.05.2008 в 18:33. |
![]() |
![]() |