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!