для лукообразных

Всё, что касается макро-плагина.

Модератор: 4epT

Правила форума
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

для лукообразных

Сообщение Rumata »

писал я уже в вопросах что в новой коре есьт глюк при 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 секунд:

вот едрить потестил еще млин АИ прерывает макрос собака :( что делать?
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

Написать аналогичный плагин(там уж ничего не перебьет) или попробовать поставить команды макроса в скобки - [].
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

бесполезно в скобки

кора сама себя перебивает

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 и все равно стоит гад на месте.
пока единственное что хотелось бы узнать как сделать вышенаписанный макрос не прерываемым корой....
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

ну или на крайняк как сделать плагин rwto не прерываемым, вот его код (довольно простенький) :

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

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); 
}
запуститься он умпевает, пишет Walking to ххх,уууу а потом умирает, как сделать чтоб ai_route($field{name}, $randX, $randY успело выполниться а потом уже включился аи атаки?
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2793
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

мне кажется тут косяк:

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

attackOnRoute => 2
попробуй вставить паузу:

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

sleep 3;
attackOnRoute => 2
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

ну вообче то
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;
				}
			}
		}
координаты не повторяет, но я вообче херею от всего этого уже %)
Ответить