Comment les robots du jeu perçoivent-ils le monde du jeu et les autres entités?


52

Cette question me préoccupe depuis un moment… principalement parce que je vois des robots pour toutes sortes de jeux comme WoW et d'autres. Ma question est; Comment les robots savent-ils ce qui apparaît à l'écran? Je ne joue pas à WoW, donc mon exemple est peut-être faux, mais si, par exemple, il y a un monstre, comment le bot sait-il où se trouve ce monstre à l'écran et comment savoir comment interagir avec lui?

Pouvez-vous l'appliquer à n'importe quel jeu ou est-ce spécifique à chaque jeu? Je suis désolé si la question n'est pas claire ... et je ne demande pas comment créer un bot, mais plutôt demander comment ils détectent les choses à l'écran comme si fascinantes pour moi!

Merci d'avance :)


14
La plupart du temps, ces robots s'accrochent à la mémoire du jeu et lisent directement la position de l'élément du jeu, au lieu d'essayer de comprendre ce qu'il y a à l'écran.
Alexandre Desbiens

2
Aceboy1993, êtes-vous un programmeur? Veuillez modifier la question et laissez-nous savoir de toute façon. Les réponses doivent probablement être faites un peu différemment, en fonction de cela.
Panzercrisis

3
Juste pour être clair; vous parlez de l'automatisation non intégrée du gameplay, non? Les bots d'élevage d'or, les aimbots et autres? Ou voulez-vous simplement parler des joueurs IA?
Anko

Salut je suis un programmeur Oui, je parle de bots d'
éleveurs d'

3
@ Aceboy1993 Couvrir les deux rendrait cette question trop large. S'il vous plaît séparez-les.
Mât

Réponses:


77

Il existe de nombreux points où un bot peut s’injecter dans le jeu.

  • L'écran est l'un d'entre eux, mais de loin pas le plus utile. Cependant, j'ai déjà vu un très tôt aimbot pour Counter Strike, qui utilisait un code de couleur. Il est venu avec des modèles de personnages alternatifs avec des textures unicolores (le jeu était assez convivial pour le moding pour le permettre), puis n'a détecté que les pixels de ces couleurs. Pas une méthode très efficace, cependant. Il était déjà assez maladroit à l'époque et devient de moins en moins viable car les moteurs graphiques deviennent de plus en plus puissants, ce qui signifie de plus en plus de détails pour confondre tous les algorithmes de reconnaissance optique.

  • Un autre point est la lecture de la mémoire directement [1] . Il est possible qu'un programme de votre ordinateur lise la mémoire d'un autre. Le développeur doit donc simplement savoir à quelle adresse mémoire le jeu enregistre les informations pertinentes pour le bot. Il existe des outils qui aident le développeur à trouver ce qu'il veut en créant une image mémoire et en fournissant divers outils de recherche. Une contre-mesure consiste à utiliser la randomisation de la disposition des adresses, mais un bot intelligent peut toujours être en mesure de trouver ce qu'il recherche automatiquement.

  • Il est possible de modifier l'exécutable du jeu lui-même. Pour ce faire, les développeurs de bot doivent pouvoir lire et programmer en assembleur, ce qui n'est pas si difficile avec certaines pratiques. Ils recherchent ensuite le code qui traite les informations qui les intéressent et le réécrivent pour le transmettre à leur bot. Une solution possible du point de vue du développeur de jeu consiste à utiliser un obfuscateur pour rendre le code assembleur du jeu moins lisible, mais ils ne sont généralement pas bons pour la performance et il existe des outils permettant à de nombreux obfuscateurs d'inverser leur travail.

  • Et puis il y a le netcode. Dans un jeu en ligne, le serveur envoie les propriétés et les positions de tous les objets du jeu via le réseau. Le flux de données réseau entre le serveur et le client peut être intercepté et analysé. Wirehark est un outil populaire pour ce faire .. Lorsque le développeur a désossé le netcode, il peut écrire un bot qui intercepte le trafic réseau comme le fait Wireshark et utilise les informations pour prendre sa décision. Lorsque le développeur est plus motivé, il peut même développer à partir de zéro un client de jeu complet qui implémente le protocole réseau et joue au jeu sans même avoir de sortie graphique. Ces bots sont très populaires auprès des producteurs d’or car, sans la sortie graphique, le client est généralement beaucoup plus convivial, ce qui signifie qu’il peut en exécuter beaucoup à la fois sur un petit serveur.


1: Puisque vous mentionnez WoW, il convient de souligner que le programme de mise en bouteille précoce et notoire de WoWGlider utilisait l'accès direct à la mémoire. Blizzard avait un sous-programme appelé Warden conçu pour détecter et empêcher les programmes extérieurs d’accéder à l’état de jeu interne de WoW. Le programme de bot ayant contourné cette protection et lu la mémoire sans autorisation, le procès de 2006 MDY v Blizzard a été décidé en faveur de Blizzard au motif que le fabricant de bot encourageait et permettait à ses utilisateurs de commettre une violation du droit d'auteur et une violation du DMCA .


Les commentaires ne sont pas pour une discussion prolongée; cette conversation a été déplacée pour discuter .
Josh

18

Les bots sont des joueurs. Ils lisent simplement les positions du joueur / monstre sur le serveur, comme tous les autres joueurs, et utilisent ces valeurs, combinées à un simple script d'intelligence artificielle, pour effectuer des actions dans le jeu en simulant un programme et des clics de souris. Si les robots disposaient d’un algorithme pour détecter quel monstre se trouvait à l’écran et interagir avec lui, ce serait un logiciel assez impressionnant d’une valeur de plusieurs millions. C'est fondamentalement l'IA pour les robots.


2
Il est plus simple d'effectuer une vérification d'occlusion et de lancer des rayons pour vérifier si le bot aurait vu le monstre, puis utiliser l'état d'animation pour vérifier ce que fait le monstre.
Monstre à cliquet

Pour ce faire, vous devez procéder à une ingénierie inverse du jeu, mettre en œuvre le lancer des rayons et lire l'état de l'animation du monstre, ce qui nécessiterait l'injection de code et la modification du fichier .exe. En quoi cela est-il plus simple que de lire les paquets réseau que vous recevez du serveur (en utilisant wirehark comme suggéré par Phillip) et de simplement avoir un script d' intelligence artificielle pour simuler des actions clavier / souris, en fonction des paquets réseau?
dimitris93

2
Je supposais un bot "opposant à l'IA" plutôt qu'un bot client modifié.
Monstre à cliquet

3
@ ratchetfreak Oh, maintenant c'est logique. La référence de WoW dans la question implique en réalité que les "robots" sont essentiellement des producteurs d’or, pas des opposants à l’IA.
dimitris93

7

Phillip a déjà donné un bon aperçu du fonctionnement de la plupart des bots, mais je voulais juste expliquer un peu plus en détail les choses, car j'ai une petite expérience personnelle de développement sur ou pour tous les types de bots qu'il a couverts.

Dans Runescape, il existait un projet volumineux (RSBot) qui copiait le contenu de la mémoire du client Runescape dans sa mémoire locale, où il pouvait alors visualiser l’ensemble du statut du jeu sans risque que le client ne s’incline. Il a fallu un peu d’ingénierie inverse pour déterminer où en mémoire chercher afin de trouver les pointeurs vers les données, mais une fois cela fait, ils ont exposé une API pour tirer parti de ces informations. Il saurait exactement où se trouve le monde en obtenant les coordonnées d'un objet, puis en les transformant à l'aide de la matrice de transformation de la caméra pour obtenir la position à l'écran. Les masques de frappe étant également lisibles, il était donc trivial de déterminer avec précision la plage dans laquelle déplacer la souris pour obtenir le résultat souhaité.

Le bot a fourni de nombreuses informations de débogage, telles que des annotations indiquant au développeur quelles coordonnées se trouvaient à quel emplacement, quel identifiant cet objet avait, quel identifiant appartenait à un élément donné, etc. Ces informations pourraient ensuite être utilisées pour créer des robots. Le processus de création des scripts de bot était en réalité assez simple. La structure fournissait de nombreuses fonctions d’utilité, telles que move_to(world_coordinates)ou mouse_move(x,y)qui effectueraient les actions spécifiées d’une manière assez crédible (déplacer la souris le long d’une spline aléatoire, déplacer de manière répétée via la mini-carte et l’écran, etc.).

Également dans Runescape, vous avez la possibilité de réduire considérablement la qualité des graphiques. Il était en fait assez facile de créer certains types de robots en filmant l'écran et en appliquant certains concepts de base de la vision par ordinateur afin de construire un modèle du monde. J'ai créé à la fois un bot de malédiction et un bot de fusion utilisant cette technique, qui ont tous deux très bien fonctionné. Il faudrait simplement prendre le cadre, augmenter autant que possible la saturation, puis essayer d’en extraire des motifs lui permettant de générer une carte de probabilité pour les zones de clic.

Dans le cas du bot de la malédiction, la cible était un démon mineur, ce qui est simplement une énorme chose rouge, ce qui est trivial à trouver. Dans le cas du fondeur, il chercherait un petit trapèze orange entouré de gris et ce serait la fournaise. Il tenterait également de trouver une grande forme de «L» gris clair, qui serait le guichet de la banque. Cela vient d'être fait avec la réduction d'échelle et l'heuristique de base. Il pourrait également s'orienter à l'aide de la boussole pratique située à côté de la mini-carte, ce qui permettrait d'orienter la caméra dans une position plus fiable pour rechercher les objets cibles.

Dans divers jeux Nexon, les serveurs font très confiance aux clients. Dans Maplestory, j'ai abusé de cela en modifiant les cartes pour éliminer les dangers ou pour ajouter des distorsions afin qu'un bot n'ait pas besoin d'être aussi sophistiqué. Je surveillerais également le trafic entrant et sortant du serveur afin de construire un modèle du monde qui pourrait ensuite être utilisé pour trouver et tuer rapidement des monstres.

Une fois que j'ai réalisé que je ne jouais plus réellement dans les MMO et que je les automatisais, j'ai décidé d'arrêter complètement de jouer. Si je n'avais pas aussi peur de m'exposer légalement, j'aurais probablement pu faire un massacre en vendant des robots MMO, mais je ne voulais vraiment pas être poursuivi en justice. C'est pourquoi je passe mon temps à faire de la programmation réelle ces jours-ci!


Amen à ce dernier paragraphe. J'ai trouvé dans la programmation 1) en jouant à WoW 2) en bottant WoW 3) en commençant à écrire mon propre bot pour WoW. Les connaissances en programmation que j'ai acquises en seulement 2 ans ont été plus précieuses que tout ce que j'ai appris en étudiant (enfin, en programmation "au moins" pratique).
Sebastian Graf

2

La réponse de Phillip est excellente, mais une brève note sur le motif Modèle / Vue / Contrôleur , ou MVC en abrégé.

Votre écran fait partie de la "vue", qui présente les données du "modèle", qui est le vrai état du jeu si vous voulez. Les robots, et votre personnage, tous "existent" (dans un sens) dans le modèle. Imaginez si vous débranchiez votre écran - le jeu continuerait même si la vue avait disparu.

Dans un jeu en réseau, le concept de "modèle" est un peu compliqué, car vous avez en fait beaucoup de modèles. Vous avez le modèle sur le serveur, puis un modèle sur chaque client, qui se met à jour lui-même en partie à cause des données qu'il reçoit du serveur. Vous pouvez penser que le "modèle" englobe le modèle du serveur et celui de votre client, ou simplement le modèle de votre client. De toute façon, c'est là que vivent les robots. Ainsi, leurs "perceptions", que nous pourrions utiliser en abrégé pour leur entrée de données et leur état, sont basées sur l'état du modèle à ce moment-là et sur l'interaction entre les différentes entités / objets au sein de ce modèle. En pratique, chaque bot peut avoir une fonction appelée "refreshState" qui s'exécute une fois par image ou autre, et qui le met à jour "


0

Ils peuvent lire les coordonnées d'un fichier ou d'un serveur, mais aussi avec un système de détection de collision de rayons. Il est courant d’utiliser des rayons allant du bot (dans ce cas) à l’extérieur. Si le rayon entre en collision avec quelque chose, il renvoie des informations au bot, par exemple s'il a détecté un joueur, un bot, un animal ou un simple mur. En effet, dans le cas du joueur et du bot, par exemple, ils ont une capsule invisible les impliquant entièrement avec des informations sur son type, par exemple (humain, bot, ...). Avec cela, ils peuvent éviter de s'écraser contre les murs et autres éléments s'ils vous suivent, par exemple.

Vous pouvez voir la partie Détection de collision de cette page


Cela nécessiterait cependant que vous injectiez du code dans le jeu actuel
dimitris93

Oui bien sûr. Tout est programmé mais il est utile pour des chemins libres ou des cas comme des bots qui vous suivent, etc. Dans les jeux en 3D, AFAIK est le moyen le plus courant. Nous avons au moins étudié ceux qui ne sont pas mmorp. Peut-être wow a-t-il toutes les informations sur le serveur, mais c’est différent car c’est un gros mmorp.
Megasa3
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.