2.0 Aide [Recrutement] Cherche quelqu'un de qualifié dans le fonctionnement du jeu

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

natinusala

Membre
Sep 12, 2010
38
0
431
Salut,

Alors voilà je vous pose le contexte ; j'ai dans l'optique de créer un bot Dofus socket capable de fonctionner h24 sur un serveur dédié Linux, le but final étant de créer un sondeur d'hôtels de ventes et faire des courbes de fluctuation des prix des objets du jeu.

J'ai toutes les connaissances en programmation pour faire le bot ainsi que le front-end qui affiche les courbes, sous la forme d'un site web (qui sera à accès restreint au début).

Le souci c'est que je n'ai trouvé aucune information (ou alors très peu, ou des choses obsolètes) sur le jeu, son fonctionnement, ses protocoles, etc... je suis donc totalement paumé, et j'aimerais faire un truc plus propre qu'une espèce de machin qui parle au serveur à grands coups de "AhkE" et "Al"...

Du coup je chercherais quelqu'un qui pourrait m'épauler sur ce projet, principalement pour me guider dans le jeu... et du coup si possible des informations plus utiles et plus propres que "il faut envoyer le packet Al pour se connecter et le Ahk ensuite".

Le bot est simple, le bot devra juste être capable de bouger de map en map et de "parler" aux PNJs afin d'avoir la liste des items des HDV et leurs prix... et évidemment ne pas se faire gauler par l'anti bot.

Voilà voilà !
 

Lupus.

Membre Banni
Sep 18, 2014
186
0
81
Je te conseil Cadernis si tu veux de multiples informations dans ce domaine. :)
 

natinusala

Membre
Sep 12, 2010
38
0
431
Et bien j'avais déjà demandé quelques informations sur ce forum seulement il semblerait qu'il soit... vide ? J'ai eu quelques messages et puis plus rien :x En plus, je pense que tous ceux qui fréquentent ce forum n'ont pas besoin de moi pour faire leur bot x)
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Salut,

Déjà parler d'un anti-bot c'est pas bon. Y'en a plusieurs.

Quand j'ai développé pour BlueSheep, il y en avait 3 connu: Le RawDataMessage, le hash_function et celui dans les i18n.
Si tu veux porter ton code sous linux, j'imagine que tu le coderas en C++ ou C. Dans ce cas, sache qu'il y a un bot actuellement fonctionnel (mais qui ne propose pas les mêmes fonctions que toi) codé en C++, se nommant mufibot. Je connais personnellement les développeurs, je leurs parlerai de ton projet pour voir s'ils peuvent t'apporter des informations complémentaires.

Aussi, dans le jeu y'a pas de miracle, filtre les paquets sortant/rentrants lorsque tu fais une action et tu verras quels paquets il faut envoyer et quels paquets le serveur te renvois.

Mais si tu as vraiment un problème avec le protocole Dofus, normalement la communauté de cadernis devrait pouvoir t'aider, surtout alexandre par exemple.
 

natinusala

Membre
Sep 12, 2010
38
0
431
Salut,

Merci pour ces informations, j'avais vu le code de BlueSheep seulement comme il n'est pas à jour je n'ai pas pu le tester et voir comment il fonctionnait.

J'ai compris le principe des paquets et de comment dialoguer avec le serveur, mais j'ai tellement eu peu d'infos que je n'ai même pas réussi à lire l'id d'un packet en MITM ._.

Est-ce que tu penses que un script Mufibot pourrait fonctionner pour ce que je souhaiterais faire ?
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Si tu sais ré-utiliser le Lua dans ton code C++, oui.

Du coup, les stream pour lire et écrire sont de type BigEndian (BigEndianWriter et BigEndianReader). Cherche dans les sources de BS pour trouver comment ça fonctionne.

Si tu leurs poses des questions précises, la plupart pourront te répondre, mais une question vague comme celle du premier poste, personne n'aura envie de développer.

PS: Normalement, toutes les réponses à tes questions peuvent être récupérés dans les sources de Dofus (en flash) (sauf bien sûr "comment bypass l'anti-bot" ^^')
 

natinusala

Membre
Sep 12, 2010
38
0
431
Non, je pensais faire un script pour Mufibot et le laisser récupérer les données, mais j'ai vu la référence et Mufibot ne permet ni d'aller consulter les HDV ni de dialoguer avec l'extérieur pour récupérer les données récoltées.

Concernant les classes de BlueSheep, le souci c'est que ça utilise des classes .NET qui n'existent pas en C++ :P
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Non, je pensais faire un script pour Mufibot et le laisser récupérer les données, mais j'ai vu la référence et Mufibot ne permet ni d'aller consulter les HDV ni de dialoguer avec l'extérieur pour récupérer les données récoltées.

Concernant les classes de BlueSheep, le souci c'est que ça utilise des classes .NET qui n'existent pas en C++ :P

C'est pour ça que c'est compliqué, mais tu peux toujours refaire partiellement une classe du .NET Framework (je ne sais plus exactement lesquels, mais normalement c'est facilement réalisable)
 

natinusala

Membre
Sep 12, 2010
38
0
431
Il doit y avoir moyen de trouver des bibliothèques permettant de le faire au pire, c'est simplement lire et écrire des données depuis/vers un tableau de bytes ^^ Mais j'ai trouvé des classes utilisant des pointeurs et une boucle for donc il doit y avoir moyen de la réécrire proprement en C++

edit : mais comme je le disais le souci n'est pas d'ouvrir le dialogue avec le serveur mais bien de savoir quoi lui dire ;)
 
Last edited:

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Pour répondre au serveur tu dois le faire de la même façon que Dofus le fait. Tu dois traduire les paquets dont tu as besoin et les renvoyés (en POO on ferait donc une classe représentant le paquet et on enverrait la classe avec les paramètres qu'il faut au serveur)
 

natinusala

Membre
Sep 12, 2010
38
0
431
J'ai commencé par faire un truc simple en MITM en C# avec Pcap.net (je découvre le langage :3), j'ai repris la classe BigEndianReader de BlueSheep et j'arrive à lire l'ID des messages \o/

Maintenant faut que je regarde de quoi sont constitués les messages des HDV et que j'en fasse une classe et un système qui lit l'id du message et qui crée le bon objet. Bon, c'est pas un bot socket qui tourne H24 mais c'est un bon début, non ? :D

edit : ok alors, je n'arrive pas à identifier le message qui donne les prix ; j'ai bien vu ExchangeBidPriceMessage et ExchangeBidHousePriceMessage seulement aucun d'entre eux ne transite entre le client et le serveur quand on consulte les prix aux HDV. J'ai donc pensé à ExchangeBidHouseListMessage mais je n'arrive pas à trouver la liste actuelle, le seul attribut de la classe de ce message est un entier "id"... wut ?
 
Last edited:

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
C'est un très bon début !

Je te conseille de rester sur du .NET pour apprendre et d'apporter une traduction en C++ au fur et à mesure que les fonctionnalités fonctionnent. Essaye aussi de comprendre la classe BER et BEW, ça t'aidera beaucoup pour savoir comment fonctionne le protocole Dofus (plus en détail).
 

natinusala

Membre
Sep 12, 2010
38
0
431
J'ai toujours une interrogation sur les données des messages, elles sont planquées où ? Dans ma tête, la classe était constituée de la base des messages (ID, méthodes pour écrire et lire depuis le reader/writer), et des attributs qui constituent les données du message.

Quand on le lit depuis le reader, on prend chaque attribut un par un et on fait machin = reader.ReadTruc(); dans l'ordre spécifique au message. Mais là, quand je regarde les attributs je ne vois rien à part des fois un entier genericId... où sont planquées les données ?

Aussi, est-ce que tu sais si je regarde les bons messages, c'est bien les ExchangeBidHouseXXX qui s'occupent des HDV ?
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Pour savoir si tu regarde le bon message, il faut sniffer les messages sur Dofus.

Pour ça, il suffit d'activer la génération des rapports d'erreur (Lance le client Dofus, puis va dans les paramètre, onglet "support" -> Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!). Tu te connectes, tu fais des actions, et lorsque tu veux récupérer les logs, tu appuies sur "F11". ça va te sauvegarder ça comme un fichier HTML que tu devras ouvrir.

Remarque: Tu dois être connecté sur un personnage pour pouvoir générer le rapport.

Pour une simple connexion au serveur (serveur + personnage), voici la console SOS du rapport que j'ai généré: Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris! (txt) (la connexion se fait à partir du message HelloConnectMessage)

Remarque: je parle de la seconde connexion (la seconde obtention de HelloConnectMessage)
Remarque n°2: tu peux ne pas avoir la même chose que moi étant donné que mon client est modifié.
Remarque n°3: d'ailleurs, en dessous de ce message, tu peux déjà voir le premier anti-bot.

Il te faudra donc t'aider de ça pour savoir quels paquets envoyés et recevoir. Le plus dur là dedans c'est de se situer par rapport aux actions que tu as faites.
 

natinusala

Membre
Sep 12, 2010
38
0
431
Merci pour le tuyau, j'ai vu que c'était bien le message ExchangeBidPriceMessage :) Par contre, comment je lis les données ? Quand je regarde la fonction qui le lit dans le code du jeu (et de BiM), je ne vois que ça : this.id = input.readVarUhShort();

A aucun endroit je ne vois la lecture du "vrai" contenu du message, c'est à dire le prix de l'item :x

En fait si, y'a le averagePrice qui se ballade
 
Last edited:

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Chaque messages a ces propriétés, donc il suffit de savoir quoi prendre en analysant le comportement du paquet.
 

natinusala

Membre
Sep 12, 2010
38
0
431
Oui oui, je regardais le mauvais depuis le début, en fait c'est ExchangeTypesItemsExchangerDescriptionForUserMessage qui contient les données (tu parles d'un nom à rallonge).

Je suis sur la bonne voie pour transcrire le deserialize du message dans mon petit truc en C#, il y a juste les ObjectEffects qui m'e****dent parce qu'il y en a une dizaine et que je dois tous pouvoir les lire (ou au moins connaître leur taille) si je ne veux pas foirer la lecture en lisant trop/pas assez de données
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Normalement tu peux initialisé le buffer en récupérant la length du message (du moins, c'est comme ça qu'on fait habituellement en programmation réseau ^^)
 

natinusala

Membre
Sep 12, 2010
38
0
431
Oui mais ce que je veux dire c'est que selon le type d'Effect qu'on a on devra pas lire la même chose ^^

Sinon, une question me brûle les lèvres : un datagramme (donc un paquet récupéré via le MITM) = un message, non ? (j'ai peur que la réponse soit non)
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Vu que tous les paquets sont des messages, oui ^^
 

natinusala

Membre
Sep 12, 2010
38
0
431
Parce que je reçois de temps en temps des messages dont l'ID est -1, c'est un fail de mon programme ou c'est normal ?
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Il me semble que c'est le BasicNoOperationMessage, mais je ne suis pas sûr. Pour vérifier, utilise le client et attend 5-10 min pour faire un rapport (évite les maps où les gens viennent et se déplace, ça te fera des messages en moins)
 

Misuki

Git Wizard en freelance
V
Ancien staff
Jun 15, 2012
2,303
66
954
Le message n'est pas répertorié là dedans, comme j't'ai dit check avec le client
 
Status
Not open for further replies.