Валидация координаты персонажа

Статус
В этой теме нельзя размещать новые ответы.

Mitr

Знаменитый
Пользователь
Сообщения
1
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
1 223
Хроники
  1. Chaotic Throne: High Five
Исходники
Отсутствуют
Сборка
l2j h5
Всем доброго времени суток! ребят подскажите пожалуйста, как работает логика валидации положения перса - ну когда на пример перс бежит в каукю-то сторону, а потом его резко телепортирует в другую точку. Ну или на пример когда бежишь, уперся в какое-то препятсявие и потом телепортирует уже в другую точку. Подскажите где эта логика на сервере, какая функция\класс, для H5 l2j. Заранее огромное спасибище )
 
Решение
Важно понимать, что пакет движения, это не координаты точки начала движения и конца движения, а вектор. Т.е как только клиент получит пакет мува со стороны сервера, он НЕМЕДЛЕННО изменит свое направление на этот вектор, и попытается отрисовать анимацию движения на длину этого вектора, перемещая павн клиента на соответствующее...
Любое изменение координат павна в клиенте инициирует запуск таска отправки пакета C_VALIDATE_POSITION. Пакет отправляется не чаще 1 раза в 2 клиентских тика(1.2 секунды). На этом собственно все.
Этот пакет содержит в себе фактические координаты игрока в клиенте и несет сугубо информационный характер. Как реагировать на этот пакет, решает серверная логика.
Обычно, если координаты клиента и сервера совпадают(ну или отличаются незначительно), пакет просто игнорируется.
Если разница между координатами существенно отличается, сервер может отправить пакет S_VALIDATE_LOCATION, переместив павн в клиенте на правильные координаты.
Ну либо еще какая-то кастомная логика, в зависимости от потребностей.

У лыжи начало цепочки в обработке входящего клиент пакета:
 
Последнее редактирование:
Реакции: BladeRunner и raz

    Mitr

    Баллов: 1
    помошь в вопросе валидации движения
То что вы описали случаеться по многим причинам, но корень один. Это рассинхронизация позиции персонажа в клиенте по сравнению с сервером. Но в любом случае будет какая то логика на сервере которая как вы описали "телепортирует" персонажа. Например тут Пакет ValidateLocation это грубое применение обновления позиции так как персонаж будет перескакивать с одной позиции на другую. Так что нужно немного осторожнее его применять. Ну и применяется это как раз в тех ситуациях когда просто нет других вариантов обновить позицию игрока.
 

    Mitr

    Баллов: 1
    помошь в вопросе валидации движения
Важно понимать, что пакет движения, это не координаты точки начала движения и конца движения, а вектор. Т.е как только клиент получит пакет мува со стороны сервера, он НЕМЕДЛЕННО изменит свое направление на этот вектор, и попытается отрисовать анимацию движения на длину этого вектора, перемещая павн клиента на соответствующее расстояние. Рассинхрон чаще всего возникает в моменты, когда пакет мува пришел или слишком рано, или слишком поздно, и координаты павна в этот момент еще/уже отличаются от координат сервера. Т.е условно персонаж побежал из точки А в точку Б, пробежал 75% расстояния и получил новый вектор. Сервер отправил пакет мува и изменил траекторию у себя, начав новое движение. Клиент, пока ждал пакет(пакету нужно время, чтобы долететь и обработаться в клиенте. Особенно при высоком пинге или большой нагрузке на сеть), успел пробежать еще 10% расстояния до точки Б. В итоге, в момент, когда клиент получил пакет с новым вектором, он уже фактически рассинхронизировался с сервером на расстояние в 10% между точками А и Б. Поэтому, если пинг высокий, а на сервере нет компенсационных механизмов, которые сгладят такие ошибки, то в таком случае такая погрешность в координатах будет накапливаться и может стать довольно большой.
Если персонаж с такой накопленной погрешностью попытается пробежать, например, мимо угла, то павн в клиенте может повернуть позже чем сервер, и побежать в стену, в то время, как тректория на сервере будет корректной.
 
Решение
Статус
В этой теме нельзя размещать новые ответы.
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…