¿Cómo perciben los bots del juego el mundo del juego y otras entidades?

52

Esta pregunta ha estado en mi mente por un tiempo ... principalmente porque veo bots para todo tipo de juegos como WoW y otros. Mi pregunta es; ¿Cómo saben los bots lo que aparece en la pantalla? No juego WoW, así que mi ejemplo puede estar equivocado, pero si, por ejemplo, hay un monstruo, ¿cómo sabe el robot dónde está ese monstruo en la pantalla y cómo sabe cómo interactuar con él?

¿Puedes aplicar esto a cualquier juego o es específico para cada juego? Lo siento si la pregunta no está clara ... y no estoy preguntando cómo hacer un bot, ¡más preguntando cómo detectan cosas en la pantalla, ya que es bastante fascinante para mí!

Gracias por adelantado :)

TheRapture87
fuente
14
La mayoría de las veces, estos bots se conectan a la memoria del juego y leen directamente la posición del elemento del juego, en lugar de tratar de entender lo que está en la pantalla.
Alexandre Desbiens
2
Aceboy1993, ¿eres programador? Edite la pregunta y háganos saber de cualquier manera. Las respuestas probablemente deban hacerse de manera un poco diferente, dependiendo de eso.
Panzercrisis
3
Para ser claro; estás hablando de la automatización del juego no incorporada, ¿verdad? ¿Bots de cultivo de oro, aimbots y demás? ¿O simplemente te refieres a jugadores de IA?
Anko
Hola soy programador. Sí, estoy hablando de robots de oro agricultura y apuntar contra los robots pero también estoy interesado en jugadores de la IA :)
TheRapture87
3
@ Aceboy1993 Cubrir ambos haría esta pregunta demasiado amplia. Por favor, divídalos.
Mástil

Respuestas:

77

Hay muchos puntos donde un bot puede inyectarse en el juego.

  • La pantalla es una de ellas, pero de lejos no es la más útil. Sin embargo, una vez he visto un aimbot muy temprano para Counter Strike que usaba códigos de colores. Llegó con modelos de personajes alternativos con texturas de un solo color (el juego era lo suficientemente fácil de modificar para permitir esto) y luego solo detectó píxeles de esos colores. Sin embargo, no es un método muy efectivo. Ya era bastante torpe en ese entonces, y se vuelve cada vez menos viable porque los motores gráficos se vuelven cada vez más potentes, lo que significa más y más detalles para confundir cualquier algoritmo de reconocimiento óptico.

  • Otro punto es leer la memoria directamente [1] . Es posible que un programa en su computadora lea la memoria de otro. Por lo tanto, el desarrollador solo necesita averiguar en qué dirección de memoria está guardando el juego la información relevante para el bot. Existen herramientas que ayudan al desarrollador a encontrar lo que desean al crear una imagen de memoria y proporcionar varias herramientas de búsqueda. Una contramedida es utilizar la aleatorización del diseño de la dirección, pero un robot inteligente aún puede encontrar lo que está buscando automáticamente.

  • Es posible modificar el ejecutable del juego en sí. Para hacer esto, los desarrolladores de bot deben poder leer y programar en ensamblador, lo cual no es tan difícil con algo de práctica. Luego buscan el código que maneja la información que les interesa y lo reescriben para pasarlo a su bot. Una posible contramedida desde la perspectiva del desarrollador del juego es usar un ofuscador para hacer que el código de ensamblador del juego sea menos legible, pero estos generalmente no son buenos para el rendimiento y existen herramientas para muchos ofuscadores que invierten su trabajo.

  • Y luego está el netcode. En un juego en línea, el servidor envía las propiedades y posiciones de todos los objetos en el juego a través de la red. El flujo de datos de red entre el servidor y el cliente puede ser interceptado y analizado. Una herramienta popular para hacer esto es wireshark. Cuando el desarrollador realiza ingeniería inversa del código de red, puede escribir un bot que intercepte el tráfico de la red al igual que Wireshark y utiliza la información para tomar su decisión. Cuando el desarrollador está más motivado, incluso puede desarrollar un cliente de juego completo desde cero que implemente el protocolo de red y juegue el juego sin tener siquiera ningún resultado gráfico. Tales bots son muy populares entre los productores de oro porque sin la salida de gráficos, el cliente suele ser mucho más amigable con los recursos, lo que significa que pueden ejecutar muchos de ellos a la vez en un servidor pequeño.


1: Ya que mencionas WoW, vale la pena señalar que el programa de botteo WoWGlider temprano y notorio utilizó el acceso directo a la memoria. Blizzard tenía un subprograma llamado Warden que fue diseñado para detectar y bloquear el acceso de los programas externos al estado interno del juego de WoW. Dado que el programa de bots eludió esta protección y leyó la memoria sin permiso, la demanda de 2006 MDY v Blizzard se decidió a favor de Blizzard con el argumento de que el fabricante del bot alentaba y permitía a sus usuarios cometer una infracción de derechos de autor y violar la DMCA .

Philipp
fuente
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Josh
18

Los bots son jugadores. Simplemente leen las posiciones del jugador / monstruo del servidor al igual que cualquier otro jugador y usan esos valores combinados con un simple script AI para realizar acciones en el juego mediante la simulación de golpes de teclado y clics del mouse mediante programación. Si los bots realmente tuvieran un algoritmo para detectar qué monstruo está en la pantalla e interactuar con él, sería un software bastante impresionante que valdría millones. Eso es básicamente IA para robots.

dimitris93
fuente
2
Es más simple hacer algunas verificaciones de oclusión y proyecciones de rayos para verificar si el bot habría visto al monstruo y luego usar el estado de animación para verificar lo que está haciendo el monstruo.
Ratchet Freak
Para hacer eso, tendrías que aplicar ingeniería inversa al juego, implementar el lanzamiento de rayos y también leer el estado de animación del monstruo, lo que requeriría inyectar código y modificar el .exe. ¿Cómo es esto más simple que leer los paquetes de red que recibe del servidor (usando cables de conexión como sugirió Phillip) y luego simplemente tener un script AI para simular acciones de teclado / mouse, en función de los paquetes de red?
dimitris93
2
Estaba asumiendo un bot de "oponente de IA" en lugar de un bot de cliente modificado.
monstruo de trinquete
3
@ratchetfreak Oh, ahora tiene sentido. La referencia de WoW en la pregunta en realidad implica que los "bots" son básicamente productores de oro, no oponentes de la IA.
dimitris93
7

Phillip ya dio una gran visión general de cómo funcionan la mayoría de los bots, pero solo quería cubrir las cosas con un poco más de detalle, ya que tengo un poco de experiencia personal desarrollando en o para todos los tipos de bots que cubrió.

En Runescape, había un gran proyecto (RSBot) que copiaba el contenido de la memoria del cliente Runescape en su memoria local, donde luego podía ver todo el estado del juego sin riesgo de que el cliente se pusiera al día. Se requirió un poco de ingeniería inversa para determinar dónde buscar en la memoria para encontrar los punteros a los datos, pero una vez que lo hicieron, expusieron una API para aprovechar la información. Sabría exactamente en qué lugar del mundo obtendría las coordenadas de un objeto y luego las transformaría con la matriz de transformación de la cámara para obtener la posición en pantalla. Las máscaras de impacto también eran legibles, por lo que era trivial determinar exactamente en qué rango mover el mouse para obtener el resultado deseado.

El bot proporcionó un montón de información de depuración, como anotaciones que le indicaron al desarrollador qué coordenadas de mosaico están dónde, qué ID tiene este objeto, qué ID pertenece a un elemento determinado, etc. Esta información podría usarse para hacer bots. El proceso real de hacer los guiones de bot fue realmente bastante simple. El marco proporcionó muchas funciones de utilidad, como move_to(world_coordinates)o mouse_move(x,y)que realizarían las acciones especificadas de una manera algo creíble (moviendo el mouse a lo largo de una spline aleatoria, moviéndose repetidamente a través del minimapa y la pantalla, y así sucesivamente)

También en Runescape, tiene la opción de reducir drásticamente la calidad de los gráficos. En realidad, fue bastante fácil hacer ciertos tipos de bots filmando la pantalla y aplicando algunos conceptos básicos de visión por computadora para construir un modelo del mundo. Hice un bot de maldición y un robot de fundición usando esta técnica, los cuales funcionaron bastante bien. Simplemente tomaría el marco, aumentaría la saturación tanto como pudiera y luego trataría de extraer patrones de él, lo que podría generar un mapa de probabilidad para las zonas de clic.

En el caso del bot maldito, el objetivo era un demonio menor, que es solo una cosa roja enorme, que es trivial de encontrar. En el caso del robot de fundición, buscaría un pequeño trapecio naranja rodeado de gris, y ese sería el horno. También trataría de encontrar una gran forma de "L" gris claro, que sería el escritorio del banco. Eso solo se hizo con reducción de escala y heurística básica. También podría orientarse con la práctica brújula al lado del minimapa, por lo que podría orientar la cámara en una posición más confiable para encontrar los objetos objetivo.

En varios juegos de Nexon, los servidores confían mucho en los clientes. Abusé de esto una tonelada en Maplestory modificando mapas para eliminar peligros o agregar deformaciones para que un bot no tenga que ser tan sofisticado. También monitorearía el tráfico hacia y desde el servidor para construir un modelo del mundo que luego podría usarse para encontrar y matar monstruos rápidamente.

Una vez que me di cuenta de que ya no jugaba MMO y simplemente los automaticé, decidí dejar de jugar por completo. Si no estuviera tan preocupado por exponerme legalmente, probablemente podría haber matado vendiendo bots MMO, pero realmente no quería ser demandado. ¡Es por eso que paso mi tiempo haciendo programación real en estos días!

Kaslai
fuente
Amén en ese último párrafo. Encontré en programación al 1) jugar WoW 2) botar WoW 3) comenzar a escribir mi propio bot para WoW. El conocimiento de programación que obtuve en solo 2 años fue más valioso que cualquier otra cosa que aprendí mientras estudiaba (bueno, por lo menos, sobre programación 'práctica' al menos).
Sebastian Graf
2

La respuesta de Phillip es excelente, pero solo una nota rápida sobre el patrón Modelo / Vista / Controlador , o MVC para abreviar.

Su pantalla es parte de la "vista", que presenta datos del "modelo", que es el estado real del juego si lo desea. Los bots y tu personaje, todos 'existen' (en cierto sentido) dentro del modelo. Imagínese si desconectara la pantalla: el juego continuaría aunque la vista se haya ido.

En un juego en red, el concepto de "modelo" es un poco complicado, ya que en realidad tienes muchos modelos. Tiene el modelo en el servidor y luego un modelo en cada cliente, que se actualiza en parte debido a los datos que recibe del servidor. Podría pensar que el "modelo" abarca el modelo del servidor y el modelo de su cliente, o podría pensar que es solo el modelo de su propio cliente. De cualquier manera, aquí es donde viven los bots. Por lo tanto, sus "percepciones", que podríamos usar como una forma abreviada de su entrada de datos y estado, se basan en el estado del modelo en ese momento y la interacción entre las diferentes entidades / objetos dentro de ese modelo. En la práctica, cada bot puede tener una función llamada "refreshState" que se ejecuta una vez por cuadro o algo, y que hace que se actualice "

Max Williams
fuente
0

Pueden leer las coordenadas de un archivo o un servidor, pero también con un sistema de detección de colisión de rayos. Es común usar rayos que van desde el bot (en ese caso) hasta fuera de él. Si el rayo choca con algo, entonces devuelve información al bot, como si lo que el rayo encontró fuera un jugador, un bot, un animal o una pared simple. Eso es porque en el caso del jugador y el bot, por ejemplo, tienen una cápsula invisible que los involucra completamente con información sobre su tipo, por ejemplo (humano, bot, ...). Con eso, pueden evitar chocar con paredes y otros elementos si te siguen, por ejemplo.

Puede ver la parte Detección de colisión de esta página

Megasa3
fuente
Sin embargo, eso requeriría que inyecte código en el juego real
dimitris93
Sí, por supuesto. Todo está programado, pero es útil para rutas libres o casos como bots que lo siguen, etc. En los juegos 3D es la forma más común de AFAIK y he estudiado al menos el que no es mmorp ... tal vez wow tiene toda la información en el servidor pero es diferente ya que es un gran mmorp.
Megasa3