Короткое окно реакции, которое съедает пинг Timing window too short for latency + reaction
ID причины sy-short-window · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента, Команда инфраструктуры · Серверная инфраструктура
Если на реакцию (уклонение, парирование, блок) отведено мало времени, пинг съедает это время, и появляются атаки, от которых невозможно уйти.
Почему Короткие окна реакции, например предупреждение об атаке босса за 0,5 с или окно парирования 0,2 с → Следствие Предупреждение игрок видит поздно (задержка на пути к нему + интерполяция), и его ввод тоже приходит поздно (задержка на пути к серверу + ожидание тика) → На экране Точно увернулся, а удар прошёл, парирование «съело»
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента, Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Сервер: планировать предупреждение об атаке по серверному времени и отправлять его заранее, расширять окно реакции на величину пинга (компенсация задержки). Клиент: проигрывать полученное предупреждение в запланированный момент по серверному времени.
Команда инфраструктуры: задачи
Размещать серверы ближе к регионам, где много игроков (региональные серверы), чтобы уменьшить сам пинг.
Цифры для ориентира
При пинге 150 ms и интерполяции 100 ms предупреждение появляется на экране игрока примерно через 0,18 с, а ввод игрока доходит до сервера примерно за 0,1 с. Если добавить 0,25 с на реакцию человека, увернуться от атаки с предупреждением за 0,5 с почти невозможно.
На графике
Высоко только у некоторых · доля неудачных уклонений и парирований (по диапазонам пинга)
Где смотреть
Писать в лог сервера время начала и конца окна реакции, время прихода ввода игрока на сервер и RTT этого игрока, смотреть долю неудач в разбивке по диапазонам пинга (например, с шагом 50 ms)
Подтверждает
Чем выше диапазон пинга, тем заметно выше доля неудач, а неудачный ввод приходит вскоре после закрытия окна (в пределах суммы RTT и времени интерполяции)
Опровергает
Если доля неудач примерно одинакова во всех диапазонах пинга, дело в сложности паттерна. Если ввод пришёл внутри окна, а засчитан как неудача, смотреть код проверки или серверную валидацию