O objeto ESX / QBCore / Core é nil
Um script não achou o seu framework (ESX, QBCore, Qbox): ou não está rodando, ou sobe depois deste script.
Faça isto primeiro
No server.cfg, garanta que o seu framework esteja listado ACIMA do script que falhou.
O que significa
O script tentou usar o objeto compartilhado do framework antes de ter um. O erro costuma chegar como attempt to index a nil value (global 'ESX'), mas a causa é específica o bastante para merecer a própria resposta.
O que causa isso
Ordenado pela frequência com que é a resposta.
- 1
O velho padrão do getSharedObject, ainda em nível de arquivo
ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)Isso é assíncrono. Todo o código abaixo roda antes do callback. O ESX Legacy removeu o evento por completo, então num servidor moderno ele nunca dispara.
- 2
O framework não está iniciado, ou inicia depois do seu resource
ensure es_extendedabaixo deensure my-scriptno server.cfg. - 3
O acessor errado para a versão instalada
O ESX Legacy exporta
getSharedObject; o QBCore exportaGetCoreObject; o Qbox prefere que se requira o módulo dele. Usar a chamada do outro framework devolve nil. - 4
Usar ele do lado errado
Os objetos do cliente e do servidor são diferentes. Um método que só existe no servidor é nil no cliente mesmo com o objeto carregado.
Como saber qual é o seu
print(GetResourceState('es_extended'), ESX ~= nil)Se o estado é started mas o ESX é nil, é o acessor ou o tempo. Se o estado é outra coisa, é o server.cfg.
Onde olhar
O topo do arquivo que falha, e a ordem dos ensure no server.cfg.
Como consertar
ESX Legacy: direto, síncrono, sem callback:
ESX = exports['es_extended']:getSharedObject()
QBCore:
local QBCore = exports['qb-core']:GetCoreObject()
Qbox:
local qbx = exports.qbx_core
Se você precisa dar suporte a um ESX antigo, pelo menos espere por ele antes de usar:
CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Wait(100)
end
end)Ainda travado no seu próprio código?
Esta página é o que esse erro costuma significar. Cole o seu console no Server Fixer e ele vai ordenar tudo o que estiver lá e te dizer o que fazer primeiro; e se você preferir não mexer, o ORBIE consegue consertar o script e te devolver o resource pronto para soltar.
bug_reportAbrir o Server FixerPara esse tipo de erro, o Conversor de scripts traduz um resource entre ESX, QBCore e Qbox.