THE ORB
Arrancando el studio

NetworkGetEntityFromNetworkId devolvió 0

Al juego de un jugador le avisaron de algo antes de que llegara de verdad a su pantalla.

groupsFallos visuales de vez en cuandocodeNecesita un desarrollador

Haz esto primero

De vez en cuando es normal. Constantes significa que el script no está esperando como debe.

bug_reportMejor pega tu consola entera

Qué significa

Se convirtió un id de red en un identificador local de entidad y en este cliente todavía no hay ninguna entidad así. El nativo devuelve 0 en vez de dar error, así que el fallo sale a la luz más tarde como un argumento inválido o un index-nil.

Esto normalmente es una CARRERA, no un fallo del id: el servidor creó la entidad y este cliente todavía no la recibió.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Al cliente se le avisó antes de que la entidad se sincronizara

    El servidor crea un vehículo e inmediatamente dispara un evento de cliente con el id de red. El evento llega antes que la entidad.

  2. 2

    La entidad está fuera de alcance

    OneSync sólo sincroniza las entidades cerca del jugador. Un id de red de algo que está al otro lado del mapa no resuelve a nada en ese cliente.

  3. 3

    Está en otro routing bucket

    Lo mismo que estar fuera de alcance, pero a propósito.

  4. 4

    La entidad se borró entre el envío y la recepción

    Un vehículo retirado mientras el mensaje estaba en vuelo.

  5. 5

    El id está caducado

    Los ids de red se reutilizan. Un id guardado hace minutos puede significar otra cosa, o nada.

Cómo saber cuál es el tuyo

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

Los dos en false con el jugador parado al lado significa un problema de verdad; los dos en false desde el otro lado del mapa es sólo el alcance.

Dónde mirar

Dónde se recibe el id de red, y si algo espera a la entidad.

Cómo arreglarlo

Esperala, con un plazo; nunca un bucle sin tope:

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

¿Sigues atascado en tu propio código?

Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.

bug_reportAbrir el Server Fixer

Para este tipo de error, el Escáner de seguridad marca el manejo de eventos que lleva hasta acá.

Errores que viajan con este