писал я уже в вопросах что в новой коре есьт глюк при no LOS :
No LOS from (283, 84) to target (275, 75); moving to (283, 84)
No LOS from (283, 84) to target (275, 75); moving to (283, 84)
No LOS from (283, 84) to target (275, 75); moving to (283, 84)
No LOS from (283, 84) to target (275, 75); moving to (283, 84)
тоесть аи пытается пойти в туже клетку на которой стоит уже, если цель неподвижно он будет стоять вечно. раз уж никто не среагировал на мой вопрос ранее, а расковырять сорелогик у меня не получается вот вам выход из ситуации млинн:
automacro noLOS {
console /No LOS from \((.*)\, (.*)\) to target (.*)/i
timeout 10
exclusive 1
call noLOSexit
}
macro noLOSexit {
do rwto $.lastMatch1 $.lastMatch2 5
}
мне этот метод не нравиться абсолютно да он и действует иногда, что же изменили в АИ млин так?
зы плагинчик rwto не забудьте кинуть в папку плагов....
Добавлено спустя 30 минут 36 секунд:
вот едрить потестил еще млин АИ прерывает макрос собака что делать?
для лукообразных
Модератор: 4epT
Правила форума
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
бесполезно в скобки
кора сама себя перебивает
Attacking: Monster Anopheles (0)
No LOS from (280, 46) to target (266, 51); moving to (271, 49)
New target was choosen
Attacking: Monster Anopheles (0)
No LOS from (280, 46) to target (266, 51); moving to (271, 49)
New target was choosen
Добавлено спустя 23 минуты 54 секунды:
вобчем две проблемы:
1. что кора выбирает ут же точку на которой стоит и зацикливается на ней.
2. что если даже она выбирает другую точку New target was choosen обнуляет движение ( я так понимаю) и она опять начинает просчитывать LOS, фррр зацикливание какоето.
Добавлено спустя 30 минут 22 секунды:
и 3. даже если New target was choosen не перебивает ( я отрубил эту хрень для теста) то перебивает No LOS from и все равно стоит гад на месте.
пока единственное что хотелось бы узнать как сделать вышенаписанный макрос не прерываемым корой....
кора сама себя перебивает
Attacking: Monster Anopheles (0)
No LOS from (280, 46) to target (266, 51); moving to (271, 49)
New target was choosen
Attacking: Monster Anopheles (0)
No LOS from (280, 46) to target (266, 51); moving to (271, 49)
New target was choosen
Добавлено спустя 23 минуты 54 секунды:
вобчем две проблемы:
1. что кора выбирает ут же точку на которой стоит и зацикливается на ней.
2. что если даже она выбирает другую точку New target was choosen обнуляет движение ( я так понимаю) и она опять начинает просчитывать LOS, фррр зацикливание какоето.
Добавлено спустя 30 минут 22 секунды:
и 3. даже если New target was choosen не перебивает ( я отрубил эту хрень для теста) то перебивает No LOS from и все равно стоит гад на месте.
пока единственное что хотелось бы узнать как сделать вышенаписанный макрос не прерываемым корой....
ну или на крайняк как сделать плагин rwto не прерываемым, вот его код (довольно простенький) :
запуститься он умпевает, пишет Walking to ххх,уууу а потом умирает, как сделать чтоб ai_route($field{name}, $randX, $randY успело выполниться а потом уже включился аи атаки?
Код: Выделить всё
package rwto;
use strict;
use Globals;
use Field;
use AI;
use Log qw(message warning error debug);
use Translation;
Plugins::register('rwto', 'walks to a random point in radius 10', \&Unload);
my $chooks = Commands::register(
['rwto', "RW plugin", \&commandHandler]
);
sub commandHandler {
my (undef, $args) = @_;
my ($arg1, $arg2, $arg3) = $args =~ /^(\d+) (\d+).?(\d+)?$/;
if ($arg1 eq "" || $arg2 eq "") {
error T("Wrong syntax\n");
}else{
my ($randX, $randY);
$arg3=($arg3 eq ""?$config{rwto_rad}:$arg3);
AI::clear(qw/move route mapRoute/);
my $i = 500;
do {
$randX = $arg1+int(rand($arg3)-$arg3/2);
$randY = $arg2+int(rand($arg3)-$arg3/2);
} while (--$i && !$field->isWalkable($randX, $randY));
if ($i) {
message TF("Walking to %i %i\n", $randX, $randY);
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);
}
- 4epT
- macro-маньячина
- Сообщения: 2793
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
мне кажется тут косяк:
попробуй вставить паузу:
Код: Выделить всё
attackOnRoute => 2
Код: Выделить всё
sleep 3;
attackOnRoute => 2
ну вообче то
ai_route($field{name}, $randX, $randY,
maxRouteTime => $config{route_randomWalk_maxRouteTime},
attackOnRoute => 2,
noMapRoute => ($config{route_randomWalk} == 2 ? 1 : 0) );
единая строка , но я поигрался и с ней - нифига не выхидит
Добавлено спустя 1 час 30 минут 35 секунд:
ндааа вобчем меняем атак.рм, это:
на это:
координаты не повторяет, но я вообче херею от всего этого уже
ai_route($field{name}, $randX, $randY,
maxRouteTime => $config{route_randomWalk_maxRouteTime},
attackOnRoute => 2,
noMapRoute => ($config{route_randomWalk} == 2 ? 1 : 0) );
единая строка , но я поигрался и с ней - нифига не выхидит
Добавлено спустя 1 час 30 минут 35 секунд:
ндааа вобчем меняем атак.рм, это:
Код: Выделить всё
# Determine which of these spots are snipable
my $best_spot;
my $best_dist;
for my $spot (@stand) {
# Is this spot acceptable?
# 1. It must have LOS to the target ($realMonsterPos).
# 2. It must be within $config{followDistanceMax} of
# $masterPos, if we have a master.
if (
(($config{attackCanSnipe} && checkLineSnipable($spot, $realMonsterPos))
|| checkLineWalkable($spot, $realMonsterPos))
&& $field->isWalkable($spot->{x}, $spot->{y})
&& (!$master || round(distance($spot, $masterPos)) <= $config{followDistanceMax})
) {
my $dist = distance($realMyPos, $spot);
if (!defined($best_dist) || $dist < $best_dist) {
$best_dist = $dist;
$best_spot = $spot;
}
}
}
Код: Выделить всё
# Determine which of these spots are snipable
my $best_spot;
my $best_dist;
for my $spot (@stand) {
# Is this spot acceptable?
# 1. It must have LOS to the target ($realMonsterPos).
# 2. It must be within $config{followDistanceMax} of
# $masterPos, if we have a master.
if (
(($config{attackCanSnipe} && checkLineSnipable($spot, $realMonsterPos))
|| checkLineWalkable($spot, $realMonsterPos))
&& $field->isWalkable($spot->{x}, $spot->{y}) && ($realMyPos->{x} != $spot->{x} && $realMyPos->{y} != $spot->{y})
&& (!$master || round(distance($spot, $masterPos)) <= $config{followDistanceMax})
) {
my $dist = distance($realMyPos, $spot);
if (!defined($best_dist) || $dist < $best_dist) {
$best_dist = $dist;
$best_spot = $spot;
}
}
}