NetworkGetEntityFromNetworkId a renvoyé 0
Le jeu d'un joueur a été informé de quelque chose avant que cela n'arrive réellement à son écran.
Faites d'abord ceci
De temps en temps, c'est normal. En continu, cela veut dire que le script n'attend pas correctement.
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
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
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
Elle est dans un autre routing bucket
La même chose qu'être hors de portée, mais volontairement.
- 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
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)
endToujours 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 FixerPour ce type d'erreur, le Scanner de sécurité signale la gestion d'événements qui mène ici.