Sommaire
Karrelage est un MITM pour Dofus 2.XX en Python 3. C'est la suite de DofusHelper, avec une interface plus moderne et un système de module et de packet sniffing plus flexible. Il utilise LaBot pour capter les paquets reçus par le client. Un système de module permet de créer plusieurs handlers à leur réception (voir plus bas pour des exemples). L'interface utilise Flask, avec TailwdindCSS et Flowbite pour le style.
- Installer Python 3
- Ajouter PIP (installé avec les dernières versions de Python) à votre Path. Si vous n'avez rien touché à l'installation de python, le dossier à ajouter devrait être 'C:\Program Files\Python3XX\Scripts'.
- Installer Npcap (https://npcap.com/dist)
- Installer Git
- Exporter le git (bash, zip, ...)
- Installer les packages python
ou en lançant le fichier
pip install -r requirements.txt
install.bat
. - Lancer l'interface par la commande
ou en lançant le fichier
python app.py
launch.bat
.
Karrelage utilise un système de module pour gérer les paquets reçus. Un module est un fichier python qui contient une classe qui hérite de la classe DofusModule
. Cette classe contient une méthode handle_packet
qui parse les messages reçus par le client, et envoie le packet avec à la fonction correspondante du module (sous la forme handle_<packet_name>
).
Le menu de Karrelage permet de sélectionner quel module lancer. Actuellement, un seul module peut être lancé à la fois.
Ce module sert à filtrer les ventes d'équipements en HDV. En sélectionnant un item en HDV, ses caractéristiques sont affichées sur l'interface de Karrelage. Vous pouvez ensuite spécifier des valeurs minimums pour chaque caractéristique, et le module ne vous affichera que les ventes qui correspondent à ces valeurs. Vous pouvez aussi rapidement ajouter un exo PA/PM/PO par les boutons.
Vous pouvez ensuite bouger entre chaque vente. Le module affichera les caractéristiques de l'équipement, ainsi que le prix de vente. Un code couleur indique si la caractéristique est en jet parfait, over, exo, négative, ou moins de la valeur minimale. Une option Stats négatives
permet aussi d'afficher la distance au jet parfait.
Ce module est un outil multicompte combiné à un récap d'équipe.
- Récap d'équipe : en entrée de combat, il affiche tous les membres de l'équipe, et compatibilise tout au long du combat les dégâts infligés, soins/bouclier envoyés et vols de vie appliqués.
- Partie multicompte : détecte les personnages de l'équipe que vous jouez. A chaque début de tour d'un jour, il met au premier plan le personnage en question (pas besoin de Alt+Tab). Il est possible de mettre dans le fichier
config/multicompte.json
les noms des personnages que vous jouez, ce qui activera la fonctionnalité de clic partagé (un clic milieu de la souris envoie un clic gauche sur tous les personnages de l'équipe à la même position). Il y'a aussi une option sur chacun de vos personnages d'activer un mode "Passe tour automatique", qui au lieu d'ouvrir la fenetre en début de tour, va envoyer la toucheV
(qui pour moi fait passer le tour) même en arrière plan (mater un film pendant un PL sasa par exemple). Faites juste attention à ne pas avoir un challenge qui vous demande d'effectuer une action avant de passer, car le passage de tour est instant.
Forgemager est un module de calcul automatique du reliquat. Il suit les runes utilisées ainsi que les résultats de chaque tentative, et vous affiche le reliquat disponible à un moment donné. Vous pouvez aussi manuellement augmenter/diminuer le reliquat manuellement, si vous commencez un FM avec déjà du reliquat sur l'item par exemple.
Biscuit est un module "Quality of Life". Il est destiné à être laissé en arrière plan, si un autre module n'est pas déjà en cours d'execution. C'est ici que je mets toutes les idées de petites fonctionnalités utiles qui n'ont pas de raison d'avoir un module à part. Pour l'instant, il y'a :
- Un système de commandes, utilisables en jeu. Il suffit d'utiliser le canal de guilde
/g
ou groupe/p
, et de lancer les commander avec$command
. Par exemple,$price
suivi d'un link (Ctrl+shift) d'un item va calculer le prix de craft estimé à partir de la recette, et du prix moyen des ressources associées.$srambad
et les autres variantes de dimension va afficher la position des portails de la dimension en question. Les réponses sont envoyées dans le chat actuel. - Une détection d'archimonstre & d'avis de recherche (un son est joué en entrant sur la map), et une détection de maisons abandonnées seules (qui seront donc mises en vente au mois prochain). L'interface permet de choisir quels outils utiliser.
Treasure Hunter est un bot chasse aux trésors. Une fois celui-ci ouvert, lancez une chasse au trésor. Pour la première étape rien ne va se passer, mais une fois que allez arriver vers la position de lancement, il va aller à chaque indice automatiquement. L'interface affiche pour l'instant uniquement une option d'autopilot, qui va utiliser votre monture autopilotée à la place d'un clic sur les bords de l'écran. Pour trouver les indices, Treasure Hunter ouvre en background une fenêtre Chrome (contrôlée par Selenium), et utilise DofusDB pour dynamiquement obtenir la position des indices.
Ici c'est juste un module de debug qui permet de parcourir tous les packets reçus. On affiche le type de packet, timestamp et packet size. Si vous sélectionnez un packet, son contenu en format json est affiché. On peut filtrer les types et le contenu des packets.
Karrelage intègre deux type de lecture de packet, sélectionnables depuis le menu avant del ancer un module : Sniffer
et Attach
.
Karrelage va simplement écouter tous les packets reçus par n'importe quel client Dofus. Il ne modifie aucune connexion entrance/sortante. Fonctionne très bien, mais a du mal à gérer les gros packets qui sont envoyés au même moment pour plusieurs clients (comme les packets de combat en multicompte). Sniffer
est donc à utiliser quand vous êtes en mono-compte, ou n'avez pas besoin du module de combat. Lancez le à n'importe quel moment et ça marchera. C'est le mode par défaut.
Karrelage va ici hijack la connexion avec le serveur d'un client en particulier, et va ensuite transférer les packets entrants/sortants de ce client uniquement. On peut ainsi éviter d'avoir des problèmes de packet qui se chevauchent. C'est le mode à utiliser quand vous êtes en multicompte et que vous utilisez le module de combat.
Plus délicat à lancer, il faut qu'il arrive à intercepter la connexion client/serveur, qui se lance quand vous sélectionnez un serveur, ou changez de personnage. Trouvez la manip qui vous arrange le plus, et gardez Karrelage d'ouvert pour qu'il capte la connexion. De plus, Karrelage s'occupant de la transmission des packets, si celui est fermé (par vous ou par un crash) la connexion client/serveur est temporairement perdue et ça va vous faire une mini re-connexion.
Commande pour lancer l'auto-compilation du CSS par TailwindCSS (nécessite NodeJS
):
npx tailwindcss -i ./static/src/input.css -o ./static/dist/css/output.css --watch
Manuellement mettre à jour les packets (nécessite FFDec, testé avec la version 20.1.0) :
python scripts/update_packets.py
Manuellement mettre à jour les ressources du jeu (noms d'item, noms de monstres, etc...):
python -m scripts.update_game_ressources
Si rien ne se passe quand vous lancez Karrelage, et le module debug n'affiche aucun paquet reçu :
- Vérifiez que votre protocol.pk est à jour (la version du jeu est dans le ficheir
DOFUS_VERSION
) - Spécifiez l'interface que vous utilisez dans
src/sniffer/network.py:118
. Par défaut Scapy sniff les paquets sur conf.iface, qui peut ne pas correspondre à l'interface utilisée pour Dofus.
Merci à LaBot pour son reader/writer de packet et balciseri pour son reader/writer de fichiers Dofus.