Game server · Orquestração · CASE 004
Event Manager: eventos PvP automatizados
Motor de eventos agendados (TvT, Capture the Flag, Kill the Boss) com inscrição, times balanceados, partida e recompensas automáticas.
Baseado no código-fonte do game server (Java, base aCis), desenvolvido por mim. O diagrama simplifica a arquitetura.
01
Problema
Rodar eventos PvP recorrentes sem operação manual: abrir inscrições no horário certo, validar participantes, montar times, conduzir a partida e premiar os vencedores.
02
Contexto
Vários modos de jogo com regras próprias, mas o mesmo ciclo de vida. Cada novo evento não poderia exigir mudanças no gerenciador.
03
Solução proposta
Um EventManager lê events.xml, instancia cada evento por reflection e escolhe o próximo pelo horário mais próximo. Um relógio de 1 s conduz a máquina de estados REGISTER → TELEPORT → STARTING → PROGRESS → FINISH, com anúncios de contagem regressiva. Cada modo estende AbstractEvent e sobrescreve apenas os hooks necessários (onKill, onDie, canAttack, onUseSkill, onUseItem, onLogout…), no padrão Template Method.
04
Arquitetura
Ao fechar as inscrições, phantoms completam as vagas; abaixo do mínimo, o evento é cancelado. No teleporte, os participantes são ordenados por classe e distribuídos sempre para o menor time, congelados até a largada e liberados no início da partida.
05
Tecnologias
- Java
- Máquina de estados
- Template Method
- Reflection
- XML
06
Trade-offs
Um evento por vez, um único relógio
Estado simples de raciocinar e depurar, mas sem eventos simultâneos.
Eventos carregados por reflection
Novos modos entram com uma classe e um bloco de XML, sem tocar no gerenciador; erros de classe só aparecem em runtime (registrados no boot).
Balanceamento por classe e tamanho de time
Distribui as classes de forma equilibrada e barata, sem considerar nível ou equipamento.
07
Resultados
- Quatro modos de evento (TvT, CTF, Kill the Boss, Deathmatch) sobre o mesmo ciclo de vida.
- Inscrição protegida contra multi-conta por HWID e conflitos com olimpíada, torneio e lojas.
- Operação via comandos de admin: forçar início, cancelar e avançar fases.