Pular para o conteúdo
Clayton MagalhãesEngenheiro de Software — voltar ao início
Voltar para projetos

Game server · Agendamento · CASE 005

Engine Manager: eventos de mundo agendados

Eventos de mundo diários — zonas de farm e ondas de bosses — descritos em XML e executados por tarefas que se reagendam sozinhas.

Baseado no código-fonte do game server (Java, base aCis), desenvolvido por mim. O diagrama simplifica a arquitetura.

01

Problema

Abrir zonas especiais e ondas de bosses em horários fixos do dia, com spawns definidos por coordenadas, sem scripts manuais a cada janela.

02

Contexto

Eventos de mundo independentes do Event Manager: não exigem inscrição, rodam em paralelo e precisam conviver com comandos de admin a qualquer momento.

03

Solução proposta

O EngineManager lê engine.xml — horários (ex.: 12:15, 19:15 e 23:15), duração, contagem regressiva e spawns com ondas e respawn — em records imutáveis (EngineInfo, EngineNPC) e instancia cada engine por reflection. Cada AbstractEngineTask é um Runnable autoagendado: roda com tick de 1 s na janela, anuncia a contagem, executa o hook onProgress e, ao terminar, remove os NPCs e agenda a própria próxima janela.

04

Arquitetura

PartyFarm abre uma zona com dezenas de spawns durante a janela; WaveFarm libera a próxima onda de bosses quando todos da onda atual morrem e encerra quando não há mais ondas. O estado é volatile e run/stop/force são synchronized, mantendo o tick consistente com comandos de admin.

Engine Manager: eventos de mundo autoagendados a partir de XMLparsenewforcestop()engine.xmltimers · spawnsEngineManagerreflectionEngineTasktick 1 sNPCsspawn · respawnAdminstart · stopReagendamentopróxima janelaParty · WaveFarmonProgress()
Engine Manager: eventos de mundo autoagendados a partir de XML

05

Tecnologias

  • Java
  • Records
  • Reflection
  • Agendamento
  • XML

06

Trade-offs

  • Cada engine se reagenda sozinha

    Sem scheduler central, adicionar engines é trivial; em troca, o controle de tempo fica distribuído entre as tarefas.

  • Configuração imutável em records

    Leitura segura entre threads e reload previsível: recarregar para todas as tarefas e recria tudo.

  • Tick de 1 s

    Precisão suficiente para anúncios e ondas, com custo desprezível por engine.

07

Resultados

  • Eventos de mundo diários sem intervenção manual.
  • Ondas de bosses com progressão automática.
  • Novas engines com uma classe e um bloco de XML; comandos de admin para iniciar, parar e recarregar.
Próximo estudoGateway multicanal