Валидация playable-персонажей

TheMads

Знаменитый
Участник
Сообщения
118
Розыгрыши
0
Репутация
5
Реакции
15
Баллы
1 270
Добрый вечер, решил переписать flytype-скилы (Rush Impact, Shadow Step, Warp и тд) и на последнем этапе столкнулся с проблемой некорректной обработки движения после использования Charge-скилов.

Баг актуален для всех сборок на базе l2p (Так же актуально для l2gw) даже если не трогать изначальный код.

В чем суть:
Если после окончания каста (после срабатывания clearCastVars() и finishFly()) начать отбегать то подключается nextAction.MOVE (обрабатывается в PlayableAI). По окончанию бега если персонаж на стороне клиента не добегает до точки то его возвращает в последние координаты после каста (в координаты, что находится в переменной _flyLoc и возвращается функцией getFlyLoc()).

Соответственно бежать можно бесконечно и по итогу персонаж все равно окажется на "левых" координатах. При этом после окончания бега сработает пакет validatePosition и переместит/портанет персонажа в зависимости от diff между клиентом и сервером.

Данного бага не было на лайве лостворлда (в шарных сурсах он остался)

Подробней как это проявляется:

Собственно вопрос - кто-то фиксил этот момент? Такое чувство что он зарыт где-то в мув-листе
 
Ты дебажить смену координат пробовал? Судя по всему ты явно что-то где-то пропустил.
Я дебажил метод setXYZ (Соотв setLoc тоже), резкой смены координат там нет.

Да даже если и была бы, разве клиент может резко перемещать персонажа без ValidateLocation?

Если убрать бродкаст FlyToLocation и юзать раш то персонаж остается на одной точке (те его никуда не кидает)
 

По наблюдениям - если заблокировать пакет Die то все ок.
В дебаге смены локации никаких отклонений нет, блокировка ValidatePosition и ValidateLocation ничего не дает (соотв они тут не при чем)
 
По наблюдениям - если заблокировать пакет Die то все ок.
В дебаге смены локации никаких отклонений нет, блокировка ValidatePosition и ValidateLocation ничего не дает (соотв они тут не при чем)
специально взял ребоподобную сборку с этим багом, залочил пакет ValidateLocation и все также прошло как и на лосте
 

    TheMads

    Баллов: 1
    За сообщение
Взял l2gw, заблокировал ValidatePosition и ValidateLocation скриптом в хлапе

Код:
If ((FromClient) or (FromServer){нужное оставить}) and ((pck[1]=#$59) or (pck[1]=#$79)) then pck:='';

Проблему это никак не решает.

P.S: Но этой проблемы и не видно тк на gw анимация до конца не прорисовывается (персонаж должен откидывать мечь назад). Что бы она появилась достаточно набить инвентарь до перегруза например.
 
Хм, взял чисто ради интереса компил ребы (Компил - Rebellion-Team)

Убрал валидейтлокейшн и все заработало как надо. Т.е для большинства сборок этот момент решается банальным удалением ValidateLocation в finishFly и мелкими правками в ValidatePosition. В лостах ситуация аналогична? (Не могу проверить тк лень апать лостов до 8 явы)
 
Для примера взял фестов, форкнул все функции каста скилов, передвижения персонажа, базовые ai, пакеты валидации и передвижения, результат нулевой.
На чистом ft при блокировке пакетов все работает хорошо.

Чет приуныл, даже не представляю в какую сторону еще можно смотреть
 
Поставил чистые сурсы на которых начинал, зашел с клиента хф - при блокировке пакета ValidateLocation так же все работает.
Вообщем тема не актуальна, скорее всего при переходе до линдвиора закосячил с опкодами серверных пакетов и вместо нужных отсылаются левые.

Для костыльного фикса убрать вызов валидации локации в finishFly()
В ValidatePosition добавить исключения для CHARGE-скилов (См сурсы лостов)

В getFlyLoc для CHARGE-скилов поставить applyOffset(target.getLoc(), 45).

Для оффлайк - придется переписывать валидацию при передвижении персонажей оффлайк.

Всем спасибо.
 
Нашел проблему - т.к я работаю с ГоДом проблема была в пакете FlyToLocation, который на клиенте ГоДа полностью переработан корейцами. Тк я включил старую анимацию раша MIX в Skillgrp словил баг. Скорее всего FlyToLocation считал полетом весь процесс передвижения и по окончанию портал в позицию цели.

В ГоДе клиент недопускает недолета чардж-скилами. В ХФ этот момент никак не контролируется этим пакетом.

Вернул анимацию DI рашу и спарсив култаймы с оффскриптов попутно переписав оффлайк-моменты отправки ValidateLocation изменив мувинг и ValidatePosition получил идеально работающий оффлайк-раш без единого бага но по ГоДу.
Так же для ГоД-разрабов - в MagicSkillUse и FlyToLoc необходимо шифтить координату Z на colRadius/2 иначе персонаж будет "проседать" по окончанию каста.

P.S: Если кто-то объяснит причем тут colRadius/2 был бы благодарен тк связи координаты Z и радиуса коллизии не пойму но на ОБТ Эртейи РПГ именно так.
 
Назад
Сверху Снизу