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:
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:
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:
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:
-- fxmanifest.lua
shared_script 'shared/core.lua'
client_scripts { 'client/*.lua' }
server_scripts { 'server/*.lua' }-- shared/core.lua
QBCore = exports['qb-core']:GetCoreObject()Dica: se
QBCoreestiverlocalem 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:
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure [qb]
ensure my_scriptEntã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.luado script, para que FiveM inicie qb-core primeiro ou se recuse a iniciar o script sem ela:
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:
ensure oxmysql
ensure ox_lib
ensure qbx_coreNã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:
local player = exports.qbx_core:GetPlayer(source)
if player then
print(player.PlayerData.citizenid)
endDados do jogador no cliente
Ler o player muito cedo é outro clássico nil:
-- this runs before the player is loaded: job is nil
local job = QBCore.Functions.GetPlayerData().jobAguarde pelo jogador:
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 →