Cómo resolver errores comunes de la consola de FiveM: guía práctica de debug

Aprende a identificar y resolver los errores más frecuentes en la consola de FiveM: script error, dependencias ausentes, fxmanifest inválido y fallos de base de datos.

La consola de FiveM es el punto de partida para cualquier debug serio. Acumula mensajes de error en tiempo real — algunos críticos, otros silenciosos — e ignorar esas líneas es el camino más rápido hacia un servidor inestable. Los owners experimentados leen la consola cada vez que suben un recurso nuevo; los owners iniciantes solo miran cuando algún jugador se queja en Discord.

Esta guía cubre los errores más comunes que aparecen en la consola de un servidor FiveM en producción: script errors, dependencias ausentes, manifests inválidos, fallos de base de datos y problemas de framework. Para cada error mostramos cómo identificar la causa real y aplicar la corrección definitiva — no solo callar el mensaje.

Tiempo estimado de lectura y ejecución: 25 a 40 minutos, dependiendo de cuántos resources necesites auditar.

Requisitos previos

Antes de empezar el debug necesitas acceso al servidor y la capacidad de reiniciar resources individualmente.

Requisitos previos

Acceso a la consola RCON o txAdmin, permisos de admin en el servidor, txData/ o la carpeta resources/ accesible vía SFTP, y la capacidad de reiniciar el servidor entero si fuera necesario. Conocimientos básicos de Lua y lectura de stack traces ayudan.

Consola servidor txAdmin o RCON
Consola cliente F8 in-game
Logs filesystem txData/logs/
Profiler profiler record N

Cómo leer un mensaje de error de la consola

Cada línea de error de FiveM sigue un patrón predecible. Aprender a decodificar esos mensajes ahorra horas de prueba y error.

La estructura general es: prefijo de color (^1 rojo, ^3 amarillo), tipo de error, resource afectado, archivo y línea, descripción. Ejemplo real:

[       script:mi_script] SCRIPT ERROR: @mi_script/server/main.lua:42: attempt to index a nil value (local 'player')
> CreatePlayer (@mi_script/server/main.lua:42)
> handler (@mi_script/server/events.lua:18)

La primera línea indica el resource (mi_script), el archivo (server/main.lua), la línea (42) y el tipo (attempt to index a nil value). Las líneas con > son el stack trace — léelas de arriba abajo para entender la cadena de llamadas que llevó al error.

Stack traces invertidos

FiveM lista el frame más reciente primero (al revés de lo que hacen Python o Node). La línea que disparó el error es la primera >, la función que la llamó viene después, y así sucesivamente hasta el evento raíz.

Error 1: SCRIPT ERROR — attempt to index a nil value

El error más común en servidores FiveM, especialmente tras updates del framework o actualizaciones de scripts personalizados.

01

Identifica la variable nil en el error. El mensaje attempt to index a nil value (local 'player') indica que player no fue definido antes del uso.

Abre el archivo en la línea indicada y lee el contexto inmediatamente anterior:

RegisterServerEvent('myresource:save')
AddEventHandler('myresource:save', function(data)
    local player = ESX.GetPlayerFromId(source)
    player.setMoney(data.amount)
end)

Si ESX.GetPlayerFromId(source) devuelve nil (el jugador se desconectó en medio del evento, o ESX no se inicializó), la línea siguiente revienta.

02

Agrega una guard clause antes de cualquier indexación:

RegisterServerEvent('myresource:save')
AddEventHandler('myresource:save', function(data)
    local player = ESX.GetPlayerFromId(source)
    if not player then
        print(('[myresource] Player %s no encontrado, evento ignorado'):format(source))
        return
    end
    player.setMoney(data.amount)
end)

Este patrón fail-fast con log nominal sustituye el crash por una línea informativa en la consola — sin perder el contexto del problema.

03

Reinicia el resource y dispara el evento manualmente para confirmar que el error fue suprimido sin enmascarar la causa raíz:

restart myresource
No silencies sin investigar

Agregar guard clauses sin entender por qué la variable vino nil enmascara bugs de timing. Siempre loguea el caso silenciado para detectar patrones (ej: jugador desconectado, evento que llegó antes de que cargase el framework, source inválido viniendo del cliente).

Error 2: Could not find dependency X for resource Y

Aparece cuando el fxmanifest.lua de un resource declara dependencia de otro que no está iniciado o ni siquiera existe en el servidor.

01

Lee el mensaje completo. Ejemplo:

Could not find dependency oxmysql for resource es_extended.
Couldn't start resource es_extended.

Significa que es_extended declara dependency 'oxmysql' en el manifest pero el servidor no consiguió iniciar oxmysql antes — o porque falta, o porque el orden en server.cfg está mal.

02

Verifica que el resource dependencia exista en la carpeta resources/:

ls resources/ | grep oxmysql

Si no devuelve nada, descárgalo del repositorio oficial (overextended/oxmysql en GitHub) y colócalo en resources/[standalone]/oxmysql.

03

Garantiza el orden correcto en server.cfg. Las dependencias deben iniciarse antes que quienes dependen de ellas:

ensure oxmysql
ensure es_extended
ensure esx_menu_default
ensure mis_scripts

El orden importa: ensure procesa línea a línea. Coloca frameworks y bibliotecas (oxmysql, es_extended, qb-core, ox_lib) arriba, después los scripts dependientes.

Error 3: Couldn’t load resource manifest

El servidor encontró la carpeta del resource pero falló al parsear el fxmanifest.lua. Típicamente un error de sintaxis o versión inválida.

01

Abre el fxmanifest.lua del resource afectado y confirma la cabecera mínima:

fx_version 'cerulean'
game 'gta5'

author 'tu_nombre'
description 'descripción del resource'
version '1.0.0'

server_scripts {
    'server/*.lua'
}

client_scripts {
    'client/*.lua'
}

Los campos fx_version y game son obligatorios. fx_version acepta valores fijos: 'cerulean' (más reciente), 'bodacious', 'adamant'. Usa 'cerulean' en cualquier servidor moderno.

02

Si todavía tienes resources con __resource.lua, migra. El formato legado no soporta features modernas y dispara warning de deprecación. Renombra el archivo y ajusta la sintaxis — la mayor diferencia es que fxmanifest.lua exige fx_version y game declarados.

Validación automática

Resources descargados de fuentes desconocidas pueden tener un BOM UTF-8 invisible al inicio del archivo que rompe el parser. Ábrelo en un editor que muestre el encoding (VSCode lo muestra en la esquina inferior derecha) y guárdalo como UTF-8 sin BOM.

Error 4: Database connection failed (oxmysql)

Los errores de base aparecen como [oxmysql] [ERROR] Connection refused o Access denied for user. Cada subtipo tiene causa distinta.

Connection refused

MySQL no está aceptando conexiones en el host/puerto configurados.

# Confirma que MySQL está corriendo
systemctl status mysql

# Prueba conectividad manual
mysql -h 127.0.0.1 -u fivem -p fivem_db

Si MySQL corre en un contenedor Docker separado, el host en la connection string debe ser el nombre del contenedor, no localhost.

Access denied

Credenciales incorrectas en server.cfg:

set mysql_connection_string "mysql://fivem:[email protected]:3306/fivem_db?charset=utf8mb4"

Los caracteres especiales en la contraseña (@, #, /) necesitan estar URL-encoded. La contraseña p@ss#1 queda como p%40ss%231. Un error de encoding es causa frecuente de “Access denied” incluso con contraseña correcta.

Pool timeout

[oxmysql] [ERROR] Pool is closed indica que las conexiones se cayeron (reinicio de MySQL, timeout del servidor). Reinicia el resource:

restart oxmysql

Para prevenirlo, configura wait_timeout en MySQL a un valor mayor que el intervalo de queries del servidor.

Error 5: Resource X failed to start

Fallo genérico de inicialización. La causa real está en las líneas inmediatamente anteriores al mensaje.

01

Busca líneas previas al error de “failed to start”. FiveM imprime el error específico antes del resumen. Ejemplo:

[script:mi_resource] Error loading script server/main.lua in resource mi_resource: server/main.lua:1: unexpected symbol near '<'
Failed to load script server/main.lua.
[c-scripting-core] Failed to start resource mi_resource

La causa raíz es unexpected symbol near '<' en la línea 1 — el archivo probablemente tiene HTML o XML al inicio (descarga corrupta, guardó una página de error en lugar del .lua).

02

Valida la sintaxis de Lua localmente antes de subir:

luac -p server/main.lua

Si luac no está disponible, usa cualquier parser Lua online o el propio editor con plugin Lua. Los errores de sintaxis se detectan inmediatamente sin necesidad de reiniciar el servidor entero.

Verificación

Después de aplicar las correcciones, confirma que la consola está limpia ejecutando esta secuencia de verificación.

01

Reinicia el servidor entero para garantizar que el estado reflejado en la consola es el estado real, sin resources “fantasmas” de ejecuciones anteriores:

restart all

O vía txAdmin, botón “Restart Server”.

02

Conecta un cliente y monitorea la consola por 5 a 10 minutos con el servidor en uso normal. Los errores que solo aparecen con jugador conectado (eventos client-side, sincronización) no se ven en servidor vacío.

03

Filtra la consola por nivel de severidad. En server.cfg:

con_miniconChannels script:*

Esto aísla solo logs de scripts, escondiendo ruido de subsystems internos durante el troubleshooting.

Resolución de problemas

El error persiste tras reiniciar el resource

El resource puede tener caché en archivo. Detenlo completamente, borra cache/ de la raíz del servidor y súbelo de nuevo:

stop mi_resource
# detén el servidor
rm -rf cache/
# sube el servidor
ensure mi_resource

La consola se llena de errores idénticos cada segundo

Algún loop está disparando el error en cada tick. Identifica el resource por la primera línea del error y deténlo de inmediato:

stop nombre_del_resource

Investiga el código offline antes de subirlo otra vez — dejarlo corriendo en loop puede tumbar el rendimiento de todo el servidor.

Error sin stack trace

Los errores nativos del cliente (renderizado, scaleform) muchas veces no traen trace. Usa profiler record 500 en la consola del servidor y abre el profile en localhost:30120/profiler para ver qué resource estaba activo en ese momento.

Cuidado al borrar cache en producción

Borrar la carpeta cache/ con jugadores conectados provoca desconexión inmediata y pierde datos no guardados. Avisa siempre en Discord o agenda una ventana de mantenimiento antes.

Próximos pasos

Con la consola limpia, considera los próximos niveles de hardening del servidor:

  • Configura rotación de logs vía sv_logFile para preservar el histórico de errores tras restart y facilitar debug retroactivo
  • Agrega monitoreo continuo del profiler en horas pico para detectar resources que se degradan silenciosamente sin disparar error
  • Documenta las correcciones aplicadas en un CHANGELOG por resource — cuando el problema vuelva en 6 meses, el histórico ahorra horas
  • Establece un proceso de revisión de fxmanifest y dependencias antes de subir cualquier resource nuevo a producción

Si tienes un servidor FiveM en producción, una VPS Hostini con hosting dedicado para juegos garantiza recursos aislados, latencia baja para Latam y consola accesible vía txAdmin preconfigurado — sin competir por CPU con otros servidores en el mismo nodo.

Preguntas frecuentes

¿Por qué el error aparece solo después de varios minutos con el servidor encendido?

Los errores tardíos suelen dispararse por eventos que solo se ejecutan cuando un jugador entra, sale o ejecuta una acción específica. Reprodúcelo con el servidor vacío activando el evento manualmente desde la consola o un comando admin para aislar el trigger.

¿Puedo ignorar errores que no tumban el servidor?

No. Los errores silenciosos consumen CPU en cada tick y acumulan memory leaks. Un SCRIPT ERROR por tick durante 30 minutos genera decenas de miles de excepciones y degrada el rendimiento percibido por los jugadores.

¿Cómo descubro qué resource está causando lag sin que aparezca error?

Usa el comando resmon en la consola F8 del cliente o profiler record 500 en la consola del servidor. Tiempos superiores a 1 ms por tick indican un resource problemático. SCRIPT ERROR muchas veces precede a una degradación que solo se detecta vía profiler.

fxmanifest.lua o __resource.lua, ¿cuál usar?

Siempre fxmanifest.lua con fx_version 'cerulean' y game 'gta5'. __resource.lua es legado de 2018 y no soporta features modernas como ámbito de exports, dependencies declaradas y file globs. Migra cualquier resource antiguo.

Los errores de oxmysql desaparecen tras reiniciar la base — ¿por qué?

Las conexiones zombi del pool no se reabren hasta el timeout del MySQL (8 horas por defecto). Reinicia el resource oxmysql después de cualquier mantenimiento en la base o configura mysql_connection_string con pool_size menor y wait_timeout en MySQL.

¿Cómo activo logs detallados sin saturar la consola?

Usa con_miniconChannels script:* en server.cfg para filtrar solo logs de scripts, o redirígelos a archivo con sv_logFile. Combínalo con con_channelFilter para excluir resources verbosos durante el troubleshooting.

Temas:
Próximos pasos VPS, dedicado o panel gestionado para FiveM, SAMP, MTA, Tibia y más.Aloja tu servidor de juegos con Hostini →
¿Te resultó útil este tutorial?
Hablar por WhatsApp