attempt to index a nil value (global 'QBCore'): la GetCoreObject correzione

QBCore è nil nel tuo script? Il vecchio evento QBCore:GetObject è scomparso. Come ottenere l'oggetto principale con GetCoreObject, su QBCore e su QBox e perché può ancora essere nil.

Da qualche parte nella tua console:

text
SCRIPT ERROR: @my_script/client/main.lua:8: attempt to index a nil value (global 'QBCore')

QBCore è in esecuzione, lo script sembra a posto e QBCore è ancora nil. Ecco perché e come risolverlo su QBCore e su QBox.

Perché QBCore è nil

Gli script QBCore precedenti hanno ottenuto l'oggetto principale con un evento:

lua
QBCore = nil
TriggerEvent('QBCore:GetObject', function(obj) QBCore = obj end)

L'evento è stato rimosso da qb-core. Nessuno risponde più, quindi QBCore rimane nil e la prima riga QBCore.Functions… si blocca.

La soluzione: GetCoreObject

Chiedi a qb-core il suo oggetto con l'esportazione, nella parte superiore del file:

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

È la stessa riga sul client e sul server. Inseriscilo in ogni file che utilizza QBCore o una volta in un file condiviso che il manifest carica per primo:

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()

Suggerimento: se QBCore è local in un file, gli altri file non possono vederlo. Un errore nil in un solo file dello script di solito significa esattamente questo.

Ancora nil? qb-core non è ancora in esecuzione

L'esportazione risponde solo se qb-core è stata avviata per prima. In server.cfg:

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

ensure my_script

Allora:

  • Controlla l'avvio di qb-core nella parte superiore della console del server. Un errore del database significa che le sue esportazioni non esistono mai e ottieni No such export GetCoreObject in resource qb-core.
  • Aggiungi la dipendenza a fxmanifest.lua dello script, quindi FiveM avvia prima qb-core o rifiuta di avviare lo script senza di essa:
lua
dependency 'qb-core'

Il QBox

QBox è qbx_core e mantiene un livello di compatibilità per gli script qb-core: exports['qb-core']:GetCoreObject() restituisce comunque un oggetto, quindi la maggior parte degli script QBCore vengono eseguiti così come sono.

Ciò che cambia è l'ordine e il nome in server.cfg:

cfg
ensure oxmysql
ensure ox_lib
ensure qbx_core

Non esiste una cartella qb-core separata su QBox. Se ne hai ancora uno, rimuovilo, altrimenti i due nuclei combatteranno.

Per il nuovo codice, QBox preferisce le proprie esportazioni rispetto alla grande tabella QBCore, ad esempio sul server:

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

Dati del giocatore sul client

Leggere il lettore troppo presto è l'altro classico nil:

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

Aspetta invece il giocatore:

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)

Se lo script può essere riavviato anche mentre sei in gioco, leggi i dati una volta anche all'avvio, poiché OnPlayerLoaded è già stato attivato a quel punto.

Lista di controllo

Sintomo Correggi
attempt to index a nil value (global 'QBCore') local QBCore = exports['qb-core']:GetCoreObject() nella parte superiore del file
Nil in un solo file QBCore è locale su un altro file; definiscilo anche lì o in un file condiviso
No such export GetCoreObject qb-core (o qbx_core) non avviato o avvio non riuscito
QBox server Mantieni l'esportazione, avvia qbx_core, rimuovi qualsiasi vecchia cartella qb-core
job è nil all'avvio Attendere QBCore:Client:OnPlayerLoaded

Utilizzi ESX invece? Lo stesso problema che c'è ESX è nil: risolvere esx:getSharedObject.

Risposte rapide

Perché QBCore nil nel mio script?

Lo script non ha mai ottenuto l'oggetto principale: utilizza l'evento QBCore:GetObject rimosso, definisce QBCore in un altro file o inizia prima di qb-core. Utilizza local QBCore = exports['qb-core']:GetCoreObject() nella parte superiore di ogni file.

GetCoreObject funziona su QBox?

Sì. qbx_core mantiene un livello di compatibilità per qb-core, quindi exports['qb-core']:GetCoreObject() risponde comunque. Per il nuovo codice, QBox preferisce le proprie esportazioni, come exports.qbx_core:GetPlayer(source).

Devo chiamare GetCoreObject in ogni file?

Ogni file che utilizza QBCore ne ha bisogno, a meno che lo script non lo definisca una volta in un file condiviso che viene caricato prima degli altri.

Script senza questo problema

Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →Clothing DesignerDisegna vestiti dentro FiveM — pennello, livelli, import di immagini e IA — e poi indossali.Vedi script →Quest CreatorUn editor visuale di missioni e dialoghi con gli NPC, costruito nodo per nodo in gioco.Vedi script →

Continua a leggere