Servidor rejeita o que o feedback no cliente já mostrou Client-side feedback rejected by server
ID da causa sy-optimistic-reject · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
Se o servidor não reconhece depois um golpe ou uma skill que sua tela já mostrou, o resultado que você viu claramente deixa de ter acontecido.
Por quê Efeito de golpe e animação da skill reproduzidos antes da confirmação do servidor (feedback no cliente) → Efeito O servidor reavalia alcance, posição do alvo, cooldown e recursos e rejeita → Na tela Saiu sangue, mas não houve dano; a animação da skill saiu sem efeito, só o cooldown começou a correr
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Cliente: mostrar com o resultado do servidor só o que precisa de confirmação, como números de dano, morte e recompensas, checar antes os motivos comuns de rejeição e, em caso de rejeição, devolver cooldown e recursos e mostrar o motivo. Servidor: deixar folga do tamanho do ping na checagem de alcance e posição do alvo, mandar o motivo na resposta de rejeição, coletar a taxa de rejeição por skill como métrica.
Números de referência
A resposta de rejeição chega ping + espera do tick depois de você apertar. Com ping de 150 ms, você passa cerca de 0,2 s achando que acertou.
No gráfico
Alto só em alguns · Taxa de rejeição do servidor por skill (por faixa de ping)
Onde olhar
Coletar no servidor a taxa de rejeição por skill e os motivos (alcance, posição do alvo, cooldown, recursos), separados por faixa de RTT do jogador. No cliente, registrar quantas ações com feedback no cliente foram rejeitadas
Confirma se
As rejeições se concentram em certas skills e nos motivos de alcance e posição do alvo, e a taxa de rejeição sobe com o ping
Descarta se
Motivo de rejeição é cooldown ou recursos, sem relação com o ping: verificar se os valores de dados (cooldown, custo) diferem entre cliente e servidor. Sem rejeições, mas a animação só começa depois da resposta do servidor: aponta para “Feedback só depois da resposta do servidor (requisição-resposta)”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
O feedback no cliente é a melhor forma de esconder o ping. Só que, quanto mais diferem as informações que cliente e servidor usam para decidir (posição do adversário, recursos restantes), mais frequentes ficam as rejeições. Coletar a taxa de rejeição por skill como métrica facilita achar onde as decisões divergem.
Fontes
Using Gameplay Abilities in Unreal EngineEpic Games Habilidades Local Predicted executam na hora no cliente, mas o servidor dá a decisão final e pode reverter o resultado