Плагин AntiBotkiller - диалог с НПЦ, требующим ввода чисел

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

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

mikky

Сообщение mikky »

он мне вот щас че выдал:
PvP Display Mode
Unknown #110010625: Done talking
Portal Exists: prt_fild07 -> prt_fild05 (132, 381) - (0)
[GM] Police: When you cancel this window, i count that as a Bad Answer.
Unknown #110010623: [Police]
Unknown #110010623: Input this number:
Unknown #110010623: > Ninety Eight
Unknown #110010623:
Unknown #110010623: (2 of 5)
Unknown #110010623: 80 seconds to respond
Unknown #110010623: Auto-continuing talking
[AntiBotkiller] 0 "".
[AntiBotkiller] 1 "[Police]".
[AntiBotkiller] 2 "Input this number:".
[AntiBotkiller] 3 "> Ninety Eight".
[AntiBotkiller] 4 " ".
NPC Exists: Unknown #110010623 (129, 374) (ID 110010623) - (0)
Unknown #110010623: Type 'talk num <number #>' to input a number.
[AntiBotkiller] Reacting to NPC. do Command relog
он по ходу дела просто перелогинивается если у него такой диалог выскакивает %) , сам антибот это позволяет.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

mikky
Етот плаг ещё нужно допереводить и доделать. Он хорош только как Каркас.
Gaara
Грамотный
Сообщения: 161
Зарегистрирован: Сб ноя 04, 2006 2:13 pm
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение Gaara »

А после релогина? Снова? Мб, какой баг специально в коде? Мол, защита от нубов? Хотя вряд ли..
http://rodb.rofan.ru/ - База по мерчам Раггейма, сервера Хаос. Обновление каждые ~35 минут.
В асю с вопросами по настройке ботов не писать.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Gaara
Не... Насколько знаю. Релогин Тупо помагает один раз. Следуйщий раз Джейл, или НПС опять попросит ответить.

Gaara
Нуно доделать немного. Сам скрипт АнтиБота могу дать, у меня он есть.
mikky

Сообщение mikky »

Просто антибот спрашивает не после каждого перехода на локацию а только иногда, причем не очень часто, то есть после перелога диалог с числами уже не появляется. Выходит что защиту можно обойти даже не вводя никакие цифры. Я то же самое попробовал из под клиента - тоже помогло. Кароче - ка мне пока кажется защита там вообще нубская.
Gaara
Грамотный
Сообщения: 161
Зарегистрирован: Сб ноя 04, 2006 2:13 pm
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение Gaara »

kLabMouse, м-м, ну вообще ко мне это не очень относится - я вообще ни разу не встречал серваков с такой защитой, да и не планируй иметь с ними встреч в ближайшее время. Просто увидел тему, интересной показалась.
А писать я не умею вообще практически %)) Так что сорри.
Так почему скрипт-то этот не вводит числа, а релогинится? В коде вот такая фигня:
sub onNPCAction
{
if($config{AntiBotkiller})
{
$code = reply();
message "[AntiBotkiller] Reacting to NPC. type Message \"$code\".\n", "success";
my $cmd = "talk num $code";
Commands::run($cmd);
}
else
{
message "[AntiBotkiller] Reacting to NPC. do Command relog\n", "success";
Commands::run("relog");
}
}
Т.е., перелогинивается он только в определённом случае, а по дефолту должен вводить текст. (Только яне понимаю, какие условия должны быть, чтобы бот перелогинивался - в коде плохо понимаю) Неужели никогда нет таких условий, чтобы бот ввёл текст?
http://rodb.rofan.ru/ - База по мерчам Раггейма, сервера Хаос. Обновление каждые ~35 минут.
В асю с вопросами по настройке ботов не писать.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Ггг... :D

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

if($config{AntiBotkiller}) 
Если в config.txt есть строчка...

AntiBotkiller 1

...то он вводит цифры, иначе - перелогинивается.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Gaara
Грамотный
Сообщения: 161
Зарегистрирован: Сб ноя 04, 2006 2:13 pm
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение Gaara »

Отёпт. Аффтар, ты фписал? ж)
http://rodb.rofan.ru/ - База по мерчам Раггейма, сервера Хаос. Обновление каждые ~35 минут.
В асю с вопросами по настройке ботов не писать.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
ЫЫ. Сам не заметил!
moonlight
Новичок
Сообщения: 11
Зарегистрирован: Вс фев 04, 2007 3:02 am

Сообщение moonlight »

Последний раз редактировалось moonlight Пн фев 19, 2007 7:27 pm, всего редактировалось 1 раз.
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

moonlight
раз заработало поделись с другими.
moonlight
Новичок
Сообщения: 11
Зарегистрирован: Вс фев 04, 2007 3:02 am

Сообщение moonlight »

=)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

moonlight
Мда, конструктивный подход... Анреспект. :evil:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
moonlight
Новичок
Сообщения: 11
Зарегистрирован: Вс фев 04, 2007 3:02 am

Сообщение moonlight »

карочи исправляюсь. вот тот аотибот

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

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

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 = ("один", 1, "два", 2, "три", 3, "четыре", 4, "пять", 5, "шесть", 6, "семь", 7, "восемь", 8, "девять", 9, "десять", 10, "одиннадцать", 11, "двенадцать", 12, "тринадцать", 13, "четырнадцать", 14, "пятнадцать", 15,"шестнадцать", 16,"семнадцать", 17, "восемнадцать", 18, "девятнадцать", 19 ,"двадцать", 20, "тридцать", 30, "сорок", 40, "пятьдесят", 50, "шестьдесят", 60, "семьдесят", 70, "восемьдесят", 80, "девяносто", 90,"сто",100,"двести",200,"триста",300,"четыреста",400,"пятьсот",500,"шестьсот",600,"семьсот",700,"восемьсот",800,"девятьсот",900);
	my @sl = ("один","два","три","четыре","пять","шесть","семь","восемь","девять","десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот");
#Заменяем злоебучие символы, написанные в латинице
	$str =~ tr/m/т/;
	$str =~ tr/e/е/;
	$str =~ tr/o/о/;
	$str =~ tr/a/а/;
	$str =~ tr/u/и/;
	$str =~ tr/p/р/;
	$str =~ tr/c/с/;
	message "[АвтоБот] Перевели на русский: \"$str\".\n", "success";

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

my $tmp;

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

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

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


$code = $sn{$str1}+$sn{$str2}+$sn{$str3};

message "[АвтоБот] Итого в граммах: \"$code\".\n", "success";

return $code;


}

return 1;
moonlight
Новичок
Сообщения: 11
Зарегистрирован: Вс фев 04, 2007 3:02 am

Сообщение moonlight »

пара каментов:
определяем строчку в которой антибот пишет: 3 или 4 в моем случае
регекспами переводим все на русский, далее той же матерью, отделяем от мусора слова, определяем цифры, ждем и пишем ответ.
Ответить