THE ORB
Démarrage du studio

NetworkGetEntityFromNetworkId a renvoyé 0

Le jeu d'un joueur a été informé de quelque chose avant que cela n'arrive réellement à son écran.

groupsDes glitchs de temps en tempscodeIl faut un développeur

Faites d'abord ceci

De temps en temps, c'est normal. En continu, cela veut dire que le script n'attend pas correctement.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Un identifiant réseau a été converti en handle local d'entité et il n'existe pas encore une telle entité sur ce client. La native renvoie 0 au lieu d'échouer, donc le problème ressort plus tard en mauvais argument ou index-nil.

C'est en général une COURSE, pas un mauvais id : le serveur a créé l'entité et ce client ne l'a pas encore reçue.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    Le client a été prévenu avant la synchronisation de l'entité

    Le serveur crée un véhicule et déclenche aussitôt un événement client avec l'identifiant réseau. L'événement arrive avant l'entité.

  2. 2

    L'entité est hors de portée

    OneSync ne synchronise que les entités proches du joueur. Un identifiant réseau pour quelque chose à l'autre bout de la carte ne résout vers rien sur ce client.

  3. 3

    Elle est dans un autre routing bucket

    La même chose qu'être hors de portée, mais volontairement.

  4. 4

    L'entité a été supprimée entre l'envoi et la réception

    Un véhicule retiré pendant que le message était en vol.

  5. 5

    L'identifiant est périmé

    Les identifiants réseau sont réutilisés. Un id gardé depuis quelques minutes peut désigner autre chose, ou rien.

Comment savoir laquelle est la vôtre

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

Les deux à false avec le joueur juste à côté, c'est un vrai problème ; les deux à false depuis l'autre bout de la carte, c'est juste la portée.

Où regarder

Là où l'identifiant réseau est reçu, et si quelque chose attend l'entité.

Comment la corriger

Attendez-la, avec une échéance ; jamais une boucle sans borne :

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

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Scanner de sécurité signale la gestion d'événements qui mène ici.

Les erreurs qui voyagent avec celle-ci