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:

text
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:

lua
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:

lua
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:

lua
-- fxmanifest.lua
shared_script 'shared/core.lua'
client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }
lua
-- shared/core.lua
QBCore = exports['qb-core']:GetCoreObject()

Tipp: wenn QBCore in einer Datei local ist, 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:

cfg
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure [qb]

ensure my_script

Dann:

  • 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.lua des Skripts hinzu, damit FiveM zuerst qb-core startet oder sich weigert, das Skript ohne sie zu starten:
lua
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:

cfg
ensure oxmysql
ensure ox_lib
ensure qbx_core

Es 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:

lua
local player = exports.qbx_core:GetPlayer(source)
if player then
    print(player.PlayerData.citizenid)
end

Spielerdaten auf dem Client

Den Player zu früh zu lesen ist der andere Klassiker nil:

lua
-- this runs before the player is loaded: job is nil
local job = QBCore.Functions.GetPlayerData().job

Warten Sie stattdessen auf den Spieler:

lua
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 →

Weiterlesen