Guia do Lag em Jogos › Buscar por sintoma
Invisível / entidade fantasma: 20 causas e quem resolve
Também chamado de: NPC sumido, personagem invisível, monstro morto ainda em pé
Abrir no catálogo de sintomas ilustrado →
NPCs, monstros ou jogadores que deveriam estar ali não aparecem só na sua tela, ou entidades que já sumiram continuam só na sua tela.
Os outros conversam com o NPC e você vê o chão vazio. Aparece só o nome acima do personagem, sem o modelo, ou há um monstro parado que não reage quando você ataca.
Em geral, um pacote específico se perdeu ou o desenho falhou, o que tem pouco a ver com velocidade. Verifique diferença de canal ou de phasing, perda da mensagem de spawn ou despawn, descarte durante o carregamento e falha no carregamento de assets. A pista decisiva é ver se a entidade aparece quando você sai do campo de visão e volta.
Causas deste sintoma
L1 Processo do jogo no cliente
- Streaming de assets atrasado por disco lento: Em armazenamento lento, como um HDD, a leitura de texturas e modelos de um mundo aberto não acompanha o deslocamento do personagem: entidades aparecem tarde ou o jogo engasga esperando a leitura. (Desenvolvimento do cliente (Equipe de desenvolvimento))
L8 Sockets e protocolos
- Keepalive com valor padrão de 2 horas: Quando o outro lado some sem sinal de encerramento, o TCP só percebe muito depois. O keepalive (recurso do TCP que verifica se uma conexão ociosa continua viva) vem desligado por padrão e, mesmo ligado, só começa a verificar depois de 2 horas de inatividade. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Slow start após inatividade: Depois de um tempo ocioso, o TCP volta a reduzir a janela de congestionamento (quanto dá para enviar de uma vez) e, quando de repente precisa enviar muitos dados, divide o envio em várias rodadas. (Infraestrutura de servidores (Equipe de infraestrutura))
Problemas que só afetam alguns
- Diferença de canal, instância ou phasing: Se dois personagens estão em canais ou instâncias diferentes, ou em “fases” (phasing) diferentes, em que os NPCs visíveis dependem do progresso das quests, eles veem mundos diferentes. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Mensagens de spawn descartadas durante o carregamento: Assim que o personagem entra na zona, o servidor envia as mensagens de spawn dos NPCs próximos, mas o cliente ainda está carregando o mapa e descarta essas mensagens. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Condição de corrida no registro da área de interesse (AOI): Se o momento em que o personagem é registrado na grade da área de interesse coincide com o momento em que um NPC muda de célula, a mensagem de spawn desse NPC pode se perder. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Perda do snapshot de referência (baseline): No modelo em que o servidor só manda “o que mudou desde a última vez”, se a informação completa enviada uma vez no início (a referência) se perde, as mudanças seguintes não podem ser aplicadas. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Mensagem de despawn perdida (entidade fantasma): No caso inverso, se a mensagem de que algo “sumiu” se perde, NPCs ou jogadores que já morreram ou saíram continuam só na sua tela. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Perda do burst de spawns logo após a entrada: No instante em que o personagem entra na zona, o servidor envia de uma vez as informações de spawn de dezenas a centenas de entidades próximas. Se isso vai por um canal não confiável (unreliable), ou se o buffer de recepção estoura enquanto o socket não é lido durante o carregamento, parte se perde e não é reenviada. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Confusão por reutilização de ID de entidade: Se o servidor reutiliza o mesmo ID de entidade quando um NPC morto reaparece, o cliente que perdeu a mensagem de despawn nesse meio-tempo toma o NPC novo pelo antigo. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Conflito de porta UDP fixa: Se o cliente foi feito para usar uma porta local fixa, o segundo cliente no mesmo PC não consegue usar a porta ou divide os pacotes com o primeiro. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Bug na separação de sessões por IP ou dispositivo: Se o servidor ou um servidor intermediário distingue as conexões por IP ou ID do dispositivo, dois clientes no mesmo PC (mesmo IP público) são tratados como uma só pessoa. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Restrição a múltiplos clientes: Se o módulo de segurança ou uma política do servidor limita vários clientes em um PC, o segundo cliente é impedido de abrir ou de conectar, ou o primeiro que foi aberto é desconectado. Alguns jogos bloqueiam só as funções dos clientes adicionais. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Limitação de processamento da janela em segundo plano: Em um cliente que está em janela em segundo plano, o jogo, a engine e o SO reduzem frames e processamento. Os pacotes recebidos não são processados a tempo e acumulam ou estouram o buffer. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Conflito de acesso simultâneo a arquivos de cache e assets: Se dois clientes escrevem ao mesmo tempo na mesma pasta de cache ou bloqueiam arquivos, um deles não consegue carregar modelos e texturas de NPC. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Falha de streaming por falta de memória ou VRAM: Quando dois clientes dividem a memória de vídeo, não sobra espaço para carregar os modelos e texturas novos, e parte deles não é desenhada. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Opções de exibição diferentes: Se opções como limite de personagens exibidos, ocultar nome acima do personagem ou modelo de NPC e modo leve estão diferentes nos dois clientes, cada um vê coisas diferentes. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Versão ou dados do cliente incompatíveis: Se o segundo cliente é outra instalação ou não terminou o patch, ele não conhece os novos IDs de NPC enviados pelo servidor e os ignora em silêncio. (Desenvolvimento do cliente (Equipe de desenvolvimento))
- Orçamento de envio e prioridade por conexão: Se o servidor limita quanto envia por conexão e manda primeiro o que está mais perto, o lado com limite mais baixo recebe tarde, ou nunca recebe, os NPCs distantes. (Desenvolvimento do servidor (Equipe de desenvolvimento))
- Entidades retidas por erro na estimativa do relógio: Se o horário do servidor estimado pelo cliente está errado, ele retém informações de entidades que acabaram de chegar, como se fossem “do futuro”, ou as descarta como “antigas demais”. (Desenvolvimento do cliente (Equipe de desenvolvimento))
Ver o catálogo de sintomas ilustrado