Skip to main content
Este documento descreve a arquitetura interna do framework vRP usado pela Base Five. O conteúdo foi extraído diretamente do código em resources/vrp/ e descreve como os recursos conversam entre si e como inicializar (bootstrap) um recurso novo para consumir a API.

1. Visão geral

O coração do servidor é o resource vrp. Ele define dois objetos de interface (tabelas Lua) publicados via os primitivos de RPC:

vRP — servidor

Tabela do servidor com a lógica de negócio: dinheiro, inventário, identidade, grupos…

tvRP — cliente

Tabela do cliente: manipulação do ped, anim, veículos próximos…
Em resources/vrp/modules/vrp.lua (servidor):
Em resources/vrp/client/base.lua (cliente):

2. Proxy vs Tunnel

Os dois primitivos ficam em resources/vrp/lib/Proxy.lua e resources/vrp/lib/Tunnel.lua.
Comunicação dentro da mesma realm. Baseado em TriggerEvent local.
  • Proxy.addInterface(name, table): publica uma interface.
  • Proxy.getInterface(name): retorna um proxy que chama os métodos da interface.
É assim que todo script de servidor obtém o framework:
Comunicação entre servidor e cliente via eventos de rede.
  • Tunnel.bindInterface(name, table): expõe as funções da tabela para a outra realm.
  • Tunnel.getInterface(name): retorna um proxy chamável para a outra realm.
Detalhe importante: quando o servidor chama uma função de cliente via Tunnel, o primeiro argumento é sempre o source (player de destino):
Prefixar o método com _ faz a chamada não esperar retorno (mais rápido):
Use _ sempre que não precisar do valor de retorno.

3. Convenção vRP / tvRP / vRPC / vRPS

Em muitos recursos da base o proxy server→client é nomeado vRPclient: é o mesmo Tunnel.getInterface("vRP"), só muda o nome da variável.
Nunca misture as tabelas: vRP.* (Proxy, servidor) é indexado por Passport (id do personagem), não por source. Quem espera source é vRPC.* (Tunnel).

4. Bootstrap padrão de um recurso

1

Obtenha a interface do servidor

Lado servidor (ex. real de five-bank/config/functions.lua):
2

Exponha funções para a NUI/cliente (se necessário)

3

Declare a dependência no fxmanifest.lua

A função module() (de lib/utils.lua) recebe (Resource, Patch). De dentro do vrp, use module("lib/Proxy"). De outro resource, use module("vrp","lib/Proxy").

Acesso ao banco de dados

Passa por oxmysql via prepared statements nomeados: vRP.Prepare(Nome, SQL) e depois vRP.Query, vRP.SingleQuery, vRP.Scalar ou vRP.Update. Recursos próprios costumam usar exports.oxmysql:query_async(...) diretamente.

5. Módulos em resources/vrp/modules/

A pasta modules/ tem três arquivos que não são carregados pelo fxmanifest.lua: jester.lua e lb-phone.lua (implementações alternativas de integração com celular, ativadas conforme o celular usado) e playing.lua (vRP.UpdatePlaying, vRP.TimePlaying, vRP.WipePlaying). Enquanto não forem adicionados ao manifesto, essas funções não existem em runtime.
Aviso sobre misc.lua: ele cria aliases por atribuição direta. Vários apontam para funções que não existem e resultam em nil. NÃO dependa de: vRP.setWeight, vRP.userPremium, vRP.falseIdentity, vRP.getFines/addFines/delFines, vRP.generateStringNumber. (Multas/faturas são tratadas pelo five-bank via exports.) Os aliases cujo alvo existe estão listados em Funções do Servidor.