A chamada
No lugar de procurar um botão na tela, o bot manda
net.call('towerStartBattle', args). Sem mouse, sem OCR,
sem depender da resolução, e a aba pode ficar em segundo plano.
hero-wars-bot · v0.3.1
O Hero Wars conversa com o servidor por JSON-RPC assinado. Este bot fala esse protocolo direto do navegador: a torre, o correio, as expedições e as missões viram chamadas de função, e a luta é resolvida em memória com o motor do próprio jogo.
rodou de verdade conta real, servidor wb, nível 130 · 2min19s
No lugar de procurar um botão na tela, o bot manda
net.call('towerStartBattle', args). Sem mouse, sem OCR,
sem depender da resolução, e a aba pode ficar em segundo plano.
Todo request leva um MD5 de cinco campos, e os três últimos vão colados, sem separador nenhum entre eles. Descobrir esse formato foi o centro do projeto. O MD5 é implementação própria: o Web Crypto do navegador não oferece MD5.
Um setter em Object.prototype, instalado antes do bundle
do jogo carregar, captura as classes dele. Com elas o bot roda o mesmo
motor determinístico do cliente: a luta é simulada localmente e o
resultado já vai pronto.
Doze tarefas, cada uma um módulo que nasce desligado e declara as chamadas de que precisa. Só a torre e a masmorra dependem do motor de batalha; o resto é conversa pura com a API.
| tarefa | o que faz | motor |
|---|---|---|
quests | missões diárias e dos Special Events | não |
mail | coleta o correio em lotes de 50, preservando energia | não |
guildGifts | fichas de amizade para a guilda inteira, uma vez por dia | não |
dailyBonus | bônus diário | não |
expedition | Airship: recolhe as concluídas e envia novas | não |
outland | raid dos 3 chefes e o baú gratuito de cada | não |
soulAtrium | recarga gratuita, a cada 12h | não |
raidMissions | raid da campanha, com teto porque gasta energia | não |
arena | PvP de um time, pode custar ranking | não |
grandArena | recolhe as moedas acumuladas e joga o PvP de 3 times | não |
tower | sobe a torre: pula, luta e abre baús | sim |
dungeon | masmorra da guilda, experimental | sim |
As arenas nascem desligadas: ali não há simulação possível, porque o servidor resolve a luta inteira e só devolve o resultado. Toda tentativa é aposta, e perder derruba o ranking.
O bot roda sozinho de madrugada, sem ninguém olhando, e um clique errado num jogo assim custa moeda paga. A camada de segurança fecha por padrão, e a ordem das checagens é parte do desenho.
Nome que case com buy, shop,
revive, instant ou summon é
recusado, mesmo que alguém o ponha na allowlist depois.
O que não está listado explicitamente não é enviado.
Recusa qualquer starmoney ou paid: true, em
qualquer profundidade do objeto.
Monta a chamada, assina e registra no log, mas não envia nada que altere a conta enquanto você não desligar.
Automatizar o Hero Wars viola os termos de uso da Nexters e pode resultar em banimento da conta. É um projeto pessoal de estudo de protocolo, rodado contra a conta do próprio autor.
O repositório é privado e nada é distribuído aqui: esta página descreve o projeto, não entrega o bot.