Salut à tous,
Qui suis-je ?
Je me présente sous le pseudonyme Xiferax depuis bientôt deux ans sur ce forum (avant la refonte donc). C'est un pseudonyme que
j'utilise exclusivement pour présenter mes projets de bots D. Afin que l'on évite de me retracer trop facilement. Je suis un joueur de D.
depuis sa création (vers 2004, je garde bien précieusement mon compte sur Jiva :D). Mais je joue de façon ponctuelle (un mois par ci, un
mois par là...), en conséquence j'ai jamais atteint un niveau 100 ou 200 avec l'un de mes persos (je préfère jouer pour le plaisir que
parce que je suis drogué à ce jeu comme certains :D ).
Bref, en réalité j'ai entre 20 et 25 ans (plus proche des 25). Je suis actuellement en école d'ingénieur informatique/réseau. Tout ça
peut paraître futile comme infos au premier abord, mais c'est important pour la suite :)
Dans la vie, je suis très porté sur le développement informatique (en particulier dans le web via Symfony). Je suis un gros utilisateur de Linux (Gentoo/Debian/ArchLinux), et j'aime les challenges comme celui de réaliser un bot. Je suis un contributeur à mon niveau de différents projets open-source (notamment pour des bundle Symfony pour ceux qui connaissent). Mon niveau en informatique et en dév' est pas mauvais.
Mes spécialités sont surtout le Java, le PHP et l'AS3/Flex/Adobe Air.
Comment me suis-je retrouvé sur Cadernis ?
Comme je l'évoquais, je connais Cadernis depuis près de deux ans maintenant. Je suis loin d'être le plus ancien, ni le plus actif, loin de là.
À l'époque je cherchais à réaliser un bot D (étonnant !). Là où je me suis démarqué, mais je ne pense que ça n'a marqué personne,
c'est que j'avais la ferme intention de réaliser un bot D. en PHP. PHP, le langage que vous connaissez sûrement parce qu'il est très
présent sur le web pour réaliser des sites Internet. Mais ce n'est là qu'un usage de PHP, il est possible de faire bien d'autres choses
en PHP, comme un bot (D. ou autre).
Bref, je m'étais présenter comme un gars qui aime le challenge, qui ne veut pas bêtement faire un bot en AutoIt tout moche, sans rien
comprendre. Je voulais faire un bot Socket (je fais des études en info, ça simplifie pas mal la tâche) en PHP, parce que j'aime le
challenge. Si j'écris un bot, c'est plus pour le challenge que pour l'utiliser (malgré tout je pense avoir quelques idées innovantes en
terme de bots D.). Par ailleurs, je m'étais également présenté comme un mec qui n'aime pas trop les gens qui utilisent des bots pour
"farmer" bêtement (et je ne les aime toujours pas).
Cela dit, sans avoir trop persévéré, j'ai compris que PHP n'était peut-être pas le langage optimal pour écrire un bot (D. en l'occurence)
depuis zéro. De part mes études, j'ai été ammené à travailler pas mal avec Java, et j'ai revu ma conception de mon bot.
Mon projet
Donc l'idée d'un bot entièrement en PHP a été abandonnée, parce que : pas mal de problème d'architecture de code, et autres joyeusetés
liées à PHP. Néanmoins, je n'abandonne pas l'idée qu'une partie de mon bot puisse être faite en PHP. C'est tout l'intérêt des Sockets
d'ailleurs, c'est que c'est indépendant du langage (d'ailleurs c'est même pas comparable).
Cette fois-ci, j'ai décidé d'opter pour un bot avec une base en Java, essentiellement parce que c'est le seul langage que je maîtrise
correctement (threads/concurrence) avec PHP. Mais aussi parce qu'il me permet de garder un contrôle sur ce qui est fait de mon bot
(j'y reviendrais plus tard).
J'appelle ça bot, mais il s'agit plus d'un proxy. Admettons que je dispose de plusieurs clients D. non-officiels qui vont se connecter
à mon proxy, le proxy quant à lui se connectera au vrai serveur de jeu. Le but sera de recopier tout ce qui est envoyé du client vers
le proxy, vers le vrai serveur. En gros, le proxy c'est un entonnoir qui prend les données de tous les bots que je lance, et qui
va balancer ça au vrai serveur de jeu.
Comme je le disais, si cet "entonnoir"/proxy est en java, ça n'empêche pas que les bots puissent être réalisés dans un autre langage
qui supporte les sockets (PHP, Python, C, C#, C++, etc.).
Pourquoi un Proxy ?
Le vrai challenge d'un bot D. c'est de réimplémenter le protocole du jeu pour que tout fonctionne bien, et que le bot ne se fasse
pas jetter par le serveur + ban, parce qu'il aura envoyé de la merde. C'est cette partie qui est la plus chiante. Une fois qu'elle
est faite, c'est limite trivial (parce que le reste c'est de l'algorithmique haut niveau). Je vois deux avantage à ce proxy :
- Le premier, qui me fera qualifier d'égoïste (et pourtant je prône l'Open Source à fond), c'est de pouvoir garder un contrôle sur
ce qu'on fait de mon bot, et d'y imposer des restrictions pour pas faire n'importe quoi (éviter la redistribution abusive aux kikoolol),
empêcher d'avoir X instances de bots lancées, pour pas pourrir le serveur de jeu, et l'expérience de jeu.
- Le second avantage d'un proxy, c'est qu'il y a deux tunnels de communications. L'un du proxy vers le jeu qui se doit de respecter les
conventions du protocole du jeu officiel, l'autre qui est entre un bot est le proxy. Si le proxy fait tout le travail de conformisation
du protocole, on peut très bien utiliser un autre protocole de communication entre le bot et le proxy. Si le protocole D2 est-ce qu'il
est, c'est sûrement lié à des optimisations et de désengorgement du réseau. Mais si l'on voit tellement de bot AutoIt et si peu de bot
Socket, c'est parce que le protocole D. est pas super simple à prendre en main pour un novice.
En gros mon idée :
Protocole simple________________Protocole D2
Bot >--------------------< Proxy local >-------------------< Serveur de jeu
Et pourquoi en Java le Proxy ?
Comme je le disais, je veux garder le contrôle de ce qui est fait sur mon projet. Je ne souhaite pas pourrir encore plus le jeu qu'il ne
l'est déjà. Tricher, okay, mais tricher intelligement. Proposer aux autres de tricher okay, mais selon mes perspectives.
Si j'avais fait ce proxy en PHP (pas sûr que ça eut été possible déjà, j'aurais sûrement fait mon système autrement), j'aurais dû
divulguer les sources PHP, et n'importe qui en bidouillant aurait pu arriver à détourner le code originel.
Java, c'est déjà un langage "compilé" (bon c'est du byte-code, mais c'est pas à la portée de n'importe qui non plus). Et celui qui
pourra détourner les protections du proxy en analysant le byte code (qu'il aura extrait du jar), il n'aura pas besoin de moi pour
créer un bot pour faire ce qu'il veut puisqu'il a déjà les compétences pour faire du reverse engineering sur du code.
Encore un bot ?
Oui encore un bot, j'imagine qu'il en existe plusieurs, je ne les ai jamais testé, mais je me méfie en général. Les bots sont en général
des nids à emmerde incommensurables (sauf les exceptions, d'ailleurs deux trois personnes sur ce forum semblent avoir fait des bots
honnêtes qui n'essaient pas de voler les user/password par exemple).
Mais j'ai plusieurs idées d'optimisation. Notamment un système de référencement des items en HdV dans une BDD commune de tous les
utilisateurs de mon futur Proxy, pour ainsi voir ou faire la meilleure affaire sur un item sans pour autant se déplacer dans tous les
HdV (c'est donc mettre le proxy au service de la communauté qui l'utilise). "Mais si personne utilise ton bot, comment tu peux faire
marcher ton truc ?" C'est simple, je pourrais très bien créer une instance de bot, et lui ordonner de parcourir tous les HdV en boucle
pour maintenir une base à jour des items. Largement possible techniquement (le vrai challenge c'est l'implémentation du bot).
Mais pour résumer, j'ai en tête l'idée d'une communauté utilisant mon proxy, pour faciliter la vie du joueur (je parle pas de farming).
J'anticipe les questions : "Ok, donc là tu propose un bot au service de la communauté, mais nous on a aucun intérêt à faire tourner ton
bot ? Visiblement on pourra profiter de ce que tu nous propose sans faire tourner ton bot."
Et bien c'est là que vous vous trompez. La limite c'est l'imagination (et la capacité de calcul d'un CPU aussi), mais je suis sûr qu'il
vous est déjà arrivé de faire tourner deux comptes différents, pour avoir un heal et un tank par exemple. Ça implique que vous avez
jusqu'à 8 joueurs dans une même équipe, et donc autant de fenêtres Dofus (sauf que votre PC il rame à mort). Si je vous dit maintenant
que mon proxy est mes bots n'auront pas d'interface graphique (et ne consommeront rien en CPU/RAM), et qu'il sera possible de contrôler
ces bots en leur envoyant un MP depuis la fenêtre D. de votre compte principal (/mp playerXXX piege_sournois devant_toi, etc). Si
je vous dit qu'il sera possible de mettre en place des mécanismes dans lesquels les 7 bots de votre team suivront automatique votre
joueur principal que vous contrôlerez depuis votre jeu officiel. Si je vous dit que vous pourriez pré-enregistrer des stratégies
d'attaque et de défense dans vos bots...
Bien sûr ce ne sont que des idées en vrac.
C'est beau tout ça, mais ça en est où ?
Tout reste à faire. Oui je vous vend du rêve (j'essaie en tout cas) mais rien n'est codé. Mais le code n'est pas un problème en soit,
comme je le disais au début, je suis en école d'ingénieurs informatique et réseau. Du java, j'en bouffe 8h par jour en cours, du
réseau aussi. Et ce depuis près de deux ans.
Par ailleurs, ma formation est en alternance, ce qui fait que je travaille aussi 50% du temps en entreprise. Pure coïncidence, dans
l'entreprise où je travaille, je travaille sur le framework Air de Adobe (qui est utilisé par D2).
Il ne me reste qu'à trouver le temps entre les cours, pour réaliser tout ça.
Questions ?
Si vous avez des questions, n'hésitez pas soit sur ce thread, soit par MP. Mais c'est quand même plus convivial sur ce thread ;)
Sur ce, bonne soirée !
PS : J'aime pas les couleurs, j'aime bien quand les messages sont sobres, alors je n'en ai pas mis.
PS2 : Je n'ai pas précisé, il s'agit simplement d'une présentation. Je n'ai pas la prétention de vouloir accéder à la partie privée ou être rédacteur, j'ai toutes les données en mains pour coder mon Proxy actuellement. Je reviendrais postuler pour la partie privée quand mon bot sera disponible ;)