No such export getSharedObject in resource es_extended: la solución

¿Te sale 'No such export getSharedObject in resource es_extended'? Significa que es_extended no está funcionando cuando tu script lo pide. Las causas, desde el orden de arranque hasta una conexión fallida a la base de datos.

El error completo suele tener esta pinta, en la consola del servidor o en F8:

text
SCRIPT ERROR: @my_script/server/main.lua:1: No such export getSharedObject in resource es_extended

El código está bien. exports['es_extended']:getSharedObject() es exactamente como ESX Legacy reparte su objeto. El problema es cuándo se ejecuta: en ese momento, es_extended no está ahí para responder.

1. es_extended arranca después de tu script

Es la causa nueve de cada diez veces. FiveM arranca los recursos en el orden de tu server.cfg, y un script que pide ESX en su primera línea necesita que es_extended ya esté funcionando.

Un orden seguro para un servidor ESX:

cfg
# database and libraries first
ensure oxmysql
ensure ox_lib

# the framework
ensure es_extended
ensure [esx]

# everything else after
ensure [scripts]
ensure my_script

Ojo con las categorías de carpetas como [scripts]: ensure [scripts] arranca todo lo que hay dentro, así que si esa línea va antes de ensure es_extended, todos los scripts que contiene arrancan demasiado pronto.

También puedes hacer que el propio script espere a ESX declarando la dependencia en su fxmanifest.lua:

lua
dependency 'es_extended'

Así FiveM arrancará primero es_extended, o se negará a arrancar el script si falta.

2. es_extended no consiguió arrancar

Si es_extended peta al arrancar, sus exports nunca llegan a existir. Sube en la consola del servidor hasta el principio y busca líneas rojas de es_extended antes del error de tu script. Los culpables habituales:

  • La base de datos. oxmysql no puede conectarse (una contraseña incorrecta, una base de datos que no existe, MySQL sin arrancar). Revisa mysql_connection_string en tu server.cfg:
cfg
set mysql_connection_string "mysql://user:password@localhost/es_extended?charset=utf8mb4"
  • Una dependencia que falta. Las versiones recientes de ESX Legacy necesitan que oxmysql y ox_lib arranquen antes que ellas.
  • Tablas que faltan. Una instalación nueva sin el SQL de ESX importado peta en la primera consulta.

Arregla ese primer error y el error del export desaparece con él.

3. La carpeta no se llama es_extended

El export vive en un recurso que se llama exactamente es_extended. Esto lo rompe:

  • la carpeta se ha renombrado (es_extended-legacy, es_extended_main…);
  • hay dos copias de es_extended en carpetas distintas, y arranca la que no es;
  • en un host Linux, el nombre tiene mayúsculas distintas (ES_Extended): Linux distingue entre mayúsculas y minúsculas, Windows no.

Busca en tu carpeta resources archivos fxmanifest.lua dentro de carpetas llamadas es_extended y deja exactamente una.

4. Reiniciaste es_extended con el servidor en marcha

restart es_extended desde la consola parece inofensivo, pero todos los scripts que ya cogieron el objeto ESX se quedan con el antiguo, y cualquiera que llame al export durante el reinicio recibe este error. Después de tocar es_extended, reinicia el servidor entero, o al menos reinicia los scripts de ESX después de él.

5. El servidor ni siquiera es ESX

Si tu servidor usa QBCore o QBox, no hay es_extended, y un script solo para ESX falla exactamente así. Busca en la config del script una opción de framework, o usa una versión hecha para tu framework. El equivalente de este error en QBCore lo tienes en attempt to index a nil value (global 'QBCore').

Comprobarlo en diez segundos

En la consola del servidor:

text
ensure es_extended

Si es_extended arranca limpio y el error sigue, es el orden de arranque. Si muestra errores, arréglalos primero. Después:

text
restart my_script

Si ahora el script arranca sin el error, mueve su ensure por debajo de es_extended en server.cfg para que también funcione después de reiniciar el servidor.

Resumen

Causa Cómo lo notas Solución
Orden de arranque Funciona después de restart my_script ensure es_extended por encima del script, o dependency 'es_extended'
es_extended petó Líneas rojas de es_extended por encima del error Arregla la base de datos o la dependencia que falta
Nombre de carpeta incorrecto ensure es_extended dice que no lo encuentra Exactamente una carpeta llamada es_extended
Reinicio en caliente Errores justo después de restart es_extended Reinicia el servidor
No es un servidor ESX No hay es_extended Usa la versión QBCore / QBox del script

Respuestas rápidas

¿Qué significa 'No such export getSharedObject in resource es_extended'?

Tu script llamó a exports['es_extended']:getSharedObject() cuando es_extended no estaba funcionando: todavía no había arrancado, falló al arrancar o su carpeta tiene otro nombre.

¿Cómo hago que es_extended arranque antes que mi script?

Pon ensure es_extended por encima del script en server.cfg, después de oxmysql y ox_lib. Añadir dependency 'es_extended' al fxmanifest del script también hace que FiveM arranque es_extended primero.

¿Puedo reiniciar es_extended con el servidor en marcha?

No es buena idea: todos los recursos que tienen el objeto ESX se quedan con el antiguo. Reinicia el servidor entero, o reinicia los scripts que usan ESX después de es_extended.

Scripts que evitan este problema

Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →CCTV Security CamerasCámaras colocables, una tablet con vista múltiple en vivo y fotos como prueba.Ver script →Crypto MiningCompra una nave, monta rigs pieza a pieza y mina monedas en un mercado vivo.Ver script →

Sigue leyendo