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:
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:
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:
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:
-- fxmanifest.lua
shared_script 'shared/core.lua'
client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }-- shared/core.lua
QBCore = exports['qb-core']:GetCoreObject()Suggerimento: se
QBCoreèlocalin 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:
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure [qb]
ensure my_scriptAllora:
- 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.luadello script, quindi FiveM avvia prima qb-core o rifiuta di avviare lo script senza di essa:
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:
ensure oxmysql
ensure ox_lib
ensure qbx_coreNon 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:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.citizenid)
endDati del giocatore sul client
Leggere il lettore troppo presto è l'altro classico nil:
-- this runs before the player is loaded: job is nil
local job = QBCore.Functions.GetPlayerData().jobAspetta invece il giocatore:
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 →