2.0 Gestion des combats

Inscrit
1 Juin 2020
Messages
6
Reactions
1
#1
Bonjour à tous.

Je suis conscient que ce post est mon premier message et que je pourrais passer pour un énorme leech donc je vais d'abord essayer de me présenter bien que je doute que ce soit exactement l'endroit ( Si vous vous en fichez direction > 3eme paragraphe et si vous avez ENCORE moins de temps > 4eme paragraphe)

Je suis étudiant en médecine, absolument rien a voir avec l'informatique mais j'en ai toujours été passioné. Via le Site du Zer0 a l'époque j'ai appris pas mal de bases dans pas mal de langages et l'émulation et le cheat dans beaucoup de jeux vidéos, dont Dofus ont été des moteurs pour en apprendre toujours plus. Mes connaissances sont maigres et je m'en rend particulièrement compte après avoir trainé un petit peu sur le forum .. Quand on arrive a un stade ou on ne comprend meme pas les tutoriels... C'est dur x) Bref , je voulais faire ce petit paragraphe avant de poser ma question que voici !

Voila mon problème. Je suis actuellement en train de coder un petit bot pixel pour Dofus. Je me suis dis que je le ferais avec Actionaz 3.8 pour découvrir un petit peu le logiciel mais aussi et SURTOUT parce que le soft peut incorporer du Javascript ( que je voulais découvrir) . Jusqu'ici tout se passe bien , mais le problème c'est que je ne vois ABSOLUMENT pas comment gérer les combats ... A quelle distance le mob est de moi ? Est ce que j'ai la ligne de vue ? Comment faire mon personnage se déplacer ? et toutes ces problématiques qu'on connait qui si je devais affronter un mob au CaC serait facile mais l'éventualité que le mob soit fuyard existe et je peux pas simplement rester sur place et spam un sort sur la timeline et espérer que ça se passe bien. De ce fait je m'étais dis que j'allais apprendre ce dont j'entends parler partout : la gestion de paquets. Le fait est que je suis archi nul en réseau ( jamais fais de tuto ou quoi la dessus, j'ai que d'infimes bases des concepts) et j'arrive meme pas a comprendre précisément les tutoriels ( qui parlent de plein de termes techniques et la seule chose que je sais faire, c'est convertir de l'hexa en décimal et en binaire).

DE CE FAIT voila mes interrogations :
1 - Pensez vous qu'il est possible simplement en détection d'images d'avoir une gestion de combat correcte ou meme si ça gère pas les lignes de vue, au moins le personnage s'approche du mob et essaye de le taper ? (J'ai passé plusieurs heures a cogiter déjà mais j'arrive pas a trouver quelque chose qui puisse etre ne serait ce théoriquement efficace )

2- Existerait t'il je nsais pas un outil, un pluggin ou n'importe quel software externe ( hormi les bots complets qu'on connait ofc ) qui puisse me permettre de mettre dans des variables des informations du combat afin que je puisse ensuite moi meme développer un algorithme pour les combats ?


Merci d'avance pour vos futures réponses et je m'excuse si ce post a été trop long.
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
1 916
Reactions
41
#2
Bonsoir,

Honnêtement, personne ne te recommandera d'utiliser Actionaz ici. Surtout en ce qui concerne les combats.
Concevoir un bot combat c'est du boulot, et en pixel ça le sera encore plus.
Si tu tiens vraiment à faire un bot qui fonctionne avec pixel search, je t'orienterai plutôt vers de l'Autoit pour débuter.
Sinon, essaye le réseau, c'est passionnant et tu en apprendra beaucoup.
Après j'ai vu des bots sympas qui font du cross MITM/PixelClick.
 
Dernière édition:
Inscrit
1 Juin 2020
Messages
6
Reactions
1
#3
J'ai cru comprendre vu les limitations que j'ai eu dans la conception du projet qu'Actionaz c'était pas le mieux .. Le problème c'est que la mon bot fait déjà pas mal de lignes . Ca fait une semaine que je bosse non stop dessus, j'ai implémenté des bibliothèques d'OCR etc , .. TOUT recommencer aspirera énormément ma motivation haha. Je pense qu'il ne me reste plus qu'a essayer de faire un crossover MITM/PixelClick et apprendre un peu le réseau. Merci beaucoup pour ton message.

Je reste cependant preneur de toute autre réponse concernant la méthode permettant d'avoir une gestion de combat correcte en pixel click :)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
1 916
Reactions
41
#4
Le Man In The Middle + Pixel Click,
C'est à mon sens, une des méthodes les plus sures,
Tu récupères toutes les infos combats via les paquets et tu peux interagir très simplement avec les touches,
Sans interférer dans la communication entre le client et le serveur, propre.

Un exemple de MITM:
https://cadernis.fr/index.php?threads/amaknacore-sniffer.2203/

Puis avec User32, tu peux gérer plusieurs fenêtres à la fois, c'est pas plus lourd et tout autant efficace dans sa gestion.
 
Inscrit
1 Juin 2020
Messages
6
Reactions
1
#5
Je vois. Merci beaucoup de tes précieux conseils. Est ce que yaurait une ressource concrète pour comprendre les fondements du réseau et l'interprétation et l'utilisation de paquets.

J'ai déjà compris ce qu'est un paquet, et qu'ils y a plusieurs types de format etc et que le principe d'un sniffer est d'identifier un paquet qui correspond a une action en jeu. J'ai vu pas mal de tutoriels dans ce sens mais j'ai vraiment énormément de mal a comprendre ce que je fais ensuite pour moi agir ne serait ce dans la théorie.

On modifie le paquet ? On en envoie un ? J'aurais aimé avoir un tutoriel global, meme pas qu'appliqué a Dofus mais quelque chose dans une vue d'ensemble pour comprendre le fonctionnement général et l'appliquer a Dofus ensuite ( Un peu un Openclassrooms de paquet quoi ..) Est ce que tu saurais par hasard ou je peux trouver ça ?

Merci encore pour ton aide !
 
Inscrit
2 Juin 2020
Messages
53
Reactions
27
#6
J'ai vu pas mal de tutoriels dans ce sens mais j'ai vraiment énormément de mal a comprendre ce que je fais ensuite pour moi agir ne serait ce dans la théorie.
Une fois que tu as compris le fonctionnement des packets et de l'header (pour récupérer le packetId) tu vas voir le code source du jeu, et tu crées une classe correspondante à ton packetId pour chaque message/action que tu souhaites utiliser.
 
Dernière édition:
Inscrit
1 Juin 2020
Messages
6
Reactions
1
#7
Une fois que tu as compris le fonctionnement des packets et de l'header (pour récupérer le packetId) tu vas voir le code source du jeu, et tu créais une classes correspondante à ton packetId pour chaque message/action que tu souhaites utiliser.

Ah ouais carrément ! Mais ca veut dire que vous décompilez le jeu pour en avoir la source, vous le modifiez et vous le recompiler ? Vous avez la source directe et vous la compilez ? Je pensais que le principe du MITM c'était justement de simplement faire interface entre le client et le serveur sans avoir a modifier quoique ce soit dans les fichiers du jeu ? ( Désolé de poser autant de questions, je suis vraiment néophyte la dedans et j'essaye juste de comprendre au moins les grands principes :) )
 
Inscrit
29 Mai 2020
Messages
6
Reactions
4
#8
Je suis néophyte aussi, mais de ce que j'avais compris, on décompile les fichiers du jeu juste pour voir quel est le protocole utilisé pour transférer les informations entre le serveur et le client. Et c'est quelque chose dont tu as besoin pour faire ton MITM, pour savoir comment décoder les paquets que tu reçois/comment encoder ceux que tu veux envoyer.
Et les classes à créer, c'est donc une classe par type de message, je pense
 
Inscrit
2 Juin 2020
Messages
53
Reactions
27
#9
Tu confonds lire et modifier, ce n'est pas parce que tu vas dé-compiler le code que tu vas l'utiliser/modifier après. Dé-compiler le code te permet de voir le code source et donc savoir exactement ce que fais le client, une fois que tu sais, tu peux reproduire le fonctionnement dans ton MITM.
 
Inscrit
1 Juin 2020
Messages
6
Reactions
1
#10
Aaah d'accord. Donc si j'ai bien compris.

1 - Je sniffe le paquet qui m'interesse qui me révèle le nom de la fonction dans le jeu qui m'interesse.
2 - Supposons que la fonction s'appelle sendMessage(); je décompile le jeu a la recherche de cette fonction
3- J'identifie les paramètres de la fonction et son fonctionnement
4- Je fais une fonction pareil sendMessage(); dans mon MITM qui a la meme structure que la fonction originelle et je l'appelle quand j'en ai besoin pour l'envoyer au serveur.

En gros le grand principe c'est ça ?
 
Inscrit
2 Juin 2020
Messages
53
Reactions
27
#11
1. Tu récupères le packetId sur les 6 premiers bits de la, tu vas dans le fichier com.ankamagames.dofus.network.MessageReceiver et tu pourras récupérer le nom de la fonction. ;)
 
Inscrit
3 Mai 2020
Messages
31
Reactions
11
#12
Aaah d'accord. Donc si j'ai bien compris.

1 - Je sniffe le paquet qui m'interesse qui me révèle le nom de la fonction dans le jeu qui m'interesse.
2 - Supposons que la fonction s'appelle sendMessage(); je décompile le jeu a la recherche de cette fonction
3- J'identifie les paramètres de la fonction et son fonctionnement
4- Je fais une fonction pareil sendMessage(); dans mon MITM qui a la meme structure que la fonction originelle et je l'appelle quand j'en ai besoin pour l'envoyer au serveur.

En gros le grand principe c'est ça ?
Dans l'idée c'est un peu ça, sauf que c'est pas la fonction sendMessage que tu va chercher à recoder par toi même. Ce que tu veux faire c'est communiquer avec le serveur de dofus (et le client aussi dans le cadre d'un MITM) via le réseau. Donc ce qui t'intéresse vraiment c'est la forme des échanges (autrement appelé le protocol).

Le protocol est basé sur ce qu'on appelle des messages. Le serveur et le client s'envoient des messages contenant des informations.

Donc ce qui va t'intéresser à reproduire dans ton bot c'est :
- l'ordre des messages
- le contenu des messages

Pour connaitre l'ordre c'est pas très compliqué, t'as juste à sniffer les échanges entre le serveur et le client. Tu va vite t'apercevoir (sans même décoder les messages) que c'est toujours la même chose. Le serveur commence par envoyer un paquet TCP de ~345octets, puis le client va répondre etc).

Pour comprendre le contenu des message c'est là que tu va avoir besoin des sources du jeu. Il faut que tu décompile le jeu pour lire comment les messages sont structurés (d'abord un header, puis par exemple le pseudo de ton perso, puis sont niveau, etc).
Tu trouvera plein de tuto ici pour comprendre comment trouver le/les fichiers qui fabrique les messages. Mais dans l'idée tous les messages commencent par un header, toujours formé de la même manière. Dans ce header tu as l'ID unique du message. Avec cette ID tu peux chercher dans les sources et donc trouver le bon fichier.

Bon une fois que t'es capable de comprendre les échanges entre serveur et client il te reste plus qu'à coder le coeur de métier de ton bot.
La première étape incontournable c'est d'arriver en jeu, ça tout le monde y passe. Pour ça tu va devoir modifier à la volé certains messages (le 42 notamment) pour y parvenir. Je te laisserai chercher pourquoi.

Une fois en jeu, c'est à toi d'envoyer les messages qui te plaise. Par exemple des messages de déplacement pour que ton perso aille où tu veux. Ou des messages pour gérer les combats, etc.


J'espère que c'est plus clair pour toi !
 
Inscrit
1 Juin 2020
Messages
6
Reactions
1
#13
Je comprends ! Merci beaucoup d'une réponse si détaillée. Je sais donc vers quoi m'orienter désormais !
 
Haut Bas