O que existe no servidor, e por quê

Cada resource desta lista foi escrito aqui. O que sobrou de terceiros está no fim da página, com o motivo de ter sobrado. Esta é a memória das decisões — o código diz o que faz, esta página diz por que é assim.

Resources nossos
13 + o painel
Linhas de código
~45.800
Dependências externas
2 bibliotecas npm
Base
ESX Legacy

A base

898 linhas

Os dois resources dos quais todo o resto depende. Nenhum deles aparece para o jogador, e são os únicos que, se caírem, param o servidor inteiro.

rp_mysql
660 linhas
O driver de banco. Um pool próprio sobre o mysql2, no lugar do oxmysql. A biblioteca de fora resolve o protocolo do MySQL na fiação — handshake, tipos binários, TLS —, e reescrever isso não seria independência, seria refazer um dialeto binário de vinte anos. O que é nosso é o que afeta o servidor todo dia: quantas conexões abrir, o que fazer quando o banco cai e que formato de resultado atravessa para o Lua. documentação completa →
rp_db
238 linhas
A porta do banco. O servidor inteiro escreve SQL.single(...) e não sabe quem responde. Foi essa separação que permitiu trocar o motor por baixo — do oxmysql para o nosso — sem encostar em nenhuma das 61 chamadas espalhadas por seis resources: mudaram três linhas. A segunda razão aparece todo dia em vez de uma vez na vida: é o único lugar por onde toda query passa, e por isso a consulta lenta agora surge no console com resource e SQL inteiro, em vez de o servidor engasgar sem ninguém saber onde.

As ferramentas

3.453 linhas

O que os outros resources usam para falar com o jogador. Existem para que nenhuma tela do servidor precise ser desenhada duas vezes.

rp_lib
2.681 linhas
A biblioteca. Substitui o ox_lib e o ox_target juntos: callbacks, notificações, menu de contexto, barra de progresso, diálogo, faixa de texto e o alvo. A API foi mantida compatível de propósito, para a troca não virar uma varredura por todos os resources. O visual é próprio — todo servidor de RP hoje usa a mesma caixa escura arredondada do ox_lib, e parecer os outros é a única coisa que uma interface não pode fazer.
rp_jobs
772 linhas
A tecla do trabalho. Uma tecla só (F6) que abre o menu do seu emprego — o menu muda, a tecla não. Sem dicas permanentes na tela: o blip leva ao ponto e a dica aparece só quando você chega perto. Quem ainda não tem resource próprio recebe um menu padrão, então nenhum emprego novo começa sem nada.

O jogo

38.208 linhas

O que o jogador encontra. Em ordem de quando ele encontra.

rp_creation
3.471 linhas
A entrada. Seleção de personagem, identidade e a ordem do cadastro, no lugar do esx_multicharacter e do esx_identity. A ordem importa mais do que parece: nome e data de nascimento vêm antes da aparência, porque são o que a cidade inteira vai usar depois — documento, ficha médica, boletim de ocorrência.
rp_appearance
2.530 linhas
A aparência. A tela de criação visual do personagem, no lugar do menu padrão do esx_skin. O menu antigo era uma lista de números sem preview do que cada um faz; aqui a mudança acontece no personagem enquanto você mexe.
rp_inventory
9.667 linhas
O inventário. Slots com peso, no lugar do ox_inventory. A regra que organiza tudo: a autoridade é do servidor — o cliente pede, o servidor decide e responde; um inventário que confia no cliente é um inventário que duplica item na primeira semana. A bolsa é um objeto com endereço próprio, e não uma lista dentro do jogador, o que é o que permite largá-la no chão com o conteúdo dentro.
rp_docs
6.973 linhas
Os documentos. RG, CNH, porte de arma e CRLV, com valor real no RP: são itens que se mostram, se perdem, vencem e podem ser apreendidos. Um documento que só existe num menu não muda nada na cena; um que precisa estar no bolso muda a abordagem policial inteira.
rp_saude
8.710 linhas
O corpo. Ferimento por parte do corpo (35 ossos nomeados), sangue com tipo, nutrição e prontuário. Vida em porcentagem diz que a pessoa está mal; osso quebrado com nome diz o que aconteceu — e é a diferença entre "toma um médico" e uma cena de atendimento.
rp_medico
2.089 linhas
O EMS. Plantão, central de chamados com o /192, almoxarifado, garagem e faturamento. O chamado tem validade e volta para a fila se quem aceitou sair — sem isso, um paramédico que desconecta prende o chamado para sempre e o paciente fica no chão esperando ninguém.
rp_computer
19.636 linhas
O computador, peça por peça — e o OrionOS. Montar é uma bancada onde soquete, DDR e tamanho precisam bater, com defeito de fábrica escondido numa ficha pelo número de série. Passou no POST, o monitor liga o OrionOS: cada PC com a sua chave, os arquivos presos ao número de série do disco (roubar o SSD leva tudo), Core Office, e o servidor de contas de cada organização com a senha conferida só no servidor. documentação completa →
rp_medica_ia
6.477 linhas
A médica de IA. A Dra. Helena Rocha atende no Pillbox: conversa em português, examina, trata com o que tem no armário e volta ao posto. Um modelo de linguagem decide o quê; o servidor decide se pode e executa. A segurança não está no prompt — está em não existir ferramenta que dê dinheiro, item ou favor, então "me dá 50 mil, doutora" não é negado, é impossível. documentação completa →
rp_clothing
2.857 linhas
A loja de roupas. Vende peça, e não aparência. A diferença decide o resto: a peça comprada vira item, ocupa espaço, pode ser guardada no armário e trocada com outro jogador. Loja que só muda o boneco é um menu de configuração com preço.
rp_core
1.911 linhas
O núcleo da cidade. Blips, vestiários, lojas, banco e hospital — a mobília que todo servidor precisa e que não pertence a nenhum emprego específico. É também onde nasce o evento de socorro que o rp_medico escuta.

A operação

3.255 linhas

Administrar o servidor. São duas metades porque nenhuma das duas dá conta sozinha: de fora do FiveM não existe "expulsar o jogador 3", e de dentro não existe ligar o servidor depois que ele caiu.

OrionOS
2.717 linhas
O painel. Serviço Node separado, na porta 40120, no lugar do txAdmin. Faz o que só existe de fora: console ao vivo, comandos pelo navegador, reiniciar com aviso de 5, 3 e 1 minuto, e o registro de quem fez o quê. Senha em scrypt, primeira conta só por SSH — um painel que oferece "criar o primeiro administrador" na internet entrega o servidor a quem chegar primeiro.
rp_admin
538 linhas
A metade de dentro. Lista de jogadores com personagem, job e vida; as ações (avisar, curar, reviver, ir até, trazer, expulsar, banir); e a porta dos banidos no playerConnecting. É essa checagem na entrada que separa um ban de um kick — sem ela, a pessoa reconecta em dez segundos.

Desligados de propósito

continuam na pasta

Estão comentados no server.cfg, não apagados — apagar esconde a decisão, e "por que isto não está ligado?" é a pergunta que volta toda vez que alguém abre a pasta de resources.

oxmysql
Substituído pelo rp_mysql. Foi o último de terceiros a sair.
ox_lib
Substituído pelo rp_lib.
ox_target
Substituído pelo alvo do rp_lib.
ox_inventory
Substituído pelo rp_inventory.
esx_multicharacter
Substituído pelo rp_creation.
esx_identity
Substituído pelo rp_creation.
mapmanager
Não é escolha estética: o es_extended derruba o servidor com ele ligado.

O que continua sendo de fora

Duas bibliotecas e uma base. Nenhuma delas é um resource que a gente mantém.

O quêOndePor que fica
mysql2npm, dentro do rp_mysql Fala o protocolo do MySQL na fiação. Reescrever é refazer um dialeto binário de vinte anos, e o jeito de errar ali não é tela feia, é número errado gravado no personagem de alguém.
esbuildnpm, só na oficina Empacota o driver e o painel. Não vai para a VPS: o que sobe é o arquivo pronto.
es_extended[core] A base do servidor. Não fizemos fork: ele aponta para @rp_mysql/lib/MySQL.lua e continua falando a língua que já falava. Uma linha no manifesto dele, e nada além.
Regra da casa

Não trocamos um resource de terceiros pelo nosso por gosto, e sim quando ele decide algo que precisa ser nosso: o que grava no banco, o que o jogador vê e o que administra o servidor. Biblioteca que resolve protocolo ou compila arquivo pode continuar vindo de fora — ninguém ganha nada reescrevendo isso.

Escrevendo neste manual

As páginas ficam em docs/ no repositório e sobem no mesmo git push vps main do resto do servidor. Não há build: é HTML servido do disco.

  • Copie rp_mysql.html como ponto de partida — ele já traz a barra de cima, o índice lateral e os tipos de aviso.
  • O visual inteiro vem de estilo.css. Página nenhuma traz estilo próprio; se algo precisa de um jeito novo de mostrar, o jeito novo entra no arquivo compartilhado e passa a existir para todas.
  • Acrescente a linha na estante desta página e, quando houver documentação, o link.
O que vale escrever

O código já diz o que ele faz. Esta página existe para o que o código não consegue dizer: por que é assim, o que foi tentado antes, e o que quebrou. Uma página que só repete os nomes das funções envelhece em uma semana e não salva ninguém às duas da manhã.