Jump to content

Digest October

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

UNIT_DAMAGE_RECEIVED. Задачка


Nikon
 Share

Recommended Posts

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

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

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

2. Ивент EVENT_UNIT_DAMAGE_RECEIVED

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

244f87f765d6.gif

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

Вопрос:

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

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

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

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

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

Link to comment
Share on other sites

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".

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

Quote:

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


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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use