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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

Вопрос по работе события EVENT_UNIT_DESPAWNED


user02

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

Добрый день.

Сталкнулся со следующей ситуацией в работе события "EVENT_UNIT_DESPAWNED":

Приходит событие что рядом есть юнит (событие EVENT_UNIT_SPAWNED). Данный юнит вижу стояит рядом со мной. Вызываю гоблин и делаю ТП в другую локацию (например в ангар).

Приходит событие "EVENT_UNIT_DESPAWNED". В нутри события проверяю есть ли данный юнит по ID. В результате функция object.IsExist( unit_id ) возвращает начение true. Более того получаю по id имя юнита и понимаю что это тот же самый юнит, что был в другой локации. Попытка выделить юнит по его id проходит без успешно.

Возможно это странно  и я не до конца понимаю возможности асинхронности работы lua. Но если исходить из этого предположения, то возникает ситуация когда приходит событие EVENT_UNIT_DESPAWNED, а сам юнит к этому времени уже опять стал доступным, и вот тогда и нужно проверять существование юнита перед тем как решать стоит или нет обработывать событие "EVENT_UNIT_DESPAWNED".

На сколько я понимаю в серьез написать аддон на событиях не получится. Все время что-то, где-то всплывает какая-то специфика работы. Хотелось использовать только нужные событие да бы не перегружать лишними действиями в случае если привязываться к событию по времени "EVENT_SECOND_TIMER".

 

Конечная модель аддона получается схематично такой:

1. подписываемся на события

2. собираем события в очередь (те кторые могут конфликтовать между собой)

3. в событие "EVENT_SECOND_TIMER" обрабатываем очередь и производим изменения с заданной частатой...

4. далее по кругу...

 

Хотелось бы услышать какие-нибудь комментарии по этому поводу.

Спасибо.

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

Первый раз о таком слышу. А не пробовал ли при получении события EVENT_UNIT_DESPAWNED отсылать id новым событием, например FOO_EVENT, и при его обработке проверять object.IsExist( unit_id )?

 

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

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

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

 

Аналогично. Что бы отследить момент появления юнита EVENT_UNIT_SPAWNED исчезновения EVENT_UNIT_DESPAWNED.

Даже если учитывать что юнит исчез и снова появился события придут одно за другим и отработают корректно...

ЗЫ: лишь мое скромное мнение) 

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

Даже если юнит после деспавна тут же отспавнится обратно, он отспавнится с новым id. Старый id по-любому протухает, и это надо обрабатывать.

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

Даже если юнит после деспавна тут же отспавнится обратно, он отспавнится с новым id. Старый id по-любому протухает, и это надо обрабатывать.

А там разве не persistent id? Мне казалось уже пару лет как айди не рандомятся на многие вещи, в т.ч. айди игрока, айди гильдмембера и т.п....

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

А там разве не persistent id? Мне казалось уже пару лет как айди не рандомятся на многие вещи, в т.ч. айди игрока, айди гильдмембера и т.п....

id игрока же разный вроде как каждый раз при появлении... иначе была бы возможность получить инфу о нем даже если он не выделен... я пробовал не выходит.

Хотя может что то не так делал.

А вот на счет члена гильдии... id вроде одинаковый в рамках одной гильдии.. но если он вышел и снова вступил id меняется вроде как... (опять же возможно ошибаюсь)

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

но если он вышел и снова вступил id меняется вроде как... (опять же возможно ошибаюсь)

Ну это логично.

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

А там разве не persistent id? 

а ты  можешь перечислить на что конкретно имеются эти постоянные id... ну или где можно посмотреть?

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

В Аллодах не бывает интовых persistent id. Если обж пропал, а потом объявился снова - у него новый id.

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

Был получен следующий ответ.

 

Добрый день. Это нормальная ситуация, так было сделано специально. Раньше после события EVENT_UNIT_DESPAWNED id приходящий в нем был уже протухший, т.е. по объекту нельзя было получить никакой информации, чтобы как-то отобразить ее. Позже мы сделали так чтобы после пропадания объекта, информация о нем еще жила некоторое время. Чтобы например вы могли в событии EVENT_UNIT_DESPAWNED получить инфу о пропавшем объекте.

Ну а если объект заново появится, то придет честное EVENT_UNIT_SPAWNED, так что бояться не надо: если пришло событие о деспауне, значит этот объект действительно пропал из поля видимости.

 

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

А как же серверный идентификатор аватара?

 

В EVENT_UNIT_SPAWNED приходит обычный ObjectId, а не PersistentId.

Кстати, в 6.0.1 будет уже межсерверный Id

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

Оо, а вот возможность получить инфу о пропавшем объекте (мол кто пропал и т.п.) это хорошо!

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

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

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

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

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

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

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

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

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

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