orden de ensure en server.cfg: el orden correcto de inicio de recursos para FiveM
¿Recursos fallando por el orden de inicio? El orden correcto de server.cfg (oxmysql, ox_lib, framework, inventory, scripts), carpetas con brackets, ensure vs start y duplicados.
La mitad de tus scripts lanzan errores nil al inicio, pero funcionan cuando los reinicies manualmente. Ese patrón generalmente significa que los recursos comienzan en el orden incorrecto. Esta guía te da un orden que funciona para ESX, QBCore y QBox, y explica ensure vs start, carpetas con brackets y duplicados.
Por qué el orden importa
Los recursos se inician en el orden de las líneas en server.cfg. Un script que lee el framework cuando carga obtiene nil si el framework aún no ha comenzado. Lo mismo aplica a la capa de base de datos y a librerías como ox_lib. Lo resuelves poniendo las capas base arriba:
- La base de datos:
oxmysql - La librería:
ox_lib - El framework:
es_extended,qb-coreoqbx_core - El inventory
- Todo lo demás
Un orden que funciona
Para QBCore:
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure ox_inventory
ensure [qb]
ensure [standalone]
ensure [mic]Para QBox:
ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_inventory
ensure [qbx]
ensure [standalone]Para ESX:
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_inventory
ensure [esx]
ensure [standalone]Ajusta los nombres de categoría a tus propias carpetas. Si usas qb-inventory u otro inventory en lugar de ox_inventory, pon ese en la misma posición, justo después del framework (o antes, si su documentación propia lo dice).
Consejo: mantén los recursos que aseguras por nombre (
oxmysql,ox_lib, el framework, el inventory) en carpetas que no también asegures como un bracket. De lo contrario se aseguran dos veces, mira Duplicados más abajo. Muchas configuraciones ponen los core en una carpeta[core]que nunca se asegura en su totalidad.
Consejo: tu receta de txAdmin puede haber escrito su propio orden. Mantén lo que funciona y solo añade tus scripts debajo de las capas base, en lugar de reescribir el archivo.
ensure vs start
start my_script
ensure my_scriptstartinicia un recurso si está parado.ensurelo inicia si está parado, y lo reinicia si ya está en ejecución.
En un arranque normal, nada está en ejecución, así que se comportan igual. La diferencia se nota cuando los ejecutas en la consola en vivo: ensure my_script es el que quieres para recargar un script que acabas de editar. En server.cfg, usa ensure en todas partes para que solo tengas que recordar una palabra. Para lo contrario, stop my_script lo detiene, y refresh hace que el servidor vuelva a escanear la carpeta resources para nuevos o cambiados manifests.
Carpetas con brackets como categorías
Una carpeta cuyo nombre está entre corchetes no es un recurso. Es una categoría, y FiveM busca dentro de ella:
resources/
[core]/
ox_lib/
oxmysql/
qb-core/
[qb]/
qb-garages/
[standalone]/
my_other_script/
[mic]/
my_script/ensure [qb] inicia cada recurso dentro de [qb]. Eso mantiene server.cfg corto, y es cómo la mayoría de paquetes de framework se envían. Dos cosas que saber:
- El orden dentro de una carpeta con brackets no es algo en lo que confiar. Si
qb-garagesnecesitaqb-core, aseguraqb-coreen su propia línea arriba deensure [qb], o declaradependency 'qb-core'en el manifest. El core no debe esperar a la suerte. - Un recurso no puede estar anidado dentro de otro recurso. Los brackets son solo para agrupar. Si pones una carpeta de script dentro de la carpeta de otro script, FiveM no la encontrará. Mira No se pudo iniciar el recurso.
Un recurso dentro de una carpeta con brackets aún se encuentra por su propio nombre, así que ensure ox_lib funciona aunque la carpeta sea [core]/ox_lib.
Dependencias en el manifest
Las líneas de orden en server.cfg son una herramienta. Una línea dependency en el manifest de un script es la otra, y es más confiable:
dependency 'ox_lib'
dependency 'oxmysql'FiveM entonces comprueba que esos recursos existen y los inicia primero. Si uno falta, obtienes un mensaje claro en lugar de un error nil: No se pudo encontrar la dependencia X para el recurso Y. Usa ambas: un buen orden en el archivo, y dependencias en los manifests que controlas.
Duplicados
Dos cosas van mal con los duplicados:
- El mismo
ensuredos veces. Asegurar un recurso dos veces enserver.cfglo inicia, y luego lo reinicia justo después. Desperdicia tiempo de arranque y puede provocar escrituras duplicadas en la base de datos o eventos al iniciar. Elimina la segunda línea. Comprueba que una carpeta con brackets no ya incluya un recurso que también asegures por nombre. - Dos carpetas con el mismo nombre de recurso. Si tienes
resources/[old]/my_scriptyresources/[mic]/my_script, solo uno se usa, y cuál no es algo que puedas controlar. Elimina o renombra uno, y siempre elimina la versión anterior de un script antes de instalar una nueva.
Cuando una corrección que hiciste parece no tener efecto, comprueba que no editaste la copia que no está en ejecución.
Encuentra el culpable cuando el orden es incorrecto
Inicia el servidor, luego lee la consola desde arriba. El primer recurso que imprime un error es la causa, y todo después puede ser efecto secundario. Ejemplos típicos:
oxmysqlimprime un error de base de datos: nada que use SQL funcionará.ox_libfalla: cada script con@ox_lib/init.luase rompe (fix de ox_lib).- El framework falla: cada script que le pide un objeto de jugador obtiene nil.
Arregla la primera falla y reinicia.
Lista de comprobación
| Síntoma | Solución |
|---|---|
| Errores nil al arrancar, bien después de reinicio manual | Mueve las capas base arriba de los scripts |
| Script necesita ox_lib, falla al inicio | ensure ox_lib arriba de él, añade dependency 'ox_lib' |
| Script editado no se recarga | Usa ensure my_script en la consola en vivo |
| Nueva carpeta no encontrada | Ejecuta refresh |
| Recursos de carpeta con brackets se inician en orden extraño | Asegura el core en su propia línea primero |
| Script ejecuta comportamiento antiguo | Busca una segunda carpeta con el mismo nombre |
| El mismo recurso se reinicia al arrancar | Elimina el ensure duplicado |
Respuestas rápidas
¿Cuál es la diferencia entre ensure y start?
start inicia un recurso que está parado. ensure lo inicia si está parado y lo reinicia si ya está en ejecución. En server.cfg, ambos funcionan igual en un arranque fresco, pero ensure es la opción habitual.
¿Importa el orden de las líneas ensure?
Sí. Un recurso que depende de otro debe iniciarse después. Pon la base de datos, ox_lib, el framework y el inventory primero, luego todo lo demás.
¿Las carpetas con brackets se inician en un orden establecido?
No confíes en ello. ensure [folder] inicia los recursos dentro de ella, pero si uno necesita otro, declara una dependencia en su manifest en lugar de depender del orden.
Scripts que evitan este problema
Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →
CCTV Security CamerasCámaras colocables, una tablet con vista múltiple en vivo y fotos como prueba.Ver script →
Item Creator V2Crea items usables con animaciones, props, efectos y más — sin escribir código.Ver script →