randomwalk - 1й командой движение в случайную точку на карте

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

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

dimmka
Энтузиаст
Сообщения: 87
Зарегистрирован: Вс ноя 19, 2006 12:40 pm

randomwalk - 1й командой движение в случайную точку на карте

Сообщение dimmka »

То есть так как кора калькулирует маршрут в рандомную точку при ai auto, только нужно сделать это при ai manual один раз. Вопрос как?

[mod="piroJOKE"]ниже в теме - плагин randomwalk, вводящий команду rw - аккуратное решение сабжевого вопроса 8) [/mod]
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Конечно, можно просто от фонаря сделать move с рандомными координатами, но это неверно: можно угодить в непроходимый блок. Верно мыслишь, афтар. :)

Добавлено спустя 28 минут 51 секунду:

Похоже, просто вызвать функцию внутри ОК не выйдет....


Кстати. А нафига это вообще надо? :twisted:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
dimmka
Энтузиаст
Сообщения: 87
Зарегистрирован: Вс ноя 19, 2006 12:40 pm

Сообщение dimmka »

Ну, допустим надо согнать пару ботов в один город по одному макросу...
Для всех одни координаты - палево
Для каждого прописывать отдельные - геморно

короче чтоб не бросаться в глаза 8)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Пока единственное, чем могу помочь, это показать, как ОК считает случайные координаты.

\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) );
		}
	}
} 
В общем, берутся случайные точки на карте, и ОК пытается проложить к ним маршрут. Если точка оказывается недоступной, ОК хватает другие координаты, и проверяет заново. Она пробует это сделать до 500 раз ))) и если это не выходит - объявляет, что на этой карте бегать невозможно - и обламывается.

Добавлено спустя 3 минуты 19 секунд:

Можно попытаться сделать следующее: поставить в локМап нужный город, и разрешить route_randomWalk_inTown. А по достижению нужной карты (города) дать ОК несколько секунд побегать по нему, а потом уже сделать ai off.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
dimmka
Энтузиаст
Сообщения: 87
Зарегистрирован: Вс ноя 19, 2006 12:40 pm

Сообщение dimmka »

Можно попытаться сделать следующее: поставить в локМап нужный город, и разрешить route_randomWalk_inTown. А по достижению нужной карты (города) дать ОК несколько секунд побегать по нему, а потом уже сделать ai off.
Я уже так думал.. Похоже это единственный из возможных способов.

ОК, спасибо :)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Если получится, расскажешь, как оно.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

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

допустим мы знаем что на неком квадрате мы тосно можем стоять, тогда пишем:

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

do move @rand (x, x+5) @rand (y, y+5)

или можно создать штук 20 точек:

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

do move @random ("x1 y1", "x2 y2", ..., "x20 y20")
правда тут существует вероятнсть, что 2 бота станут в 1 точку :)
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Free Goods
Разработчик
Сообщения: 32
Зарегистрирован: Пт дек 22, 2006 8:31 pm
Сервер RO:: iRo
Контактная информация:

Сообщение Free Goods »

Почему бы не взять из AI, например так.

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 раз.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Проверял ли ты работоспособность кода, Free Goods?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Free Goods
Разработчик
Сообщения: 32
Зарегистрирован: Пт дек 22, 2006 8:31 pm
Сервер RO:: iRo
Контактная информация:

Сообщение Free Goods »

Извиняюсь, забыл добавить ссылку на Globals. Теперь проверил, всё работает.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Отлично, это (может быть) даже мне пригодиццо. :Yahoo!:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
dimmka
Энтузиаст
Сообщения: 87
Зарегистрирован: Вс ноя 19, 2006 12:40 pm

Сообщение dimmka »

Free Goods

Большое спасибо за разработку!
Ответить