NetworkGetEntityFromNetworkId gab 0 zurück
Dem Spiel eines Spielers wurde etwas mitgeteilt, bevor es tatsächlich auf seinem Bildschirm ankam.
Mach das zuerst
Gelegentlich ist das normal. Ständig heißt, das Script wartet nicht richtig.
Was es bedeutet
Eine Netz-Id wurde in ein lokales Entity-Handle umgewandelt, und auf diesem Client gibt es noch keine solche Entity. Die Native gibt 0 zurück, statt zu scheitern — der Fehler zeigt sich später als ungültiges Argument oder index-nil.
Meist ist das ein WETTLAUF und kein Fehler der Id: Der Server hat die Entity erzeugt, und dieser Client hat sie noch nicht bekommen.
Was es auslöst
Sortiert danach, wie oft es die Antwort ist.
- 1
Der Client wurde informiert, bevor die Entity synchronisiert war
Der Server erzeugt ein Fahrzeug und löst sofort ein Client-Event mit der Netz-Id aus. Das Event kommt vor der Entity an.
- 2
Die Entity ist außer Reichweite
OneSync synchronisiert nur Entities in Spielernähe. Eine Netz-Id für etwas am anderen Ende der Karte löst auf diesem Client zu nichts auf.
- 3
Sie liegt in einem anderen Routing-Bucket
Dasselbe wie außer Reichweite, nur absichtlich.
- 4
Die Entity wurde zwischen Senden und Empfangen gelöscht
Ein Fahrzeug, entfernt während die Nachricht unterwegs war.
- 5
Die Id ist veraltet
Netz-Ids werden wiederverwendet. Eine vor Minuten festgehaltene Id kann jetzt etwas anderes bedeuten — oder nichts.
Wie du erkennst, welcher deiner ist
print(NetworkDoesNetworkIdExist(netId), NetworkDoesEntityExistWithNetworkId(netId))
Beide false, während der Spieler daneben steht, ist ein echtes Problem; beide false vom anderen Ende der Karte ist nur die Reichweite.
Wo du nachsehen musst
Wo die Netz-Id empfangen wird und ob irgendetwas auf die Entity wartet.
Wie du es behebst
Warte auf sie, mit einer Frist — nie eine unbegrenzte Schleife:
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)
endHängst du immer noch an deinem eigenen Code?
Diese Seite sagt, was dieser Fehler üblicherweise bedeutet. Füg deine Konsole in Server Fixer ein: es sortiert alles darin und sagt dir, was zuerst dran ist; und wenn du lieber nicht ranwillst, kann ORBIE das Script reparieren und dir die Resource fertig zum Einsetzen zurückgeben.
bug_reportServer Fixer öffnenFür diese Art Fehler Sicherheitsscanner markiert die Event-Behandlung, die hierher führt.