Discussion:
mmc и цвета.
(слишком старое сообщение для ответа)
Shannar
2005-08-15 14:16:25 UTC
Permalink
=*= [Thursday, 04 Aug 2005 11:02:08] Sergey Chumakov -> (Shannar)

SC> Вопрос только в одном. Как цвет отловить? Как на него регексп написать?
SC> По-моему, сабсту передается строка без цвета.

Ежели ещё актуально, то вот что нашёл в архивах:

=*= Cut ===
EK> Да кстати а как в mmc фильтpовать _весь_ входящий текст. Фильтpовать -
EK> т.е. обpабатывать опpеделенной функцией?

Это делается так: создается через API триггер с большим приоритетом (для
обычных целей никогда не используйте приоритеты выше 2000, просто возьмите это
за правило) на регексп ".*" :

==cut==
sub get_color($$) {
return chr(ord(substr($_[0], 2*$_[1]+1, 1))+ord('A'));

}

trig {
if (get_color($;, 1) eq 'I') {
$: = "\003F*$1";
}
} "(.*)", "f2200:COMM";

==cut==

Приведенный кусок кода заменяет строки, написанные темно-серым цветом на
фиолетовые и добавляет в начало такой строки символ "*" (в "Былинах" так
выглядят социалы. Мне это не нравится, поэтому я вижу фиолетовые надписи типа
"*Кто-то улыбнулся.")

][
=*=

AIB> trig {
AIB> if (get_color($;, 1) eq 'I') {
AIB> $: = "\003F*$1";
AIB> }
AIB> } "(.*)", "f2200:COMM";
AIB> ==cut==

MMC конечно очень сложно заставить тормозить, однако и злоупотреблять
такими конструкциями (типа .* да еще в скобках) на мой взгляд не стоит.
IMHO более кошерным способом было бы нечто вроде:

trig {
$: = "\003F*$_" if get_color($;, 1) eq 'I';

} '', '200n:COMM';

=*= Cut ===
Sergey Chumakov
2005-08-16 12:59:08 UTC
Permalink
Post by Shannar
=*= [Thursday, 04 Aug 2005 11:02:08] Sergey Chumakov -> (Shannar)
SC> Вопрос только в одном. Как цвет отловить? Как на него регексп написать?
SC> По-моему, сабсту передается строка без цвета.
Это делается так: создается через API триггер с большим приоритетом (для
обычных целей никогда не используйте приоритеты выше 2000, просто возьмите это
==cut==
sub get_color($$) {
return chr(ord(substr($_[0], 2*$_[1]+1, 1))+ord('A'));
}
trig {
if (get_color($;, 1) eq 'I') {
$: = "\003F*$1";
}
} "(.*)", "f2200:COMM";
Дело в том, что здесь проверяется цвет первого символа в строке, и если
он соответствует, то меняется вся строка. А имена мобов в c7i могут быть
в начале строки, в конце строки, в середине строки. Т.е. по этой методе
придется перебирать _все_ символы в _каждой_ строке. Это вообще
некошерно и криво. Пока так играю. В Сфере миров чудесно цвета
настраивались по вкусу игрока. Нигде больше такого не видел.
dmitry v. sizikov
2005-08-16 12:21:00 UTC
Permalink
Tue Aug 16 2005 16:59, you wrote to Shannar:

SC> Дело в том, что здесь проверяется цвет первого символа в строке, и
SC> если он соответствует, то меняется вся строка. А имена мобов в c7i
SC> могут быть в начале строки, в конце строки, в середине строки. Т.е. по
SC> этой методе придется перебирать _все_ символы в _каждой_ строке. Это
SC> вообще некошерно и криво. Пока так играю. В Сфере миров чудесно цвета
SC> настраивались по вкусу игрока. Hигде больше такого не видел.
Был в забугоpном муде, там команда color имела паpаметpы, напpимеp color mob
e.t.c Можно было настpоить цвета по твоему вкусу.

+ Лишь глупцы называют своеволие свободой (Тацит)
Loading...