THE ORB
Arrancando el studio

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.

groupsEse script no hace nadapersonPodés arreglarlo

Haz esto primero

En server.cfg, asegúrate de que tu framework esté listado ARRIBA del script que falló.

bug_reportMejor pega tu consola entera

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. 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. 2

    El framework no está arrancado, o arranca después de tu recurso

    ensure es_extended debajo de ensure my-script en server.cfg.

  3. 3

    El accesor equivocado para la versión instalada

    ESX Legacy exporta getSharedObject; QBCore exporta GetCoreObject; Qbox prefiere que se requiera su módulo. Usar la llamada del otro framework devuelve nil.

  4. 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 Fixer

Para este tipo de error, el Conversor de scripts traduce un recurso entre ESX, QBCore y Qbox.

Errores que viajan con este