THE ORB
Démarrage du studio

GetPlayer(source) a renvoyé nil sur le serveur

Le serveur a cherché un joueur et ne l'a pas trouvé : en général il s'est déconnecté en pleine action.

groupsUne action ratée 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 ne vérifie pas que le joueur est encore là.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

Un gestionnaire serveur a demandé au framework un objet joueur et n'a rien reçu. Tout accès aux champs ensuite échoue.

Ce qui la provoque

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

  1. 1

    Le joueur s'est déconnecté en pleine opération

    Entre le déclenchement de l'événement et l'exécution du gestionnaire, il est parti. Courant avec toute opération différée ou attendue.

  2. 2

    Le source n'est pas celui que vous croyez

    Dans un callback ou une fermeture imbriquée, source n'est pas ce que vous croyez. Il faut le capturer en haut du gestionnaire :

    local src = source
  3. 3

    Le joueur est connecté mais pas chargé

    Pendant playerConnecting, et un instant après l'arrivée, il n'y a pas encore d'objet joueur : le personnage n'a pas été choisi.

  4. 4

    Le source vient du client

    Un client qui envoie son propre id peut envoyer celui de n'importe qui. C'est une faille de sécurité en plus d'un nil.

  5. 5

    La mauvaise fonction de recherche

    GetPlayerFromId (id serveur) et GetPlayerFromIdentifier (licence), utilisées l'une pour l'autre par erreur.

Comment savoir laquelle est la vôtre

local src = source
print('src', src, GetPlayerName(src))

Si GetPlayerName est nil aussi, il est parti ou n'a jamais fini d'arriver. Si le nom se résout mais pas l'objet du framework, il est connecté mais pas chargé.

Où regarder

Le haut du gestionnaire d'événement, et chaque endroit où source est lu après une attente.

Comment la corriger

RegisterNetEvent('shop:buy', function(item, count)
    local src = source                       -- capturez d'abord, toujours
    local xPlayer = ESX.GetPlayerFromId(src)
    if not xPlayer then return end           -- il est parti, ou n'a jamais chargé
    -- ne faites jamais confiance à un id envoyé par le client : src fait foi
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 Convertisseur de scripts traduit une ressource entre ESX, QBCore et Qbox.

Les erreurs qui voyagent avec celle-ci