Corriger « attempt to index a nil value » dans les scripts FiveM (ESX, QBCore, xPlayer)

Cette erreur Lua signifie qu'un script a utilisé comme une table quelque chose qui n'existe pas. L'élément entre parenthèses, comme global 'ESX' ou local 'xPlayer', indique ce qui manque, et chacun a sa propre correction.

Par l'équipe Nodewave · Mis à jour le 8 novembre 2026

Lisez d'abord l'erreur

La console du serveur et la console F8 affichent l'erreur ainsi :

SCRIPT ERROR: @my_script/server/main.lua:12: attempt to index a nil value (global 'ESX')

Le nom de la ressource, le fichier et le numéro de ligne viennent en premier : vous savez donc exactement où regarder. Les mots entre parenthèses indiquent ce qui est nil :

Entre parenthèsesCe que cela signifie généralement
global 'ESX'Le script n'a jamais reçu l'objet ESX, ou ESX ne tournait pas au démarrage du script.
global 'QBCore'Même chose pour QBCore.
local 'xPlayer' ou 'Player'Le framework n'a pas d'objet joueur pour ce joueur.
field 'Jobs' ou un autre nomLa table existe mais la clé manque, parce que des données ou un fichier de configuration n'ont pas été chargés.

Corriger global 'ESX'

  1. Démarrez ESX en premier. Dans server.cfg, placez ensure es_extended au-dessus de tous les scripts qui l'utilisent, et cherchez dans la console les erreurs d'es_extended lui-même, qui a besoin de sa connexion à la base de données pour démarrer.
  2. Importez ESX dans le script. Ajoutez cette ligne au fxmanifest.lua du script :
shared_script '@es_extended/imports.lua'

Ou définissez l'objet en Lua, près du haut du fichier :

ESX = exports["es_extended"]:getSharedObject()

Les anciens scripts utilisent TriggerEvent('esx:getSharedObject', ...). Cet événement n'existe plus dans l'ESX actuel : remplacez-le par l'export ci-dessus.

Corriger global 'QBCore'

Définissez l'objet en haut de chaque fichier Lua qui l'utilise :

local QBCore = exports['qb-core']:GetCoreObject()

Un local d'un fichier n'est pas visible dans un autre : un script qui marche dans client/main.lua peut donc échouer dans client/events.lua. Démarrez qb-core avant le script dans server.cfg. Qbox inclut une couche de compatibilité pour la plupart des scripts QBCore, mais vérifiez que le script la prend en charge.

Corriger local 'xPlayer'

ESX.GetPlayerFromId(source) et QBCore.Functions.GetPlayer(source) renvoient nil quand le joueur n'est pas encore chargé, est parti, ou que l'ID est faux. Vérifiez toujours le résultat avant de l'utiliser :

local xPlayer = ESX.GetPlayerFromId(source)
if not xPlayer then return end

Raisons courantes de l'absence du joueur :

Corriger un champ manquant

Si une table existe mais qu'une clé est nil, les données correspondantes n'ont pas été chargées. Vérifiez que le fichier de configuration est listé dans fxmanifest.lua avant les fichiers qui l'utilisent, que le nom est écrit pareil partout, et que la version du script correspond à celle de votre framework. Les frameworks renomment des fonctions d'une version à l'autre, et les scripts écrits pour une version plus ancienne cessent de marcher.

Vérifiez les bases

Toujours bloqué ?

Demandez à l'auteur du script, en indiquant le texte complet de l'erreur, le fichier et la ligne, votre framework et sa version, ainsi que l'ordre de démarrage de server.cfg.

Hébergez votre serveur FiveM à Singapour

Un ping faible pour les joueurs en Inde, en Malaisie et en Indonésie, sur AMD EPYC avec NVMe et protection DDoS Gcore sur chaque IP.

Hébergement FiveM à Singapour →