RagBot Forum
 

Вернуться   RagBot Forum > • Всё что касается бота • > Макросы и Плагины

Макросы и Плагины Всё что относится к макросам и плагинам. Сборник готовых макросов.

Ответ
 
Опции темы Опции просмотра
Старый 16.02.2013, 23:27   #1
Derrek
Новичок
 
Регистрация: 12.11.2012
Сообщений: 31
Вы сказали Спасибо: 12
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию Плагин AntiBotKiller (перевод на инглиш)

Нашел старенький плагин AntiBotKiller модифицированный под русский язык Moonlight. Мне он нужен был в инглиш варианте и я решил попробовать сам его преобразовать. В итоге работает иногда сразу, иногда с 3ей попытки из 5ти. Пока ни разу все 5 раз не сфейлил. Хотелось бы мнения знатаков как можно исправить ещё лучше.

Вот некоторые ошибки:
Код:
[Feb 16 22:40:23 2013.43] [АвтоБот] Вроди нашел ту строчку: "one Hundred seventy  nine".
[Feb 16 22:40:23 2013.43] [АвтоБот] Распознал СОТНЮ: "Hundred".
[Feb 16 22:40:23 2013.44] [АвтоБот] Распознал 1: "one".
[Feb 16 22:40:23 2013.44] [АвтоБот] Распознал 3: "seventy".
[Feb 16 22:40:23 2013.44] [АвтоБот] Итого в граммах: "170".
[Feb 16 22:40:23 2013.44] [АвтоБот] Эрегиру.. тоесть реагируем - пиздим "170".
[Feb 16 22:40:23 2013.44] [АвтоБот] ах да, •••••, для приличия ждем 5 секунд

Проблема из-за двойного пробела, в итоге в последнюю переменную попадает пустота вместо числа.


Код:
[Feb 16 22:40:17 2013.16] [АвтоБот] Вроди нашел ту строчку: "seven Hundred meighty oney".
[Feb 16 22:40:17 2013.17] [АвтоБот] Распознал СОТНЮ: "Hundred".
[Feb 16 22:40:17 2013.17] [АвтоБот] Распознал 1: "seven".
[Feb 16 22:40:17 2013.17] [АвтоБот] Распознал 3: "eight".
[Feb 16 22:40:17 2013.17] [АвтоБот] Распознал 4: "one".
[Feb 16 22:40:17 2013.17] [АвтоБот] Итого в граммах: "709".
[Feb 16 22:40:17 2013.17] [АвтоБот] Эрегиру.. тоесть реагируем - пиздим "709".
[Feb 16 22:40:17 2013.18] [АвтоБот] ах да, •••••, для приличия ждем 5 секунд
Проблема в том что плагин путает 8 и 80, считает что окончание "y" это мусор.

плагин:
Код:
# =======================
# АвтоБот v.1.2.666
#( с помощью ебаной матери и перла, русификация Moonlight)
# =======================
# Copyright 2006
# Base Script : hakore(reactOnNPC)
# Modified by : AqlX
# Далее помог : Moonlight 2007
# Далее помог : Derrek 2013
#

package AntiBotkiller;

use strict;
use Plugins;
use Globals;
use Utils;
use Commands;
use Log qw(message debug);
use encoding 'Russian';

Plugins::register('АвтоБот', "Умно объебем тупого антибота", \&Unload);
my $hooks = Plugins::addHooks(
            ['packet/npc_talk', \&onNPCTalk, undef],
         ['packet/npc_talk_close', \&onClo, undef],
            ['packet/npc_talk_continue', \&onCon, undef],
            ['packet/npc_talk_number', \&onNPCAction, undef]
);

sub Unload
{
   Plugins::delHooks($hooks);
};

my %reactOnNPC;
my $code;
my $str;

sub onNPCTalk
{
   my (undef, $args) = @_;
   my $msg = unpack("Z*", substr($args->{RAW_MSG}, 8));
   $msg = I18N::bytesToString($msg);
   $msg =~ s/\^[a-fA-F0-9]{6}//g;
   if (!defined %reactOnNPC || $reactOnNPC{action})
   {
      undef %reactOnNPC if defined %reactOnNPC;
      $reactOnNPC{index} = 1;
      $reactOnNPC{msg}[$reactOnNPC{index}] = $msg;
   }
   else
   {
      $reactOnNPC{index}++;
      $reactOnNPC{msg}[$reactOnNPC{index}] = $msg;
   }
}

sub onNPCAction
{
         $code = reply();
         message "[АвтоБот] Эрегиру.. тоесть реагируем - пиздим \"$code\".\n", "success";
         message "[АвтоБот] ах да, •••••, для приличия ждем 5 секунд ...\n", "success";
         my $cmd = "talk num $code";
         sleep 5;
         Commands::run($cmd);
}

sub onClo
{
   undef %reactOnNPC if defined %reactOnNPC;   
}

sub onCon
{
   message "[АвтоБот] 0 \"$reactOnNPC{msg}[0]\".\n", "success";
   message "[АвтоБот] 1 \"$reactOnNPC{msg}[1]\".\n", "success";
   message "[АвтоБот] 2 \"$reactOnNPC{msg}[2]\".\n", "success";
   message "[АвтоБот] 3 \"$reactOnNPC{msg}[3]\".\n", "success";
   message "[АвтоБот] 4 \"$reactOnNPC{msg}[4]\".\n", "success";

   $reactOnNPC{msg}[3] =~ s/> //;
   $reactOnNPC{msg}[4] =~ s/> //;
        
   undef $str;
   $str = $reactOnNPC{msg}[3];
   if (length($str) < 2) {
      undef $str; 
      $str = $reactOnNPC{msg}[4];
   }
   undef %reactOnNPC if defined %reactOnNPC;   
}

sub reply
{
   message "[АвтоБот] Вроди нашел ту строчку: \"$str\".\n", "success";

   my %sn = ("one", 1, "two", 2, "three", 3, "four", 4, "five", 5, "six", 6, "seven", 7, "eight", 8, "nine", 9, "ten", 10, "eleven", 11, "twelve", 12, "thirteen", 13, "fourteen", 14, "fifteen", 15,"sixteen", 16,"seventeen", 17, "eighteen", 18, "nineteen", 19 ,"twenty", 20, "thirty", 30, "forty", 40, "fifty", 50, "sixty", 60, "seventy", 70, "eighty", 80, "ninety", 90,"one Hundred",100,"two Hundred",200,"three Hundred",300,"four Hundred",400,"five Hundred",500,"six Hundred",600,"seven Hundred",700,"eight Hundred",800,"nine Hundred",900);
   my @sl = ("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "one Hundred","two Hundred","three Hundred","four Hundred","five Hundred","six Hundred","seven Hundred","eight Hundred","nine Hundred");
   my @sy = ("Hundred","hundred");



my ($str1, $str2, $str3,$str4) = split(/ /, $str);

my $tmp;
my $tmr;
my $kflag=0;


foreach $tmr (@sy){
   if ($str2 =~/^.?$tmr.?$/) {
	$kflag=1;	
      	message "[АвтоБот] Распознал СОТНЮ: \"$tmr\".\n", "success";   
   }
}
if ($kflag==1) {
foreach $tmp (@sl){
   if ($str1 =~/^.?$tmp.?$/) {
      message "[АвтоБот] Распознал 1: \"$tmp\".\n", "success";   
      $str1 = $tmp;
   }
}

foreach $tmp (@sl){
   if ($str3 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 3: \"$tmp\".\n", "success";
      $str3 = $tmp;
   }
}

foreach $tmp (@sl){
   if ($str4 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 4: \"$tmp\".\n", "success";
      $str4 = $tmp;
   }
}
}

if ($kflag==0) {
foreach $tmp (@sl){
   if ($str1 =~/^.?$tmp.?$/) {
      message "[АвтоБот] Распознал 1: \"$tmp\".\n", "success";   
      $str1 = $tmp;
   }
}

foreach $tmp (@sl){
   if ($str2 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 2: \"$tmp\".\n", "success";
      $str2 = $tmp;
   }
}

foreach $tmp (@sl){
   if ($str3 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 3: \"$tmp\".\n", "success";
      $str3 = $tmp;
   }
}
}

if ($kflag==0) {
$code = $sn{$str1}+$sn{$str2}+$sn{$str3};
}
if ($kflag==1) {
$code = $sn{$str1}*100+$sn{$str3}+$sn{$str4};
$kflag=0;
}
message "[АвтоБот] Итого в граммах: \"$code\".\n", "success";

return $code;


}

return 1;

Последний раз редактировалось Derrek; 17.02.2013 в 02:40.
Derrek вне форума   Ответить с цитированием
Старый 17.02.2013, 10:57   #2
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

Derrek, а на каком серваке стоит этот древний антибот? скинь настроечки.

попробуй в плагине строчку:
Код:
my ($str1, $str2, $str3,$str4) = split(/ /, $str);
заменить на:
Код:
my ($str1, $str2, $str3,$str4) = split(/\s+/, $str);

Для потомков: плагин с распознаванием русских символов

А вот этот же анти-антибот на основе макроса
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо 4epT за это полезное сообщение:
Derrek (17.02.2013)
Старый 17.02.2013, 19:15   #3
Derrek
Новичок
 
Регистрация: 12.11.2012
Сообщений: 31
Вы сказали Спасибо: 12
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Код:
ip 199.59.160.223
port 6900
private 1
master_version 14
version 25
serverType kRO_RagexeRE_2010_07_13a
serverEncoding Russian
charBlockSize 112
recvpackets recvpackets.txt
addTableFolders translated/kRO_english;kRO

Цитата:
split(/\s+/, $str);
А что это регулярное выражение означает, я не очень разбираюсь в них? Он раньше по пробелам делил, а так по чему будет? И вопрос, если там вместо деления на 4 поставить деление на 8 слов, он когда закончится строка будет просто пустоту в них писать или мусор из буфера?

Цитата:
А вот этот же анти-антибот на основе макроса
Сурово =)
Derrek вне форума   Ответить с цитированием
Старый 17.02.2013, 22:29   #4
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

Цитата:
А что это регулярное выражение означает
"\s+" - это означает один или несколько пробелов

Цитата:
И вопрос, если там вместо деления на 4 поставить деление на 8 слов, он когда закончится строка будет просто пустоту в них писать или мусор из буфера?
пустоту
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо 4epT за это полезное сообщение:
Derrek (18.02.2013)
Старый 19.02.2013, 00:32   #5
Derrek
Новичок
 
Регистрация: 12.11.2012
Сообщений: 31
Вы сказали Спасибо: 12
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Работает как часы, только проблему с восьмёркой осталось решить. Чую нужно ветвления делать при каждой проверке на наличие "y" в конце "eight"... Но скорее всего можно забить. Там 5 попыток и обычно больше 1го раза подряд восьмёрка не всплывает.
Derrek вне форума   Ответить с цитированием
Старый 19.02.2013, 10:20   #6
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

а ты попробуй изменить строчку:
Код:
   my @sl = ("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "one Hundred","two Hundred","three Hundred","four Hundred","five Hundred","six Hundred","seven Hundred","eight Hundred","nine Hundred");
на:

Код:
   my @sl = ("eighty", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "ninety", "one Hundred","two Hundred","three Hundred","four Hundred","five Hundred","six Hundred","seven Hundred","eight Hundred","nine Hundred");
т.е. "eighty" перенести в начало массива
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Старый 19.02.2013, 17:46   #7
Derrek
Новичок
 
Регистрация: 12.11.2012
Сообщений: 31
Вы сказали Спасибо: 12
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Ок, потестирую, если в логах 8ку найду сообщу о результате.
Вот что вышло:
Код:
[Feb 20 03:14:41 2013.54] [АвтоБот] Вроди нашел ту строчку: "~five Hundred eighty one!".
[Feb 20 03:14:41 2013.54] [АвтоБот] Распознал СОТНЮ: "Hundred".
[Feb 20 03:14:41 2013.55] [АвтоБот] Распознал 1: "five".
[Feb 20 03:14:41 2013.55] [АвтоБот] Распознал 3: "eighty".
[Feb 20 03:14:41 2013.56] [АвтоБот] Распознал 3: "eight".
[Feb 20 03:14:41 2013.56] [АвтоБот] Распознал 4: "one".
[Feb 20 03:14:41 2013.57] [АвтоБот] Итого в граммах: "509".
Код:
[Feb 20 03:14:47 2013.23] [АвтоБот] Вроди нашел ту строчку: "six Hundred eightym ".
[Feb 20 03:14:47 2013.24] [АвтоБот] Распознал СОТНЮ: "Hundred".
[Feb 20 03:14:47 2013.24] [АвтоБот] Распознал 1: "six".
[Feb 20 03:14:47 2013.25] [АвтоБот] Распознал 3: "eighty".
[Feb 20 03:14:47 2013.25] [АвтоБот] Распознал 3: "eight".
[Feb 20 03:14:47 2013.26] [АвтоБот] Итого в граммах: "608".
Код:
[Feb 20 04:06:40 2013.31] [АвтоБот] Вроди нашел ту строчку: "tone Hundred eighty msix".
[Feb 20 04:06:40 2013.32] [АвтоБот] Распознал СОТНЮ: "Hundred".
[Feb 20 04:06:40 2013.32] [АвтоБот] Распознал 1: "one".
[Feb 20 04:06:40 2013.33] [АвтоБот] Распознал 3: "eighty".
[Feb 20 04:06:40 2013.33] [АвтоБот] Распознал 3: "eight".
[Feb 20 04:06:40 2013.34] [АвтоБот] Распознал 4: "six".
[Feb 20 04:06:40 2013.34] [АвтоБот] Итого в граммах: "114".
Вот здесь:
Код:
foreach $tmp (@sl){
   if ($str3 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 3: \"$tmp\".\n", "success";
      $str3 = $tmp;
   }
}
нужно после присваивания как-то выйти из цикла проверки, иначе оно дальше проверяет и заменяет переменную $str3.

Код:
foreach $tmp (@sl){
   if ($str3 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 3: \"$tmp\".\n", "success";
   $str3 = $tmp;
   last;
   }
}
или

Код:
foreach $tmp (@sl){
   last if ($str3 =~/^.?$tmp.?$/) {
   message "[АвтоБот] Распознал 3: \"$tmp\".\n", "success";
   $str3 = $tmp;
   }
}
Протестирую первое наверно.


UPD ^_^
Код:
[Feb 20 14:47:24 2013.21] [АвтоБот] Вроди нашел ту строчку: "nthreed Hundred eighty ~niney".
[Feb 20 14:47:24 2013.21] [АвтоБот] Распознал СОТНЮ: "Hundred".
[Feb 20 14:47:24 2013.22] [АвтоБот] Распознал 1: "three".
[Feb 20 14:47:24 2013.22] [АвтоБот] Распознал 3: "eighty".
[Feb 20 14:47:24 2013.22] [АвтоБот] Распознал 4: "nine".
[Feb 20 14:47:24 2013.23] [АвтоБот] Итого в граммах: "389".

Последний раз редактировалось Derrek; 20.02.2013 в 17:42.
Derrek вне форума   Ответить с цитированием
Старый 22.02.2013, 08:29   #8
4epT
Админ
 
Аватар для 4epT
 
Регистрация: 10.12.2006
Сообщений: 4,370
Вы сказали Спасибо: 7
Поблагодарили 387 раз(а) в 240 сообщениях
Отправить сообщение для 4epT с помощью ICQ
По умолчанию

всё типо клёво теперь?
__________________
¤Config checker¤Руководство¤Файлы¤Конфиги¤Макросы¤
Быстро и качественно напишу конфиг (макрос) за yAD! Стучи!
4epT вне форума   Ответить с цитированием
Старый 22.02.2013, 09:04   #9
Derrek
Новичок
 
Регистрация: 12.11.2012
Сообщений: 31
Вы сказали Спасибо: 12
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Да, бот с первого раза проходил все проверки. Только админы как-то вычислили всех моих ботов всё равно =)) Забанили все акки по айпи. Ищу другой щас сервак.
Derrek вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:00. Часовой пояс GMT +3.