Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

UNIT_DAMAGE_RECEIVED. Задачка


Nikon

Рекомендуемые сообщения

Задачка писателям ДПС-метров :))

Исходные данные:

1. Некромант и его пет (страж)

2. Ивент EVENT_UNIT_DAMAGE_RECEIVED

3. Картинка с логом боя

244f87f765d6.gif

Оба били моба. Судя по логу(и не только по логу) - завершающий удар нанес некромант Вампиризмом. После этого пришло еще 2 удара по этому же мобу от его пета.

Вопрос:

1. Пет бил по трупику моба?

2. Ивенты в АО такие ивенты, что им плевать когда приходить и пет на самом деле ударил до летального удара некроманта?

3. Может, есть еще какое другое объяснение этого феномена?

Да, и самый главный вопрос:

Как это дело обрабатывать то??

Ссылка на комментарий
Поделиться на другие сайты

That is apparently what happens. The pet can attack dead targets, as well as attack while dead. :P Both of these send "unit does not exist" errors occasionally, which sucks.

It is similar to the emote "expected PlayerId got number" error. Client/server conflict errors.

You can try and ignore the extra data by creating your own table of attacked units and then setting the unit to nil when it "dies".

Ссылка на комментарий
Поделиться на другие сайты

Ошибок в такой ситуации как раз и не возникает.

В EVENT_UNIT_DAMAGE_RECEIVED передается только target (ObjectId ) => комбат лог корректно определил имя убиваемого моба

Так что своя таблица ID пожалуй не поможет.

Проверять при каждом ударе жива цель или нет... Можно попробовать этот вариант

А если на самом деле на момент удара цель была еще жива? И все 3 последних ивента произошли одновременно. Но, почему-то, 1-м был послан ивент о финальном ударе?

Ссылка на комментарий
Поделиться на другие сайты

Quote:

Вопрос:
1. Пет бил по трупику моба?
2. Ивенты в АО такие ивенты, что им плевать когда приходить и пет на самом деле ударил до летального удара некроманта?
3. Может, есть еще какое другое объяснение этого феномена?


1. Нет.
2. Тоже не совсем так, но пет все же успел ударить до смерти моба.
3. Есть:

В АО работает механизм, задерживающий отправку в скрипт ивента про урон до срабатывания соответствующего триггера в анимации удара. Чтоб урон приходил "точно во время" удара. Как и всякая нашлепка, он глючит и задерживает что попало на сколько хочет. В целом, вроде работает. Но при смерти моба отдает все накопленное разом, так как смерть не подстраивается под анимации ударов, труп моба отлетает до совершения удара. А ивенты в пределах одного клиентского тика приходят в скрипт почти в произвольном порядке. Отсюда и фигня в логе.
Quote:
Как это дело обрабатывать то??

Финальный удар по мобу в принципе метится в EVENT_UNIT_DAMAGE_RECEIVED специальной булевой меткой lethal. Но по факту лучше собирать удары до тех пор, пока труп моба не отдеспавнится, это EVENT_UNIT_DESPAWNED. Можно еще ловить EVENT_UNIT_DEAD_CHANGED, но по-моему он тоже особо не поможет.

Ссылка на комментарий
Поделиться на другие сайты

Понятно, спасибо за обьяснение

Quote:
Но при смерти моба отдает все накопленное разом
Я так понимаю, там что то вроде FILO-буфера, поэтому такая фигня получается

Quote:
Финальный удар по мобу в принципе метится

Угу, метится. Как раз удар Вампиризмом(на картинке) и был отмечен как последний удар, пришел то он не последним

Quote:
Но по факту лучше собирать удары до тех пор, пока труп моба не отдеспавнится
они не деспавнятся довольно долго, особенно если лут есть. А уж боссы в ГД лутаюся очень долго

Как определять конец боя?

По ивенту EVENT_AVATAR_COMBAT_STATUS_CHANGED (я в общем то щас так и определяю)? Тогда вот такие последние удары могут пропускаться (благо не у всех классов петы есть и появляется такая штука довольно редко даже у тех, у кого они есть)

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

С началом боя такая же петрушка. Ивент об ударе может прийти раньше ивента о начале боя

Белибердень в общем то, и часто теряется (если теряется) не так уж и много урона. И то только в соло-режиме

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования