L'objet ESX / QBCore / Core est nil
Un script n'a pas trouvé votre framework (ESX, QBCore, Qbox) : soit il ne tourne pas, soit il démarre après ce script.
Faites d'abord ceci
Dans server.cfg, assurez-vous que votre framework est listé AU-DESSUS du script qui a échoué.
Ce que ça veut dire
Le script a tenté d'utiliser l'objet partagé du framework avant d'en avoir un. L'erreur arrive en général sous la forme attempt to index a nil value (global 'ESX'), mais la cause est assez précise pour mériter sa propre réponse.
Ce qui la provoque
Classé par fréquence : la cause la plus probable en premier.
- 1
L'ancien motif getSharedObject, toujours au niveau du fichier
ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)C'est asynchrone. Tout le code en dessous s'exécute avant le callback. ESX Legacy a supprimé l'événement, donc sur un serveur moderne il ne se déclenche jamais.
- 2
Le framework n'est pas démarré, ou démarre après votre ressource
ensure es_extendeden dessous deensure my-scriptdans server.cfg. - 3
Le mauvais accesseur pour la version installée
ESX Legacy exporte
getSharedObject; QBCore exporteGetCoreObject; Qbox préfère qu'on requière son module. Utiliser l'appel de l'autre framework donne nil. - 4
L'utiliser du mauvais côté
Les objets client et serveur sont différents. Une méthode serveur appelée sur le client est nil même quand l'objet a chargé.
Comment savoir laquelle est la vôtre
print(GetResourceState('es_extended'), ESX ~= nil)Si l'état est started mais qu'ESX est nil, c'est l'accesseur ou le timing. Si l'état est autre chose, c'est server.cfg.
Où regarder
Le haut du fichier en échec, et l'ordre des ensure dans server.cfg.
Comment la corriger
ESX Legacy — direct, synchrone, sans callback :
ESX = exports['es_extended']:getSharedObject()
QBCore :
local QBCore = exports['qb-core']:GetCoreObject()
Qbox :
local qbx = exports.qbx_core
Si vous devez gérer un vieil ESX, attendez-le au moins avant de l'utiliser :
CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Wait(100)
end
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.