МПМ Былины - Мир Древней Руси

МПМ Былины - Мир Древней Руси (https://www.bylins.su/vbb/index.php)
-   Клиенты для игры (https://www.bylins.su/vbb/forumdisplay.php?f=52)
-   -   mmc - печать из триггера ПОСЛЕ строки. (https://www.bylins.su/vbb/showthread.php?t=3741)

diver 13.05.2008 03:16

mmc - печать из триггера ПОСЛЕ строки.
 
Срабатывает триггерт на строку, и печатает сообщение через echo(). Так вот сообщения всегда выводятся ДО строки, на которую сработал триггер. А можно ли как-то умудриться напечатать их после?

Раххаль 13.05.2008 07:58

Насколько мне известно, есть два способа:
1) Обрабатывать в триггере raw-текст строки, вызвавшей срабатывание триггера и находящийся в переменных $_ и $; и менять этот текст, добавляя после свой. Документация http://mmc.mud.ru/mmc.txt, описание MMC API, функция trig.
2) Возможно более простой - при срабатывании триггера создавать ещё один триггер на любую строку (^.*$), который выведет необходимый текст а затем удалится. Возможная проблема - задержка вывода текста до получения следующей строки (без "реж сж" почти невозможно, в "реж сж" вполне возможно).
Также вопрос производительности, если таких систем будет довольно много - может начать тормозить. От вопросов производительности, кстати, не надо отмахиваться - я видел конфиг, который начинал тормозить на спаме из принца (какой там спам - фигня одна), не говоря уже о каких-нибудь рипеях (1,2,3).

diver 13.05.2008 17:38

не выходит. не дает писать на другой строке. =(
рисует квадратики вместо каретки и все.

Путей 20.05.2008 22:34

почему у меня такое чувство что глубоко законспирированный раххаль все таки поигрывает в мад))

diver 21.05.2008 02:04

не. я не он.

zallexx 23.05.2008 01:26

Развивая тему $_
Код:

P::trig
{
        $buf = $_;
        $: = '';
        P::echo "\003I".$buf;
        P::echo "Итить-колотить моя строка!";
} '^Вы улыбнулись.$';

- работает, но с цветами надо заморачиваться.
Код:

P::trig
{
        P::timeout
        {
                P::echo("тыщ-пыщ");
        } 1, 1;
} '^Вы улыбнулись.$';

- тоже работает, но там лишние пустые строчки появляются.
Цитата:

Сообщение от Раххаль
создавать ещё один триггер на любую строку (^.*$), который выведет необходимый текст а затем удалится

А как удалить добавленный через P::trig тригер, что-то я не догоняю( И кстати что там за $flags? Может у кого-то завалялся readme.txt где "флаги подробно расписаны"? Буду оч. благодарен если кто объяснит про удаление и эти флаги)

Тролль 23.05.2008 13:01

Цитата:

Сообщение от zallexx (Сообщение 54042)
Развивая тему $_
Код:

P::trig
{
        $buf = $_;
        $: = '';
        P::echo "\003I".$buf;
        P::echo "Итить-колотить моя строка!";
} '^Вы улыбнулись.$';

- работает, но с цветами надо заморачиваться.

Код:

P::trig {
        $: = '';
        P::echo CL::unparse_colors($;);
        P::echo "Итить колотить твоя строка!";
} '^Вы улыбнулись\.$';

сойдёт?

zallexx 23.05.2008 16:31

ну, во-первых, после $: = '' будет '' и в $; и в $_, но это не суть)
по сути - спасибо) ништяк)

zallexx 23.05.2008 17:08

2 diver:
Самый имхо нормальный вариант в итоге:
Код:

P::trig
{
        P::echo CL::unparse_colors($;);
        P::echo "Итить-колотить моя строка!";
} '^Вы улыбнулись\.$', 'g';


diver 24.05.2008 18:53

Цитата:

Сообщение от zallexx (Сообщение 54042)
Развивая тему $_
Код:

P::trig
{
        $buf = $_;
        $: = '';
        P::echo "\003I".$buf;
        P::echo "Итить-колотить моя строка!";
} '^Вы улыбнулись.$';


блин, как я сам не допер! =) прикольно.

diver 24.05.2008 19:02

Вложений: 1
Цитата:

Сообщение от zallexx (Сообщение 54042)
А как удалить добавленный через P::trig тригер, что-то я не догоняю( И кстати что там за $flags? Может у кого-то завалялся readme.txt где "флаги подробно расписаны"? Буду оч. благодарен если кто объяснит про удаление и эти флаги)

Возможные флаги:
'-' - 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:09

Цитата:

Сообщение от Тролль (Сообщение 54043)
Код:

P::trig {
        $: = '';
        P::echo CL::unparse_colors($;);
        P::echo "Итить колотить твоя строка!";
} '^Вы улыбнулись\.$';

сойдёт?

самое то что доктор прописал =)

Тролль 25.05.2008 12:14

Я тут подумал - $:=''; убивает дальнейшие триги, которые могут хотеть сработать на эту строчку.

Короче, вот что работает (проверил) :
Код:

my $str="";

P::trig {
        return if not $str;
        P::echo $str;
        $str = '';
} '^.*$', 'f1000';

P::trig {
        $str = "YO! Работает!!!";
} '^Вы улыбнулись\.', 'f1000';


diver 25.05.2008 18:17

Тролль
опробовал. круто. хотят тут есть один косячек на мой взгляд, тем не менее в маде работает великолепно. перешел на эту систему =)
только изменил под свои нужды.

Код:

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");
};



Часовой пояс GMT +4, время: 05:30.

Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot