Servidores de Jogos

Organizando um gamemode grande em módulos

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;
  • static para 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.

Compartilhar:

Pronto para hospedar seu próximo projeto?

VPS com painel pré-instalado em 1 clique. Ativação imediata.

Ver planos VPS