Помогите с антиботом

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

Модератор: 4epT

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Vash
Начинающий
Сообщения: 27
Зарегистрирован: Вс мар 16, 2008 4:48 am

Помогите с антиботом

Сообщение Vash »

В общем такая штука. На сервере, где я играю используется такой антибот, как ввод цифр с картинки.

Суть такая, для борьбы с этой заразой, я установил 2 плагина - reactOnNpc и ASCIInumberKiller . И в принципе все бы было хорошо, если бы не одно но... Защита немного усовершенствована и стандартное решение сюда не подходит. Вся загвоздка заключается именно в распознавании цветов. Сейчас выложу лог openkore.

Код: Выделить всё

Night Mode is already active
[Guild] You have 0 new emails (0 unread)
Arrow/Bullet equipped: Fire Arrow (0)
You are now: Night
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: 55555555555555555555555555555555555
Unknown #110008814: Type 'talk num <number #>' to input a number.
[reactOnNPC] Reacting to NPC. Executing command "ASCIInumberKiller num".
[1] : ###################################
[2] : ###################################
[3] : ###################################
[4] : ###################################
[5] : ###################################
[6] : ###################################
[7] : ###################################
[ASCIInumber v2.2.1(fix)] Executing command "talk num ".
[ASCIInumber v2.2.1(fix)] *** Delay 1-3 sec. before talk num  ***.
Error in function 'talk num' (Respond to NPC)
You must specify a number.
You are sitting.
Сам плагин, как я понял работает так. Он смотрит на картинку, которую говорит нпс, потом переводит ее в картинку типа ###### и сверяет эти значения со значениями, которые мы указали в плагине, ну например ######===### = цифре 1. А тут не получается из-за того, что на картинке нету пробелов, она вся покрыта цифрами, а нужные цифры вырисовываются из-за разницы в цветах, как показано на скрине.
Вообще у меня существует такая идея. По идее все ненужные цифры, тоесть фон, бывают только двух цветов - черного и красного, и если убрать эти два цвета, то будут вырисовываться нужные цифры, которые и смогут распознаваться плагином. А теперь вопрос как это все можно реализовать?

Если кто то действительно сможет чем то помочь, то я готов гарантировать небольшое материальное вознаграждение :beer:

ЗЫ Поиском пользовался, облазил весь этот форум и англоязычный опенкоре. Там есть решения этой проблемы но более старое или сильно упрощенное. Про распознавание цветов с одной цифрой я тоже находил, но тут штука немного посложнее, как реализовать я х.з. Может кто сможет помочь ?
Последний раз редактировалось Vash Вс июл 12, 2009 6:31 pm, всего редактировалось 1 раз.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Re: Помогите с антиботом

Сообщение kLabMouse »

Vash
ReactOnASCII
Vash
Начинающий
Сообщения: 27
Зарегистрирован: Вс мар 16, 2008 4:48 am

Re: Помогите с антиботом

Сообщение Vash »

Я его установил, в соответствии с этим топиком http://forums.openkore.com/viewtopic.php?f=34&t=575 . В принципе у меня такой вопрос. Как сделать, чтобы консоль отображала цвета в фразе нпс на ввод цифр? Хотя бы черный и красный. А то они у меня все белого цвета. Я менял значения на понимание опенкорой цвета, в файле src/network/recive.pm, но у меня фраза нпс начинает представлять такую штуку
^FF00006^FF00006^FF00006 . Тоесть он отображает хекс код цвета перед каждой цифрой, а это немного не то. Можно ли сделать что то наподобие вот этого? Чтобы был виден именно цвет.

Изображение

Добавлено спустя 1 час 9 минут 19 секунд:
Такс, нашел то что нужно, но увы, надо переделать...

Код: Выделить всё

piroJOKE
Да я не про то как это выглядит, я про то как это сделано (на коленке).

Что делаем: в файле Receive.pm заменяем ф-ю npc_talk на это:

Код:
sub npc_talk {
   my ($self, $args) = @_;
   my $newmsg;
   $self->decrypt(\$newmsg, substr($args->{RAW_MSG}, 8));

   my $msg = substr($args->{RAW_MSG}, 0, 8) . $newmsg;
   my $ID = substr($msg, 4, 4);
   my $talkMsg = unpack("Z*", substr($msg, 8));
   $talk{ID} = $ID;
   $talk{nameID} = unpack("V1", $ID);
   $talk{msg} = bytesToString($talkMsg);
   # Remove RO color codes
#   # $talk{msg} =~ s/\^[a-fA-F0-9]{6}//g;

   $ai_v{npc_talk}{talk} = 'initiated';
   $ai_v{npc_talk}{time} = time;

   my $name = getNPCName($ID);
#   message "$name: $talk{msg}", "npc";
   
   if ($talk{msg}=~/\^[a-fA-F0-9]{6}/) {
      message "$name: ", "npc";
      $talk{msg}="^FFFFFF" . $talk{msg};
      pos($talk{msg})=0;

      while  ($talk{msg} =~/\^([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/g) {
   
           my $colR = oct "0x" . $1;
           my $colG = oct "0x" . $2;
           my $colB = oct "0x" . $3;
   
           my $colY = ($colR + $colG +$colB) / 3;
     
           $talk{msg}=~/\G(.*?)(\^|\Z)/x;
           next if $1 eq "";
           if ($colY>224) {
         message "$1","white";
           }   
           else {
         message "$1","color";
           }
   
      }
      message "\n", "npc";
   } else {
   message "$name: $talk{msg}\n", "npc";
   }
}


В consolecolors.txt определяем домены
color red
white darkgray
У автора получается, вот такая штука

Изображение

А у меня

Изображение

Ну в общем там всё попадает под "красный", потому что всё что более близко к белому - одним цветом,а всё что темнее - другим.

Ссылка на темку тут viewtopic.php?f=8&t=4488&hilit=%D1%86%D ... 8&start=30


Вот мне надо как то переделать, чтобы два цвета выделяло. Только черный и красный.


Есть ли на свете еще добрый люди, которые могут помочь ? )
Dairey
Начинающий
Сообщения: 21
Зарегистрирован: Пт ноя 07, 2008 7:45 pm

Re: Помогите с антиботом

Сообщение Dairey »

Код: Выделить всё

sub npc_talk {
   my ($self, $args) = @_;
   my $newmsg;
   $self->decrypt(\$newmsg, substr($args->{RAW_MSG}, 8));

   my $msg = substr($args->{RAW_MSG}, 0, 8) . $newmsg;
   my $ID = substr($msg, 4, 4);
   my $talkMsg = unpack("Z*", substr($msg, 8));
   $talk{ID} = $ID;
   $talk{nameID} = unpack("V1", $ID);
   $talk{msg} = bytesToString($talkMsg);
   # Remove RO color codes
#   # $talk{msg} =~ s/\^[a-fA-F0-9]{6}//g;

   $ai_v{npc_talk}{talk} = 'initiated';
   $ai_v{npc_talk}{time} = time;

   my $name = getNPCName($ID);
#   message "$name: $talk{msg}", "npc";
   
   if ($talk{msg}=~/\^[a-fA-F0-9]{6}/) {
      message "$name: ", "npc";
      pos($talk{msg})=0;

      while  ($talk{msg} =~/\^([a-fA-F0-9]{6})/g) {
   
           my $hex = $1;    
           $talk{msg}=~/\G(.*?)(\^|\Z)/x;
           next if $1 eq "";
           if ($hex eq "^FF0000") or ($hex eq "^000000") {
         message "$1","white";
           }   
           else {
         message "$1","color";
           }
   
      }
      message "\n", "npc";
   } else {
   message "$name: $talk{msg}\n", "npc";
   }
}
Vash
Начинающий
Сообщения: 27
Зарегистрирован: Вс мар 16, 2008 4:48 am

Re: Помогите с антиботом

Сообщение Vash »

Спасибо за помощь, но при запуске коры, пишет ошибку в синтаксе.

Код: Выделить всё

Syntax error at src/Network/Receive.pm line 4044 near ") or"
Syntax error at src/Network/Receive.pm line 4047 near "else"
Syntax error at src/Network/Receive.pm line 4053 near "}"
Compilation failed in require at openkore.pl line 58. 
Begin failed--compilation aborted at openkore.pl line 58.

Press ENTER to exit.
Ошибка скорее всего где-то здесь

Код: Выделить всё

    if ($hex eq "^FF0000") or ($hex eq "^000000") {
         message "$1","white";
           }   
           else {
         message "$1","color";
           }
Dairey
Начинающий
Сообщения: 21
Зарегистрирован: Пт ноя 07, 2008 7:45 pm

Re: Помогите с антиботом

Сообщение Dairey »

Я не тестил, сорь) Надо так:

Код: Выделить всё

 if ($hex eq "^FF0000" or $hex eq "^000000") {
Делфи захавал мой моск.
Vash
Начинающий
Сообщения: 27
Зарегистрирован: Вс мар 16, 2008 4:48 am

Re: Помогите с антиботом

Сообщение Vash »

Запустилось, но он все равно выделяет все сообщение цветом 'color', х.з почему. А надо чтобы цветом выделялось только то что имеет черный и красный цвет, а остальное бы не закрашивалось. Хотя по коду вроде как ты это указал в строке

Код: Выделить всё

if ($hex eq "^FF0000" or $hex eq "^000000") {
Где может быть косяк ? :shock:

Добавлено спустя 1 час 55 минут 34 секунды:
Все, спасибо за помощь, все настроил) Топик клоуз.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Re: Помогите с антиботом

Сообщение 4epT »

Vash, выкладывай конечный вариант!
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Ответить