ЕДИНСТВЕННОЕ что менялось в последнем фиксе, относящемся к этому - я сделал чтоб при получении от клиента подтверждения о стуне/руте принималась присланная в этом же пакете позиция игрока. Раньше этого не было, и игрок мог на сервере остановится в более раннем положении, чем он на самом деле находился у игрока на клиенте. Пример:
Игрок бежит вперёд. Его рутают. На сервере рут происходит мгновенно, разумеется, он же за это отвечает. Пакет о руте рассылается всем игрокам. Через 1 пинг у каждого на клиентах этот игрок зависнет в руте. Сам же игрок, получивший извещение о руте, отправляет на сервер подтверждение, что получил рут. Но, за время этого 1 пинга, пока пакет о руте летел с сервера к клиенту, он мог пробежать ещё какое-то расстояние. Управление у игрока блокируется только когда он получит этот пакет, то есть замрёт он немного дальше, чем на сервере. После чего он отправляет серверу пакет с подтверждением, что он получил рут, и новой позицией, в которой он действительно остановился. Ранее этот пакет не обрабатывался вообще и просто выбрасывался. В результате: игрок на своём находился немного дальше, чем на сервере и на экранах других игроков. И после того, как он получал обратно контроль, он начинал двигаться в более дальней позиции, визуально телепортируясь вперёд на экранах других игроков. Теперь же этот пакет с подтверждением принимается и игрок перемещается в ту точку, в которой он реально остановился на клиенте зарутанного игрока. Если пинг большой, то это вызовёт плавный переезд игрока в эту точку. НО, на все другие перемещения игрока правка не должна влиять никаким образом.
Теперь второй момент. Синхронизация движения. Сервер всегда принимает позицию игрока, когда от него придёт пакет, но рассылая этот пакет другим игрокам сервер меняет в нём "время":
- На х2 ко времени добавляется что-то похожее на пинг игрока, который высчитывается раз в пару секунд, + 500мс ЗАЧЕМ-ТО. Зачем - я не знаю. По идее это должно вызывать более плавные движения игрока, но на деле это может также быть причиной искуственной задержки движения. ТАКОЙ КОД НА Х2 УЖЕ МНОГО МНОГО ЛЕТ ПРИСУТСТВУЕТ.
- На кроссе время просто меняется на текущее серверное. Менее плавное движение, но более точные позиции. Думается. ТАКОЙ КОД НА КРОССЕ УЖЕ ТОЖЕ МНОГО ЛЕТ КАК.
Кроме этого, сам клиент предпринимает какие-то лагокомпенсации для сглаживания движения.
Всё очень плохо. Но главное, что я хочу довести до вас:
1. В этом плане ничего не менялось за последние годы (ну как не менялось, менялось в том обновлении, когда дёргаться начали, после чего я вернул всё как было)
2. На х2 и на кроссе движение может происходить по разному
3. Первые секунд 10 после появления игрока в видимости всегда на клиентах наблюдается задержка их движения на 1-2 сек. Причина этого мне неизвестна.