Страница 1 из 1

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

Добавлено: Сб июл 11, 2009 5:16 pm
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:

ЗЫ Поиском пользовался, облазил весь этот форум и англоязычный опенкоре. Там есть решения этой проблемы но более старое или сильно упрощенное. Про распознавание цветов с одной цифрой я тоже находил, но тут штука немного посложнее, как реализовать я х.з. Может кто сможет помочь ?

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

Добавлено: Сб июл 11, 2009 8:45 pm
kLabMouse
Vash
ReactOnASCII

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

Добавлено: Вс июл 12, 2009 8:21 am
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


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


Есть ли на свете еще добрый люди, которые могут помочь ? )

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

Добавлено: Вс июл 12, 2009 9:02 am
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";
   }
}

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

Добавлено: Вс июл 12, 2009 10:15 am
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";
           }

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

Добавлено: Вс июл 12, 2009 2:54 pm
Dairey
Я не тестил, сорь) Надо так:

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

 if ($hex eq "^FF0000" or $hex eq "^000000") {
Делфи захавал мой моск.

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

Добавлено: Вс июл 12, 2009 6:28 pm
Vash
Запустилось, но он все равно выделяет все сообщение цветом 'color', х.з почему. А надо чтобы цветом выделялось только то что имеет черный и красный цвет, а остальное бы не закрашивалось. Хотя по коду вроде как ты это указал в строке

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

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

Добавлено спустя 1 час 55 минут 34 секунды:
Все, спасибо за помощь, все настроил) Топик клоуз.

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

Добавлено: Пт июл 17, 2009 1:57 am
4epT
Vash, выкладывай конечный вариант!