Показать сообщение отдельно
Старый 13.06.2006, 15:59   #2
Переплут
mud.ru Teams
 
Регистрация: 01.01.1970
Сообщений: 210
По умолчанию

Цитата:
Сообщение от lexik
Код:
trig { wecho(1, CL::unparse_colors($;)); } 'говорит', '1111:msg';
Код:
use Timer;
...
trig { 
        $U::tmsg = $Timer::system_time; 
        $U::msg = "\003P[$U::tmsg] $1 говорит $2";
        wecho (1, ($U::msg)); 
$; } '^(.*?) говорит (.*?)$', '1111:msg';
Собственно легко заметить что в 1-ом коде юзается переменная $;, во 2-ом же данная переменная вообще никогда не используется, в чем здесь прикол? да в том, что когда ты ловишь переменные $1 и $2 то в них нет кодов цвета, а в переменной $; после unparse_colors телнет цвета преобразуются в цвета ммц.
Итого правильным решением будет:
а). решение когда юзеры любят изгаляться над входящим трафиком по своему вдовесок:
Код:
trig {
        my $income_line = CL::unparse_colors $;; # здесь цвета
        my $sender = $1; # здесь нет цветов
        $income_line =~ m/^(\w+?) сказал.? : \'(.*?)\'$/; # цвета сохраняются
        wecho 1, print_time."$sender \003Psend message \003J=> $2";
} '^(\w+?) сказал.? : \'.*?\'$', ":tells";
В реализованном выше коде, в окно номер 1 (оно-же alt + 2) будет отображена строка, где полностью сохранены цвета сообщения, + автор сообщение передается без цветов ммц.

б) в самом элементарном виде, данный триг выглядит так:
Код:
trig {
        wecho 1, print_time.CL::unparse_colors($;);
} '^\w+? сказал.? : \'.*?\'$', ":tells";
в) собственно print_time (который потом удобно присобачивать куда угодно в дальнейшем)
Код:
sub print_time {
        return sprintf "\003I[%02d:%02d]", (localtime)[2], (localtime)[1];
        #return sprintf "\003I[%02d:%02d:%02d]", (localtime)[2], (localtime)[1], (localtime)[0]; -- часы с секундами
}
возвращают стильные часики: вида: [12:02]

Последний раз редактировалось Переплут; 13.06.2006 в 16:07.
Переплут вне форума   Ответить с цитированием