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.
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à.
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
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
Le source n'est pas celui que vous croyez
Dans un callback ou une fermeture imbriquée,
sourcen'est pas ce que vous croyez. Il faut le capturer en haut du gestionnaire :local src = source
- 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
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
La mauvaise fonction de recherche
GetPlayerFromId(id serveur) etGetPlayerFromIdentifier(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 FixerPour ce type d'erreur, le Convertisseur de scripts traduit une ressource entre ESX, QBCore et Qbox.