El objeto ESX / QBCore / Core es nil
Un script no encontró tu framework (ESX, QBCore, Qbox): o no está corriendo, o arranca después que este script.
Haz esto primero
En server.cfg, asegúrate de que tu framework esté listado ARRIBA del script que falló.
Qué significa
El script intentó usar el objeto compartido del framework antes de tener uno. El error suele llegar como attempt to index a nil value (global 'ESX'), pero la causa es lo bastante concreta como para merecer su propia respuesta.
Qué lo provoca
Ordenado por la frecuencia con la que es la respuesta.
- 1
El viejo patrón de getSharedObject, todavía a nivel de archivo
ESX = nil TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)Esto es asíncrono. Todo el código que esté debajo se ejecuta antes que el callback. ESX Legacy quitó el evento por completo, así que en un servidor moderno no se dispara nunca.
- 2
El framework no está arrancado, o arranca después de tu recurso
ensure es_extendeddebajo deensure my-scripten server.cfg. - 3
El accesor equivocado para la versión instalada
ESX Legacy exporta
getSharedObject; QBCore exportaGetCoreObject; Qbox prefiere que se requiera su módulo. Usar la llamada del otro framework devuelve nil. - 4
Usarlo del lado equivocado
Los objetos del cliente y del servidor son distintos. Un método que sólo existe en el servidor es nil en el cliente aunque el objeto haya cargado.
Cómo saber cuál es el tuyo
print(GetResourceState('es_extended'), ESX ~= nil)Si el estado es started pero ESX es nil, es el accesor o los tiempos. Si el estado es otra cosa, es server.cfg.
Dónde mirar
La cabecera del archivo que falla, y el orden de los ensure en server.cfg.
Cómo arreglarlo
ESX Legacy: directo, síncrono, sin callback:
ESX = exports['es_extended']:getSharedObject()
QBCore:
local QBCore = exports['qb-core']:GetCoreObject()
Qbox:
local qbx = exports.qbx_core
Si tenés que soportar un ESX viejo, al menos esperalo antes de usarlo:
CreateThread(function()
while ESX == nil do
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
Wait(100)
end
end)¿Sigues atascado en tu propio código?
Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.
bug_reportAbrir el Server FixerPara este tipo de error, el Conversor de scripts traduce un recurso entre ESX, QBCore y Qbox.