Como adicionar scripts e recursos FiveM sem erro

Guia técnico para adicionar resources no FiveM sem quebrar dependências: estrutura de pastas, ordem em server.cfg, fxmanifest, conflitos e logs de diagnóstico.

Adicionar resources no FiveM parece trivial até o servidor não subir, o console mostrar Couldn't load resource ou um script novo derrubar o framework inteiro. A maior parte dos erros não vem do resource em si — vem de estrutura de pastas errada, fxmanifest inválido, ordem incorreta no server.cfg ou conflito com outro script.

Este guia é pra quem opera um servidor FiveM próprio (Windows ou Linux), já tem framework instalado (ESX ou QBCore) e quer adicionar scripts da comunidade ou pagos sem quebrar nada. Tempo estimado: 10 a 15 minutos por resource bem testado.

Pré-requisitos

O que você precisa antes de começar

Servidor FiveM (FXServer) rodando — Windows Server 2019+ ou Ubuntu 22.04/24.04. Framework instalado (ESX Legacy, QBCore ou outro). Acesso ao filesystem do servidor (RDP no Windows ou SSH no Linux). Acesso ao console do servidor pra recarregar resources sem reiniciar.

Pasta do servidor /path/to/server-data
Pasta de resources resources/
Config principal server.cfg
Porta default 30120

Se o seu servidor está em uma VPS Linux, conecte via SSH antes. Em Windows, conecte via RDP e abra um terminal PowerShell na pasta do servidor.

Entendendo a estrutura de um resource

Antes de adicionar qualquer coisa, vale conhecer o que o FXServer espera. Um resource FiveM válido é uma pasta dentro de resources/ (ou em subpastas com prefixo [categoria]) que contém pelo menos um fxmanifest.lua no diretório raiz. Sem esse arquivo, o FXServer ignora o resource — não importa quantos .lua ou .js estejam dentro.

A estrutura típica:

resources/
└── [scripts]/
    └── meu-resource/
        ├── fxmanifest.lua
        ├── client.lua
        ├── server.lua
        ├── config.lua
        └── html/
            ├── index.html
            ├── style.css
            └── script.js

Pastas com colchetes ([scripts], [esx], [qb]) são apenas organização visual — o FXServer faz varredura recursiva. Você pode aninhar até 2-3 níveis sem problema. Evite mais que isso pra não dificultar manutenção.

O fxmanifest.lua mínimo

Todo resource precisa declarar versão da API e jogo alvo. O arquivo mínimo viável:

fx_version 'cerulean'
game 'gta5'

author 'Nome do autor'
description 'Descrição curta'
version '1.0.0'

client_scripts {
  'client.lua'
}

server_scripts {
  'server.lua'
}

shared_scripts {
  'config.lua'
}

fx_version 'cerulean' é o valor atual recomendado (suporta features modernas do FiveM). Versões antigas como adamant ou bodacious ainda funcionam mas perdem capacidades.

Adicionando um resource passo a passo

01

Copie a pasta do resource pra dentro de resources/ no servidor. Em Linux, via scp ou SFTP:

scp -r meu-resource/ usuario@ip-do-servidor:/path/to/server-data/resources/[scripts]/

Em Windows, arraste pela sessão RDP ou use um cliente SFTP como WinSCP. Coloque a pasta dentro de uma categoria com colchetes — [scripts], [custom], [esx], [qb] — pra organizar. Não copie o .zip: extraia antes.

02

Verifique se existe fxmanifest.lua no diretório raiz do resource. Se o arquivo se chama __resource.lua (formato antigo), o resource ainda funciona, mas considere migrar pra fxmanifest.lua — alguns recursos modernos não rodam mais com o formato legado.

ls /path/to/server-data/resources/[scripts]/meu-resource/

Você deve ver fxmanifest.lua listado. Se não, o resource está mal empacotado.

03

Abra o server.cfg na raiz do servidor e adicione a linha de ativação:

ensure meu-resource

Coloque essa linha na ordem correta: depois do framework e de dependências, antes de scripts que dependem dele. Exemplo prático com QBCore:

# Frameworks primeiro
ensure qb-core

# Bibliotecas e dependências
ensure ox_lib
ensure oxmysql

# Scripts de gameplay
ensure qb-multicharacter
ensure qb-spawn
ensure meu-resource
Use ensure, não start

O comando start nome carrega o resource uma vez, mas não respeita refresh nem reinicialização limpa. ensure nome recarrega o resource em hot-reload e garante ordem de dependências. Sempre prefira ensure em servidores de produção.

04

Salve o server.cfg e recarregue o resource no console do servidor (não precisa reiniciar tudo):

refresh
ensure meu-resource

O comando refresh faz o FXServer revarrer a pasta resources/ e detectar resources novos. Depois, ensure meu-resource inicia ele. Se o resource já estava rodando, use restart meu-resource em vez de ensure pra recarregar.

05

Confira no console do servidor que o resource subiu sem erro. Você deve ver algo como:

Started resource meu-resource

Se aparecer Couldn't load resource meu-resource ou Error parsing script, abra os logs e vá pra seção de resolução de problemas abaixo.

Verificando que tudo está funcionando

No console do servidor, rode resources pra ver a lista completa de resources ativos. O nome do seu resource deve aparecer com status started. Se aparecer como stopped, ele foi reconhecido mas não está rodando — verifique o ensure no server.cfg.

Pra testar funcionalmente, entre no servidor com seu client FiveM. Scripts client-side reagem geralmente a comandos (/comando), itens no inventário ou eventos automáticos. Abra o console F8 do client (~ ou F8) — erros Lua ou JavaScript do lado client aparecem ali com stack trace.

Logs ficam em logs/ na pasta do servidor

O FXServer escreve fxserver.log (Linux) ou console.log (Windows) na pasta do servidor. Mantenha um terminal com tail -f logs/fxserver.log rodando enquanto testa — você vê erros em tempo real sem precisar abrir o painel.

Resolução de problemas comuns

”Couldn’t load resource X”

Quase sempre é um fxmanifest.lua ausente ou inválido. Verifique:

  • O arquivo se chama exatamente fxmanifest.lua (minúsculas, com .lua)
  • Tem fx_version 'cerulean' e game 'gta5' declarados
  • Sintaxe Lua válida (vírgulas e aspas equilibradas)

Se o arquivo está correto, confirme que o nome da pasta bate exatamente com o ensure no server.cfg. Em Linux, MeuResource e meuresource são pastas diferentes — case-sensitive.

”Error loading script” com erro Lua

O console mostra a linha exata do erro. Causas frequentes:

  • Variável de framework usada antes do framework carregar (ordem errada no server.cfg)
  • Dependência ausente (exports['ox_lib'] chamado sem ox_lib rodando)
  • Sintaxe Lua quebrada por edição manual

Pra isolar: comente o resource no server.cfg, reinicie, e adicione um por vez até reproduzir o erro.

Servidor crasha ao iniciar

Comente todos os ensure exceto os core (mapmanager, chat, spawnmanager, sessionmanager, framework). Reinicie. Se subir sem crash, adicione resources um a um até identificar o culpado. Esse processo demora mas é o único confiável quando o erro acontece muito cedo no boot.

Cuidado com scripts pirateados ou ofuscados

Resources com Lua ofuscado (códigos como _G[string.char(...)]) podem conter backdoors, exfiltração de dados de jogadores ou comandos remotos não-autorizados. Use apenas scripts de fontes confiáveis — Cfx forum verificado, Tebex, GitHub com histórico público. Scripts pagos legítimos têm escrow e nunca obrigam ofuscação total.

Conflito entre dois scripts no mesmo evento

Dois resources que registram handler para o mesmo evento (AddEventHandler('playerSpawned', ...)) podem competir pela ordem de execução. O FiveM não garante ordem entre handlers do mesmo evento em resources diferentes. Solução: defina explicitamente dependência no fxmanifest.lua do resource que precisa rodar depois:

dependencies {
  'outro-resource'
}

Isso garante que outro-resource carregue primeiro.

Próximos passos

Com a estrutura limpa e resources rodando estável, vale aprofundar em:

  • Otimização de scripts: identificar resources que consomem muito CPU usando resmon no client (Shift+~). Resources acima de 1.0ms client-side merecem revisão.
  • Backup automatizado de resources: versionar a pasta resources/ em Git privado evita perda quando você quebra algo testando.
  • Whitelist de scripts: em servidores roleplay, manter uma lista curada de resources aprovados reduz superfície de bug e exploit.
  • Banco de dados separado por categoria: scripts pesados (jobs, inventário) podem usar databases isoladas pra reduzir contenção.

Se você está rodando FiveM em produção com 32+ slots e quer infraestrutura que aguenta latência baixa para o Brasil, os servidores de jogos da Hostini entregam latência abaixo de 30ms pra todo o Sudeste com proteção DDoS já incluída no preço.

Perguntas frequentes

Por que aparece 'Couldn't load resource' mesmo com a pasta no lugar certo?

Quase sempre é um fxmanifest.lua inválido ou ausente. O FiveM exige `fx_version` e `game` declarados no topo do arquivo. Sem isso, o resource é ignorado silenciosamente em runtime. Verifique também se o nome da pasta bate exatamente com o `ensure` no server.cfg — Linux é case-sensitive.

Posso só copiar a pasta do resource e reiniciar o servidor?

Não basta. Você precisa adicionar `ensure nome-do-resource` no server.cfg. Apenas colocar a pasta em resources/ faz o FxServer reconhecer o resource como disponível, mas não inicia ele. Use `ensure` em vez de `start` — `ensure` reinicia o resource em hot-reload e respeita dependências.

Em que ordem os recursos devem ser carregados no server.cfg?

Frameworks primeiro (ESX, QBCore), depois bibliotecas compartilhadas (ox_lib, oxmysql, mysql-async), depois resources de gameplay que dependem deles. Inverter essa ordem causa erros de dependência circular e scripts que não enxergam exports do framework.

Como sei se um resource é compatível com meu framework?

Leia o fxmanifest.lua do resource — ele declara `dependencies` ou `shared_scripts` apontando pra qbcore-bridge, es_extended ou similar. Em geral, scripts marcados como 'QBCore' não rodam em ESX sem adaptação. Verifique também a versão do framework: scripts pra QBCore 1.2.x quebram em ramos antigos.

O servidor trava ao iniciar com um resource novo. Como descubro qual?

Comente todos os `ensure` no server.cfg e adicione um por vez, reiniciando entre cada um. O resource que causa o crash aparece com erro Lua/JS no console. Outra opção é rodar com `+set sv_enforceGameBuild` e olhar o console.log em logs/ na pasta do servidor.

Posso editar um script enquanto o servidor está rodando?

Sim. Use `restart nome-do-resource` no console do servidor ou via rcon. Isso recarrega só o resource alterado sem derrubar players. Cuidado com scripts que abrem conexões persistentes (banco, WebSocket) — eles podem manter handlers órfãos até reinicialização completa.

Tópicos:
Próximos passos VPS, dedicado ou painel gerenciado para FiveM, SAMP, MTA, Tibia e mais.Hospede seu servidor de jogos com a Hostini →
Esse tutorial foi útil?
Falar no WhatsApp