2010-04-29 22 views
28

Algo que siempre me he preguntado, especialmente porque me inspiró para comenzar a programar cuando era un niño, ¿cómo funcionaban los bots de videojuegos? Estoy seguro de que hay muchos métodos diferentes, pero ¿qué hay de la automatización para los MMORPG? ¿O incluso bots de tipo FPS?Video Game Bots?

Estoy hablando de robots de automatización hechos por jugadores.

+2

Hay una gran diferencia entre los dos tipos. No tengo ninguna experiencia en ninguno de los dos, pero estoy bastante seguro de que los MMORPG están simulando la entrada del usuario (haciendo clic en partes de la pantalla o simulando pulsaciones de teclas) donde los programadores del juego escriben los FPS que vienen con el juego. y probablemente tengan acceso a más información (como dónde están los muros, para que no tengan que rozar la pantalla para descubrir si chocan contra una pared) –

+8

'¡Advertencia!' Esta pregunta parece haber sido publicada por un bot. _Ellos nos están espiando para ver si los entendemos. ;-) Broma aparte, esta pregunta es bastante "amplia y superficial", no muy diferente de algunas cosas que obtenemos de bots ... – mjv

Respuesta

41

Para 'bot' de un juego, debe ser capaz de hacer dos cosas programáticamente: detectar lo que está sucediendo en el juego y proporcionar información para el juego.

Detectar lo que sucede en el juego tiende a ser el más difícil de los dos. Unos métodos para hacer esto son:

  • Screen-Scraping Esta técnica captura la imagen en la pantalla y lo analiza en busca de cosas como enemigos, estado del jugador, potenciadores, los mensajes de juego, relojes, etc. Esto tiende ser un método particularmente difícil.Las técnicas OCR se pueden usar para procesar texto, pero si el texto está escrito en la parte superior del juego (en lugar de en un elemento UI con un fondo sólido), el telón cambiante puede dificultar la obtención de resultados precisos y consistentes. Encontrar objetos que no sean de texto en la pantalla puede ser incluso más difícil, especialmente en mundos 3D, debido a las diferentes posiciones y orientaciones en las que puede existir un solo objeto.
  • Señales de audio En algunos juegos, acciones y eventos están acompañados por efectos de sonido únicos. Es posible detectar estos eventos al monitorear la salida de audio del juego y compararlo con una grabación del efecto de sonido asociado. Algunos juegos permiten al jugador proporcionar sus propios efectos de sonido para los eventos, lo que permite el uso de efectos de sonido que están diseñados para ser fáciles de escuchar y filtrar.
  • Monitorización de la memoria Si el funcionamiento interno del juego se entiende bien, entonces puede controlar el estado de un juego inspeccionando el espacio de memoria del juego. Algunas herramientas de trucos para sistemas de consola (como el Game Genie) usan este método. Al detectar qué memoria actualiza el juego, es posible detectar qué está haciendo el juego. Algunos juegos aleatorizan las ubicaciones de memoria que usan cada vez que se lanzan, en un intento de frustrar esta vulnerabilidad.
  • Análisis de paquetes Con los controladores adecuados, puede interceptar los paquetes de datos del juego a medida que se envían o se recuperan de su tarjeta de red (para los juegos que se juegan en línea). Analysis de estos paquetes puede revelar lo que su cliente del juego se está comunicando con el servidor, que generalmente gira en torno a las acciones jugador/enemigo.
  • Game Scripting Algunos juegos tienen una interfaz de scripts incorporada. Si está disponible, este es generalmente el método más fácil porque es algo que el software del juego está diseñado para hacer (los métodos previos típicamente cuentan como "hacks"). Algunos scripts deben ejecutarse en el juego (a través de una consola o mediante un sistema complementario) y algunos pueden ser ejecutados por programas externos que se comunican a través del juego a través de una API publicada.

Generar eventos de entrada de nuevo en el juego suele ser la tarea más fácil. Algunos métodos incluyen:

  • memoria "hurgando" similares a la sección de monitoreo de memoria más arriba, metiendo la memoria es el acto de escribir datos directamente en el espacio de memoria del juego. Este es el método utilizado por Game Genie para aplicar sus códigos de trucos. Dada la complejidad de los juegos modernos, esta es una tarea muy difícil y puede bloquear todo el juego.
  • Emulación de entrada En lugar de la interacción humana directa, se pueden generar señales de teclado o de mouse "falsas". Esto se puede hacer en software usando herramientas como AutoIt. También se pueden usar hacks de hardware, como dispositivos que se conectan al puerto USB o PS/2 de la computadora y que el sistema parece ser un teclado, pero generan eventos falsos de pulsación de tecla basados ​​en señales recibidas de la computadora (por ejemplo, a través de Puerto serial). Estos métodos pueden ser más difíciles de detectar para los juegos.
  • Game Scripting Como se mencionó anteriormente, algunos juegos proporcionan métodos integrados para controlarlo programáticamente, y aprovechar esas herramientas suele ser la técnica más fácil (pero tal vez no la más poderosa).

Ten en cuenta que ejecutar un 'bot' en un juego suele ser una violación de los Términos de uso del juego y puede hacerte suspender, prohibir o incluso empeorar. En algunas jurisdicciones, esto puede conllevar sanciones penales.Esta es otra ventaja para usar las funciones de scripting incorporadas en un juego; si está diseñado para ser parte del software del juego, es muy probable que el editor del juego no le prohíba usarlo.

0

Se llama IA (inteligencia artificial) y realmente no es tan difícil de replicar, un conjunto de reglas y comandos en el lenguaje de programación de tu juego hará el truco. Por ejemplo, un bot de FPS funcionaría obteniendo las coordenadas del cuerpo de tu jugador y configurando el arma de tu bot enemigo para que apunte a esa coordenada y comience a disparar cuando esté en un cierto rango.

+0

Me pregunto acerca de las técnicas para obtener las coordenadas reales del cuerpo de tu jugador, etc. No lo hago Entiendo cómo "conectaré" mi programa a otro programa si no proporciona algo para que me "conecte". – cam

+0

@cam: en el caso de juegos de primera o tercera persona (consola o PC), la IA está integrada en el código del juego, por lo que tiene acceso a toda la información del juego que necesita. No estoy seguro acerca de los MMORPG, pero sospecho que el código AI está en el motor del servidor de juegos. – ChrisF

+0

Inspeccionar o interferir con el funcionamiento de otro programa no es cómo se manejan las entidades en los videojuegos. En general, hay un programa que hace toda la lógica en sus propias estructuras de datos internas. De acuerdo, el programa puede constar de muchos hilos y procesos, pero para cada uno de ellos la información que necesitan es interna. –

10

Una vez escribí un simple robot de MMORPG por mi cuenta. Usé AutoHotkey.

  • Proporciona muchos métodos para simular la entrada del usuario, uno funcionará. Es tedioso programar uno de trabajo en C++ por uno mismo (o buscar en la fuente de AutoHotkey).
  • Se puede buscar directamente la pantalla de patrones de píxeles, incluso las pantallas del juego (DirectX)

Así que lo que hice fue buscar la pantalla para el nombre de un enemigo (almacena como una imagen con la fuente del juego) y el script hace clic en unos píxeles debajo de él para atacar. También rastrea la barra de salud y las ollas si es demasiado baja.

Muy trival. Pero sé de un robot WoW que también se crea usando AutoHotkey. Y yo see muchas otras personas tenían la misma idea (la mía no era para WoW, pero probablemente también ilegal).

More advanced techniques no captura la pantalla pero directamente read the game's memory. Tienes que hacer mucha ingeniería inversa para que esto funcione. Y deja de funcionar cuando el juego se actualiza.

4

¿Cómo va una persona individual a su día a día?

Este es el tipo de problema que solucionan las IA en los juegos.

¿Qué desea que haga su entidad? Codifique su entidad para hacer eso. Si quieres que tu monstruo persiga al avatar del jugador, el monstruo solo tiene que enfrentar al avatar y luego avanzar hacia él. Cuando ese monstruo se acerca a una distancia adecuada, puede elegir morder el avatar del jugador, y esta opción puede ser tan simple como AmICloseEnough(monster, player); o más compleja o incluso aleatoria.

Los Bots en un FPS son difíciles de hacer bien porque es fácil hacerlos perfectos pero no tan fáciles de hacerlos divertidos. P.ej. ellos siempre saben exactamente dónde está el jugador (gPlayer.GetPosition()) por lo que es fácil dispararle al jugador en la cabeza todo el tiempo. Se necesita un poco de "arte" para hacer que el bot se mueva como lo haría un humano.

+0

No sé por qué esto tiene un voto negativo. +1. –

+0

No lo rechacé, pero pensé que no estaba muy claro para votar. – Earlz

+0

Lo siento si no estaba claro, pero no estoy seguro de cómo hacerlo más claro; su entidad necesita un objetivo, luego el código necesita descubrir cómo lograr ese objetivo.Dada la pregunta (en ese momento) no hay realmente una mejor respuesta que eso. (Puedo tomar votos a la baja, pero apesta cuando llegan después de que la pregunta ha sido editada y el voto a favor se debe a que la respuesta fue para la versión anterior de la pregunta). –

0

BTA dio una muy buena respuesta. Solo quería agregar que los diferentes métodos son sospechosos para diferentes medios de detección por parte de la compañía de juegos. La piratería en el cliente del juego a través de la supervisión de la memoria o el análisis de paquetes generalmente se detecta más fácilmente. Generalmente no lo recomiendo, ya que puede quedar atrapado con mucha facilidad.

El raspado de pantalla utilizado con emulación de entrada es generalmente la forma más segura de botar un juego y no quedar atrapado. Muchas personas (incluido yo mismo) lo han estado haciendo durante años sin problemas.

Además, para agregar un paso adicional entre la detección de lo que sucede en el juego y la aportación, algunos juegos requieren un cálculo exhaustivo antes de poder decidir qué tipo de información proporcionar al juego. Por ejemplo, hubo un juego en el que tuve que calcular el número de naves para enviar al atacar al enemigo, y esto se basó en la cantidad de naves que tenía, el tipo de naves, y quiénes y qué clase de enemigo era. El cálculo generalmente es la parte "fácil", ya que puede hacerlo generalmente en casi cualquier lenguaje de programación.

-1

Como veo, los bots son realmente poderosos en varios juegos/industria del juego. Los hackers usan bots para jugar en su nombre y esto representa un serio factor de confianza para otros humanos que no incurren en malas prácticas. Como Ryan mencionó que los bots más inteligentes usan raspado de pantalla, estoy en desacuerdo con su punto de que los robots que roban la pantalla no pueden ser atrapados. Hay servicio de prevención de raspado de pantalla múltiple que incluye ShieldSquare.

exención de responsabilidad: Soy uno de los co-fundador de ShieldSquare