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

Game server · IA de agentes · CASE 003

Phantom players: jogadores autônomos

Personagens controlados por máquina de estados que caçam, usam NPCs, sobem de nível e participam de eventos como jogadores reais.

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

01

Problema

Manter o mundo do jogo vivo em qualquer horário — cidades movimentadas, áreas de caça ocupadas e eventos com participantes suficientes — sem depender apenas de jogadores conectados.

02

Contexto

Servidor de MMORPG em Java (base aCis) com regras de combate, inventário, clãs e eventos já existentes. Os agentes precisavam se comportar como jogadores, sem criar um segundo motor de jogo.

03

Solução proposta

Cada phantom é um Player real, persistido na tabela de personagens e restaurado no boot com um GameClient destacado (sem socket). Uma PhantomAI roda a cada 550 ms e despacha o estado atual — entre 15 ThinkTypes, como HUNTING, MOVING, MERCHANT e DEAD — para handlers dedicados (padrão Strategy). Classes, equipamentos, skills, rotas e zonas de farm vêm de 64 arquivos XML, e cerca de 90 parâmetros de configuração ajustam o comportamento.

04

Arquitetura

O PhantomManager carrega os templates, restaura os personagens e agenda o spawn de forma escalonada. Cada estado guarda um prazo aleatório (haveToWait), o que gera ritmos humanos. Verificações mais caras — buffs, poções, munição e reposição de itens — rodam em um tick lento, a cada ~5,5 s.

Phantom players: templates, restauração, spawn sem socket e máquina de estadosMáquina de estadosloadrestorespawnsetAIswitchjoinTemplates XMLclasses · farm · walkPhantomManagerrestore · spawnCharactersphantom = 1Playerclient destacadoEventManagerauto-inscriçãoPhantomAItick 550 msHandlers8 estratégiasManutençãoa cada ~5,5 s
Phantom players: templates, restauração, spawn sem socket e máquina de estados

05

Tecnologias

  • Java
  • Máquina de estados
  • Strategy
  • XML
  • Concorrência

06

Trade-offs

  • Phantoms como Players reais

    Reaproveitam todo o motor (combate, inventário, clãs, eventos) e são indistinguíveis para os jogadores, ao custo de memória e CPU equivalentes aos de um jogador conectado.

  • Tick rápido + tick lento

    A decisão de estado roda a cada 550 ms, mas buffs e consumíveis só a cada 10 ticks: a reação continua ágil e as checagens pesadas ficam ~10x menos frequentes.

  • Aleatoriedade com prazos

    Atrasos e probabilidades configuráveis tornam o comportamento menos previsível e mais humano, em troca de testes menos determinísticos.

07

Resultados

  • Agentes que caçam, trocam de classe, visitam mercadores, gatekeepers e buffers, revivem e fazem logout sozinhos.
  • Comportamento ajustável por XML e configuração, sem recompilar o servidor.
  • Phantoms preenchem vagas em eventos PvP e alternam para modo de combate durante a partida.
  • Evolução contínua desde 2020, com dezenas de commits dedicados.
Próximo estudoEvent Manager: eventos PvP automatizados