web-dev-qa-db-fra.com

Bots de jeux vidéo?

Quelque chose que je me suis toujours demandé, d'autant plus que cela m'a inspiré à commencer à programmer quand j'étais enfant, c'était comment fonctionnent les robots de jeux vidéo? Je suis sûr qu'il existe de nombreuses méthodes différentes, mais qu'en est-il de l'automatisation des MMORPG? Ou même des bots de type FPS?

Je parle de robots d'automatisation créés par les joueurs.

30
cam

Pour `` botter '' un jeu, vous devez être capable de faire deux choses par programmation: détecter ce qui se passe dans le jeu et fournir des informations au jeu.

Détecter ce qui se passe dans le jeu a tendance à être le plus difficile des deux. Voici quelques méthodes pour ce faire:

  • Screen-Scraping Cette technique capture l'image à l'écran et l'analyse, en recherchant des choses comme les ennemis, le statut du joueur, le pouvoir -ups, messages de jeu, horloges, etc. Cela a tendance à être une méthode particulièrement difficile. OCR techniques peuvent être utilisées pour traiter du texte, mais si le texte est écrit au-dessus du monde du jeu (au lieu d'un élément d'interface utilisateur avec un arrière-plan uni) , le contexte en constante évolution peut rendre difficile l'obtention de résultats précis et cohérents. Trouver des objets non textuels à l'écran peut être encore plus difficile, en particulier dans les mondes 3D, en raison des nombreuses positions et orientations différentes dans lesquelles un seul objet peut éventuellement exister.
  • Indices audio Dans certains jeux, les actions et les événements sont accompagnés d'effets sonores uniques. Il est possible de détecter ces événements en surveillant la sortie audio du jeu et en la comparant à un enregistrement de l'effet sonore associé. Certains jeux permettent au joueur de fournir ses propres effets sonores pour les événements, ce qui permet d'utiliser des effets sonores conçus pour être faciles à écouter et à filtrer.
  • Surveillance de la mémoire Si le fonctionnement interne du jeu est bien compris, alors vous pouvez surveiller l'état d'un jeu en inspectant l'espace mémoire du jeu. Certains outils de triche pour les systèmes de console (tels que Game Genie ) utilisent cette méthode. En détectant la mémoire mise à jour du jeu, il est possible de détecter ce que fait le jeu. Certains jeux randomisent les emplacements mémoire qu'ils utilisent à chaque fois qu'ils sont lancés pour tenter de déjouer cette vulnérabilité.
  • Analyse des paquets Avec les pilotes appropriés, vous pouvez intercepter les paquets de données du jeu au fur et à mesure qu'ils sont envoyés ou récupérés sur votre carte réseau (pour les jeux joués en ligne). Analyse de ces paquets peut révéler ce que votre client de jeu communique au serveur, qui tourne généralement autour des actions du joueur/ennemi.
  • Script de jeu Certains jeux ont une interface de script intégrée. Si elle est disponible, c'est généralement la méthode la plus simple car c'est quelque chose que le logiciel de jeu est conçu pour faire (les méthodes précédentes compteraient généralement comme des "hacks"). Certains scripts doivent être exécutés dans le jeu (via une console ou via un système complémentaire) et certains peuvent être exécutés par des programmes externes qui communiquent via le jeu via une API publiée.

Générer des événements d'entrée dans le jeu est généralement la tâche la plus facile. Certaines méthodes comprennent:

  • Mémoire "Poking" Semblable à la section de surveillance de la mémoire ci-dessus, la mémoire poking est l'acte d'écrire des données directement dans l'espace mémoire du jeu. C'est la méthode utilisée par le Game Genie pour appliquer ses codes de triche. Compte tenu de la complexité des jeux modernes, c'est une tâche très difficile et peut potentiellement planter tout le jeu.
  • Emulation d'entrée De "faux" signaux de clavier ou de souris peuvent être générés au lieu d'une interaction humaine directe. Cela peut être fait dans un logiciel en utilisant des outils tels que AutoIt . Des hacks matériels peuvent également être utilisés, tels que des périphériques qui se connectent au port USB ou PS/2 de l'ordinateur et qui semblent au système être un clavier, mais génèrent à la place de faux événements de pression de touche basés sur les signaux reçus de l'ordinateur (par exemple, via un port série). Ces méthodes peuvent être plus difficiles à détecter pour les jeux.
  • Game Scripting Comme mentionné ci-dessus, certains jeux fournissent des méthodes intégrées pour le contrôler par programme, et tirer parti de ces outils est généralement le plus simple (mais peut-être pas la technique la plus puissante).

Notez que l'exécution d'un "bot" dans un jeu est généralement une violation des conditions d'utilisation du jeu et peut vous faire suspendre, bannir ou pire. Dans certaines juridictions, cela peut entraîner des sanctions pénales. C'est un autre avantage pour l'utilisation des capacités de script intégrées d'un jeu; s'il est conçu pour faire partie du logiciel de jeu, l'éditeur du jeu ne vous interdira probablement pas de l'utiliser.

49
bta

Une fois, j'ai écrit un simple MMORPG bot par moi-même. J'ai utilisé AutoHotkey .

  • Il fournit de nombreuses méthodes pour simuler les entrées de l'utilisateur - l'une fonctionnera. Il est fastidieux d'en programmer un qui fonctionne en C++ par soi-même (ou regardez dans la source d'AutoHotkey).
  • Il peut rechercher directement sur l'écran des motifs de pixels, même des écrans de jeu (DirectX)

J'ai donc cherché à l'écran le nom d'un ennemi (stocké sous forme d'image avec la police du jeu) et le script clique quelques pixels en dessous pour attaquer. Il suit également la barre de santé et les pots si elle est trop basse.

Très trival. Mais je connais un bot WoW qui utilise également AutoHotkey. Et je voir beaucoup d'autres personnes avaient la même idée (la mienne n'était pas pour WoW, mais probablement illégale aussi).

Techniques plus avancées ne capture pas l'écran mais directement lire la mémoire du je . Vous devez faire beaucoup d'ingénierie inverse pour que cela fonctionne. Et cela cesse de fonctionner lorsque le jeu est mis à jour.

12
Meinersbur

Comment une personne va-t-elle vivre au jour le jour?

C'est en quelque sorte le problème que résolvent les IA dans les jeux.

Que voulez-vous que votre entité fasse? Codez votre entité pour ce faire. Si vous voulez que votre monstre poursuive l'avatar du joueur, le monstre doit juste faire face à l'avatar, puis se diriger vers lui. Lorsque ce monstre se trouve à une distance appropriée, il peut choisir de mordre l'avatar du joueur, et ce choix peut être aussi simple que AmICloseEnough(monster, player); ou plus complexe ou même aléatoire.

Les robots dans un FPS sont difficiles à faire car il est facile de les rendre parfaits mais pas si faciles de les rendre amusants. Par exemple. ils savent toujours exactement où se trouve le joueur (gPlayer.GetPosition()) donc il est facile de tirer sur le joueur dans la tête à chaque fois. Il faut un peu d '"art" pour faire bouger le robot comme le ferait un humain.

5
dash-tom-bang

Cela s'appelle AI (intelligence artificielle) et n'est vraiment pas si difficile à reproduire, un ensemble de règles et de commandes dans le langage de programmation de votre jeu fera l'affaire. Par exemple, un robot FPS fonctionnerait en obtenant les coordonnées du corps de votre joueur et en réglant le pistolet de votre robot ennemi pour viser cette coordonnée et commencer à tirer à une certaine distance.

0
BRampersad

Pour les bots de style FPS, vous pouvez jeter un œil au kit de développement Unreal. Si je comprends bien, cela contient une grande partie du code source du jeu.

http://udn.epicgames.com/Three/DevelopmentKitHome.html

0
dash-tom-bang

bta a donné une très bonne réponse. Je voulais juste ajouter en disant que les différentes méthodes sont suspectes par différents moyens de détection par la société de jeux. Le piratage du client de jeu via la surveillance de la mémoire ou l'analyse de paquets est généralement plus facilement détectable. Je ne le recommande généralement pas car vous pouvez vous faire prendre très facilement.

Le grattage d'écran utilisé avec l'émulation d'entrée est généralement le moyen le plus sûr de botter un jeu et de ne pas se faire prendre. Beaucoup de gens (moi y compris) le font depuis des années sans problème.

De plus, pour ajouter une étape supplémentaire entre la détection de ce qui se passe dans le jeu et la fourniture d'entrée, certains jeux nécessitent un calcul approfondi avant de pouvoir décider du type d'entrée à fournir au jeu. Par exemple, il y avait un jeu où je devais calculer le nombre de navires à envoyer pour attaquer l'ennemi, et cela était basé sur le nombre de navires que j'avais, le type de navires, et qui et quel type d'ennemi c'était. Le calcul est généralement la partie "facile" puisque vous pouvez le faire généralement dans presque tous les langages de programmation.

0
Ryan