Написал плагин.
Идея:
Имитация игрока, желающего выжать максимум опыта за время игры. Ни о какой защите от игрока телепортом, пока он нас не увидел, речи не идёт.
Как работает:
- Если бот атакует моба, и в зоне видимости появляется игрок, то бот добивает моба, топает к луту, подбирает его и телепортируемся.
- Если бот идёт к луту, и в зоне видимости появляется игрок, то мы подходим к луту, подбираем его и телепортируемся.
- Если бот просто ходит(или идёт к мобу чтобы его атаковать) и кто-то появляется в зоне видимости, мы телепортируемся.
Применение:
На хай рейт серверах часто если в зоне видимости появляется кто-то, то мы телепортируемся, чтобы найти место где больше мобов(так мы стараемся побыстрей прокачаться). Бот будет имитировать такого игрока.
plugins\TeleportAutoUnsafe.pl:
Код: Выделить всё
# Unsafe teleportAuto_allPlayers
# © _vit
# 7.11.2008
# Version 0.01
package TeleportAutoUnsafe;
use strict;
use Plugins;
use Utils;
use Globals;
use Log qw(message);
use Time::HiRes qw(usleep);
Plugins::register('TeleportAutoUnsafe', 'Unsafe teleportAuto_allPlayers', \&unload);
my $hook = Plugins::addHook('AI_pre', \&teleport);
sub unload {
Plugins::delHook('AI_pre', $hook);
}
sub teleport {
my $map_name_lu = $field{name}.'.rsw';
if (!$cities_lut{$map_name_lu} && !AI::inQueue("storageAuto", "buyAuto", "items_take") && !AI::is("attack") && $config{teleportAuto_allPlayers_unsafe}
&& ($config{'lockMap'} eq "" || $field{name} eq $config{'lockMap'})
&& Utils::DataStructures::binSize(\@playersID) && timeOut($AI::Temp::Teleport_allPlayers, 0.75)) {
my $ok;
if ($config{teleportAuto_allPlayers_unsafe} >= 2) {
if (!isSafe()) {
$ok = 1;
}
} else {
foreach my Actor::Player $player (@{$playersList->getItems()}) {
if (!existsInList($config{teleportAuto_notPlayers}, $player->{name}) && !existsInList($config{teleportAuto_notPlayers}, $player->{nameID})) {
$ok = 1;
last;
}
}
}
if ($ok) {
message ("Teleporting to avoid all players\n");
usleep(500000);
Misc::useTeleport(1);
$ai_v{temp}{clear_aiQueue} = 1;
$AI::Temp::Teleport_allPlayers = time;
}
}
}
return 1;
В конфиге:
Код: Выделить всё
teleportAuto_allPlayers 0
teleportAuto_allPlayers_unsafe 1
И на всякий случай: