DEV Community

Stefhany Santos
Stefhany Santos

Posted on

Primeiros passos com FiveM: Nativos, Frameworks e meu primeiro ensure

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.lua registra o resource;
  • o ensure inicia o resource no servidor;
  • o client.lua roda na máquina do jogador;
  • o server.lua roda 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)