Местоположение в мире л2

DaVilka

Прославленный
Местный
Сообщения
444
Розыгрыши
0
Репутация
219
Реакции
199
Баллы
1 435
Такие дела, для прорисовки перса в мире после ентерворлда отправляется пакет 0x32.Пишу я в него статические коорднинаты перса, и все вроде норм, но по оси Z персонаж, почему то оказывается всегда в текстурах, из координатами все хорошо, даже если зет я указываю выше необходимого, то перс появляется в воздухе, падает на землю, и все равно оказывается в текстурах, возникает вопрос, почему так?

И еще вопрос, как происходит передвижение перса? От клиента шлется валидейтпозишн, в котором указано текущие координаты и координаты клика, каким пакетом отвечает сервер, и по какому принципу он составляется?
 

Вложения

  • Безымянный.png
    Безымянный.png
    201,3 КБ · Просмотры: 180
Вообще-то CharInfo нужен для отображения других игроков и иллюзорных копий. Для отображения самого себя используется UserInfo.
 

Вообще-то CharInfo нужен для отображения других игроков и иллюзорных копий. Для отображения самого себя используется UserInfo.
Вполне возможно что так оно и есть. Я не смотрел туда)
 
Вообще-то CharInfo нужен для отображения других игроков и иллюзорных копий. Для отображения самого себя используется UserInfo.
Да то понятно, я сам их путаю напостой, по этому и указал в первом посте опкод
 
Конкретно у меня была похожая проблема и связана она была с координатами мира в L2World (WORLD_X_MIN и им подобные)
 
Попробуй глянуть как работает у l2j, вроде бы в этом методе что-то колдуется, связанное с твоей проблемой: . Еще как вариант - у них же.
 
А Скорость бега не передается что ли на прямую через юзеринфо? Беру спид из окна статов, перевожу в байты, ищу в пакете и ничего не нахожу
 
А Скорость бега не передается что ли на прямую через юзеринфо? Беру спид из окна статов, перевожу в байты, ищу в пакете и ничего не нахожу
Там должна передаваться базовая скорость и мультиплаер(множитель, во сколько раз увеличена\уменьшена скорость)
writeD(_runSpd); // базовая
writeD(_walkSpd);
writeD(_swimRunSpd);
writeD(_swimWalkSpd);
writeD(_flyRunSpd);
writeD(_flyWalkSpd);
writeD(_flyRunSpd);
writeD(_flyWalkSpd);
writeF(_moveMultiplier); //множитель
 
Там должна передаваться базовая скорость и мультиплаер(множитель, во сколько раз увеличена\уменьшена скорость)
writeD(_runSpd); // базовая
writeD(_walkSpd);
writeD(_swimRunSpd);
writeD(_swimWalkSpd);
writeD(_flyRunSpd);
writeD(_flyWalkSpd);
writeD(_flyRunSpd);
writeD(_flyWalkSpd);
writeF(_moveMultiplier); //множитель
А как измерить скорость перемещения со стороны сервера? Что бы проверить, правильный ли валидейтпозишн?
 
Немного не понял, что ты хочешь сделать.
Если нужна достоверная скорость, то нужно брать базовую с птс сервера и считать эффекты(бафы, бонусы армора и т.д.) которые влияют на базовую. Потом ее и передаешь в userinfo. А validateposition помогает сравнить текущую координату и координаты на сервере, их разница как раз поможет посмотреть на сколько они отличаются. А вообще возьми любой ява сервер и посмотри как происходит расчет позиции в Creature.java MoveNextTask, каждые n милисекунд скорость умножается на время нахождения в движении и получается пройденное расстояние, из него выставляется позиция.
 
Немного не понял, что ты хочешь сделать.
Если нужна достоверная скорость, то нужно брать базовую с птс сервера и считать эффекты(бафы, бонусы армора и т.д.) которые влияют на базовую. Потом ее и передаешь в userinfo. А validateposition помогает сравнить текущую координату и координаты на сервере, их разница как раз поможет посмотреть на сколько они отличаются. А вообще возьми любой ява сервер и посмотри как происходит расчет позиции в Creature.java MoveNextTask, каждые n милисекунд скорость умножается на время нахождения в движении и получается пройденное расстояние, из него выставляется позиция.
Да, спасибо, скорость на время то что нужно, школьный материал :D
 
Назад
Сверху Снизу