attempt to index a nil value (global 'QBCore'): a GetCoreObject correção

QBCore está nil em seu script? O antigo evento QBCore:GetObject desapareceu. Como obter o objeto principal com GetCoreObject, em QBCore e em QBox e por que ele ainda pode ser nil.

Em algum lugar do seu console:

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

QBCore está em execução, o script parece bom e QBCore ainda está nil. Veja por que e como corrigir isso em QBCore e em QBox.

Por que QBCore é nil

Scripts QBCore mais antigos obtinham o objeto principal com um evento:

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

Esse evento foi removido de qb-core. Ninguém atende mais, então QBCore permanece nil e a primeira QBCore.Functions… falha.

A correção: GetCoreObject

Peça qb-core seu objeto com a exportação, no topo do arquivo:

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

É a mesma linha no cliente e no servidor. Coloque-o em cada arquivo que usa QBCore ou uma vez em um arquivo compartilhado que o manifesto carrega primeiro:

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

Dica: se QBCore estiver local em um arquivo, os outros arquivos não poderão vê-lo. Um erro nil em apenas um arquivo do script geralmente significa exatamente isso.

Ainda nil? qb-core ainda não está em execução

A exportação só responde se qb-core for iniciada primeiro. Em server.cfg:

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

ensure my_script

Então:

  • Verifique o próprio início do qb-core na parte superior do console do servidor. Um erro de banco de dados significa que suas exportações nunca existirão e você receberá No such export GetCoreObject in resource qb-core.
  • Adicione a dependência ao fxmanifest.lua do script, para que FiveM inicie qb-core primeiro ou se recuse a iniciar o script sem ela:
lua
dependency 'qb-core'

Em QBox

QBox é qbx_core e mantém uma camada de compatibilidade para scripts qb-core: exports['qb-core']:GetCoreObject() ainda retorna um objeto, então a maioria dos scripts QBCore são executados como estão.

O que muda é a ordem e o nome em server.cfg:

cfg
ensure oxmysql
ensure ox_lib
ensure qbx_core

Não há uma pasta qb-core separada em QBox. Se você ainda tiver um, remova-o ou os dois núcleos brigarão.

Para código novo, QBox prefere suas próprias exportações em vez da grande tabela QBCore, por exemplo, no servidor:

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

Dados do jogador no cliente

Ler o player muito cedo é outro clássico nil:

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

Aguarde pelo jogador:

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 o script também puder ser reiniciado enquanto você estiver no jogo, leia os dados uma vez quando ele iniciar, já que OnPlayerLoaded já foi acionado até então.

Lista de verificação

Sintoma Corrigir
attempt to index a nil value (global 'QBCore') local QBCore = exports['qb-core']:GetCoreObject() na parte superior do arquivo
Nil em apenas um arquivo QBCore é local para outro arquivo; defina-o lá também ou em um arquivo compartilhado
No such export GetCoreObject qb-core (ou qbx_core) não foi iniciado ou falhou ao iniciar
QBox servidor Mantenha a exportação, inicie qbx_core, remova qualquer pasta qb-core antiga
job está nil na inicialização Aguarde QBCore:Client:OnPlayerLoaded

Executando ESX em vez disso? O mesmo problema que existe ESX é nil: consertar esx:getSharedObject.

Respostas rápidas

Por que QBCore nil está no meu script?

O script nunca obteve o objeto principal: ele usa o evento QBCore:GetObject removido, define QBCore em outro arquivo ou começa antes de qb-core. Use local QBCore = exports['qb-core']:GetCoreObject() no topo de cada arquivo.

GetCoreObject funciona em QBox?

Sim. qbx_core mantém uma camada de compatibilidade para qb-core, então exports['qb-core']:GetCoreObject() ainda responde. Para novo código, QBox prefere suas próprias exportações, como exports.qbx_core:GetPlayer(source).

Preciso chamar GetCoreObject em todos os arquivos?

Cada arquivo que usa QBCore precisa dele, a menos que o script o defina uma vez em um arquivo compartilhado que é carregado antes dos outros.

Scripts sem esse problema

Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →Clothing DesignerCrie roupas dentro do FiveM — pincel, camadas, importação de imagens e IA — e vista na hora.Ver script →Quest CreatorUm editor visual de missões e diálogos com NPCs, montado nó por nó dentro do jogo.Ver script →

Continue lendo