Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: antispam compression
DF2 :: ФОРУМЫ > Игровые форумы > MUD DF2 > МАД-клиенты
пусик
Хочу чтобы вместо
Цитата
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут.

писалось бы
Цитата
[...............] [ 10] Гоблин работяга (goblin) почти уснувший стоит тут. (x15)


А вместо
Цитата
Твои волшебные ракеты -=> ЭЛЕКТРОНИЗИРУЮТ <=- деревенского мЕнТа. [553]
Твои волшебные ракеты -=> ЭЛЕКТРОНИЗИРУЮТ <=- деревенского мЕнТа. [553]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226]
Рассекающий удар начинающий маг ** СОКРУШАЕТ ** деревенского мЕнТа.
Рассекающий удар начинающий маг ** СОКРУШАЕТ ** деревенского мЕнТа.

писалось бы
Цитата
Твои волшебные ракеты -=> ЭЛЕКТРОНИЗИРУЮТ <=- деревенского мЕнТа. [553] (x 2)
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226] (x 6)
Рассекающий удар начинающий маг ** СОКРУШАЕТ ** деревенского мЕнТа. (x 2)


В sample.mmcrc есть пример с magic missiles, и чуть изменив его получается вот такой кусочек который делает почти что надо:
Код
# "Упаковка" серий одинаковых строк.
my ($last_mm, $mm_count, $last_mmcol);
trig {
       if(!$mm_count) {
               enable("MM_COUNT");
               $last_mm = $_;
               $last_mmcol = CL::unparse_colors($;);

               $mm_count = 1;
       } else {
               $mm_count ++;
       }
} '^.+$', "800ng:GAG";

trig {
       if($_ ne $last_mm) {
               disable("MM_COUNT");
               if ($mm_count > 1) {
                       echo($last_mmcol . "\003J (x $mm_count)");
               } else {
                       echo($last_mmcol);
               }
               $mm_count = 0;
       }
} '^.*$', "2500nf-:MM_COUNT";


--------------------------------------------------------------------------------------------------------------

Серии упаковываются, но есть ряд недостатков:
1. Ярко-красный цвет в конце, может лучше другой какой-то?

2. В этом подходе пустые строки удаляются вообще все, поэтому вывод при выключенном 'toggle compact' выглядит как при включённом 'toggle compact'.
А если включить 'toggle compact', то вообще плохо все выглядит - вывод задерживается.

3. Иногда строки слипаются с промптом, поэтому вот такой вывод:
Цитата
8446 <> [15,0,] # Твои волшебные ракеты == СТИРАЮТ В ПОРОШОК == деревенского мЕнТа. [188]
Твои волшебные ракеты == СТИРАЮТ В ПОРОШОК == деревенского мЕнТа. [188]

не собирается в одно строчку.

4. Когда используется псевдографика может что-то странное получиться, типа такого:
Код
+-----------+ Exits:
|           |    North - нет выхода
|           |     East - Место
|           |    South - нет выхода
|           |     West - нет выхода
|     X-D   |       Up - нет выхода
|           |     Down - нет выхода
|           | (x 3)
+-----------+

По-моему в приведённом примере сбор пустых строк это даже удобно, но кого-то может и не устраивает.

--------------------------------------------------------------------------------------------------------------


Если у кого-то есть идеи как это всё улучшить чтобы исправить какой-то недостаток или найдны новые недостатки - пишите тут, пожалуйста.
И ещё, конечно, если кто-то пользуется клиентом отличным от mmc, тоже выкладывайте свои реализации - кому-нибудь пригодится.

PS. Ещё Shaidar Haran предлагал добавить калькулятор - то есть триггер с ещё далее отложенным приоритетом, который вместо
Цитата
Твои волшебные ракеты -=> ЭЛЕКТРОНИЗИРУЮТ <=- деревенского мЕнТа. [553] (x 2)
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226] (x 6)
Рассекающий удар начинающий маг ** СОКРУШАЕТ ** деревенского мЕнТа. (x 2)

сделает
Цитата
Твои волшебные ракеты -=> ЭЛЕКТРОНИЗИРУЮТ <=- деревенского мЕнТа. [553 x 2 = 1106]
Твой укол == СТИРАЕТ В ПОРОШОК == деревенского мЕнТа. [226 x 6 = 1356]
Рассекающий удар начинающий маг ** СОКРУШАЕТ ** деревенского мЕнТа. (x 2)

Если у кого-то есть - тоже добавьте, пожалуйста.


UPD. В начальном сообщении был серьезный баг с цветами, в текущем его уже нету, остался несерьезный только.
dimaz
Очень удобно, однако, как вернуть обратно пустые строки?
Shaidar Haran
Заставить скрипт на прием пустой строки рисовать такую же в аутпуте smile.gif
weaw
Вобщем, пока не забыл , отпишу.
Насколько я въехал, сейчас каждая строка выводится с задержкой. Т.е. mmc echo' ет предпоследнюю полученную строку, при этом пропустив ее через CL::unparse_colors. Это тормозно всяко.

Не совсем понятно, как от этого вообще уйти можно, потому что для склеивания строк, конечно, нужно помнить предыдущую, при этом её не показывая. Но уйти очень хочется.

Можно попробовать как-то по 2 (или больше) строки читать, наверное, переопределив $/ или ещё как-то...

upd
А. Есть идея :) Строку рисовать, но перевод строки отрывать от нее, и приклеивать в начале следующей строки, при необходимости врисовав туда эти "(x 15)" , но это вобщем-то тоже ручная обработка.... Хотя поиграть надо.


Просто тогда отпадает надобность в одном тригере, вроде....

upd
Т.е. алгортм примерно такой предлагается:
Поймали строку.
Сравнили с запомненной предыдущей.
Если такая же, увеличили счётчик и брейкнули.
Если другая, то запомнили, оторвали перевод строки в конце, дорисовали его в начале.
Если счётчик не нулевой, то дорисовли еще его значение в самое начало, а счётчик сбросили.
Отпустили обработанную строку в лапы mmc.

Вобщем, похоже, тригера тут вообще не нужны, разве что в части GAG aka break.

Посмотрим. Либо мб пусик сам попробует? Хз, что у меня со временем...
пусик
Иногда ждать приходится очень долго.
Типичные два примера - когда находишься в режиме редактирования письма,
или когда играешь без prompt (toggle prompt выключен), и можно кроме того ещё и без compact и без linefeed.

Что было бы хорошо сделать - засекать время когда получена последняя строка, и с помощью функции
Код
timeout(&code, $delay; $count)

если задержка между последней строкой и текущим временем превышает комфортный интервал (где-то 50ms, наверно), выводить уже полученные строки.
weaw
Код
my ($last_mm, $mm_count);

trig {
    if(!$mm_count) {
 enable("MM_COUNT");
 $last_mm = $;;
 $mm_count = 1;
    } else {
 $mm_count ++;
    }
} $last_mm, "800ng:GAG";

trig {
    $curr=$;;
    timeout{
 if ($mm_count == 1){
     echo(CL::unparse_colors($curr));
     $mm_count=0;
 }  
    } 30,1;

    if($; ne $last_mm) {
 disable("MM_COUNT");
 if ($mm_count>1){
     echo(CL::unparse_colors($last_mm) . "\003J (x $mm_count)");
 }else {
     if ($mm_count==1) {echo(CL::unparse_colors($last_mm));}
 }
 $mm_count = 0;
    }
} '^.*$', "2500nf-:MM_COUNT";

Поковырял в отдыхе от работы:
Вариант с таймером, предложенный пусиком. Действительно достаточно приятный вышел:
Пробельные строки есть, зато глюков с редактором нету.
Из минусов:
-- Сохраняется пока подсчёт пробельных строк, когда их больше одной.
-- Появился какой-то глюк таймера при просмотре псевдографики, вроде таблиц toggle.
Посмотрите, пожалуйста, что еще есть.

//Проблему с подсчётом пробельных строк решим наверняка, потому что она ущемляет мою профессиональную самооценку.

P.S. При лагах может не сработать подсчёт, но вцелом этот момент регулируется временем срабатывания таймаута (Который сейчас 30).
пусик
Ноты редактируются нормально.
Но вообще глючно работает.

1. При коннекте пишет вот что:

Цитата
Кафе-бар <<Вечная Жизнь>> (Cafe-bar <<Eternal Life>>)
+-----------+ Exits:
|    o    |    North - Первая линия контроля
|    |    |    East - нет выхода
|    o    |    South - нет выхода
|    |    |    West - Вход в Музей
| D-o-X    |      Up - нет выхода
-:- TimerError:
-:- TimerError:
-:- TimerError:
-:- TimerError:
-:- TimerError:
-:- TimerError:
-:- TimerError:
-:- TimerError:
-:- TimerError:
|  |      |    Down - нет выхода (x 10)



2. Затем иногда дублирует строки:
Цитата
[4578 6938 1291] 1W [2,0,] #  u
Ты не можешь идти в этом направлении.
Ты не можешь идти в этом направлении.
[4578 6938 1291]  [2,0,] #  u
Ты не можешь идти в этом направлении.
Ты не можешь идти в этом направлении.
[4578 6938 1291]  [2,0,] #  u
Ты не можешь идти в этом направлении.
Ты не можешь идти в этом направлении.
[4578 6938 1291]  [2,0,] #  u
[4578 6938 1292]  [2,0,] #  Ты не можешь идти в этом направлении.

[4578 6938 1291]  [2,0,] #  u
[4578 6938 1292]  [2,0,] #  Ты не можешь идти в этом направлении.

[4578 6938 1291]  [2,0,] #  u
[4578 6938 1292]  [2,0,] # 
Ты не можешь идти в этом направлении.
Ты не можешь идти в этом направлении.
..
[4578 6908 1292]  [11,0,] # 
Трогвар улетает на восток (east).
Трогвар улетает на восток (east).
[4578 6938 1292]  [11,0,] #



А через какое-то время меня вообще дисконнектнуло (убило mmc) серией спама про этот TimerError.

И я не очень понимаю как это работает. По-моему, в той части где timeout тоже надо какой-то disable (MM_COUNT) написать, и не обязательно mm_count==1 проверять.
weaw
Да. disable нужно, я просто забыл почему-то.
А проверка чтобы дулирования не было строки. По-хорошему вывод надо в отдельную процедуру выносить и ее юзать и в тригере и в таймауте.

upd:
А работает оно так: пойманная строка выводится через установленное время, если mm_count к тому времени единичка. Измениться mm_count может, если только будет поймана такая же строка, либо если вывод сделан тригером при получении строки отличной, от той, что в таймауте.
Но это всё на завтра уже...
пусик
Цитата(weaw @ 31 Jan 2008, 22:10)
По-хорошему вывод надо в отдельную процедуру выносить и ее юзать и в тригере и в таймауте.

А это разве сложно? )
weaw
Не сложно.
Да, и ещё у меня там нарушение логики тупой :)
Bugavka
А кто-нить так же делал на jscript???? хотелось бы увидеть sorry.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.