randomwalk - 1й командой движение в случайную точку на карте
Модератор: 4epT
randomwalk - 1й командой движение в случайную точку на карте
То есть так как кора калькулирует маршрут в рандомную точку при ai auto, только нужно сделать это при ai manual один раз. Вопрос как?
[mod="piroJOKE"]ниже в теме - плагин randomwalk, вводящий команду rw - аккуратное решение сабжевого вопроса [/mod]
[mod="piroJOKE"]ниже в теме - плагин randomwalk, вводящий команду rw - аккуратное решение сабжевого вопроса [/mod]
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Пока единственное, чем могу помочь, это показать, как ОК считает случайные координаты.
\src\AI\CoreLogic.pm
В общем, берутся случайные точки на карте, и ОК пытается проложить к ним маршрут. Если точка оказывается недоступной, ОК хватает другие координаты, и проверяет заново. Она пробует это сделать до 500 раз ))) и если это не выходит - объявляет, что на этой карте бегать невозможно - и обламывается.
Добавлено спустя 3 минуты 19 секунд:
Можно попытаться сделать следующее: поставить в локМап нужный город, и разрешить route_randomWalk_inTown. А по достижению нужной карты (города) дать ОК несколько секунд побегать по нему, а потом уже сделать ai off.
\src\AI\CoreLogic.pm
Код: Выделить всё
##### RANDOM WALK #####
sub processRandomWalk {
if (AI::isIdle && (!$char->{homunculus} || AI::Homunculus::isIdle()) && $config{route_randomWalk} && !$ai_v{sitAuto_forcedBySitCommand}
&& (!$cities_lut{$field{name}.'.rsw'} || $config{route_randomWalk_inTown})
&& length($field{rawMap}) ) {
my ($randX, $randY);
my $i = 500;
do {
$randX = int(rand($field{width}) + 1);
$randX = int($config{'lockMap_x'} - $config{'lockMap_randX'} + rand(2*$config{'lockMap_randX'}+1)) if ($config{'lockMap_x'} ne '' && $config{'lockMap_randX'} ne '');
$randY = int(rand($field{height}) + 1);
$randY = int($config{'lockMap_y'} - $config{'lockMap_randY'} + rand(2*$config{'lockMap_randY'}+1)) if ($config{'lockMap_y'} ne '' && $config{'lockMap_randY'} ne '');
} while (--$i && !$field->isWalkable($randX, $randY));
if (!$i) {
error T("Invalid coordinates specified for randomWalk (coordinates are unwalkable); randomWalk disabled\n");
$config{route_randomWalk} = 0;
} else {
message TF("Calculating random route to: %s(%s): %s, %s\n", $maps_lut{$field{name}.'.rsw'}, $field{name}, $randX, $randY), "route";
ai_route($field{name}, $randX, $randY,
maxRouteTime => $config{route_randomWalk_maxRouteTime},
attackOnRoute => 2,
noMapRoute => ($config{route_randomWalk} == 2 ? 1 : 0) );
}
}
}
Добавлено спустя 3 минуты 19 секунд:
Можно попытаться сделать следующее: поставить в локМап нужный город, и разрешить route_randomWalk_inTown. А по достижению нужной карты (города) дать ОК несколько секунд побегать по нему, а потом уже сделать ai off.
- 4epT
- macro-маньячина
- Сообщения: 2792
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
допустим мы знаем что на неком квадрате мы тосно можем стоять, тогда пишем:
или можно создать штук 20 точек:
правда тут существует вероятнсть, что 2 бота станут в 1 точку
Код: Выделить всё
do move @rand (x, x+5) @rand (y, y+5)
или можно создать штук 20 точек:
Код: Выделить всё
do move @random ("x1 y1", "x2 y2", ..., "x20 y20")
-
- Разработчик
- Сообщения: 32
- Зарегистрирован: Пт дек 22, 2006 8:31 pm
- Сервер RO:: iRo
- Контактная информация:
Почему бы не взять из AI, например так.
randomwalk.pl
rw - бежать в случайную точку.
randomwalk.pl
rw - бежать в случайную точку.
Код: Выделить всё
package randomwalk;
use strict;
use Globals;
use Field;
use AI;
Plugins::register('randomwalk', 'walks to a random point on the map', \&Unload);
my $chooks = Commands::register(
['rw', "RW plugin", \&commandHandler]
);
sub commandHandler {
my ($randX, $randY);
my $i = 500;
do {
$randX = int(rand($field{width}) + 1);
$randY = int(rand($field{height}) + 1);
} while (--$i && !$field->isWalkable($randX, $randY));
if ($i) {
ai_route($field{name}, $randX, $randY,
maxRouteTime => $config{route_randomWalk_maxRouteTime},
attackOnRoute => 2,
noMapRoute => ($config{route_randomWalk} == 2 ? 1 : 0) );
}
}
sub Unload {
Commands::unregister($chooks);
}
Последний раз редактировалось Free Goods Сб дек 22, 2007 2:01 pm, всего редактировалось 1 раз.
-
- Разработчик
- Сообщения: 32
- Зарегистрирован: Пт дек 22, 2006 8:31 pm
- Сервер RO:: iRo
- Контактная информация: