Organizando um gamemode grande em módulos
Gamemodes de roleplay passam facilmente de 30 mil linhas. Num único .pwn, qualquer alteração vira uma caça ao tesouro, e trabalhar em equipe fica quase impossível. A solução é modularizar.
Estrutura de pastas sugerida
gamemodes/
├── main.pwn
└── modulos/
├── core/
│ ├── banco.inc
│ ├── jogador.inc
│ └── utils.inc
├── sistemas/
│ ├── casas.inc
│ ├── veiculos.inc
│ ├── empregos.inc
│ └── faccoes.inc
├── admin/
│ └── comandos.inc
└── interface/
├── hud.inc
└── dialogs.inc
O main.pwn
#include <open.mp>
#include <sscanf2>
#include <streamer>
#include <Pawn.CMD>
#include <a_mysql>
#include "modulos/core/banco.inc"
#include "modulos/core/jogador.inc"
#include "modulos/sistemas/casas.inc"
#include "modulos/sistemas/veiculos.inc"
#include "modulos/admin/comandos.inc"
A ordem importa: módulos que dependem de outros vêm depois.
O problema dos callbacks
Vários módulos precisam de OnPlayerConnect, mas só pode existir uma função public OnPlayerConnect. Há duas soluções.
1. Funções chamadas pelo callback principal
public OnPlayerConnect(playerid)
{
Jogador_OnConnect(playerid);
Casas_OnConnect(playerid);
Veiculos_OnConnect(playerid);
return 1;
}
É simples e explícito, mas você precisa lembrar de registrar cada módulo.
2. Hooks
Bibliotecas como o y_hooks (YSI) permitem que cada módulo declare seu próprio hook OnPlayerConnect:
#include <YSI_Coding\y_hooks>
hook OnPlayerConnect(playerid)
{
// lógica do módulo de casas
return 1;
}
Cada módulo fica independente. É o padrão em muitos gamemodes grandes.
Regras de convivência
- Prefixos:
Casa_Comprar,Veiculo_Trancar. Evitam conflito de nomes; staticpara variáveis e funções internas do módulo;- Uma responsabilidade por módulo: o módulo de casas não deve mexer no inventário diretamente, e sim chamar uma função do módulo de inventário;
- Constantes num lugar só: cores, limites e IDs de diálogo.
Controle de versão
Com módulos, o Git brilha: cada pessoa trabalha em arquivos diferentes, os conflitos diminuem e você sabe quem mudou o quê. Nunca versione senhas do banco. Use um arquivo de configuração fora do repositório.
Hospede seu servidor com a VittHost
Nos planos OPENMP-BR da VittHost, você envia o gamemode compilado por SFTP ou pelo gerenciador de arquivos do painel Pterodactyl. Servidores no Brasil, proteção DDoS, MySQL incluso, compatibilidade total com scripts SA-MP e teste grátis de 3 dias.