Страница 5 из 6

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

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

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

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

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

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

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

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

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

Добавлено: Пн янв 29, 2007 5:21 pm
piroJOKE
Я думаю если ты пошлешь move stop и мгновенно атаку, все будит харашо. О_о.
Но это чисто предположение, на деле надо стремиться к том, чтобы полностью иммитировать клиент. Мммм... Так что нам еще про клиент не известно?

Добавлено: Пт фев 23, 2007 7:43 am
Ромич
Можно ли поправить StepSelector.pl для корректной работы в 1.9.3 5455 ?

Добавлено: Пн мар 19, 2007 6:55 pm
Maksimilianoo
Кто-нибудь решил проблему бегатни вокруг моба?
Если да, то подскажите что и где менять.

Добавлено: Пт сен 28, 2007 2:52 am
Xmpe
Теме ап, пляски продолжаються. Но возникла пара идей, если моб не агр, то банальный boom макрос помогает, пнуло встало и бьёт дальше.

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

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

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

з.ы. поиск жжот, еле нашёл тему, незнай что она есть вовеки бы неполучилось.

Добавлено: Пн окт 01, 2007 3:22 pm
qwesty#2
Вобщем, как я решил проблему выбегания моба из толпы и запоздалого решения начать атаковать "очевидную" цель.

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

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

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

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

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

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

Добавлено: Вт окт 02, 2007 9:44 am
Xmpe
kLabMouse
А сроки этого нововведения ?

Добавлено: Вт окт 02, 2007 9:56 am
kLabMouse
Xmpe
Два пункта догоню.... тщательно протестируем. И уж потом.

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

Добавлено: Ср окт 03, 2007 8:09 am
Click
wx и не wx отличаются тока интерфейсом
и все изменения в логике равносильны для обоих

Добавлено: Ср окт 03, 2007 12:39 pm
kLabMouse
киирр
В общем всё дело в том, что нагрузка падает с новым кодом. Но ещё посмотрю что будет когда его отполирую и допишу недостающие части.

Добавлено: Пт июл 25, 2008 11:50 pm
melory
Проблема с "танцами" бота вокруг агрессоров пока еще открыта, но здесь по-моему тоже дело в "несброшенном" таймауте, но уже посолжнее.
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 натстраивал, выставление агрессии в ноль ничего не дало.

Добавлено: Сб июл 26, 2008 1:29 pm
melory
Жесть, не прав был.
Можно кстати несколько условий console делать?