Pregunta

Bots, ¿cómo funcionan? ¿Le dicen al videojuego que se presionó una tecla o que se hizo clic en el mouse?

Si no, ¿hay alguna manera de que su programa le diga a otro programa que se presionó una tecla? Me gustaría hacer un programa para vencer a algún juego. Por lo tanto, cualquier recurso o ejemplo son apreciados.

Actualización: Entonces, una forma es emular las pulsaciones de teclas, ¿cuáles son algunos métodos para hacer esto (en cualquier idioma)?

¿Fue útil?

Solución

He escrito un montón de bots en un momento u otro (desde juegos de Pogo hasta Yohoho Puzzle Pirates). Para Windows, generalmente enviará eventos Win32 para simular los movimientos del mouse o falsificará los mensajes de bajo nivel que se envían entre las ventanas cuando se hace clic con el mouse. Mucho depende realmente de cómo reacciona el programa (al aceptar el mensaje con las coordenadas o, en el caso de Java, leer inmediatamente las coordenadas del mouse). La "automatización" La parte generalmente implica leer la pantalla y escribir heurísticas o algoritmos para determinar el estado, pero también puede ser tan agradable como el rastreo de paquetes (mucha información allí en implementaciones de póker deficientes) o tan extravagante como leer ubicaciones de memoria directamente. Bastante grande "campo", y mal documentado, ya que es bastante rentable y no es difícil entrar.

Envío de entrada

C / C ++ (en Windows)

Para claves, intente CodeProject:

http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx

Y mensajes:

http://www.codeproject.com/KB/threads/sendmsg.aspx

Su mejor opción es aprender a enviar mensajes usando la API de Win32, luego usar algo como Spy ++ o sus derivados para "ingeniería inversa". cómo se envían KeyPresses y movimientos del mouse a la ventana.

Java

Java tiene una clase de robot increíblemente portátil que puede:

  1. Leer píxeles de la pantalla.
  2. Controla el mouse.
  3. Enviar claves.

Le daría una oportunidad si está buscando rápida y fácilmente.

Lógica básica

Esto se describe en profundidad en otra parte de Internet, pero la mayoría de los bots siguen un flujo simple de programa de máquina de estado. Usted lee la pantalla (o paquetes, o memoria), descubre qué "estado". estás basado en tus lecturas y datos pasados, haces cálculos y envías el resultado al programa.

Leer la pantalla puede ser difícil, pero puede ser más fácil si consideras que muchas veces, hay algunos "afortunados" píxeles relativos a la ventana que le darán una idea de en qué estado se encuentra el programa. El proceso de búsqueda de estos píxeles se puede automatizar.

Otros consejos

Algunos programas (como los que se mueven en un MMORPG) simplemente están emulando pulsaciones de teclas. Una herramienta para hacer esto es AutoIt .

En cuanto a los bots que realmente juegan los juegos en sí, realmente no he hecho nada con ellos, pero supongo que usarían algún tipo de conjunto predefinido de acciones, tal vez una heurística, pero no es probable.

Hay un par de tipos de bots. Por lo que recuerdo cuando solía jugar CS (hace mucho, mucho tiempo)

Algunos bots usan las bibliotecas de la aplicación para inspeccionar el entorno (el mapa, dónde están los jugadores, etc.) Los bots también usan la biblioteca para controlar el movimiento. Dudo que haya muchas implementaciones de bot que invoquen mensajes del mouse para decirle al juego cómo moverse, etc. ...

Algunos bots emulan el protocolo de nivel de aplicación (si es multijugador). En otras palabras, el juego ni siquiera necesita ejecutarse. Un bot puede ejecutarse en un juego virtual.

Voy a ir en contra de lo que otro cartel ha sugerido: escribir un bot de juego es probablemente un ejercicio más valioso que jugarlo, y tener curiosidad sobre cómo funcionan es una buena señal. :)

La falla más grande en este concepto no es la entrada, sino la salida del juego. Su bot no solo puede presionar teclas al azar, necesita saber qué está sucediendo. Muy pocos juegos le permiten consultar esta información, lo que dejaría a su bot para resolver un problema muy complicado: convertir 60 cuadros por segundo de datos visuales 2D en un espacio virtual.

Hay juegos de actuación que no solo permiten jugadores bot, sino que los alientan. Open RTS es uno de esos, pero también hay otros más simples como GUN-TACTYX y crobots que son buenos puntos de partida.

Bots actuarán como clientes del juego (servidor). Luego, pueden enviar datos apropiados tal como un usuario puede enviarlos manualmente. El bot (cliente) analizará los datos del servidor ("alguien está a punto de atacar desde la izquierda"), etc. El cliente debería poder calcular el mejor movimiento y enviar los datos apropiados al servidor para ejecutarlo.

No estoy seguro de si esto funcionará con todos los juegos.

Depende mucho del juego. Por ejemplo, hice un bot para Travian (que es un juego en línea) que usaba el explorador de internet activeX para automatizar movimientos. Utilicé la aplicación en C # y para hacerla me llevó unos 30 minutos. Es simple llamar a métodos en activeX y hacer que haga cosas como completar campos de texto o hacer clic en botones. Para iniciar sesión, por ejemplo, utilicé lo siguiente:

var inputs = web.Document.GetElementsByTagName("input").
                        Cast<HtmlElement>();
var nume = inputs.First(h => h.GetAttribute("type") == "text");
var pass = inputs.First(h => h.GetAttribute("type") == "password");
var login = inputs.First(h => h.GetAttribute("type") == "image");
var form = web.Document.GetElementsByTagName("form")[0];

nume.SetAttribute("value", "user");
pass.SetAttribute("value", "pass");
login.InvokeMember("Click");

Para aquellos juegos que son de escritorio, las cosas se vuelven más complicadas. Windows permite que una aplicación envíe mensajes a otra aplicación, así que supongo que podría usar eso para enviar mensajes a un juego (aunque esto funciona para juegos que usan directX para entrada, no lo sé)

Un bot como usted lo describe simplemente emulará las pulsaciones de teclas y los movimientos / clics del mouse, por lo que el juego no puede determinar si un humano está jugando u otro programa. No tendría que interactuar con el juego en absoluto.

Puede emular movimientos / clics del mouse y entrada de teclado en Java con el clase Robot . También te permite tomar capturas de pantalla.

Creo que AutoIT es un excelente lenguaje para hacer este tipo de software. Aunque no lo he usado para construir bots, enviar clics y claves fue muy fácil.

Tengo entendido que la mayoría de los bots de juegos de gama alta utilizan llamadas del sistema para mapearse en el espacio de memoria del cliente del juego, aplicar ingeniería inversa a su diseño y manipular directamente las variables internas del programa del cliente. Eso es mucho más trabajo del que estaría preparado solo por diversión.

Cuando dice "controlar un programa" Piense en cómo se controlan los programas. La mayoría acepta entradas de teclado / mouse.

Si escribe un programa para simular la entrada del teclado / mouse, ahí lo tiene.

Un corolario de esto sería que si un programa aceptara argumentos pasados ??a través de un cuadro de entrada, escriba un programa para enviar argumentos como si fueran enviados a través de un cuadro de entrada.

Así es como funcionan todos los bots. ¡Espero que te arroje algo de luz!

Editar: así es como la gran mayoría de los bots funcionan :-)

Para esto necesitas saber programación. Sin embargo, hay programas que le permiten programar con medios visuales. Para ellos, no necesita poder programar. Un ejemplo es el programa Kibor. Está diseñado específicamente para sus propósitos y tiene un editor visual con el que puede crear bots con diagramas de bloques. Descripción del programa Kibor

Captura de pantalla Kibor

Tiene muchas funciones preparadas para bots. Incluso hay un módulo de reconocimiento de texto incorporado. Captura de pantalla de Kibor. Texto que reconoce

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top