Recentemente comecei meus estudos em desenvolvimento para servidores FiveM, com foco em bases como vRPex e Creative, que são bastante utilizadas no cenário brasileiro de servidores de roleplay.
Como venho do desenvolvimento Front-End, principalmente trabalhando com interfaces, componentização e integração com APIs, decidi documentar meus estudos para organizar melhor o aprendizado e também compartilhar minha evolução.
Neste primeiro artigo, vou registrar os principais pontos da minha primeira aula: nativos, frameworks e a estrutura inicial de um resource no FiveM.
O que é FiveM?
O FiveM é uma plataforma que permite criar servidores modificados para GTA V, possibilitando experiências personalizadas como servidores de roleplay, sistemas de empregos, economia, facções, lojas, garagens, inventários, interfaces e muito mais.
Dentro do FiveM, o desenvolvimento pode envolver várias linguagens e tecnologias, como:
- Lua;
- JavaScript;
- HTML;
- CSS;
- MySQL;
- frameworks específicos para RP;
- interfaces NUI.
No meu caso, estou começando pela base mais comum em muitos servidores brasileiros: Lua + vRPex/Creative.
Nativos no FiveM
Na aula, entendi que existem códigos chamados de nativos.
Os nativos são funções fornecidas pelo próprio ambiente do FiveM/GTA, permitindo interagir diretamente com elementos do jogo.
Com eles, é possível fazer coisas como:
- criar blips no mapa;
- desenhar markers;
- pegar coordenadas do player;
- manipular veículos;
- detectar ações do jogador;
- criar threads;
- interagir com entidades do mundo do GTA.
Um exemplo simples de estrutura usando Lua seria:
CreateThread(function()
while true do
Wait(1000)
print("Thread rodando")
end
end)
Essa estrutura mostra uma thread sendo executada continuamente, com uma pausa de 1 segundo entre cada execução.
O que é Citizen?
Durante a aula também apareceu o conceito de Citizen.
De forma simples, entendi o Citizen como uma biblioteca/base principal usada pelo FiveM para fornecer vários códigos nativos.
Ele ajuda o script a conversar com o ambiente do jogo, permitindo executar ações dentro do GTA V através do FiveM.
Porém, o Citizen sozinho não entrega toda a estrutura necessária para criar uma cidade RP completa.
Por exemplo, ele não resolve sozinho coisas como:
- sistema de identidade;
- inventário;
- permissões;
- whitelist;
- economia;
- conexão organizada com banco de dados;
- empregos;
- grupos;
- comandos administrativos.
Para isso, normalmente usamos um framework.
O que é um framework no FiveM?
Um framework é uma estrutura de código que organiza e facilita o desenvolvimento de uma cidade RP.
Ele usa os nativos do FiveM e cria uma camada mais prática para lidar com sistemas comuns de roleplay.
Alguns exemplos de frameworks conhecidos são:
- vRP;
- vRPex;
- Creative;
- ESX;
- QBCore;
- Qbox.
No curso que estou fazendo, o foco será em vRP, principalmente em bases como vRPex e Creative.
O framework ajuda a padronizar coisas como:
- pegar o usuário do jogador;
- validar permissões;
- trabalhar com inventário;
- controlar dinheiro;
- acessar dados do player;
- criar comandos;
- integrar sistemas com banco de dados.
Nativo vs Framework
Uma forma simples que encontrei para entender a diferença:
| Conceito | Explicação |
|---|---|
| Nativo | Função mais próxima do FiveM/GTA |
| Framework | Estrutura que organiza sistemas de RP |
| Resource | Um script/módulo dentro do servidor |
| Ensure | Comando usado para iniciar um resource |
Exemplo prático:
O nativo pode ser usado para desenhar um marker no mapa.
O framework pode ser usado para verificar se o jogador tem permissão para acessar aquele marker.
O resource organiza esse sistema em arquivos.
O ensure inicia esse resource no servidor.
O que é um resource?
No FiveM, os scripts são organizados em módulos chamados resources.
Cada resource pode representar um sistema da cidade, como:
- banco;
- garagem;
- inventário;
- loja de carros;
- loja VIP;
- HUD;
- celular;
- sistema de empregos;
- sistema de facções;
- painel administrativo.
Um resource normalmente possui uma estrutura parecida com esta:
meu_resource/
│
├── fxmanifest.lua
├── client.lua
├── server.lua
├── config.lua
└── html/
├── index.html
├── style.css
└── script.js
O que é o fxmanifest.lua?
O fxmanifest.lua é o arquivo que registra o resource no FiveM.
É nele que informamos quais arquivos fazem parte do script e o que deve ser carregado no client, no server ou na interface.
Exemplo básico:
fx_version 'cerulean'
game 'gta5'
author 'Meu Nome'
description 'Meu primeiro resource FiveM'
version '1.0.0'
client_script 'client.lua'
server_script 'server.lua'
shared_script 'config.lua'
Esse arquivo é essencial para que o FiveM entenda como carregar o resource.
O que é ensure?
Depois de criar um resource, precisamos iniciar ele no servidor.
Para isso usamos o comando ensure.
Exemplo:
ensure meu_resource
Esse comando normalmente fica no arquivo de configuração do servidor.
Ele diz ao servidor:
“Carregue esse resource quando a cidade iniciar.”
Client e Server no FiveM
Um dos pontos mais importantes da aula foi entender a diferença entre client e server.
Client
O client.lua roda no lado do jogador, ou seja, na máquina de quem está jogando.
Ele normalmente lida com coisas visuais e interações locais, como:
- criar blips;
- desenhar markers;
- detectar teclas pressionadas;
- abrir interfaces;
- pegar coordenadas;
- executar animações;
- mostrar informações na tela.
Server
O server.lua roda no lado do servidor.
Ele deve cuidar das partes mais importantes e sensíveis, como:
- validar dinheiro;
- validar permissões;
- conferir itens;
- salvar dados;
- buscar dados no banco;
- registrar logs;
- aplicar regras do sistema.
Uma regra importante que já aprendi:
Nunca confiar totalmente no client.
Tudo que envolve dinheiro, item, permissão ou dado importante precisa ser validado no server.
Onde entra a NUI?
Como venho do Front-End, essa parte chamou bastante minha atenção.
No FiveM, a NUI é a interface visual de um sistema.
Ela pode ser feita com tecnologias como:
- HTML;
- CSS;
- JavaScript;
- React;
- Vue;
- jQuery.
A NUI seria como o “front-end” de um script.
Ela pode ser usada em sistemas como:
- banco;
- garagem;
- loja de carros;
- inventário;
- HUD;
- celular;
- painel administrativo;
- tablet policial;
- loja VIP.
Um fluxo simples seria:
NUI / Interface
↓
Client.lua
↓
Server.lua
↓
Banco de dados
Ou seja, o jogador interage com a interface, a interface conversa com o client, o client chama o server e o server valida ou salva as informações.
Banco de dados
O servidor também pode se comunicar com banco de dados, geralmente MySQL.
O banco é usado para salvar informações como:
- jogadores;
- veículos;
- dinheiro;
- casas;
- inventário;
- empregos;
- facções;
- multas;
- histórico de ações.
O fluxo correto é:
Client → Server → Banco de Dados
O client não deve acessar o banco diretamente.
Comparando com desenvolvimento web
Como venho do Front-End, fiz essa comparação para entender melhor:
| Desenvolvimento Web | FiveM |
|---|---|
| Front-End | NUI |
| Back-End | Server.lua |
| Service/API call | Eventos client/server |
| Banco de dados | MySQL |
| Configuração | Config.lua |
| Módulo/projeto | Resource |
| Start do projeto | Ensure |
| Framework back-end | vRPex/Creative/QBCore/Qbox |
Essa comparação me ajudou bastante a entender que o FiveM também tem uma separação de responsabilidades.
A diferença é que tudo acontece dentro do contexto do jogo.
Resumo da aula
Nesta primeira aula, aprendi que:
- o FiveM usa nativos para interagir com o GTA;
- o Citizen fornece várias funções base para o ambiente FiveM;
- frameworks como vRPex e Creative organizam sistemas de roleplay;
- cada script é estruturado como um resource;
- o
fxmanifest.luaregistra o resource; - o
ensureinicia o resource no servidor; - o
client.luaroda na máquina do jogador; - o
server.luaroda no servidor; - a NUI representa a interface visual;
- o banco de dados deve ser acessado pelo server;
- validações importantes devem ficar no servidor.
Próximo passo
Meu próximo objetivo é criar meu primeiro resource simples com:
-
fxmanifest.lua; -
client.lua; -
server.lua; -
config.lua.
Quero praticar:
- iniciar o resource com
ensure; - criar um comando simples;
- enviar evento do client para o server;
- imprimir mensagens no console;
- entender melhor a comunicação client/server.
Conclusão
Essa primeira aula foi importante para entender a base do desenvolvimento FiveM.
Mesmo sendo um ambiente diferente do desenvolvimento web tradicional, consegui perceber várias conexões com o que já conheço como Front-End.
Principalmente na parte de NUI, onde posso aplicar conhecimentos de interface, experiência do usuário e integração com lógica de sistema.
A ideia agora é continuar estudando Lua, vRPex, MySQL e NUI para começar a criar sistemas próprios para servidores de roleplay.
Este artigo é o primeiro registro da minha jornada estudando desenvolvimento para FiveM.
Top comments (0)