Phillip já deu uma ótima visão geral de como a maioria dos bots opera, mas eu só queria abordar as coisas um pouco mais detalhadamente, pois tenho um pouco de experiência pessoal desenvolvendo em ou para todos os tipos de bots que ele cobriu.
No Runescape, havia um grande projeto (RSBot) que copiava o conteúdo da memória do cliente Runescape para a memória local, onde era possível visualizar todo o estado do jogo sem o risco de o cliente pegar. Foi necessário um pouco de engenharia reversa para determinar onde procurar na memória, a fim de encontrar os ponteiros para os dados, mas uma vez que eles o fizeram, eles expuseram uma API para tirar proveito das informações. Ele saberia exatamente o que havia no mundo obtendo as coordenadas de um objeto e depois as transformando com a matriz de transformação da câmera para obter a posição na tela. As máscaras de acerto também eram legíveis, por isso era trivial determinar exatamente em qual faixa mover o mouse para obter o resultado desejado.
O bot forneceu um monte de informações de depuração, como anotações que informavam ao desenvolvedor quais coordenadas de lado a lado estão, qual ID esse objeto tem, qual ID pertence a um determinado item, etc. Essas informações podem ser usadas para fazer bots. O processo real de criação dos scripts de bot foi realmente bastante simples. A estrutura forneceu muitas funções utilitárias, como move_to(world_coordinates)
ou mouse_move(x,y)
que executariam as ações especificadas de uma maneira um tanto crível (mover o mouse ao longo de um spline aleatório, mover-se repetidamente pelo minimapa e pela tela e assim por diante)
Também no Runescape, você tem a opção de reduzir drasticamente a qualidade dos gráficos. Na verdade, era muito fácil criar certos tipos de bots filmando a tela e aplicando alguns conceitos básicos de visão por computador para construir um modelo do mundo. Eu criei um robô de maldição e um robô de fundição usando essa técnica, que funcionou muito bem. Basta pegar o quadro, aumentar a saturação o máximo possível e, em seguida, tentar extrair padrões dele para gerar um mapa de probabilidade para as zonas de clique.
No caso do bot de maldição, o alvo era um demônio menor, que é apenas uma enorme coisa vermelha, que é trivial de encontrar. No caso do robô de fundição, ele procuraria um pequeno trapézio laranja cercado de cinza, e esse seria o forno. Ele também tentaria encontrar uma forma grande em L, cinza claro, que seria a mesa do banco. Isso foi feito apenas com downscaling e heurísticas básicas. Ele também pode se orientar com a bússola acessível ao lado do minimapa, para orientar a câmera em uma posição mais confiável para encontrar os objetos alvo.
Em vários jogos da Nexon, os servidores confiam muito nos clientes. Eu abusei muito disso em Maplestory modificando mapas para remover perigos ou adicionar distorções, para que um bot não precise ser tão sofisticado. Eu também monitorava o tráfego de e para o servidor, a fim de construir um modelo do mundo que pudesse ser usado para encontrar e matar monstros rapidamente.
Depois que percebi que não jogava mais MMOs e apenas os automatizei, decidi parar de jogar completamente. Se eu não estivesse tão preocupado em me expor legalmente, provavelmente poderia ter matado vendendo bots MMO, mas realmente não queria ser processado. É por isso que passo meu tempo fazendo programação real hoje em dia!