Проход монстров через стены

gastello

Пляшущий с бубном
Участник
Сообщения
75
Розыгрыши
0
Решения
1
Репутация
0
Реакции
10
Баллы
210
Хроники
  1. The 2nd Throne: Gracia
Сборка
l2jserver
Приветствую.

У меня некорректно работает поиск пути у монстров. Когда я ударяю монстра и убегаю за стену, он должен обойти её и продолжить преследование. Однако сейчас монстр просто пытается пройти сквозь стену. (Но, иногда бывает оббегают нормально.)

Что за это отвечает — Geodata, PathFinding, GeoКвадраты или все вместе?

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

Кроме того, некоторые монстры, которым требуется обойти препятствие добраться до цели, которая их ударила по высоте (например, подняться по лестнице), проваливаются в пол.

Это у всех старых сборках, такие проблемы? У меня Gracia от l2jserver.

Буду весьма благодарен за конструктивные ответы и помощь.
 
Если моб пытается пробежать из точки А в точку Б сквозь стену в клиенте, то произойти это могло по двум причинам.
1) Сервер считает что между точками А и Б есть прямой проход, и отправил в клиент пакет движения моба из А в Б. Тогда вопрос, почему это происходит? Сервер не знает что такое стена и где она находится в клиенте. Для него абсолютно вся поверхность мира в игре разделена на одинаковые маленькие плиточки, размером 16х16х8 точек. Когда геодвиг проверяет проход из точки А в точку Б, он проверяет возможность последовательного перехода между ячейками по вектору АБ. Видимо в вашем случае такой переход возможен. Это может быть из-за ошибок в разметке ячеек(кривая геодата, когда непроходимые ячейки отмечены как проходимые или наоборот), либо ошибка в алгоритме проверки проходимости между ячейками(в каком-то месте геодвиг разрешает проход через заблокированную ячейку). Это можно проверить, сделав и выведя дебаг путей для конкретного моба.
2) Сервер корректно посчитал путь, но отправил некорректный пакет движения(например вместо MoveToLocation, отправил MoveToPawn), после чего, когда цель поменяла координаты и убежала за стену, сервер ничего не обработал дополнительно и моб в клиенте продолжил проигрывать анимации движения, по факту не двигаясь в сервере. В таком случае, при прилете обновленных пакетов для этого моба, его движение может либо стабилизироваться, либо его может принудительно синхронизировать на валидные координаты. Это можно проверить, посмотрев меняются ли на сервере координаты бегущего через стенку моба.
 
Назад
Сверху