Бот совершает лишние движения при атаке мобов

Общие вопросы по OpenKore обсуждаются здесь. Можно сказать, что это - основной раздел форума.
Возник вопрос? Вам сюда.

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

Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid » Пн янв 29, 2007 1:24 pm

japplegame писал(а):Люди, не парьте мозг себе и другим. Бот уже давно идет туда куда моб ПРИДЕТ, а не туда где он находится в текущий момент. Определяются эти координаты по пакету move, который шлет сервер, когда мобы или другие персонажи двигаются.
И как раз именно из-за этого возникают непонятки с агрессивными монстрами.
Например, игрок стоит в точке A, а моб в точке B. Затем моб начинает двигаться к точке C, персонаж идет туда же. В это время моб дошел до С раньше игрока и поворачивает ему на встречу в точку D. Игрок в это время доходит до С, видит, что моб пошел в D и идет к D. Обычно на этом дело и заканчивается, но частенько одного такого цикла мало и моб с игроком могут долго плясать.

Самый верный вариант, это обнаружить, что моб находится в прямой досягаемости игрока и один раз послать пакет атаки. Далее сервер будет уже сам вести персонажа за мобом, как и происходит в реальном клиенте. Но в таком решении есть свои подводные камни, которые тоже надо обходить.

В связи с этим 2 вопроса...

1)
Как происходит атака в клиенте?
Пока что я вижу что клиент посылает пакеты move при атаке, и только когда доходит до моба - пакеты атаки.

2) Что значит "обнаружить, что моб находится в прямой досягаемости игрока и один раз послать пакет атаки."
Меня интересует конкретно что значит "моб находится в определнном месте"... это не будет звучать так глупо если посмотерть код АИ атаки.

Там есть фактически 3 положения моба:
$target->{pos} откуда идет моб
$target->{pos_to} куда идет моб
и realMonsterPos который вычисляется - реальное положение моба на отрезке пути.

Так вот, при атаке, проверяется рсстояние не между реальными положениями игрока и моба, а между точками куда идут игрок и моб...
т.е. если они нахдились в точках А и В, и идут друг к другу и встретились в середине, то атакие не будет так как дистанция между точками в которые они идут равна А-В, хотя реально они будут в 1 клетке друг от друга.
A.....................#+........................B

Можно ли при этом посылать пакет атаки?
Как к этому отнесется сервер?

П.С.
Давайте наконец разберемся с этим раз и навсегда %)

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

Сообщение piroJOKE » Пн янв 29, 2007 5:21 pm

Я думаю если ты пошлешь move stop и мгновенно атаку, все будит харашо. О_о.
Но это чисто предположение, на деле надо стремиться к том, чтобы полностью иммитировать клиент. Мммм... Так что нам еще про клиент не известно?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download

Ромич
Новичок
Сообщения: 6
Зарегистрирован: Сб фев 03, 2007 5:35 pm

Сообщение Ромич » Пт фев 23, 2007 7:43 am

Можно ли поправить StepSelector.pl для корректной работы в 1.9.3 5455 ?

Maksimilianoo
Энтузиаст
Сообщения: 100
Зарегистрирован: Вс фев 25, 2007 4:04 pm
Откуда: Сыктывкар

Сообщение Maksimilianoo » Пн мар 19, 2007 6:55 pm

Кто-нибудь решил проблему бегатни вокруг моба?
Если да, то подскажите что и где менять.

Аватара пользователя
Xmpe
Бывалый
Сообщения: 749
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe » Пт сен 28, 2007 2:52 am

Теме ап, пляски продолжаються. Но возникла пара идей, если моб не агр, то банальный boom макрос помогает, пнуло встало и бьёт дальше.

Но вот как быть с аграми ? Ситуация такая. Допустим моб находиться в точке А, закончил свой путь, стоит курит, не вечно же они перемещаються, а с интервалами, тут на горизонте появляеться доблестный монк/рог/син(чо там ещё контактное) видит моба, радостный бежит в точку А бить этого несчастного моба, но моб тоже не дремлет и летит ему навстречу. В итоге бот в точке А, моб в точке С, где то посередине между А и В, где он заметил бота и решил его покусать, но т.к. бот уже убежал в .А то моб остановился на середине, развернулся и движеться обратно в .А

В общем пляски с бубном имени ктулху.

Идея такова: делать паузы, слегка притормаживать, добежал допустим в А постоял полсекунды, подождал пока моб сам в руки долетит, и тогда уже его спокойненько нарезать.

з.ы. поиск жжот, еле нашёл тему, незнай что она есть вовеки бы неполучилось.
Мы не умираем тут...и не рождаемся...
Лишь веря в мир, мы делаем его реальным...
....
Изображение
#openkore-ru

qwesty#2
Новичок
Сообщения: 3
Зарегистрирован: Пт сен 28, 2007 11:35 pm

Сообщение qwesty#2 » Пн окт 01, 2007 3:22 pm

Вобщем, как я решил проблему выбегания моба из толпы и запоздалого решения начать атаковать "очевидную" цель.

Сначала в чем суть недостатка коры
У всех функций, отвечающих за работу интеллекта есть таймауты - то есть минимальное время, через кот. функция сработает вновь. И это не ошибка, а наоборот, очень грамотно ^_^. Однако проблема была в том, что когда моб уже сдох, или потерялся из виду, таймаут для функции processAutoAttack (отвечающей как раз за автоатаку), в большинстве случаев еще не истек, поэтому бот и не пытался первое время после убийства искать дальнейшую цель, а приступал к новой задаче (либо продолжал старую - передвижение). И лишь через несолько циклов снова выполнялась processAutoAttack - и тогда бот уже снова находил цель.

Что и где надо изменить
(речь идет об OpenKore what-will-become-2.0.4 (SVN version), про другие ничего сказать не могу к сожалению)
1) открываем src/AI/Attack.pm
Находим там функцию sub finishAttacking { и в самом конце ее дописываем строчку

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

$timeout{'ai_attack_auto'}{'time'} -= $timeout{'ai_attack_auto'}{'timeout'} + 1;
Итого концовка будет выглядеть след. образом:

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

	} else {
		message T("Target lost\n"), "ai_attack";
	}
	
	$timeout{'ai_attack_auto'}{'time'} -= $timeout{'ai_attack_auto'}{'timeout'} + 1;
}
Этим самым мы сбросим таймаут для функции processAutoAttack, чтобы он сработала пре следующем же ее вызове.

2) Теперь нужно добиться, чтобы processAutoAttack в общем цикле была вызвана как можно раньше, чтобы бот "не успел озадачиться" чем-то другим, типа передвижения ...
Для этого открываем src/AI/CoreLogic.pm и вносим следующие изменения:
а) находим строчку processLook(); и перед ней вставляем следующий код:

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

	if ($AI == 2) {
		processAutoAttack();
	}
б) теперь мотаем ниже и находим старый вызов этой же функции processAutoAttack(); и просто комментируем его или удаляем.

Тестировал я все это дело на локальном серваке. После убийства моба бот сразу идет к следующей цели, без дополнительных телодвижений. Хотелось бы, что народ это потестил тоже как следует.

Проблема с "танцами" бота вокруг агрессоров пока еще открыта, но здесь по-моему тоже дело в "несброшенном" таймауте, но уже посолжнее.
QWESTY TEAM

lirikpl
Грамотный
Сообщения: 477
Зарегистрирован: Вс ноя 12, 2006 12:58 am

Сообщение lirikpl » Пн окт 01, 2007 4:59 pm

А вроде бы выбегания из толпы уже давно решены.Ну у меня точно не выбегает.Стоит как миленький,всех режет,до последнего.А вот неправильная оценка месторасположения сл цели,точнее пока он не начнет хотя бы одного резать- это да ужос,он его продолжает искать по следам,то есть идет туда где он был до этого,это как было так и осталось.И на опен коре сайте,ничего не сдвигается,то же жалко очень.Кто нибудь из папок, хоть краем уха не слышал новостей с фронта???

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4773
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Пн окт 01, 2007 7:48 pm

киирр
Слышал, Слышал.
Ща как раз тестирую Новый АИ Аттаки, точнее уже Таск (кусок кода находится в общаке, как прикручивать не выставлял, ещё сырое).
Вожусь с двумя функциями:
1) Как уже давно говорилось, встреча с мобом при его движении, правильная (пока нормально зделать не удалось).
2) Выдержка дистанции. (С убеганием от агресоров немного проблем)

Из приемуществ нового кода:
1) Нет собо больших задержек, все действия перепроверяются
2) Есть поддержка сагов, точнее хождения во время каста
3) Есть поддержка дистанции (Оч полезная вещь)
4) Уменьшение нагрузки на ЦПУ (Мне удалось пустить 45 ботоф.... но думаю прийдётся добавить нагрузки дабы народ не офигевал окончательно)

Аватара пользователя
Xmpe
Бывалый
Сообщения: 749
Зарегистрирован: Вт ноя 14, 2006 10:12 pm
Discord: Xmpe#6813
Контактная информация:

Сообщение Xmpe » Вт окт 02, 2007 9:44 am

kLabMouse
А сроки этого нововведения ?
Мы не умираем тут...и не рождаемся...
Лишь веря в мир, мы делаем его реальным...
....
Изображение
#openkore-ru

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4773
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Вт окт 02, 2007 9:56 am

Xmpe
Два пункта догоню.... тщательно протестируем. И уж потом.

lirikpl
Грамотный
Сообщения: 477
Зарегистрирован: Вс ноя 12, 2006 12:58 am

Сообщение lirikpl » Ср окт 03, 2007 3:04 am

kLabMouse писал(а): Мне удалось пустить 45 ботоф.... но думаю прийдётся добавить нагрузки дабы народ не офигевал окончательно
Мышка, это в каком режиме то?На старте или вх старте?Просто если чистой консольки то и у мну 46 побегут(максимально не теститровал)..на вх ну около 19-22 точно.Лично у меня сколько есть столько и останется))
а то мож и не стоит?Ведь так охото параллельно в че нить погамать,на высоких разрешениях).

Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click » Ср окт 03, 2007 8:09 am

wx и не wx отличаются тока интерфейсом
и все изменения в логике равносильны для обоих

Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4773
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse » Ср окт 03, 2007 12:39 pm

киирр
В общем всё дело в том, что нагрузка падает с новым кодом. Но ещё посмотрю что будет когда его отполирую и допишу недостающие части.

melory
Новичок
Сообщения: 8
Зарегистрирован: Пн июл 07, 2008 11:32 am

Сообщение melory » Пт июл 25, 2008 11:50 pm

Проблема с "танцами" бота вокруг агрессоров пока еще открыта, но здесь по-моему тоже дело в "несброшенном" таймауте, но уже посолжнее.
viewtopic.php?t=5201
По ссылке то же самое + doCommand move stop

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

doCommand move stop {
onAction route
notOnAction attack
aggressives > 0
timeout 1
disabled 0
} 
Так вот, по-моему проблема танца вокруг мобов частично в некорректном условии, которое не срабатывает при движение, не при атаке и при агрессивах больше нуля, т.е. если в mon_control вы отключили его убийство, то команда move stop все равно будет выполняться. Как следствие: стоп - новая точка роута, стоп - новая точка роута и так до тех пор пока не вырвется. mon_control натстраивал, выставление агрессии в ноль ничего не дало.

melory
Новичок
Сообщения: 8
Зарегистрирован: Пн июл 07, 2008 11:32 am

Сообщение melory » Сб июл 26, 2008 1:29 pm

Жесть, не прав был.
Можно кстати несколько условий console делать?

Ответить