THE ORB
Iniciando o studio

NetworkGetEntityFromNetworkId devolveu 0

O jogo de um jogador foi avisado de algo antes de aquilo chegar de verdade na tela dele.

groupsFalhas visuais de vez em quandocodePrecisa de um desenvolvedor

Faça isto primeiro

De vez em quando é normal. O tempo todo significa que o script não está esperando direito.

bug_reportMelhor colar o console inteiro

O que significa

Um id de rede foi convertido num identificador local de entidade e neste cliente ainda não existe nenhuma entidade assim. O nativo devolve 0 em vez de dar erro, então a falha aparece depois como um argumento inválido ou um index-nil.

Isso normalmente é uma CORRIDA, não um erro do id: o servidor criou a entidade e este cliente ainda não recebeu.

O que causa isso

Ordenado pela frequência com que é a resposta.

  1. 1

    O cliente foi avisado antes de a entidade sincronizar

    O servidor cria um veículo e imediatamente dispara um evento de cliente com o id de rede. O evento chega antes da entidade.

  2. 2

    A entidade está fora de alcance

    O OneSync só sincroniza as entidades perto do jogador. Um id de rede de algo do outro lado do mapa não resolve para nada naquele cliente.

  3. 3

    Está em outro routing bucket

    A mesma coisa que estar fora de alcance, mas de propósito.

  4. 4

    A entidade foi apagada entre o envio e a recepção

    Um veículo removido enquanto a mensagem estava em voo.

  5. 5

    O id está vencido

    Os ids de rede são reutilizados. Um id guardado há minutos pode significar outra coisa, ou nada.

Como saber qual é o seu

print(NetworkDoesNetworkIdExist(netId), NetworkDoesEntityExistWithNetworkId(netId))

Os dois em false com o jogador parado ao lado significa um problema de verdade; os dois em false do outro lado do mapa é só o alcance.

Onde olhar

Onde o id de rede é recebido, e se alguma coisa espera pela entidade.

Como consertar

Espere por ela, com um prazo; nunca um laço sem teto:

local function entityFromNet(netId, timeoutMs)
    local deadline = GetGameTimer() + (timeoutMs or 5000)
    while not NetworkDoesEntityExistWithNetworkId(netId) do
        if GetGameTimer() > deadline then return nil end
        Wait(0)
    end
    return NetToEnt(netId)
end

Ainda travado no seu próprio código?

Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.

bug_reportAbrir o Server Fixer

Para esse tipo de erro, o Escâner de segurança marca o tratamento de eventos que leva até aqui.

Erros que andam junto com este