Se a hora do servidor estimada pelo cliente estiver errada, o momento da interpolação e a decisão sobre o cooldown ficam desalinhados com o servidor.
Por quê A hora do servidor é ajustada uma única vez, na conexão, e fica assim mesmo quando o ping muda → Efeito O momento da interpolação e a hora em que o cooldown termina ficam desalinhados com o servidor → Na tela O adversário dá um engasgo de vez em quando; o cooldown acabou, mas o servidor recusa a skill
Quanto mais tempo ligado, Aleatoriamente, de vez em quando
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Sincronizar o horário periodicamente (medir o tempo de ida e volta e corrigir), fazer o ajuste aos poucos (sem saltos bruscos), medir o tempo decorrido com um monotonic clock, que não depende da hora do PC.
No gráfico
Subida lenta · Erro da hora estimada do servidor
Onde olhar
Registrar periodicamente a diferença entre a hora do servidor estimada pelo cliente e a hora do servidor (número do tick) que vem nos pacotes
Confirma se
O erro cresce conforme passa o tempo desde a conexão, ou dá um salto de uma vez no instante em que o relógio do PC é acertado, e nessa mesma época aumentam os reports de skill recusada e de engasgos
Descarta se
Erro pequeno e estável, mas skills ainda recusadas: aponta para a decisão do servidor ou para a latência
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
Se o tempo decorrido for medido pela data e hora do PC (wall clock), a hora do jogo dá um salto quando o Windows acerta o relógio pela hora da internet ou quando o jogador muda o relógio. O tempo decorrido precisa ser medido com um monotonic clock, que nunca anda para trás (Stopwatch, por exemplo).
Acquiring high-resolution time stampsMicrosoft QueryPerformanceCounter (usado pelo Stopwatch) é um relógio para tempo decorrido que não se sincroniza com uma hora externa; a hora do sistema só deve ser usada quando se precisa da hora UTC
Time synchronization (Netcode for Entities 6.5)Unity Estima a hora do servidor pelo tempo de ida e volta e, sem mudar a hora de forma brusca, ajusta aos poucos a velocidade com que o tempo avança