Aller au contenu
Afficher dans l'application

Une meilleure façon de naviguer. En savoir plus.

Asterobot

Une application plein écran sur votre écran d'accueil avec notifications push, badges et plus encore.

Pour installer cette application sur iOS et iPadOS
  1. Appuyez sur Icône de partage dans Safari
  2. Faites défiler le menu et appuyez sur Ajouter à l'écran d'accueil.
  3. Appuyez sur Ajouter dans le coin supérieur droit.
Pour installer cette application sur Android
  1. Appuyez sur le menu à trois points (⋮) dans le coin supérieur droit du navigateur.
  2. Appuyez sur Ajouter à l'écran d'accueil ou Installer l'application.
  3. Confirmez en appuyant sur Installer.

Scripts

Les questions qu'on se pose en écrivant des paquets. La documentation développeur couvre chaque sujet en détail.

Dans quel langage les scripts sont-ils écrits ?

En JavaScript. Chaque fichier d'un paquet est un module ES, et les scripts peuvent utiliser la syntaxe JavaScript jusqu'à ES2022, à trois constructions près : les générateurs asynchrones, for await et import() appelé comme une fonction. Consultez Prise en charge de JavaScript.

Puis-je écrire mes scripts en TypeScript ?

Non. Les fichiers d'un paquet doivent se terminer par .js ou .mjs. Vous avez quand même des types : l'éditeur vérifie votre JavaScript comme TypeScript le ferait, et des commentaires JSDoc comme /** @type {BehaviorParameters} */ apportent complétion et vérifications à votre propre code. Consultez Prise en charge de JavaScript.

Puis-je utiliser des paquets npm ?

Non. Il n'y a ni npm ni require(), et un import comme "lodash" est lu comme une dépendance que votre paquet n'a pas déclarée, donc le script ne se charge pas. Pour réutiliser du code, importez vos propres fichiers avec des chemins commençant par ./, ou faites de ce code un paquet à vous et déclarez-le comme dépendance. Consultez Modules et imports et Dépendances.

Existe-t-il setTimeout ou setInterval ?

Non. sleep() de asterobot:timers est le seul minuteur : await sleep(1500) met votre fonction en pause pendant 1,5 seconde sans bloquer le bot. Pour une tâche qui se répète, écrivez une boucle contenant await sleep() et lancez-la depuis la fonction d'entrée sans l'attendre. Pour tout ce que le jeu annonce, un gestionnaire de message vaut mieux qu'une boucle. Consultez Asynchrone et délais.

Un script peut-il utiliser internet ?

Non. Il n'y a ni fetch(), ni WebSocket, ni aucune autre connexion en dehors de la connexion au jeu du bot. Consultez Ce que peuvent faire les scripts.

Un script peut-il lire ou écrire des fichiers ?

Non. Un script n'atteint que les modules de son propre paquet et des paquets dont il dépend. Il n'a nulle part où garder des données pour sa prochaine exécution non plus : chaque démarrage repart de zéro, et values est en lecture seule. Ce dont un script a de nouveau besoin doit venir du jeu, ou d'un réglage que quelqu'un remplit. Consultez Lancer, arrêter et recharger.

Deux bots peuvent-ils partager des données ?

Non. Chaque bot fait tourner sa propre copie du script, et deux copies ne partagent aucune variable. Un script ne peut pas non plus voir ni contrôler un autre bot. Consultez Ce que peuvent faire les scripts.

Où trouver les noms et les champs des messages ?

À trois endroits :

  • La référence du protocole Dofus décrit chaque message et la signification de ses champs.
  • L'éditeur de paquets complète les noms de messages et les champs du contenu pendant la saisie, et signale un champ qu'un message n'a pas.
  • Outils > Réseau, sur un bot, montre les messages que le jeu échange réellement, avec leurs valeurs. Sur un bot MITM (de l'anglais man-in-the-middle, « homme du milieu »), faites l'action dans Dofus et regardez ce qui passe.

Les scripts lisent les noms de champs en camelCase, comme senderName pour sender_name. Consultez Trouver les messages.

Existe-t-il des fonctions pour se déplacer, combattre ou récolter ?

Non. Un script joue comme le client Dofus : il envoie les messages du jeu et réagit à ce que le serveur répond. Les données de jeu aident pour le reste, par exemple pour trouver quelles cartes contiennent une ressource donnée. Consultez Ce que peuvent faire les scripts.

Pourquoi mon script ne fait-il pas entrer mon bot Full socket en jeu ?

Parce qu'un script Full socket doit identifier le bot lui-même. Son premier message sur une nouvelle connexion doit être IdentificationRequest, envoyé quand launch.reason vaut "initial", et choisir un personnage puis entrer en jeu sont aussi à la charge des scripts. Identifier et lancer montre les lignes qu'utilisent tous les exemples de cette documentation.

Note

Bientôt disponible. Des scripts de connexion prêts à l'emploi seront disponibles pour que vous les lanciez et les réutilisiez, afin qu'un paquet puisse dépendre de l'un d'eux au lieu de faire l'identification lui-même. En attendant, gardez l'identification dans votre propre code, avec les lignes que montre Identifier et lancer.

Sur quel bot tester mes scripts ?

Un bot MITM sur votre propre client Dofus. Vous provoquez vous-même les événements en jeu et regardez le script réagir, et aucun compte Ankama n'a besoin d'être enregistré. Gardez à l'esprit que tout ce que le script envoie part au nom de votre personnage. Consultez Identifier et lancer.

Comment relancer un script après avoir modifié son code ?

Cliquez sur Lancer dans l'éditeur, ou sur Arrêter puis Lancer sur la page du bot. Il n'y a pas de bouton Recharger. Enregistrer ne suffit pas à modifier un script déjà en cours : c'est le prochain démarrage qui charge ce que vous avez enregistré. Consultez Lancer, arrêter et recharger.

Comment déboguer un script ?

Commencez par la console du bot :

  1. Vérifiez le badge d'erreur de l'éditeur avant de lancer le script.
  2. Écrivez dans la Console du bot avec botInfo() et les autres fonctions de asterobot:bot, et ne gardez que Script dans Sources.
  3. Quand le script s'arrête sur une erreur, Le comportement s'est arrêté sur une erreur apparaît en haut de la page du bot, avec le texte complet et un bouton Copier.
  4. Quand un gestionnaire ne semble jamais s'exécuter, regardez ce qui arrive vraiment dans l'outil Réseau.

Journalisation et débogage passe en revue toute la démarche.

Pourquoi mon journal affiche-t-il map[] au lieu de l'erreur ?

Parce qu'Asterobot convertit lui-même en texte les valeurs journalisées, et qu'un objet Error en ressort sous la forme map[]. Journalisez plutôt String(error) ou error.message. Les autres objets ressortent aussi sous la forme map[...] : JSON.stringify() est plus lisible, une fois les valeurs BigInt converties, puisqu'il lève une exception sur elles. Consultez Journalisation et débogage.

Pourquoi mon script s'est-il arrêté avec JavaScript execution deadline exceeded ?

Une partie de votre code a tourné plus de 250 ms sans rien attendre. Découpez les longs traitements avec un await sleep(0) de temps en temps, et remplacez des milliers d'appels à record() ou text() à la suite par un seul find() ou query(). Consultez Asynchrone et délais.

Pourquoi les textes du jeu et les noms d'objets sont-ils en français ?

Parce que tout script démarré depuis Asteroboard utilise la langue fr, quelle que soit la langue réglée sur le bot. text() et search() répondent dans cette langue. Pour en lire une autre, interrogez la table _names, qui a une colonne language. Consultez Vue d'ensemble des données de jeu.

Un script peut-il modifier ses propres réglages ?

Non. values est en lecture seule : affecter une valeur à l'une de ses propriétés lève une TypeError, et le réglage garde sa valeur. Les réglages changent quand quelqu'un les applique dans l'onglet Réglages du bot. Consultez Lire les réglages.

Mon script cessera-t-il de fonctionner quand Dofus se mettra à jour ?

C'est possible. Tant qu'Asterobot connaît la version de jeu, il conserve des noms de messages lisibles quand les noms brouillés qui circulent sur le réseau changent. Mais un patch peut ajouter, supprimer ou modifier des messages, une mise à jour d'Asterobot peut renommer un message, et les tables et colonnes des données de jeu suivent la version de jeu. Lisez les champs avec ?., donnez un délai maximal à chaque wait(), et vérifiez votre script après chaque mise à jour. Consultez Après une mise à jour du jeu.

Existe-t-il des exemples de scripts ?

Oui. Les tutoriels sont de petits scripts complets à copier et à adapter, et les exemples de toute la documentation développeur fonctionnent aussi bien sur les bots Full socket que sur les bots MITM.

Compte

Navigation

Recherche

Recherche

Configurer les notifications push du navigateur

Chrome (Android)
  1. Appuyez sur l'icône de cadenas à côté de la barre d'adresse.
  2. Tap Autorisations → Notifications.
  3. Ajustez vos préférences.
Chrome (Desktop)
  1. Cliquez sur l'icône représentant un cadenas dans la barre d'adresse..
  2. Select Paramètres du site.
  3. Find Notifications et ajustez vos préférences.