THE ORB
Studio wird gestartet

PlayerData ist auf dem Client nil oder leer

Ein Script hat die Daten eines Spielers angefragt, bevor das Spiel sie geschickt hat. Klappt meist beim Joinen und bricht nach einem Script-Neustart.

groupsBricht nach einem NeustartcodeBraucht einen Entwickler

Mach das zuerst

Lass den Spieler neu joinen. Wenn es dann geht, braucht das Script einen Fix für Neustarts.

bug_reportFüg lieber deine ganze Konsole ein

Was es bedeutet

Der Client-Code hat die Spielerdaten gelesen, bevor das Framework sie geschickt hat. Das Objekt existiert, aber seine Felder sind leer, oder das Ganze ist nil — und PlayerData.job.name scheitert.

Das ist ein Timing-Fehler, kein Datenfehler. Derselbe Code funktioniert ein paar Sekunden später, und genau das macht ihn verwirrend: Er scheitert beim Serverneustart und beim Resource-Neustart und geht, wenn du es später von Hand probierst.

Was es auslöst

Sortiert danach, wie oft es die Antwort ist.

  1. 1

    Es auf Dateiebene lesen

    Die Resource startet, bevor der Spieler geladen ist. Bei einem Serverneustart starten alle Resources gleichzeitig, ganz ohne Spieler in der Sitzung.

  2. 2

    Nicht auf das Lade-Event hören

    Das Framework meldet, wenn die Daten bereit sind. Code, der sich nicht abonniert, muss raten.

  3. 3

    Einen Resource-Neustart mit schon anwesendem Spieler nicht abdecken

    esx:playerLoaded feuerte vor langer Zeit; ein Neustart deiner Resource heißt, sie hat es nie gesehen. Deshalb geht ein Script beim Beitritt und bricht bei /restart.

  4. 4

    Eine Untertabelle lesen, die später gefüllt wird

    PlayerData.job kann nach PlayerData selbst eintreffen.

Wie du erkennst, welcher deiner ist

Geht es, wenn du neu beitrittst, bricht aber beim Neustart der Resource? Dann ist es Ursache 3 — die am häufigsten übersehene.

Wo du nachsehen musst

Wo die Datei PlayerData zum ersten Mal anfasst, und ob es überhaupt einen Handler für das Lade-Event gibt.

Wie du es behebst

Abonnier dich, und deck auch den Fall ab, dass schon geladen wurde:

local PlayerData = {}

RegisterNetEvent('esx:playerLoaded', function(xPlayer)
    PlayerData = xPlayer
end)
RegisterNetEvent('esx:setJob', function(job)
    PlayerData.job = job
end)

-- deckt einen Resource-Neustart ab, wenn der Spieler schon in der Sitzung ist
AddEventHandler('onClientResourceStart', function(res)
    if res ~= GetCurrentResourceName() then return end
    if ESX and ESX.IsPlayerLoaded() then
        PlayerData = ESX.GetPlayerData()
    end
end)

QBCore hat dieselbe Form mit QBCore:Client:OnPlayerLoaded und QBCore.Functions.GetPlayerData().

Hä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 öffnen

Für diese Art Fehler Skript-Konverter übersetzt eine Resource zwischen ESX, QBCore und Qbox.

Fehler, die mit diesem zusammen auftreten