attempt to index a nil value (global 'QBCore') : le GetCoreObject correctif
QBCore est nil dans votre script ? L'ancien événement QBCore:GetObject a disparu. Comment obtenir l'objet principal avec GetCoreObject, sur QBCore et sur QBox, et pourquoi il peut toujours être nil.
Quelque part dans votre console :
SCRIPT ERROR: @my_script/client/main.lua:8: attempt to index a nil value (global 'QBCore')QBCore est en cours d'exécution, le script semble correct et QBCore est toujours nil. Voici pourquoi et comment résoudre ce problème sur QBCore et sur QBox.
Pourquoi QBCore est nil
Les anciens scripts QBCore obtenaient l'objet principal avec un événement :
QBCore = nil
TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)Cet événement a été supprimé de qb-core. Personne ne répond plus, donc QBCore reste nil et la première ligne QBCore.Functions… plante.
Le correctif : GetCoreObject
Demander qb-core son objet à l'export, en haut du fichier :
local QBCore = exports['qb-core']:GetCoreObject()C'est la même ligne sur le client et sur le serveur. Placez-le dans chaque fichier qui utilise QBCore, ou une fois dans un fichier partagé que le manifeste charge en premier :
-- fxmanifest.lua
shared_script 'shared/core.lua'
client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }-- shared/core.lua
QBCore = exports['qb-core']:GetCoreObject()Astuce: si
QBCoreestlocaldans un fichier, les autres fichiers ne peuvent pas le voir. Une erreur nil dans un seul fichier du script signifie généralement exactement cela.
Toujours nil ? qb-core n'est pas encore en cours d'exécution
L'export ne répond que si qb-core a démarré en premier. Dans server.cfg :
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure [qb]
ensure my_scriptAlors :
- Vérifiez le propre démarrage de qb-core en haut de la console du serveur. Une erreur de base de données signifie que ses exportations n'existent jamais et vous obtenez
No such export GetCoreObject in resource qb-core. - Ajoutez la dépendance au
fxmanifest.luadu script, afin que FiveM démarre qb-core en premier ou refuse de démarrer le script sans cette dépendance :
dependency 'qb-core'Le QBox
QBox est qbx_core, et il conserve une couche de compatibilité pour les scripts qb-core : exports['qb-core']:GetCoreObject() renvoie toujours un objet, donc la plupart des scripts QBCore s'exécutent tels quels.
Ce qui change, c'est l'ordre et le nom dans server.cfg :
ensure oxmysql
ensure ox_lib
ensure qbx_coreIl n'y a pas de dossier qb-core distinct sur QBox. Si vous en avez encore un, retirez-le, sinon les deux cœurs se battent.
Pour le nouveau code, QBox préfère ses propres exports à la grande table QBCore, par exemple sur le serveur :
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.citizenid)
endDonnées du joueur sur le client
Lire le lecteur trop tôt est l'autre classique nil :
-- this runs before the player is loaded: job is nil
local job = QBCore.Functions.GetPlayerData().jobAttendez plutôt le joueur :
local QBCore = exports['qb-core']:GetCoreObject()
local PlayerData = {}
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
PlayerData = QBCore.Functions.GetPlayerData()
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job)
PlayerData.job = job
end)Si le script peut également être redémarré pendant que vous êtes en jeu, lisez également les données une fois au démarrage, car OnPlayerLoaded a déjà été déclenché à ce moment-là.
Liste de contrôle
| Symptôme | Corriger |
|---|---|
attempt to index a nil value (global 'QBCore') |
local QBCore = exports['qb-core']:GetCoreObject() en haut du fichier |
| Nil dans un seul fichier | QBCore est local à un autre fichier ; définissez-le là aussi, ou dans un fichier partagé |
No such export GetCoreObject |
qb-core (ou qbx_core) n'a pas démarré ou n'a pas démarré |
| QBox serveur | Conservez l'export, démarrez qbx_core, supprimez tout ancien dossier qb-core |
job est nil au démarrage |
Attendez QBCore:Client:OnPlayerLoaded |
Exécuter ESX à la place ? Le même problème est ESX et nil : correction de esx:getSharedObject.
Réponses rapides
Pourquoi QBCore nil dans mon script ?
Le script n'a jamais obtenu l'objet principal : il utilise l'événement QBCore:GetObject supprimé, il définit QBCore dans un autre fichier ou il démarre avant qb-core. Utilisez local QBCore = exports['qb-core']:GetCoreObject() en haut de chaque fichier.
Est-ce que GetCoreObject fonctionne sur QBox ?
Oui. qbx_core conserve une couche de compatibilité pour qb-core, donc exports['qb-core']:GetCoreObject() répond toujours. Pour le nouveau code, QBox préfère ses propres exportations, telles que exports.qbx_core:GetPlayer(source).
Dois-je appeler GetCoreObject dans chaque fichier ?
Chaque fichier utilisant QBCore en a besoin, sauf si le script le définit une fois dans un fichier partagé chargé avant les autres.
Des scripts sans ce problème
Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →
Clothing DesignerCréez des vêtements dans FiveM — pinceau, calques, import d’images et IA — puis portez-les.Voir le script →
Quest CreatorUn éditeur visuel de quêtes et de dialogues PNJ, construit nœud par nœud en jeu.Voir le script →