attempt to index a nil value (global 'QBCore'): der GetCoreObject Fix
QBCore ist nil in Ihrem Skript? Das alte QBCore:GetObject-Ereignis ist weg. Wie man das Kernobjekt mit GetCoreObject, auf QBCore und auf QBox erhält und warum es immer noch nil sein kann.
Irgendwo in Ihrer Konsole:
SCRIPT ERROR: @my_script/client/main.lua:8: attempt to index a nil value (global 'QBCore')QBCore läuft, das Skript sieht gut aus und QBCore ist immer noch nil. Hier erfahren Sie, warum und wie Sie das Problem auf QBCore und auf QBox beheben können.
Warum QBCore nil
Ältere QBCore Skripte haben das Kernobjekt mit einem Ereignis erhalten:
QBCore = nil
TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)Dieses Ereignis wurde aus qb-core entfernt. Niemand antwortet mehr, also bleibt QBCore nil und die erste QBCore.Functions… Zeile stürzt ab.
Die Lösung: GetCoreObject
Fragen Sie qb-core nach seinem Objekt mit dem Export, oben in der Datei:
local QBCore = exports['qb-core']:GetCoreObject()Es ist die gleiche Zeile auf dem Client und auf dem Server. Fügen Sie es in jede Datei ein, die QBCore verwendet, oder einmal in eine freigegebene Datei, die das Manifest zuerst lädt:
-- fxmanifest.lua
shared_script 'shared/core.lua'
client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }-- shared/core.lua
QBCore = exports['qb-core']:GetCoreObject()Tipp: wenn
QBCorein einer Dateilocalist, können die anderen Dateien es nicht sehen. Ein nil Fehler in nur einer Datei des Skripts bedeutet normalerweise genau das.
Immer noch nil? qb-core läuft noch nicht
Der Export antwortet nur, wenn qb-core zuerst gestartet wurde. In server.cfg:
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure [qb]
ensure my_scriptDann:
- Check qb-core's own start at the top of the server console. A database error there means its exports never exist, and you get
No such export GetCoreObject in resource qb-core. - Fügen Sie die Abhängigkeit zu
fxmanifest.luades Skripts hinzu, damit FiveM zuerst qb-core startet oder sich weigert, das Skript ohne sie zu starten:
dependency 'qb-core'Am QBox
QBox ist qbx_core und es behält eine Kompatibilitätsschicht für qb-core-Skripte bei: exports['qb-core']:GetCoreObject() gibt immer noch ein Objekt zurück, sodass die meisten QBCore-Skripte so ausgeführt werden, wie sie sind.
Was sich ändert, ist die Reihenfolge und der Name in server.cfg:
ensure oxmysql
ensure ox_lib
ensure qbx_coreEs gibt keinen separaten Ordner qb-core auf QBox. Wenn Sie noch einen haben, entfernen Sie ihn, sonst geraten die beiden Kerne in Konflikt.
Für neuen Code bevorzugt QBox seine eigenen Exporte gegenüber der großen QBCore-Tabelle, zum Beispiel auf dem Server:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.citizenid)
endSpielerdaten auf dem Client
Den Player zu früh zu lesen ist der andere Klassiker nil:
-- this runs before the player is loaded: job is nil
local job = QBCore.Functions.GetPlayerData().jobWarten Sie stattdessen auf den Spieler:
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)Wenn das Skript auch während des Spiels neu gestartet werden kann, lesen Sie die Daten auch einmal beim Start aus, da OnPlayerLoaded bis dahin bereits gestartet ist.
Checkliste
| Symptom | Behebung |
|---|---|
attempt to index a nil value (global 'QBCore') |
local QBCore = exports['qb-core']:GetCoreObject() oben in der Datei |
| Nil nur in einer Datei | QBCore ist lokal für eine andere Datei; Definieren Sie es auch dort oder in einer freigegebenen Datei |
No such export GetCoreObject |
qb-core (oder qbx_core) wurde nicht gestartet oder konnte nicht gestartet werden |
| QBox Server | Behalten Sie den Export bei, starten Sie qbx_core und entfernen Sie alle alten qb-core-Ordner |
job ist beim Start nil |
Warten Sie auf QBCore:Client:OnPlayerLoaded |
Stattdessen ESX ausführen? Das gleiche Problem wie ESX ist nil: Behebung von esx:getSharedObject.
Kurze Antworten
Warum steht QBCore nil in meinem Skript?
Das Skript hat das Kernobjekt nie erhalten: Es verwendet das entfernte Ereignis QBCore:GetObject, es definiert QBCore in einer anderen Datei oder es beginnt vor qb-core. Verwenden Sie local QBCore = exports['qb-core']:GetCoreObject() oben in jeder Datei.
Funktioniert GetCoreObject auf QBox?
Ja. qbx_core behält eine Kompatibilitätsebene für qb-core bei, sodass exports['qb-core']:GetCoreObject() weiterhin antwortet. Für neuen Code bevorzugt QBox seine eigenen Exporte, wie zum Beispiel exports.qbx_core:GetPlayer(source).
Muss ich GetCoreObject in jeder Datei aufrufen?
Jede Datei, die QBCore verwendet, benötigt es, es sei denn, das Skript definiert es einmal in einer gemeinsam genutzten Datei, die vor den anderen geladen wird.
Scripts ohne dieses Problem
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →
Clothing DesignerDesigne Kleidung direkt in FiveM — Pinsel, Ebenen, Bildimport und KI — und trag sie dann.Script ansehen →
Quest CreatorEin visueller Editor für Quests und NPC-Dialoge, Node für Node im Spiel gebaut.Script ansehen →