Page 1 of 1

Событие evAttack

Posted: 24.08.2018 20:00
by Kashey
Как можно отловить в игре момент когда какой-то моб/игрок напал на чара?

Например, когда чар долго убивает моба, могут напасть еще несколько. Или при долгих newMoveXY по пути чар может насобирать несколько попутчиков.
Варианты с FindItem и проверкой WarTargetID по массиву не очень удобны. Особенно в сочетании когда надо долгий маршрут разбить на части и в каждой точке это делать.

Было бы круто иметь событие evAttack: [кто, кого] и возможность прервать (поставить на паузу) любое текущее действие/движение.

Или функцию IsUnderAttack(ID: Cardinal);

Re: Событие evAttack

Posted: 24.08.2018 21:36
by nah nah
а в журнале не пишется?

Re: Событие evAttack

Posted: 24.08.2018 21:56
by Kashey
nah nah wrote:а в журнале не пишется?
Если игрок нападает - то пишется. Но если напал игрок - то у скрипта мало шансов выжить.
Если напал моб - то не пишется. Более того, если моб подходит и бьет - чар начинает отбиваться, но вар режим на чаре автоматом не включается.

Нашел частичное временное решение - проверять WarTargetID, которое автоматом устанавливается на моба.
Если ничего не трогать, то чар оставаясь в PEACE режиме отбивается.
Но некоторые действия скрипта останавливают эту реакцию и чар остается просто стоять под ударами.

П.С. Думаю для некоторых скилов это можно будет обработать по сообщениям в журнале типа "you can't do this while in battle" (не помню как дословно).
Для теста в скрипте использую Hiding - и с ним валятся обычные фейлы.

Re: Событие evAttack

Posted: 24.08.2018 22:30
by nah nah
жуть какая

Re: Событие evAttack

Posted: 24.08.2018 22:36
by Kashey
nah nah wrote:жуть какая
Это же стандартная механика в T2A/Renessance (в другое не играю).

Re: Событие evAttack

Posted: 25.08.2018 10:16
by nah nah
а если в каком-нибудь evTimer сделать проверку на изменение WarTargetID, и там же, в обработчике, совершать убийство?

Re: Событие evAttack

Posted: 25.08.2018 13:08
by Kashey
Ситуации в которых это не поможет:

- долгий newMoveXY, который не прервать (не хочу использовать самописный) и в конечной точке может быть намотано уже несколько мобов.

- если чар уже дерется с мобом и в этот момент цепляет еще несколько мобов - WarTargetID после убийства не всегда перескакиеват на следующего и можно опять остаться в ситуации стоя на месте без WarTargetID под ударами нескольких мобов.

П.С. Можно конечно отслеживать изменения Life в меньшую сторону, но это совсем не красиво ))))

Re: Событие evAttack

Posted: 25.08.2018 13:31
by nah nah
Kashey wrote:- долгий newMoveXY, который не прервать (не хочу использовать самописный) и в конечной точке может быть намотано уже несколько мобов.
Разве ивенти не ставят ходилку на паузу?
Kashey wrote:- если чар уже дерется с мобом и в этот момент цепляет еще несколько мобов - WarTargetID после убийства не всегда перескакиеват на следующего и можно опять остаться в ситуации стоя на месте без WarTargetID под ударами нескольких мобов.
Ну а тут уже постоянно сканировать пространство на враждебных мобов, подошёл близко - сразу в лоб прописывать.

Re: Событие evAttack

Posted: 16.10.2018 14:16
by Vizit0r
Kashey wrote:возможность прервать (поставить на паузу) любое текущее действие/движение
не-а, фантастика. А по ивенту давно уже объяснил, почему это нереально.