user02 Posted November 29, 2014 Share Posted November 29, 2014 (edited) Добрый день.Сталкнулся со следующей ситуацией в работе события "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. далее по кругу... Хотелось бы услышать какие-нибудь комментарии по этому поводу. Спасибо. Edited November 29, 2014 by user02 Quote Link to comment Share on other sites More sharing options...
Setras Posted December 1, 2014 Share Posted December 1, 2014 Первый раз о таком слышу. А не пробовал ли при получении события EVENT_UNIT_DESPAWNED отсылать id новым событием, например FOO_EVENT, и при его обработке проверять object.IsExist( unit_id )? Вообще это поведение мне кажется достаточно странным, я при получении события о деспавне юнита считаю что он реально деспавнился, а вероятность события одновременного деспавна и последующего спавна считаю ничтожно малой даже в масштабах всех игроков всех серверов. Quote Link to comment Share on other sites More sharing options...
tial Posted December 1, 2014 Share Posted December 1, 2014 я при получении события о деспавне юнита считаю что он реально деспавнился, а вероятность события одновременного деспавна и последующего спавна считаю ничтожно малой даже в масштабах всех игроков всех серверов. Аналогично. Что бы отследить момент появления юнита EVENT_UNIT_SPAWNED исчезновения EVENT_UNIT_DESPAWNED. Даже если учитывать что юнит исчез и снова появился события придут одно за другим и отработают корректно... ЗЫ: лишь мое скромное мнение) Quote Link to comment Share on other sites More sharing options...
ramirez Posted December 1, 2014 Share Posted December 1, 2014 Даже если юнит после деспавна тут же отспавнится обратно, он отспавнится с новым id. Старый id по-любому протухает, и это надо обрабатывать. Quote Link to comment Share on other sites More sharing options...
Setras Posted December 1, 2014 Share Posted December 1, 2014 Даже если юнит после деспавна тут же отспавнится обратно, он отспавнится с новым id. Старый id по-любому протухает, и это надо обрабатывать. А там разве не persistent id? Мне казалось уже пару лет как айди не рандомятся на многие вещи, в т.ч. айди игрока, айди гильдмембера и т.п.... Quote Link to comment Share on other sites More sharing options...
tial Posted December 1, 2014 Share Posted December 1, 2014 А там разве не persistent id? Мне казалось уже пару лет как айди не рандомятся на многие вещи, в т.ч. айди игрока, айди гильдмембера и т.п.... id игрока же разный вроде как каждый раз при появлении... иначе была бы возможность получить инфу о нем даже если он не выделен... я пробовал не выходит. Хотя может что то не так делал. А вот на счет члена гильдии... id вроде одинаковый в рамках одной гильдии.. но если он вышел и снова вступил id меняется вроде как... (опять же возможно ошибаюсь) Quote Link to comment Share on other sites More sharing options...
Setras Posted December 1, 2014 Share Posted December 1, 2014 но если он вышел и снова вступил id меняется вроде как... (опять же возможно ошибаюсь) Ну это логично. Quote Link to comment Share on other sites More sharing options...
tial Posted December 1, 2014 Share Posted December 1, 2014 А там разве не persistent id? а ты можешь перечислить на что конкретно имеются эти постоянные id... ну или где можно посмотреть? Quote Link to comment Share on other sites More sharing options...
ramirez Posted December 1, 2014 Share Posted December 1, 2014 В Аллодах не бывает интовых persistent id. Если обж пропал, а потом объявился снова - у него новый id. Quote Link to comment Share on other sites More sharing options...
LEM Posted December 1, 2014 Share Posted December 1, 2014 А как же серверный идентификатор аватара? Quote Link to comment Share on other sites More sharing options...
user02 Posted December 1, 2014 Author Share Posted December 1, 2014 Был получен следующий ответ. Добрый день. Это нормальная ситуация, так было сделано специально. Раньше после события EVENT_UNIT_DESPAWNED id приходящий в нем был уже протухший, т.е. по объекту нельзя было получить никакой информации, чтобы как-то отобразить ее. Позже мы сделали так чтобы после пропадания объекта, информация о нем еще жила некоторое время. Чтобы например вы могли в событии EVENT_UNIT_DESPAWNED получить инфу о пропавшем объекте.Ну а если объект заново появится, то придет честное EVENT_UNIT_SPAWNED, так что бояться не надо: если пришло событие о деспауне, значит этот объект действительно пропал из поля видимости. Quote Link to comment Share on other sites More sharing options...
hal.dll Posted December 1, 2014 Share Posted December 1, 2014 А как же серверный идентификатор аватара? В EVENT_UNIT_SPAWNED приходит обычный ObjectId, а не PersistentId. Кстати, в 6.0.1 будет уже межсерверный Id Quote Link to comment Share on other sites More sharing options...
Setras Posted December 2, 2014 Share Posted December 2, 2014 Оо, а вот возможность получить инфу о пропавшем объекте (мол кто пропал и т.п.) это хорошо! Quote Link to comment Share on other sites More sharing options...
Recommended Posts