Smooth2
Nouveau membre
- 9 Juin 2020
- 1
- 0
- 421
- 96
- Discord
- Smooth#7175
Rejoignez MoonBot avec Cheat-Gam3, le bot pensé pour Dofus Retro !
Asterobot est un bot et un framework pour Dofus 3 Unity, avec un moteur réseau qui connecte vos bots en Full socket, sans aucun client de jeu, ou en MITM, en se glissant entre votre client Dofus et le serveur pour voir, envoyer, modifier ou bloquer chaque message.
Son SDK JavaScript permet d'écrire des scripts à tous les niveaux, de la manipulation directe des messages du jeu jusqu'aux comportements complets. Un script de haut niveau peut s'appuyer sur d'autres paquets déclarés en dépendances, et le même code tourne aussi bien en Full socket qu'en MITM.
Le tout tient dans un seul serveur très léger, sur Windows, macOS, Linux ou Docker, et l'interface web Asteroboard, bien que complète, reste facultative.
Fonctionnalités phares
-
-
-
- Disponible sur Windows, macOS et Linux, en Intel/AMD comme en ARM, et avec Docker
-
- SDK JavaScript moderne (modules, async/await), des messages bruts jusqu'au comportement complet du bot
- Envoi, attente, écoute et interception de n'importe quel message Dofus 3, par son nom
-
- Système de dépendances entre paquets, avec plusieurs versions côte à côte
- Éditeur intégré avec autocomplétion de tout le SDK et de chaque message Dofus 3
- Bibliothèque de paquets communautaire, avec installation en collant un simple lien
- Mises à jour des paquets installées à côté des anciennes versions
-
- Téléchargement des versions de Dofus directement depuis Ankama
- Extraction des données du jeu et requêtes SQL, depuis l'interface comme depuis les scripts
- Console, chat et inventaire en direct pour chaque bot
MCP
Ça permet de contrôler Asterobot directement depuis une IA comme Claude, ChatGPT, ou n’importe quel autre agent compatible MCP.Par exemple, vous pourrez simplement lui demander :
L’IA pourra alors piloter Asterobot de bout en bout :« Va chercher 50 laines de bouftou avec mon Iop. »
- identifier où trouver les bouftous, grâce à la game database.
- déterminer les combats les plus intéressants pour récupérer des laines ;
- lancer les combats avec votre personnage ;
- suivre les ressources récupérées ;
- et arrêter automatiquement une fois les 50 laines obtenues.
Sans écrire le moindre script.
Connexion
- Full socket : le bot se connecte seul à Ankama et parle directement aux serveurs de jeu, sans client Dofus
- MITM : le bot relaie votre client Dofus pendant que vous jouez
- MITM compatible avec plusieurs clients à la fois (plusieurs personnes peuvent controller le même bot)
- Full Socket et MITM possible sur plusieurs machines : le jeu sur un PC, Asterobot sur un deuxième, l'interface sur un troisième. des possibilités infinies
- En Full socket, l'entrée en jeu passe par un script de connexion : vous pouvez écrire le vôtre, des scripts prêts à l'emploi arrivent bientôt.
SDK JavaScript
- JavaScript moderne (modules ES, async/await), un paquet étant un dossier avec son index.js et son manifeste
- Envoi, attente et écoute de n'importe quel message Dofus 3 par son nom, vers le serveur ou vers le client (send, request, wait, on, onTraffic)
- Interception des messages pour les laisser passer, les bloquer ou les remplacer, par champs ou en octets bruts (intercept)
- Messages protobuf décodés en objets JavaScript, avec accès aux octets bruts
- Un même script fonctionne en Full socket et en MITM
- Déplacement sur la carte et pathfinding qui calcule le même chemin que le client Dofus
- Lecture des données du jeu depuis les scripts : textes, enregistrements, tables, recherche et requêtes SQL
- Dépendances entre paquets avec versions : un script haut niveau peut réutiliser des paquets bas niveau, ou les réécrire
- Éditeur de code intégré avec autocomplétion du SDK et de tous les messages, détection d'erreurs et lancement en un clic sur un bot
Bibliothèque de paquets
- Bibliothèque sur asterobot.net où tout membre peut publier ses paquets
- Installation en collant simplement le lien du paquet
- Vérification des mises à jour, les nouvelles versions s'installent à côté des anciennes
Asteroboard, l'interface web
- Interface graphique pour asterobot qui se connecte à votre Asterobot, installable comme une application
- Utilisable depuis un autre PC ou un téléphone
- Disponible en français, en anglais et en espagnol
- Gestion des bots : ajout, connexion, états, lancement, arrêt et changement de paquet, réglages
- Console par bot : messages d'Asterobot, sortie des scripts et chat du jeu, avec filtres, recherche et réponse en jeu
- Informations du compte et du serveur de jeu
- Inventaire en direct : objets par catégorie avec leurs effets, kamas, pods, destruction d'objets
- Outil réseau : trafic en direct avec tous les champs, filtre, recherche, et envoi manuel d'un message au serveur ou au client
- Gestionnaire de comptes Ankama avec l'état de connexion de chaque compte
- Gestionnaire de jeux : téléchargement des versions de Dofus depuis Ankama, extraction des données, plusieurs versions côte à côte
- Page serveur : état, console d'Asterobot et tous les réglages
Exploration et analyse du jeu
- Carte du monde avec recherche de monstres, ressources, zaaps et donjons
- Visionneuse de carte par identifiant ou coordonnées : sorties, cellules, export en image
- Navigateur des données du jeu : recherche, tables filtrables, liens entre enregistrements
- Éditeur SQL avec des exemples prêts à lancer
- Textes du jeu par identifiant ou par clé, dans chaque langue
- Lecteur de musique du jeu
- Référence complète du protocole Dofus 3 en ligne, avec chaque message et ses champs
- Le sniffer MITM et la base de données extraite en font un vrai outil pour déboguer les messages et le contenu du jeu
Plateformes et déploiement
- Windows, macOS et Linux, sur Intel/AMD et ARM (Et docker)
- En local, sur votre réseau ou sur un serveur distant, avec HTTPS et mot de passe pour l'accès à distance
- Ligne de commande pour télécharger des versions du jeu, gérer les paquets et réinitialiser
- Asterobot vous prévient quand une nouvelle version sort, et Asteroboard se met à jour tout seul
Documentation
- Guide complet, documentation développeur avec tutoriels et référence de chaque fonction, FAQ (en anglais pour l'instant)
- Forum et Discord pour l'entraide
Voici un exemple pour le Full socket. C'est le script qui manque le plus aujourd'hui : celui qui fait entrer le bot en jeu. Il s'identifie, récupère la liste des personnages, choisit celui indiqué dans les réglages (ou le premier de la liste) et attend que le personnage soit chargé. Il exporte aussi enterGame(), pour qu'un autre paquet (un script de farm par exemple) le prenne en dépendance et l'appelle pour entrer en jeu.
JavaScript:
import { session, botInfo } from "asterobot:bot";
import { values } from "asterobot:parameters";
import { send, wait } from "asterobot:protocol";
/** @type {BehaviorParameters} */
export const parameters = {
character: {
type: "string",
label: "Personnage",
description: "Nom du personnage à jouer. Laissez vide pour prendre le premier de la liste.",
},
};
const TIMEOUT = { timeout: 15000 };
// Commence à attendre la réponse avant d'envoyer, pour ne jamais la rater.
async function exchange(type, payload, answer) {
const [reply] = await Promise.all([wait(answer, TIMEOUT), send(type, payload)]);
return reply;
}
// Exportée : un autre paquet peut dépendre de celui-ci et l'appeler pour entrer en jeu.
export async function enterGame(characterName = "") {
// 1. Identification avec le ticket de la session
const auth = await exchange(
"IdentificationRequest",
{ ticketKey: session.gameToken, languageCode: session.language },
(traffic) =>
traffic.type === "AuthenticationTicketAcceptedEvent" ||
traffic.type === "AuthenticationTicketRefusedEvent",
);
if (auth.type === "AuthenticationTicketRefusedEvent") throw new Error("Ticket refusé par le serveur");
// 2. Liste des personnages du compte sur ce serveur
const list = await exchange("CharacterListRequest", {}, "CharacterListEvent");
const characters = (list.payload?.characters ?? []).filter((c) => c.characterBasicInformation);
const wanted = characterName.trim().toLowerCase();
const chosen = wanted
? characters.find((c) => c.characterBasicInformation.name.toLowerCase() === wanted)
: characters[0];
if (!chosen) {
throw new Error(wanted ? `Personnage introuvable : ${characterName}` : "Aucun personnage sur ce serveur");
}
const { name, level } = chosen.characterBasicInformation;
botInfo(`Sélection de ${name}, niveau ${level}`);
// 3. Sélection du personnage (son id est un BigInt), puis chargement dans le monde
const selection = await exchange(
"CharacterSelectionRequest",
{ characterId: chosen.id },
"CharacterSelectionEvent",
);
if (!selection.payload?.success) throw new Error(`Sélection de ${name} refusée`);
await wait("CharacterLoadingCompleteEvent", TIMEOUT);
botInfo(`${name} est en jeu`);
return selection.payload.success.character;
}
export default async function behavior(launch) {
// Seule une nouvelle connexion Full socket doit entrer en jeu : un bot MITM y est déjà.
if (launch.reason !== "initial") return;
await enterGame(values.character ?? "");
}
En une quarantaine de lignes, ce script intercepte et bloque des messages du client, déplace le personnage, interroge la base de données du jeu en SQL et expose un réglage dans l'interface. Et comme un paquet peut dépendre d'un autre, ces commandes peuvent à leur tour servir de base à des scripts plus gros.
Où en est le projet
La base est maintenant solide : les connexions Full socket et MITM, le SDK, l'interface, la bibliothèque de paquets et la documentation sont en place. La prochaine étape pour moi, c'est d'ajouter la prise en charge de nouveaux messages réseau du jeu, et de recueillir les retours de mes testeurs pour corriger et améliorer ce qui doit l'être.
Ce que l'exemple montre :
- Attendre avant d'envoyer : Promise.all avec wait() puis send() évite de rater une réponse qui arriverait trop vite.
- Deux réponses possibles : un sélecteur en fonction attend à la fois l'acceptation et le refus du ticket.
- Oneof : CharacterSelectionEvent ne contient que success ou que error, et le script teste lequel est présent.
- BigInt : l'id du personnage est un int64, renvoyé tel quel dans CharacterSelectionRequest.
- Réutilisation : enterGame() est exporté, donc un script de haut niveau peut s'appuyer sur ce script de bas niveau.
Galerie

Liens:
-
Vous devez etre connecte pour voir les liens.
-
Vous devez etre connecte pour voir les liens.
-
Vous devez etre connecte pour voir les liens.
Post automatiquement fusionné:
Reservé 1
Dernière édition:
