Deixe qualquer agente de LLMprojetar sozinho a IA de Warcraft III
O War3AI transforma o jogo numa interface feita para agentes — o estado completo do mapa inteiro a cada 50 ms, comandos semânticos executados em cerca de um frame, cada um com recibo e código de motivo. Entregue a documentação ao Claude, GPT, Gemini, Qwen ou qualquer agente — ele escreve o Bot, entra em partida, lê os resultados e se aprimora sozinho.
Windows 10/11 · Warcraft III 1.27a · Dê dois cliques em start.bat, o resto se instala sozinho
agent-sessioninst 201.272×
Você
Humanos. Se o herói ficar abaixo de 40% de vida, recue para a base; depois que escurecer, com 3 soldados ou mais, ataque o acampamento de creeps mais próximo.
Li llms.txt e api.json e gerei night_raider.py, usando só 8 APIs verificadas.
night_raider.pyapi.jsonBOT_HANDBOOK.md
from openwar3 import Botclass NightRaider(Bot): def on_tick(self, g): # cerca de 5 vezes por segundo halls = g.my_buildings({"htow", "hkee", "hcas"}) army, camps = g.my_army(), g.creeps() if not halls: return home = halls[0] with g.batch(): # os comandos deste tick saem de uma vez for h in g.my_heroes(): if h.hp < h.hp_max * 0.4: # proteger o herói g.move(h, home.x, home.y) if g.is_night() and len(army) >= 3 and camps: camp = min(camps, key=lambda c: g.path_distance(home, c) or 1e9) g.attack_move(army, camp.x, camp.y) # creepar à noite def on_event(self, g, ev): if ev.kind == "production.done" and ev.owner == g.me(): print("Concluído", ev.done_code, f"{ev.value:.1f}s")
Compatível com qualquer modelo ou agente que escreva código ou gere JSON
Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama
50 ms
Ciclo de envio do estado do mapa
Ajustável até 16 ms; o cliente lê uma cópia em ~0.4 ms
~1 frame
Execução do comando
4~8 µs por comando na thread do jogo
3.000 cmd/s
Vazão de comandos
6 processos em paralelo, espera mediana de 0.06 ms
103
APIs
98 com caminho interno verificado em partidas reais
1.024
unidades com estado completo
Vida e mana, ordens, quem está atacando, recargas, buffs, inventário
Números medidos em partidas reais numa instância de teste da 1.27 (2026-09-23 / 24); metodologia em Plataforma · Desempenho.
Fluxo de trabalho
De uma frase a uma IA que sabe lutar
Não precisa saber programar — você explica como quer que ela jogue; o agente escreve o código, entra em partida, analisa o resultado e ajusta até ficar do seu jeito.
01
Descreva a estratégia em linguagem comum
“Humanos, Arquimago primeiro; dois quartéis fazendo soldados e fuzileiros; com 12 unidades, ataque a expansão inimiga; recue o herói abaixo de 30% de vida.”
02
O agente lê a documentação e escreve o Bot
Entregue a ele llms.txt, api.json e o manual. As APIs usam os nomes do jogo (códigos de quatro caracteres, nomes de habilidades), e o modelo entende de primeira.
03
Um comando para entrar em partida
tools/play.py abre o jogo, injeta o runtime, inicia a partida e sobe o Bot. Velocidade, raça, dificuldade e modo justo são parâmetros.
04
Ler recibos e eventos e se corrigir
Cada comando tem recibo e código de motivo; o fluxo de eventos registra cada golpe de dano, cada abate e cada produção. Com isso, o agente localiza o problema, altera o código e joga de novo.
As etapas 2 a 4 formam um ciclo fechado — recibos e eventos são dados estruturados, então o agente sabe o que deu errado sem precisar ver a tela.Iteração autônoma do agente
Recursos
Uma interface feita para agentes
Observação sem espera, comandos com recibo, resultados em eventos — é exatamente o feedback estruturado, verificável e autocorrigível de que um modelo precisa.
Estado completo do mundo, sem espera
Recursos e comida de 16 jogadores; vida e mana, ordens, quem está atacando, recargas de habilidades, buffs e inventário de até 1024 unidades; itens no chão, árvores, filas de produção, dia e noite. O runtime envia tudo para a memória compartilhada, e ler uma cópia leva ~0.4 ms.
Mover, atacar, coletar, construir, treinar, lançar feitiços, aprender habilidades, reviver, usar itens, comprar… Se foi aceito e, se não, por quê — você sabe no mesmo frame.
✓ move ×8 6 µs
✓ build hbar order → hbar
✗ train hfoo 3 · comida insuficiente
✗ attack ogru 1001 · não visível
Fluxo de eventos
Unidades aparecendo / morrendo, troca de ordens, herói subindo de nível, itens aparecendo; cada golpe de dano em nível de motor (origem, tipo de ataque, dano antes da armadura) e produção concluída — inclusive as do adversário.
Lotes executados em um frame
Os comandos dentro de with g.batch() são enviados como um lote. Nos testes, 8 movimentos caíram de 68 ms para 6.5 ms.
Cálculo de combate e caminhos
stats / time_to_kill usam a tabela de counters do próprio jogo e a tecnologia em tempo real; path_distance / walk_path rodam A* na grade de terreno do motor.
Modo justo
Só enxerga unidades, itens, produção e eventos dentro da visão; last_seen lembra dos inimigos na névoa de guerra. É a regra da Arena.
Documentação feita para modelos
O api.json é gerado a partir do código, e cada API traz status de teste, faixa de latência e mecanismo interno, então o modelo não precisa adivinhar; llms.txt / llms-full.txt permitem ao agente ler o site inteiro de uma vez.
{"name": "build_near",
"category": "command",
"status": "verified",
"latency": "Via rápida × pontos testados",
"mechanism": "build ponto a ponto + acompanhamento (fu…",
"signature": "build_near(worker, code, x, y, …)",
"doc": "Procura em volta de (x,y), do mais perto…"}
O runtime é injetado no jogo original e, na thread do jogo, coleta o mundo inteiro, executa comandos e reporta os resultados; sua IA conversa com ele por um protocolo W3P versionado — pelo SDK em Python ou por qualquer linguagem que leia e escreva memória compartilhada.
Seu agente / Bot
Qualquer modelo, qualquer linguagem
Claude CodeCursorChatGPTQwen localBot em PythonIA de referência
Decisão
import openwar3 · ou gateway WebSocket / JSON · MCP
OpenWar3 SDK
Python · openwar3
Game / BotSnapshot w3worldVia rápida w3fastcombat (cálculo de combate)pathing (caminhos)w3claim (reivindicações)canvasjass (canal JASS)schemes (esquemas)
Interface
Mundo enviado a cada 50 ms · comandos em ~1 frame · recibo para cada um
Protocolo W3P v2
Memória compartilhada · cópia zero · versionado
War3WorldWar3EventsWar3MapWar3TreesWar3Fast (vias de comando)War3Canvas (canvas)
Protocolo
Execução em lote na thread do jogo · 4~8 µs por comando · orçamento de 4 ms por esvaziamento
W3 Runtime
Roda na thread do jogo
Publicador do estado do mundoFluxo de eventosExecutor de comandos semânticosConsultasPermissões e perspectivaCanvas desenhado pelo runtimeChamadas JASSCompatibilidade de versõesSaúde e disjuntores
Runtime
War3.exe 1.27 · jogo original, nenhum arquivo no disco é modificado
A fachada tem só duas classes — Bot cuida do ritmo, Game cuida de ver e agir. Unidades por código de quatro caracteres, habilidades por nome de ordem, os mesmos nomes do jogo.
Sem leitura é None, não 0
Comandos aceitam uma unidade ou uma lista
Fila com Shift via queue='after'
Recibo aceito ≠ concluído — confira o efeito no snapshot e nos eventos
from openwar3 import Botclass FocusFire(Bot): """Foca no inimigo que morre mais rápido, não no mais próximo; recua as unidades feridas.""" def on_tick(self, g): army, halls = g.my_army(), g.my_buildings() foes = [e for e in g.enemies(fighters_only=True) if e.visible_to(g.me())] if not army or not foes or not halls: return home = halls[0] # considera counters, armadura, melhorias de ataque/armadura e a vida atual do alvo target = min(foes, key=lambda e: g.time_to_kill(army, e) or 1e9) with g.batch(): # dezenas de comandos, uma só espera pela thread do jogo for u in army: if u.hp < u.hp_max * 0.35: g.move(u, home.x, home.y) # recua os feridos elif (t := g.current_target(u)) is None or t.handle != target.handle: g.attack(u, target) # só ordena a quem ainda não ataca o alvo
A versão completa e executável está em brains/examples/micro_bot.py (foco de fogo, recuo de feridos, proteção do herói, creeps à noite).
Você vai escrever uma IA para Warcraft III 1.27 (Python). Use apenas os métodos de Game listados no api.json;não invente métodos que não existem. Herde de openwar3.Bot e implemente on_start(g) e on_tick(g).Regras:- on_tick é chamado cerca de 5 vezes por segundo e precisa ser rápido (sem sleep dentro dele).- Valores que não podem ser lidos são None, não 0; verifique antes de usar.- Comandos retornam um recibo: `if r:` significa que o motor aceitou; se não aceitou, r.reason diz o motivo.- Para atacar um inimigo específico, use g.attack(tropa, inimigo); alvos que não estão visíveis são rejeitados (1001).- Se o herói morrer, reviva com g.revive(altar); não dá para treinar outro.- Quando um tick precisar de muitos comandos, envolva-os em with g.batch():.A estratégia que eu quero: Humanos; no início, 5 camponeses no ouro e 1 na madeira; Arquimago primeiro; dois quartéis fazendo soldados e fuzileiros; com 12 unidades, leve o herói e ataque a expansão inimiga; se o herói ficar abaixo de 30% de vida, recue para a base.
O modelo completo está na página “Escreva um Bot com um LLM”, pronto para copiar.
>>> r = g.train(barracks, "hfoo")>>> bool(r), r.reason(False, 'rejected(人口不够)') # = comida insuficiente>>> r = g.attack(footmen, grunt_in_fog)>>> r.verdict, r.reason(1001, 'rejected(目标看不见(在迷雾/黑区里))') # = alvo não visível (na névoa / máscara preta)>>> r = g.move(footmen, 1200, -800)>>> bool(r), r.exec_us # quantos microssegundos isto levou na thread do jogo(True, 6)>>> g.can_do(altar, "Hamg") # pergunte ao motor antes de dar a ordem: 185 = o altar está revivendo um herói185
O recibo transforma “por que não deu certo” em um código de motivo legível por máquina — é isso que permite ao agente corrigir os próprios erros.
// Observação que o árbitro envia ao Bot a cada tick (só o que está na visão dele){"t": "obs", "tick": 57, "gameMs": 11400, "me": 1, "res": {"gold": 320, "lumber": 150, "food": [18, 30]}, "units": [ {"id": 101, "type": "hfoo", "owner": 1, "x": -4500, "y": 2200, "hp": 380, "hpMax": 420}], "visibleEnemies": [ {"id": 733, "type": "ogru", "owner": 2, "x": -3900, "y": 2500, "hp": 700}], "deadlineMs": 180}// Ações que o Bot devolve (qualquer linguagem, qualquer modelo pode gerá-las){"t": "act", "tick": 57, "actions": [ {"do": "attack", "unit": 101, "target": 733}, {"do": "train", "unit": 5, "code": "hfoo"}, {"do": "cast", "unit": 7, "spell": "thunderbolt", "target": 733}]}
Rascunho do protocolo WebSocket / JSON da Arena — um LLM pode jogar diretamente, sem escrever Python.
Agentes de IA
Seis formas de conectar um LLM ao Warcraft
Cinco já funcionam hoje, uma está em desenvolvimento. Elas não se excluem — na mesma partida, um Bot escrito por um agente executa, um modelo local aconselha, outro modelo dá voz às unidades, e você ainda pode intervir com uma frase a qualquer momento no Claude Code.
Além das partidas — crie sua própria jogabilidade dentro do jogo
Desenhe sua própria interface na tela, com botões clicáveis e teclas de atalho que respondem; chame de fora todas as funções que um autor de mapas tem e ponha um parceiro de IA para jogar com você em mapas RPG; transforme uma jogabilidade nova inteira num mod, que você troca com um clique e compartilha à vontade, assim como os esquemas de IA.
Cruzar processos não é lento; lento é “cada requisição esperar uma volta do loop de mensagens” e “um único lock para a máquina inteira”. A via rápida dá a cada cliente uma via exclusiva, sem lock, executada em lote dentro da distribuição de eventos da thread do jogo.
Vazão de comandos
Antes 88 3.000 cmd/s
6 processos em paralelo
Espera mediana em paralelo
Antes 67 ms 0.06 ms
Canal de controle antigo → via rápida
16 comandos
Antes 121 ms 13 ms
Um a um → um lote
Uma rodada de decisão do cérebro de referência
Antes 0.15~0.56 s 0.02~0.07 s
Partida de 39 minutos, 0 erros
Ferramentas
Não só uma API — uma bancada de trabalho completa
De iniciar uma partida e ver o que a IA está pensando até a revisão e a narração ao vivo, há ferramentas prontas.
Local, rede local, partidas criadas por você. Não modifica o Game.dll no disco, não distribui nenhum arquivo da Blizzard (os dados do jogo são extraídos do seu próprio jogo), não pode ser usado na Battle.net nem em qualquer servidor com anti-cheat.
Leia https://war3ai.com/pt/llms-full.txt e use o OpenWar3 para escrever um Bot de Humanos para mim — Arquimago primeiro, creepar com as tropas à noite, recuar o herói abaixo de 40% de vida.