А при чем здесь сервер?
Я же расписал. Рассчёт действий игроков. Оно и так работает на троечку, а на состояние конца БФА так вообще задыхается от миллиарда всеразличных проков.
Наверное просто скину видос от Preach, там всё крайне наглядно объясняется:
https://youtu.be/BCJWYUuKAZo
Мне кажется ты не совсем понимаешь как клиент взаимодействует с сервером, как и тот парень =)
Попробую объяснить доступно на примере каста фаербола.
1. Игрок нажимает спелл у себя на панели, одновременно с этим выполняются 2 действия:
1.1 отправляется пакет на сервер о запросе начала каста
1.2 запускается анимация каста для модели игрока, независимо от состояния отправки пакета
2. Сервер обрабатывает этот пакет и, например, разрешает начать каст
2.1 сервер у себя выставляет таймер завершения каста
2.1 игрок получает пакет с разрешением
2.2 начинается анимация каста (огненные руки и .т.д)
3. Игрок завершает каст
3.1 на сервер отправляется пакет с подтверждением завершения каста
3.2 модель продолжает поддерживать анимацию каста и горящих рук
4. Сервер получает пакет о завершении каста
4.1 сервер синхронизирует полученную информацию с записанной у себя и если синхронизация успешна, то отправляет пакет о итогах каста клиенту
5. Клиент получает пакет о итогах каста
5.1 воспроизводится анимация вылетающего фаербола
5.2 завершается анимация модели и горящих рук.
И еще простой пример прыжка игрока
1. игрок нажимает кнопку прыжка
2. клиент в любом случае воспроизводит анимацию прыжка
3. отправляется пакет на сервер "игрок в такой-то позиции прыгнул"
4. сервер опять же синхронизирует все это и рассылает информацию другим людям, что игрок прыгнул
Повторюсь, все пакеты закодированы. С помощью определенного софта (не публичного, разумеется) можно преобразовать их в понятный текст:
ClientToServer: CMSG_MOVE_JUMP (0x39EA) Length: 73 ConnIdx: 2 Time: 07/17/2018 11:03:51.500 Number: 1485
(Move) MoverGUID: Full: 0x081E1000000000000000000008C8DE92; HighType: Player; Low: 147381906; Map: 0
(Move) MoveTime: 333029003
(Move) Position: X: 3900.165 Y: 1144.978 Z: 478.9752
(Move) O: 1.594174
(Move) Pitch: 0
(Move) SplineElevation: 0
(Move) RemoveForcesCount: 0
(Move) MoveIndex: 0
(Move) MovementFlags: 2049 (MOVEMENTFLAG_FORWARD, MOVEMENTFLAG_FALLING)
(Move) ExtraMovementFlags: 2048 (MOVEMENTFLAG2_UNK11)
(Move) HasTransportData: False
(Move) HasFallData: True
(Move) HasSpline: False
(Move) HeightChangeFailed: False
(Move) RemoteTimeValid: False
(Move) (Fall) FallTime: 0
(Move) (Fall) JumpVelocity: -7.955547
(Move) (Fall) HasFallDirection: True
(Move) (Fall) Direction: X: -0.02337569 Y: 0.9997268
(Move) (Fall) HorizontalSpeed: 8.545928
Т.е. ВСЕ анимации моделей и спеллов рассчитываются исключительно на клиенте.