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.
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.