Если отматывать время слишком далеко в пользу атакующего, в того, кто уже спрятался, всё равно попадают.
Почему Ради атакующего с высоким пингом сервер проверяет попадание с большой отмоткой назад → Следствие На экране того, в кого попали, он уже был в укрытии → На экране «В меня попали, когда я уже был за стеной», преимущество у игроков с высоким пингом
Основной ответственный Команда разработки · Разработка сервера
Команда разработки: задачи
Ограничить глубину отмотки (например, 200–250 ms), атакующему с более высоким пингом отматывать только до лимита, а остальное он компенсирует упреждением сам.
На графике
Высоко только у некоторых · глубина отмотки для каждого попадания (по пингу атакующего)
Где смотреть
Писать в лог проверок на сервере для каждого попадания глубину отмотки, RTT атакующего и серверное время, когда цель зашла в укрытие. В development-сборке рисовать на экране отмотанные хитбоксы (в движке Source это sv_showlagcompensation)
Подтверждает
Попадания из жалоб «попали, когда я уже был за стеной» приходятся на атакующих с большой глубиной отмотки, а глубина отмотки растёт вслед за пингом атакующего без всякого лимита
Опровергает
Если попадания по игроку за стеной бывают и при малой глубине отмотки, проблема в хитбоксах или проверке столкновений. Если высокий пинг у того, в кого попали, его перемещение просто поздно дошло до сервера
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Подробнее
Проверка попадания с отмоткой работает по принципу «приоритет стреляющего». Предложено и исключение «приоритет цели»: если цель на своём экране уже зашла в безопасное место, отмотка не выполняется.
Источники
Peeking into VALORANT's NetcodeRiot Games Без лимита отмотки игрок с задержкой 500 ms может попасть по цели через 0,5 с после того, как она ушла в укрытие, поэтому лимит нужен
Source SDK 2013: player_lagcompensation.cppValve Лимит отмотки в движке Source sv_maxunlag по умолчанию 1 с (максимум 1 с), sv_showlagcompensation показывает на экране отмотанные хитбоксы