antispam compression, много одинаковых строчек заменить одной |
Здравствуйте, гость ( Вход | Регистрация )
antispam compression, много одинаковых строчек заменить одной |
26 Jan 2008, 13:43
(Сообщение отредактировал пусик - 26 Jan 2008, 14:59)
Сообщение
#1
|
|
полный Сообщений: 819 Спасибо сказали: 15 раз |
Хочу чтобы вместо
Цитата [...............] [ 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. В начальном сообщении был серьезный баг с цветами, в текущем его уже нету, остался несерьезный только. -------------------- Код act_say(game, "Я $n!", NULL); act_say(player, "А по-моему, ты говно!", game); crash(game); |
|
|
29 Jan 2008, 07:10
Сообщение
#2
|
|
Newbie Сообщений: 46 Спасибо сказали: 0 раз |
Очень удобно, однако, как вернуть обратно пустые строки?
-------------------- |
|
|
29 Jan 2008, 09:00
Сообщение
#3
|
|
Оранжевый Канцлер Тьмы Сообщений: 2 340 Спасибо сказали: 605 раз |
Заставить скрипт на прием пустой строки рисовать такую же в аутпуте
-------------------- I am the fury in your eyes. I am reason, I am vice.
Careful what you say You may regret it, Careful what you wish You just might get it. |
|
|
30 Jan 2008, 08:03
(Сообщение отредактировал weaw - 30 Jan 2008, 13:04)
Сообщение
#4
|
|
. Сообщений: 779 Спасибо сказали: 0 раз |
Вобщем, пока не забыл , отпишу.
Насколько я въехал, сейчас каждая строка выводится с задержкой. Т.е. mmc echo' ет предпоследнюю полученную строку, при этом пропустив ее через CL::unparse_colors. Это тормозно всяко. Не совсем понятно, как от этого вообще уйти можно, потому что для склеивания строк, конечно, нужно помнить предыдущую, при этом её не показывая. Но уйти очень хочется. Можно попробовать как-то по 2 (или больше) строки читать, наверное, переопределив $/ или ещё как-то... upd А. Есть идея :) Строку рисовать, но перевод строки отрывать от нее, и приклеивать в начале следующей строки, при необходимости врисовав туда эти "(x 15)" , но это вобщем-то тоже ручная обработка.... Хотя поиграть надо. Просто тогда отпадает надобность в одном тригере, вроде.... upd Т.е. алгортм примерно такой предлагается: Поймали строку. Сравнили с запомненной предыдущей. Если такая же, увеличили счётчик и брейкнули. Если другая, то запомнили, оторвали перевод строки в конце, дорисовали его в начале. Если счётчик не нулевой, то дорисовли еще его значение в самое начало, а счётчик сбросили. Отпустили обработанную строку в лапы mmc. Вобщем, похоже, тригера тут вообще не нужны, разве что в части GAG aka break. Посмотрим. Либо мб пусик сам попробует? Хз, что у меня со временем... |
|
|
31 Jan 2008, 01:05
(Сообщение отредактировал пусик - 31 Jan 2008, 01:06)
Сообщение
#5
|
|
полный Сообщений: 819 Спасибо сказали: 15 раз |
Иногда ждать приходится очень долго.
Типичные два примера - когда находишься в режиме редактирования письма, или когда играешь без prompt (toggle prompt выключен), и можно кроме того ещё и без compact и без linefeed. Что было бы хорошо сделать - засекать время когда получена последняя строка, и с помощью функции Код timeout(&code, $delay; $count) если задержка между последней строкой и текущим временем превышает комфортный интервал (где-то 50ms, наверно), выводить уже полученные строки. -------------------- Код act_say(game, "Я $n!", NULL); act_say(player, "А по-моему, ты говно!", game); crash(game); |
|
|
31 Jan 2008, 05:32
(Сообщение отредактировал weaw - 31 Jan 2008, 05:37)
Сообщение
#6
|
|
. Сообщений: 779 Спасибо сказали: 0 раз |
Код 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). |
|
|
31 Jan 2008, 19:51
(Сообщение отредактировал пусик - 31 Jan 2008, 20:04)
Сообщение
#7
|
|
полный Сообщений: 819 Спасибо сказали: 15 раз |
Ноты редактируются нормально.
Но вообще глючно работает. 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 проверять. -------------------- Код act_say(game, "Я $n!", NULL); act_say(player, "А по-моему, ты говно!", game); crash(game); |
|
|
31 Jan 2008, 21:10
(Сообщение отредактировал weaw - 31 Jan 2008, 21:11)
Сообщение
#8
|
|
. Сообщений: 779 Спасибо сказали: 0 раз |
Да. disable нужно, я просто забыл почему-то.
А проверка чтобы дулирования не было строки. По-хорошему вывод надо в отдельную процедуру выносить и ее юзать и в тригере и в таймауте. upd: А работает оно так: пойманная строка выводится через установленное время, если mm_count к тому времени единичка. Измениться mm_count может, если только будет поймана такая же строка, либо если вывод сделан тригером при получении строки отличной, от той, что в таймауте. Но это всё на завтра уже... |
|
|
31 Jan 2008, 21:46
Сообщение
#9
|
|
полный Сообщений: 819 Спасибо сказали: 15 раз |
Цитата(weaw @ 31 Jan 2008, 22:10) По-хорошему вывод надо в отдельную процедуру выносить и ее юзать и в тригере и в таймауте. А это разве сложно? ) -------------------- Код act_say(game, "Я $n!", NULL); act_say(player, "А по-моему, ты говно!", game); crash(game); |
|
|
01 Feb 2008, 18:14
Сообщение
#10
|
|
. Сообщений: 779 Спасибо сказали: 0 раз |
Не сложно.
Да, и ещё у меня там нарушение логики тупой :) |
|
|
Гость_Bugavka_* |
26 Oct 2008, 07:26
Сообщение
#11
|
|
А кто-нить так же делал на jscript???? хотелось бы увидеть
|
|
|
Текстовая версия | Сейчас: 24 April 2024 - 00:35 |
Copyright by Алексей Крючков
Programming by Degtyarev Dmitry |