Resolver erros comuns no console FiveM: guia prático de debug
Aprenda a identificar e resolver os erros mais frequentes do console FiveM: script error, dependência ausente, fxmanifest inválido e falhas de banco de dados.
O console do FiveM é o ponto de partida pra qualquer debug sério. Ele acumula mensagens de erro em tempo real — algumas críticas, outras silenciosas — e ignorar essas linhas é o caminho mais rápido pra um servidor instável. Owners experientes leem o console toda vez que sobem um recurso novo; owners iniciantes só olham quando jogador reclama no Discord.
Este guia cobre os erros mais comuns que aparecem no console de um servidor FiveM em produção: script errors, dependências ausentes, manifests inválidos, falhas de banco e problemas de framework. Pra cada erro mostramos como identificar a causa real e aplicar a correção definitiva — não só calar a mensagem.
Tempo estimado de leitura e execução: 25 a 40 minutos, dependendo de quantos resources você precisa auditar.
Pré-requisitos
Antes de começar o debug você precisa de acesso ao servidor e capacidade de reiniciar resources individualmente.
Acesso ao console RCON ou txAdmin, permissão de admin no servidor, txData/ ou pasta resources/ acessível via SFTP, e capacidade de reiniciar o servidor inteiro caso necessário. Conhecimento básico de Lua e leitura de stack traces ajuda.
txAdmin ou RCON F8 in-game txData/logs/ profiler record N Como ler uma mensagem de erro do console
Toda linha de erro do FiveM segue um padrão previsível. Aprender a decodificar essas mensagens economiza horas de tentativa-e-erro.
A estrutura geral é: prefixo de cor (^1 vermelho, ^3 amarelo), tipo de erro, resource afetado, arquivo e linha, descrição. Exemplo real:
[ script:meu_script] SCRIPT ERROR: @meu_script/server/main.lua:42: attempt to index a nil value (local 'player')
> CreatePlayer (@meu_script/server/main.lua:42)
> handler (@meu_script/server/events.lua:18)
A primeira linha diz o resource (meu_script), o arquivo (server/main.lua), a linha (42) e o tipo (attempt to index a nil value). As linhas com > são o stack trace — leia de cima pra baixo pra entender a cadeia de chamadas que levou ao erro.
Stack traces invertidos
O FiveM lista o frame mais recente primeiro (oposto do que Python ou Node fazem). A linha que disparou o erro é a primeira >, a função que chamou ela vem depois, e assim sucessivamente até o evento raiz.
Erro 1: SCRIPT ERROR — attempt to index a nil value
O erro mais comum em servidores FiveM, especialmente após updates de framework ou atualizações de scripts customizados.
Identifique a variável nil no erro. A mensagem attempt to index a nil value (local 'player') indica que player não foi definido antes do uso.
Abra o arquivo na linha indicada e leia o contexto imediatamente acima:
RegisterServerEvent('myresource:save')
AddEventHandler('myresource:save', function(data)
local player = ESX.GetPlayerFromId(source)
player.setMoney(data.amount)
end)Se ESX.GetPlayerFromId(source) retornar nil (jogador desconectou no meio do evento, ou ESX não inicializou), a linha seguinte quebra.
Adicione guard clause antes de qualquer indexação:
RegisterServerEvent('myresource:save')
AddEventHandler('myresource:save', function(data)
local player = ESX.GetPlayerFromId(source)
if not player then
print(('[myresource] Player %s nao encontrado, evento ignorado'):format(source))
return
end
player.setMoney(data.amount)
end)Esse padrão de fail-fast com log nominal substitui o crash por uma linha informativa no console — sem perder o contexto do problema.
Reinicie o resource e dispare o evento manualmente pra confirmar que o erro foi suprimido sem mascarar a causa raiz:
restart myresourceAdicionar guard clauses sem entender por que a variável veio nil mascara bugs de timing. Sempre logue o caso silenciado pra detectar padrão (ex: jogador desconectou, evento chegou antes do framework carregar, source inválido vindo do cliente).
Erro 2: Could not find dependency X for resource Y
Aparece quando o fxmanifest.lua de um resource declara dependência de outro que não está iniciado ou nem existe no servidor.
Leia a mensagem completa. Exemplo:
Could not find dependency oxmysql for resource es_extended.
Couldn't start resource es_extended.Significa que es_extended declara dependency 'oxmysql' no manifest mas o servidor não conseguiu iniciar oxmysql antes — ou porque está faltando, ou porque a ordem no server.cfg está errada.
Verifique se o resource dependência existe na pasta resources/:
ls resources/ | grep oxmysqlSe não retornar nada, baixe do repositório oficial (overextended/oxmysql no GitHub) e coloque em resources/[standalone]/oxmysql.
Garanta a ordem correta no server.cfg. Dependências precisam ser iniciadas antes de quem depende delas:
ensure oxmysql
ensure es_extended
ensure esx_menu_default
ensure meus_scriptsA ordem importa: ensure processa linha a linha. Coloque frameworks e bibliotecas (oxmysql, es_extended, qb-core, ox_lib) no topo, depois scripts dependentes.
Erro 3: Couldn’t load resource manifest
O servidor encontrou a pasta do resource mas falhou ao parsear o fxmanifest.lua. Tipicamente erro de sintaxe ou versão inválida.
Abra o fxmanifest.lua do resource afetado e confirme o cabeçalho mínimo:
fx_version 'cerulean'
game 'gta5'
author 'seu_nome'
description 'descrição do resource'
version '1.0.0'
server_scripts {
'server/*.lua'
}
client_scripts {
'client/*.lua'
}Os campos fx_version e game são obrigatórios. fx_version aceita valores fixos: 'cerulean' (mais recente), 'bodacious', 'adamant'. Use 'cerulean' em qualquer servidor moderno.
Se você ainda tem resources com __resource.lua, migre. O formato legado não suporta features modernas e dispara warning deprecation. Renomeie o arquivo e ajuste a sintaxe — a maior diferença é que fxmanifest.lua exige fx_version e game declarados.
Resources baixados de fontes desconhecidas podem ter BOM UTF-8 invisível no início do arquivo que quebra o parser. Abra em editor que mostre encoding (VSCode mostra no canto inferior direito) e salve como UTF-8 sem BOM.
Erro 4: Database connection failed (oxmysql)
Erros de banco aparecem como [oxmysql] [ERROR] Connection refused ou Access denied for user. Cada subtipo tem causa distinta.
Connection refused
O MySQL não está aceitando conexões no host/porta configurados.
# Confirme que o MySQL está rodando
systemctl status mysql
# Teste conectividade manual
mysql -h 127.0.0.1 -u fivem -p fivem_db
Se o MySQL roda em container Docker separado, o host na connection string deve ser o nome do container, não localhost.
Access denied
Credenciais incorretas no server.cfg:
set mysql_connection_string "mysql://fivem:[email protected]:3306/fivem_db?charset=utf8mb4"
Caracteres especiais na senha (@, #, /) precisam ser URL-encoded. Senha p@ss#1 vira p%40ss%231. Erro de encoding é causa frequente de “Access denied” mesmo com senha correta.
Pool timeout
[oxmysql] [ERROR] Pool is closed indica que conexões foram derrubadas (reinício do MySQL, timeout do servidor). Reinicie o resource:
restart oxmysql
Pra prevenir, configure wait_timeout no MySQL pra valor maior que o intervalo de queries do servidor.
Erro 5: Resource X failed to start
Falha genérica de inicialização. A causa real está nas linhas imediatamente acima da mensagem.
Procure linhas anteriores ao erro de “failed to start”. O FiveM imprime o erro específico antes do summary. Exemplo:
[script:meu_resource] Error loading script server/main.lua in resource meu_resource: server/main.lua:1: unexpected symbol near '<'
Failed to load script server/main.lua.
[c-scripting-core] Failed to start resource meu_resourceA causa raiz é unexpected symbol near '<' na linha 1 — arquivo provavelmente tem HTML ou XML no início (download corrompido, salvou página de erro em vez do .lua).
Valide a sintaxe do Lua localmente antes de subir:
luac -p server/main.luaSe luac não está disponível, use qualquer parser Lua online ou o próprio editor com plugin Lua. Erros de sintaxe são detectados imediatamente sem precisar reiniciar o servidor inteiro.
Verificação
Depois de aplicar correções, confirme que o console está limpo executando esta sequência de verificação.
Reinicie o servidor inteiro pra garantir que o estado refletido no console é o estado real, sem resources “fantasmas” de execuções anteriores:
restart allOu via txAdmin, botão “Restart Server”.
Conecte um cliente e monitore o console por 5 a 10 minutos com servidor em uso normal. Erros que só aparecem com jogador conectado (eventos client-side, sincronização) não aparecem em servidor vazio.
Filtre o console por nível de severidade. No server.cfg:
con_miniconChannels script:*Isso isola só logs de scripts, escondendo ruído de subsystems internos durante troubleshooting.
Resolução de problemas
Erro persiste após restart do resource
O resource pode ter cache em arquivo. Pare completamente, delete cache/ da raiz do servidor e suba de novo:
stop meu_resource
# pare o servidor
rm -rf cache/
# suba o servidor
ensure meu_resource
Console enche de erros idênticos a cada segundo
Algum loop está disparando o erro em cada tick. Identifique o resource pela primeira linha do erro e pare-o imediatamente:
stop nome_do_resource
Investigue o código offline antes de subir de novo — deixar rodando em loop pode derrubar performance do servidor inteiro.
Erro sem stack trace
Erros nativos do client (renderização, scaleform) muitas vezes não trazem trace. Use profiler record 500 no console do servidor e abra o profile em localhost:30120/profiler pra ver qual resource estava ativo no momento.
Apagar a pasta cache/ com jogadores conectados causa desconexão imediata e perde dados não-salvos. Sempre avise no Discord ou agende janela de manutenção antes.
Próximos passos
Com o console limpo, considere os próximos níveis de hardening do servidor:
- Configure rotação de logs via
sv_logFilepra preservar histórico de erros pós-restart e facilitar debug retroativo - Adicione monitoramento contínuo do profiler em horários de pico pra detectar resources que degradam silenciosamente sem disparar erro
- Documente correções aplicadas num CHANGELOG por resource — quando o problema voltar daqui 6 meses, o histórico economiza horas
- Estabeleça processo de revisão de fxmanifest e dependências antes de subir qualquer resource novo pra produção
Se você está rodando um servidor FiveM em produção, uma VPS Hostini com hospedagem dedicada pra jogos garante recursos isolados, latência baixa pro Brasil e console acessível via txAdmin pré-configurado — sem disputar CPU com outros servidores no mesmo nó.
Perguntas frequentes
Por que o erro aparece só depois de minutos de servidor ligado?
Erros tardios geralmente são disparados por eventos que só rodam quando um jogador entra, sai ou executa uma ação específica. Reproduza com servidor vazio acionando o evento manualmente via console ou comando admin pra isolar o trigger.
Posso ignorar erros que não derrubam o servidor?
Não. Erros silenciosos consomem CPU a cada tick e acumulam memory leaks. Um SCRIPT ERROR por tick em 30 minutos gera dezenas de milhares de exceções e degrada performance percebida pelos jogadores.
Como descobrir qual resource está causando lag sem aparecer erro?
Use o comando resmon no console F8 do cliente ou profiler record 500 no console do servidor. Tempos acima de 1 ms por tick indicam resource problemático. SCRIPT ERROR muitas vezes precede degradação detectável só via profiler.
fxmanifest.lua ou __resource.lua, qual usar?
Sempre fxmanifest.lua com fx_version 'cerulean' e game 'gta5'. __resource.lua é legado de 2018 e não suporta features modernas como escopo de exports, dependencies declaradas e file globs. Migre qualquer resource antigo.
Erros de oxmysql somem após reiniciar o banco — por quê?
Conexões zumbis no pool não são reabertas até timeout do MySQL (8 horas default). Reinicie o resource oxmysql após qualquer manutenção no banco ou configure mysql_connection_string com pool_size menor e wait_timeout no MySQL.
Como ativar logs detalhados sem poluir o console?
Use con_miniconChannels script:* no server.cfg pra filtrar só logs de scripts, ou direcione pra arquivo com sv_logFile. Combine com con_channelFilter pra excluir resources verbosos durante troubleshooting.