[mod="piroJOKE"]ниже в теме - плагин randomwalk, вводящий команду rw - аккуратное решение сабжевого вопроса
![Cool 8)](./images/smilies/dirol.gif)
Модератор: 4epT
Код: Выделить всё
##### 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) );
}
}
}
Код: Выделить всё
do move @rand (x, x+5) @rand (y, y+5)
Код: Выделить всё
do move @random ("x1 y1", "x2 y2", ..., "x20 y20")
Код: Выделить всё
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);
}