Остаточные коллизии после смерти мобов

Aristo

Бессмертный
Проверенный
Сообщения
721
Розыгрыши
0
Решения
11
Репутация
670
Реакции
861
Баллы
1 658
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
Свое, на базе L2GW
Всем форумчанам приветствие.

Помогите локализовать проблему.
Суть: В рандомные моменты времени, при убийстве мобов, они как будто не освобождают коллизии в клиенте, после своей смерти. Чаще всего это происходит с неподвижными мобами, которые стоят стенками(например драконы в SOA у дверей, мобы-стенки в Пагане, гварды на фортах, которые стоят на лестнице по пути к флагполю), но иногда бывает и с обычными(например Дракосы Лидеры на кругу в ЛОА).
Как проявляется: После смерти, в клиенте после моба остается непроходимая коллизия. Ее нельзя выделить, но она мешает движению игроков.
При клике на коллизию на сервак идет пакет, как будто я кликнул на моба и передается тот же ObjectID, который был у моба на момент смерти. Принудительная отправка NpcInfo или DeleteObject на этот ObjectID не помогает. Не помогает и телепорт(для обновления объектов региона). Я не нашел ни одного способа исправить это со стороны сервера.

Со стороны клиента помогает релог клиента.

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

Есть мысли, что это может быть? Может быть кто-то сталкивался с подобным?
 
а что за сборка, если не секрет? Можно в ЛС.
По словам разраб основа Over/pheonix. Исходники покупались у gvb в конце 19 года, а он уже брал исход люцеры 2 ( скорее всего был декомпил, об этом уже потом узнали)
 
L2gw на каком исходе, оверы?
Пробовали включать/выключать path find
По факту если думаешь что клиент
А на сервере нет препятствий, должен сработать validate location и чара переместит на актуальную позицию на сервере.
Мб проблема в геодвиге?
Попробуй с гео и без, разные настройки. Ну и нужно знать как сам механизм движения работает на сервере чтобы определить в чем трабл. Монстр когда жив/мертв чар обегает? Если обегает, это как минимум коллизия со стороны сервера добавляется, ибо чар не умеет без геодвига обегать монстра.
 
1) L2GW на основе L2j, но очень основательно переписанный.
2) Поиск пути? Так проблема не в том, что я не могу пройти через эти коллизии, а в том, что они вообще образуются. По существу - поиск пути не выключал, т.к не видел в этом логики.
3) Приведу пример ситуации, когда возникает баг. Стоит моб с условным ObjectID 10000. Я кликаю на него в клиенте, на сервер идет пакет Action координатами клика и ObjectID 10000. Я совершаю с мобом некие смертоносные манипуляции, после которых он отправляется на респаун, сменив перед этим ObjectID с условных 10000, на условные 10001 и отослав в клиент все нужные пакеты и исчезнув из мира и клиента. В этот момент, на сервере нет объекта с ObjectID 10000, а в клиенте нет моба с ObjectID 10001, т.к он еще не заспавнился. В этот момент, я кликаю на землю, в место, где помер моб и у меня на сервер уходит все тот же Action с ID 10000, хотя там никого нет, но на месте смерти моба осталась непроходимая коллизия так, как будто там стоит этот моб. Эта коллизия остается там до тех пор, пока я не сделаю полный релог клиента.
4) Это совершенно точно, на 100% не геодвижок. Баг образуется на стороне клиента из-за каких-то действий сервера. Я долго грешил на клиент, но сегодня взял для теста совершенно чистый клиент ХФ и баг все равно повторился.
 
Возможно, я проверю на их интерфейсе сегодня ночью, но все же хотелось, чтобы коллизии не исправлялись клиентом, а изначально не появлялись по вине сервера. Это главная цель.
 
После детального и тщательного изнасилования ПТСки, был найден баг в пакетке. Все же это была вина серверсайда.
Тему можно закрывать.
 
ну обычно в темах публикуют решение проблемы
 
ну обычно в темах публикуют решение проблемы
Маловероятно, что это поможет кому-то, ведь баг специфичный для моей сборки.
В пакетке не учитывался характер удаления мобов. После получения команды Despawn от ИИ, NpcMaker и SpawnDefine должны вешать на моба метку окончательного удаления, которая затем должна быть учтена в клиенте, при удалении объекта. После этого, если все корректно, клиент удаляет объект не только из региона, но и из кеша у себя.
 
такая хрень была у некстген старого и в какой то реве феникса , но хроники не помню
даже было убил моба а даже сам вид моба остался на месте
 
У меня не было того, про что вы пишите. Баг, про который я писал, проявлялся только иногда в некоторых местах. В абсолютном большинстве ситуаций все было корректно. Проблема была в пакетке. Клиент по разному обрабатывает DeleteObject, в зависимости от его содержимого. Содержимое DeleteObject зависит от ряда факторов и может отличаться даже для одного конкретного моба.
 
в итоге с objId в DeleteObject что еще нужно отправлять?
 
в итоге с objId в DeleteObject что еще нужно отправлять?
0 если объект скрывается временно, например при смене региона. В этом случае, объект остается в кеше клиента. 1 если объект удаляется с концами и больше не будет использоваться. В этом случае, клиент удаляет его и у себя.
 
в итоге с objId в DeleteObject что еще нужно отправлять?
по факту там только байт с 0, но иногда шляется 1чка.
Ну это то что я в тотал чекере просмотрел.
Код:
Обычный деспавн = 0
Деспавн самона = 1
Деспавн через скприт = 1
При телепорте в зону, где нельзя использовать петов / самонов (оно убирается) = 1
Когда охрана обителей клана (захватываемые) пропадают = 0
Когда охрана обителей (замки) пропадают = 0
Когда происходит какой-то прикол по типу "нажал на коробку - а их неё вылез другой НПС" - 0
Когда эффект - i_summon_unique_npc - призвал рейда? = 0
 
Да, я про это и написал, что параметр зависит от ряда факторов на стороне сервера для каждого конкретного объекта.

Простой пример. Есть Drake Leader на кругу. У него есть миньоны. Если Дрейк умирает, то его миньоны деспавнятся по отмашке из ИИ-скрипта через какое-то время. В этом случае они должны удалятся с параметром 1, иначе после них и остаются коллизии. Если же они умирают и исчезают после этого, то допустимо отправлять 0. Аналогично SOA. Аналогично мобы в инстах, например SOD.
Если краткий вариант описывать - то все что проходит через удаление из мира, должно улетать в клиент с 1. Если объект просто меняет видимость, то тогда шлется 0.