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

плагин telesearch.pl для поиска мобов телепортом

Добавлено: Чт дек 07, 2006 2:47 pm
Gaara
Ни для кого не секрет, что в самой коре уже есть такая встроенная фича, и включается она так:
teleportAuto_search 1
Но работает она далеко не идеально. У меня вообще не заработала, если честно. Для этого и был создан плагин неким [• Fenris™ •], а также его модификация, созданная vivi. Оригиналы тем можно посмотреть здесь и здесь.
В общем, сами плагины найдёте в самом низу сообщения. А отличаются версии 1 и 2 поддержкой разных версий бота. Первая версия требует кору версии 1.6.1 и выше, вторая - 1.9.3.
А чтобы плагин включить, делаем следующее (для обоих версий плагина):
1) Пихаем сам файлик плагина в папку plugins.
2) Пописываем в timeouts.txt строчку ai_teleport_search 5. Ну, число можно подставить любое. Оно означает, сколько секунд бот будет гулять и искать моба до следующего телепорта.
3) Прописываем в config.txt - teleport_search 1.
3а) teleport_search_minSp # - минимальное кол-во сп, нужное для того, чтобы бот телепортился. Работает только если teleportAuto_useSkill имеет значение 1. (Только для v2!)
4) Ставим teleportAuto_search 0
5) route_randomWalk должен иметь значение 1.
Всё. Наслаждаемся работой плагина. Поправьте, если в чём-то ошибся.
---
Первая версия, telesearch.pl:

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

#teleserach.pl OpenKore tele-searching plugin
#Plugin by: [? Fenris? ?], Openkore
#Revision 1
#Under Openkore 1.6.1

package telesearch;

use strict;
use Plugins;
use Globals;
use Settings;
use Log qw(message);
use Utils;

our $tele = 0;
our $cancelled = 0;

Plugins::register('telesearch', 'Alternative tele-searching plugin.', \&unload);
my $ai_idle_hook = Plugins::addHook('AI_pre', \&idleCheck);

sub unload {
        Plugins::delHook('AI_pre', $ai_idle_hook);
}

sub idleCheck {
	
	if ($ai_seq[0] eq "move" && $ai_seq[1] eq "route" && $ai_seq[2] eq "" && $config{'teleport_search'} && $field{'name'} eq $config{'lockMap'} && $tele == 0) {
		$timeout{'ai_teleport_search'}{'time'} = time;
		$tele = 1;
		$cancelled = 0;
	} elsif ($ai_seq[0] eq "move" && $ai_seq[1] eq "route" && $ai_seq[2] eq "" && $config{'teleport_search'} && $field{'name'} eq $config{'lockMap'} && timeOut(\%{$timeout{'ai_teleport_search'}}) && $tele == 1) {
		message("Tele-searching...\n","info");
		main::useTeleport(1);
		$tele = 0;
	} elsif (timeOut($timeout{'ai_teleport_search'}) && $cancelled != 1) {
		$tele = 0;
		$cancelled = 1;
	}
}

return 1;
Вторая версия, tele-search-v2.pl:

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

#########################################################################
#  OpenKore - Telesearch Plugin v2
#  Copyright (c) 2006 ViVi
#
# This plugin is licensed under Creative Commons "Attribution-NonCommercial-ShareAlike 2.5"
#
# You are free:
#    * to copy, distribute, display, and perform the work
#    * to make derivative works
# 
# Under the following conditions:
#    * by Attribution: You must attribute the work in the manner specified by the author or licensor.
#    * Noncommercial: You may not use this work for commercial purposes.
#    * Share Alike: If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.
#
#    * For any reuse or distribution, you must make clear to others the license terms of this work.
#    * Any of these conditions can be waived if you get permission from the copyright holder.
#
# Your fair use and other rights are in no way affected by the above.
#
# This is a human-readable summary of the Legal Code ( Full License: http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode ). 
# Disclaimer: http://creativecommons.org/licenses/disclaimer-popup?lang=en
# 
#########################################################################
package telesearchV2;

use strict;
use Plugins;
use Settings;
use Log qw(message error);
use Utils;
use AI;
use Globals;

Plugins::register('Tele-Search v2', 'Alternative tele-search v2.', \&unload);
my $hooks = Plugins::addHooks(
	['AI_pre',\&search, undef],
	['map_loaded', \&MapLoaded, undef],
	['packet/sendMapLoaded', \&MapLoaded, undef]    
);

my ($maploaded,$allow_tele);

sub unload {
    Plugins::delHooks($hooks);
	message("Unloaded Teleport search v2.\n","info");
}
       
sub MapLoaded {
	$maploaded = 1;
}

sub checkIdle {
	if (AI::action eq "move" && AI::action(1) eq "route" || AI::action eq "route" && !AI::inQueue("attack","skill_use")) {
		return 1;
	} else {
		return 0;
	}
}

sub checkSp {
	if ($config{'teleportAuto_useSkill'} == 1) {
		if ($config{'teleport_search_minSp'} && $config{'teleport_search_minSp'} <= $char->{sp}) {
			return 1;
		} elsif (!$config{'teleport_search_minSp'} && $char->{sp} >= 10) {
			error ("teleport_search_minSp is missing ! Using default value (10 sp)!\n");
			$config{'teleport_search_minSp'} = 10;
			return 1;
		} else {
			return 0;
		}
	} elsif ($config{'teleportAuto_useSkill'} > 1) {
		return 1;
	}
}
sub search {
	if ($config{'teleport_search'} && Misc::inLockMap() && $timeout{'ai_teleport_search'}{'timeout'}) {
		message("TS Debug: Config set, we're in lockMap and timeout is set.\n") if $config{'teleport_search_debug'};
		if ($maploaded && !$allow_tele)  {
			message("TS Debug: Map is loaded but we're not allowed to teleport.\n") if $config{'teleport_search_debug'};
			$timeout{'ai_teleport_search'}{'time'} = time;
			$allow_tele = 1;
                        
		# Check if we're allowed to teleport, if map is loaded, timeout has passed and we're just looking for targets.
		} elsif ($maploaded && $allow_tele && timeOut($timeout{'ai_teleport_search'}) && checkIdle() && checkSp()) {
			message("Attemping to tele-search.\n","info");
			$allow_tele = 0;
			$maploaded = 0;
			# Attempt to teleport, give error and unload plugin if we cant.
			if (!Misc::useTeleport(1)) {
				error ("Fatal error, we dont have the skill nor items to teleport! - Unloading plugin.\n");
				unload();
				return;
			} 

		# We're doing something else besides looking for monsters, reset the timeout.
		} elsif (!checkIdle()) {
			message("TS Debug: We're doing something else besides looking for a target now.\n") if $config{'teleport_search_debug'};
			$timeout{'ai_teleport_search'}{'time'} = time;
		}
		
        # Oops! timeouts.txt is missing a crucial value, lets use the default value ;)
        } elsif (!$timeout{'ai_teleport_search'}{'timeout'}) {
			error ("timeouts.txt missing setting! Using default timeout now!\n");
			$timeout{'ai_teleport_search'}{'timeout'} = 5;
			return;
        }
}

return 1;

Добавлено: Пн май 14, 2007 8:20 pm
Koala
Все работает прекрасно.
Такой вопрос, а если чар бьёт моба и задержка указаня в "ai_teleport_search" заканчиваетсья, бот будет телепортироваться не добив моба?

Добавлено: Пн май 14, 2007 9:12 pm
piroJOKE
Насколько я помню - нет. Его логика срабатывает только когда у Kore статус idle, route, и еще что-то "походное".

* * *
sub checkIdle {
if (AI::action eq "move" && AI::action(1) eq "route" || AI::action eq "route" && !AI::inQueue("attack","skill_use")) {
return 1;
} else {
return 0;
}

Добавлено: Пн май 14, 2007 11:09 pm
CrusH
может у меня руки кривые, но...
сделал все по описанию в 1м посте:
timeouts.txt (ai_teleport_search 1)
config.txt (
teleport_search 1
teleport_search_minSp 20%
teleportAuto_search 0)

и получилось нечто странное...
смначала бот начал телепортироваться, как нашел моба - стал просто ходить и в течение часа на телепорт 0 внимания...

Добавлено: Чт май 24, 2007 10:06 am
yonah
sub checkIdle {
if (AI::action eq "move" && AI::action(1) eq "route" || AI::action eq "route" && !AI::inQueue("attack","skill_use")) {
return 1;
} else {
return 0;
}
}

заменить на
sub checkIdle {
if (AI::action eq "move" && AI::action(1) eq "route" || AI::action eq "route" && !AI::inQueue("attack","skill_use","items_take","items_gather")) {
return 1;
} else {
return 0;
}
}

Или любую байду по желанию иначе при коротком таймауте он не будет подбирать лут а варпнется.

Добавлено: Пн май 28, 2007 10:02 am
dumb43
в кофиг добавил
teleport_search 1


route_randomWalk 1
teleportAuto_useSkill 0
teleportAuto_search 0

в тай аутс добавил

ai_teleport_search 5

ну и в папочку плагинс добавил файл с расширением пл и второй версий этого плагина.

добавил в тай аут строчку, добавил в конфиг. впапку плагинс положил файлик *.pl. в конфиге прописано использование вингов для телепорта. но не работает. какую ошибку я мог сделать?

Добавлено: Пн май 28, 2007 10:27 am
piroJOKE
Тут еще вот что может быть, если я правильно помню, он работает только на lockMap'е. (?)
Т.е., если у тебя локМап не установлен - телепортов не будет. (?)

* * *

( ЗЫ: Идея халявного телепоиска на некоторых серверах, насчет @-команд: viewtopic.php?p=23934#23934 )

Добавлено: Пн май 28, 2007 12:13 pm
dumb43
и локмап стоит=)

Добавлено: Пн май 28, 2007 12:22 pm
piroJOKE
Ну хз. Я взял текущий OpenKore, убедился в том что чар бегает и команда tele исполняется. Поставил локМап. Поставил плагин. И добавил всего лишь две строки - teleport_search 1 в конфиг и ai_teleport_search 5 в таймауты. Вуаля - работает.

* * *

ЗЫ: Работает, но паршиво. Отчего-то иногда ТП затыкается, и вправду...

Добавлено: Пн май 28, 2007 12:40 pm
dumb43
а как вариант такой макрос?
automacro telesearch {
console /Target died/
call telemacro
}

macro telemacro {
pause 0.1
do tele
}


automacro telesearch2 {
run-once 1
timeout 5
location xxx
notMonster xxx, xxx, xxx
call telemacro2
}



macro telemacro2 {
pause 0.1
do tele
release telesearch2
}

Добавлено: Чт май 31, 2007 12:34 pm
yonah
макросы лучше без крайней необходимости не юзать

Добавлено: Пт окт 12, 2007 1:30 am
zeleboba
Работает только если teleportAuto_useSkill имеет значение 1. (Только для v2!)
Как быть со значением 3? Оно проходит или нет?

Добавлено: Пт окт 12, 2007 8:58 am
piroJOKE
zeleboba
Это с "экономией SP"? Кажется нет. (Однако я не помню, на чем основано то категоричное заявление, что "не работает по другому"). Но попробуй, это же пару минут времени.

Добавлено: Пт окт 12, 2007 11:24 am
zeleboba
:) Да дело не во времени, просто кору настраиваю с нуля, вот и наткнулся на это. Настрою, проверю, отпишусь

Добавлено: Вс окт 14, 2007 7:13 pm
zeleboba
Офф: 3ий режим работает, сп не тратится