Uma prática invisível que quebra a maioria dos jogos
Combat logging é o ato de um jogador sair intencionalmente de uma sessão multiplayer enquanto ainda está envolvido em combate ou em uma situação de alta risco, geralmente para evitar penalidades como perda de recursos, expiração de buffs ou contagem de tempo de recarga. A intenção não é apenas escapar de uma luta ruim; trata-se de um padrão repetido que a equipe de desenvolvimento precisa identificar e corrigir. Na maioria das vezes, isso aparece quando o cliente do jogo termina a conexão de forma abrupta logo antes do evento ser concluído.
o que é combat logging
Na prática, o sistema detecta a desconexão dentro de uma janela temporal crítica e marca a ação como logada. O servidor não consegue distinguir entre uma queda de internet genuína e um logout intencional apenas olhando para o timestamp final. Por isso, ele usa um conjunto de gatilhos: eventos de combate recentes, estado de saúde do personagem, presença de inimigos próximos e a duração da sessão antes do término. Quando esses campos se alinham, o registro é criado. Você já deve ter visto casos em que o jogador simplesmente fecha o cliente durante um boss fight porque estava com lag ou achou que ia perder a recompensa. Isso gera logs falsos e pode confundir a análise de performance. O trabalho mais comum é criar uma regra que desconsidere a desconexão se houver evidência de que o personagem ainda estava sendo atingido nos três segundos anteriores ao logout. Assim, o log é gerado como legítimo, mas sem punição automática.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Um detalhe técnico que poucos levam em conta é a latência assimétrica. Se o cliente tem ping alto e o servidor recebe pacotes de dados com atraso, o timestamp de logout pode chegar depois do timestamp de dano no log. Nesse cenário, o servidor interpreta erroneamente que o combate já havia terminado. Eu enfrentei isso recentemente em um servidor de teste onde o cliente tinha jitter variável. A solução foi adicionar um grace period de 500ms nos pacotes de status, o que fez com que o log só fosse finalizado se o último pacote de dano fosse recebido dentro dessa janela. Isso eliminou cerca de 70% dos falsos positivos. O lado ruim é que esse ajuste não funciona bem em cenários de rede instável real. Se o jogador estiver realmente desconectando por problemas de infraestrutura, o grace period pode fazer o log ser retido, mas o sistema de rollback pode não conseguir reconectar a sessão adequadamente. Nesse caso, o melhor fallback é marcar o log como "suspeito" e permitir revisão manual. Também é importante não confiar apenas no timestamp; o estado do personagem no momento do logout deve ser cruzado com dados de telemetry de combate. Caso contrário, você acaba criando mais trabalho para a equipe de suporte.
Se você precisa de uma ferramenta para monitorar isso, a maioria dos motores modernos já inclui um módulo de detecção de combat logging configurável. O link para baixar a versão mais recente do módulo de análise costuma estar disponível na documentação técnica do SDK, mas o mais importante é entender que a configuração padrão raramente é suficiente para um ambiente de produção real. Teste com tráfego simulado antes de aplicar em escala.