THE ORB
Démarrage du studio

PlayerData est nil ou vide sur le client

Un script a demandé les infos d'un joueur avant que le jeu ne les envoie. Cela marche en général à la connexion et casse après un redémarrage du script.

groupsCasse après un redémarragecodeIl faut un développeur

Faites d'abord ceci

Faites reconnecter le joueur. Si cela marche alors, le script a besoin d'un correctif pour les redémarrages.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Le code client a lu les données du joueur avant que le framework ne les envoie. L'objet existe mais ses champs sont vides, ou il est carrément nil, et PlayerData.job.name échoue.

C'est un bug de timing, pas de données. Le même code fonctionne quelques secondes plus tard, et c'est exactement ce qui trouble : il échoue au redémarrage du serveur et au redémarrage de la ressource, et fonctionne quand vous le testez à la main plus tard.

Ce qui la provoque

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

  1. 1

    Le lire au niveau du fichier

    La ressource démarre avant que le joueur ne soit chargé. Au redémarrage du serveur, toutes les ressources démarrent en même temps, sans aucun joueur en session.

  2. 2

    Ne pas écouter l'événement de chargement

    Le framework annonce quand les données sont prêtes. Le code qui ne s'abonne pas doit deviner.

  3. 3

    Ne pas gérer un redémarrage de ressource avec le joueur déjà en jeu

    esx:playerLoaded s'est déclenché il y a longtemps ; redémarrer votre ressource signifie qu'elle ne l'a jamais vu. C'est pourquoi un script marche à la connexion et casse au /restart.

  4. 4

    Lire une sous-table remplie plus tard

    PlayerData.job peut arriver après PlayerData lui-même.

Comment savoir laquelle est la vôtre

Cela marche quand vous vous reconnectez mais casse quand vous redémarrez la ressource ? Alors c'est la cause 3, celle qu'on rate le plus souvent.

Où regarder

Là où le fichier touche PlayerData pour la première fois, et s'il existe seulement un gestionnaire de l'événement de chargement.

Comment la corriger

Abonnez-vous, et couvrez aussi le cas où c'est déjà chargé :

local PlayerData = {}

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

-- couvre un redémarrage de ressource avec le joueur déjà en session
AddEventHandler('onClientResourceStart', function(res)
    if res ~= GetCurrentResourceName() then return end
    if ESX and ESX.IsPlayerLoaded() then
        PlayerData = ESX.GetPlayerData()
    end
end)

QBCore a la même forme avec QBCore:Client:OnPlayerLoaded et QBCore.Functions.GetPlayerData().

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 Convertisseur de scripts traduit une ressource entre ESX, QBCore et Qbox.

Les erreurs qui voyagent avec celle-ci