Wesh claudine, comme l'impression que tu n'es pas si nouveau ahhah

    Brizze

    Wesh claudine, comme l'impression que tu n'es pas si nouveau ahhah

    Je ne veux pas casser tes fantasmes mais je ne suis que moi, j'ai découvert le forum la semaine dernière d'après mon historique le 29 mai, après une recherche "dofus wireshark", j'ai trouvé le site en 2ème résultat google. J'ai eu quelques soucis à trouver un pseudo valide, et j'ai voulu contacter un admin/modo face à ce problème, sans résultat, au final j'ai attendu quelques jours avant de me réinscrire.

    On sait tous qui tu es "l'ami" :)

    Vous êtes bizarre ou vous poussez le troll très loin.

    EDIT : Après, pour une première inscription je n'aurais peut-être pas dû prendre le premier pseudo que j'ai trouvé sur le forum dofus, j'estime donc avoir une part de tord dans cette affaire. Mais je ne vais pas utiliser mes pseudos habituels sachant que je contribue beaucoup à des projets Open-Source, et que faire un sniffer contraire au CGU serait très mal vu dans le milieu/communauté.

    J'ai envie de dire peu importe que la personne soit nouvelle ou non. Juste profitez des réponses construites, pertinentes et cordiales. C'est pas utile de se prendre la tête avec ça, au pire on retourne dans une spirale infernal et au mieux vous faites sentir mal une nouvelle personne dans la communauté.

    Bref, désolé c'est hors sujet avec le topic.

    Claudine

    Mon message est à prendre au conditionnel, je n'ai pas eu l'occasion d'essayer pour vérifier mais j'ai lu le code et je crois comprendre le fonctionnement.

    Les étapes :

    1) Le jeu va calculer le pathfinding en fonction de donnée déjà existante, sous forme de class Transition, les Transition sont contenus dans les Edge (voir l'initialisation de la class WorldGraph). Le pathfinding va s'intéresser à l’existence des Transition pour définir un parcours (= un dictionnaire d'id de map).

    2) Une fois le parcours obtenu, le jeu va s'intéresser au contenu de la carte pour "cliquer"/se déplacer au bon endroit (comme un pixel bot). Pour en savoir plus, tu peux regarder : getClosestTransitionCellId de MountAutoTripManager.

    ----------

    Pour l'étape 1 :

    Quand on regarde la fonction Astar.compute, les fonctions de collision utilisées (= c'est-à-dire savoir si le déplacement est possible) sont :

    
      if(hasValidTransition(edge))
      {
        if(hasValidDestinationSubarea(edge))
        {
    

    Par leur nom, je suppose que c'est hasValidTransition qui nous intéresse.

    J'ai regardé le reste du code, il ne calcule pas à chaque fois les changements de map en regardant chaque cellule, c'est sauvegardé dans un fichier. Il charge des données à partir de

    <entry key="data.pathFinding">[config.content.path]maps/worldgraph.bin</entry>
    , et ils obtiennent une série d'élément : Vertex/Transition/Edge. En regardant la class Transition :

    
    public function Transition(type:int, direction:int, skillId:int, criterion:String, transitionMapId:Number, cell:int, id:uint)
    {
       super();
       this._type = type; // La classe TransitionTypeEnum t'indique les types disponibles : SCROLL, SCROLL_ACTION, MAP_EVENT, MAP_ACTION, MAP_OBSTACLE, INTERACTIVE, NPC_ACTION, UNSPECIFIED.
       this._direction = direction;
       this._skillId = skillId;
       this._criterion = criterion;
       this._transitionMapId = transitionMapId;
       this._cell = cell; // si -1 c'est toute la bordure qui sera utilisable
       this._id = id;
    }
    // qu'on peur lire ainsi :
    public function toString() : String
    {
       return "Transition{_type=" + String(this._type) + ",_direction=" + String(this._direction) + ",_skillId=" + String(this._skillId) + ",_criterion=" + String(this._criterion) + ",_transitionMapId=" + String(this._transitionMapId) + ",_cell=" + String(this._cell) + ",_id=" + String(this._id) + "}";
    }
    

    L'existence de l'élément Transition indique que tu vas pouvoir transiter/aller d'une carte à une autre, à condition que criterion soit respecté.

    Voila j'espère que je t'ai aidé. :)

    Wow, c'est ce que j'appelle du travail mâché, en effet ! Merci beaucoup pour tes efforts de recherche et ton partage ! Je vais m'y intéresser plus en détail quand j'aurais un moment, merci encore ! :)

    Et merci à tous les autres aussi, en effet je ne pensais pas qu'une petit newbie sans présentation aurait autant d'aide ! :D

    Ya pas de newbie, certains sont nouveaux sur le forum mais déjà très expérimentés dans le domaine.

    7 jours plus tard

    Bonsoir à tous,

    Je souhaite vous remercier tous encore une fois pour votre aide !

    J'ai réussi en récupérant les .d2p des maps à extraire les .json et ainsi implémenter un algorithme A* (je ne sais pas si c'est le plus conseillé, mais peu importe pour le moment) qui me permet de trouver le chemin jusqu'à une cellule cible, ou à défaut, une cellule qui me permet d'effectuer le changement de map voulu (grâce à son paramètre ChangeMapData).

    Le seul problème auquel je me heurte encore est qu'il faut que je connaisse le CellID de mon personnage afin de savoir d'où il part. J'ai remarqué que dans le MapComplementaryInformationDataMessage, chaque entité est caractérisée notamment par le CellID de la cellule où elle se trouve. Cependant, sauf erreur de ma part, la seule façon de savoir de quelle entité il s'agit est par son nom, or j'aimerais ne pas coder en dur le nom de mon personnage dans mon programme.

    Sauriez-vous si je peux savoir d'une autre façon si une entité est la mienne, ou alors si le CellId de mon personnage est contenu dans un autre message (j'ai regardé et je n'ai pas l'impression que ce soit le cas), ou encore si je peux récupérer le pseudo de mon personnage à n'importe quel moment (le bot n'est pas forcément déjà lancé au démarrage de mon jeu) ?

    Merci encore pour ceux qui prennent le temps de me lire, et je vous souhaite une bonne soirée ! :)

    Salut !

    Dans le

    IdentificationSuccessMessage
    tu peux récupérer ton
    accountId
    qui te permettra de retrouver ton perso dans le tableaux d'
    actors
    du message
    MapComplementaryInformationsDataMessage
    .

      KingOfGobballs

      Salut !

      Dans le

      IdentificationSuccessMessage
      tu peux récupérer ton
      accountId
      qui te permettra de retrouver ton perso dans le tableaux d'
      actors
      du message
      MapComplementaryInformationsDataMessage
      .

      Bonjour, merci pour ta réponse.

      Si j'en crois le nom du message

      IdentificationSuccessMessage
      , il est envoyé à la connexion du compte ?

      Comme je l'ai dit, le programme n'est pas forcément déjà lancé quand je me connecte, il arrive que je lance le bot après la connexion du personnage pour une quelconque raison. N'y a-t-il pas d'autre façon d'obtenir mon

      acoountId
      ?

        iRusher28

        Bonjour, merci pour ta réponse.

        Si j'en crois le nom du message

        IdentificationSuccessMessage
        , il est envoyé à la connexion du compte ?

        Comme je l'ai dit, le programme n'est pas forcément déjà lancé quand je me connecte, il arrive que je lance le bot après la connexion du personnage pour une quelconque raison. N'y a-t-il pas d'autre façon d'obtenir mon

        acoountId
        ?

        Je crois que c est la seule façon "Propre" d'associer un actorId à un compte.

        Sinon au moment ou tu lances ton bot , il bouge 2 fois de map et si tu matches 2 fois le même actor id tu peux associer ce compte à un actorId ...

        C est pas full propre + si quelqu'un fait le même mouvement au même moment c est pas ouf , mais c est une idée à toi de choisir ta méthode.

          Brasvengeur

          Je crois que c est la seule façon "Propre" d'associer un actorId à un compte.

          Sinon au moment ou tu lances ton bot , il bouge 2 fois de map et si tu matches 2 fois le même actor id tu peux associer ce compte à un actorId ...

          C est pas full propre + si quelqu'un fait le même mouvement au même moment c est pas ouf , mais c est une idée à toi de choisir ta méthode.

          D'accord, merci, je vais y réfléchir alors ! Pourquoi pas ouvrir mon Have-sac du coup, je serai seul dedans :)

            iRusher28

            D'accord, merci, je vais y réfléchir alors ! Pourquoi pas ouvrir mon Have-sac du coup, je serai seul dedans :)

            ah ouai ptet mieux xd

            7 jours plus tard

            J'ais réalisé un bot similaire a part la partie des donnees dans laquel j'utilise une librairy de reconnaissance de text pour detecter la pos actuelle et la prochaine indice.

            Pour le trajet, y'as une idee que j'ai implementer, c'est d'avoir une dd autopilité et utiliser la commande /travel x,y

            Ceci facilitra la tache

              pipiman

              J'ais réalisé un bot similaire a part la partie des donnees dans laquel j'utilise une librairy de reconnaissance de text pour detecter la pos actuelle et la prochaine indice.

              Pour le trajet, y'as une idee que j'ai implementer, c'est d'avoir une dd autopilité et utiliser la commande /travel x,y

              Ceci facilitra la tache

              Oui j'y ai pensé, mais le soucis c'est que si tu fais ça pour chaque map, j'ai peur qu'à force de spammer la commande, je finisse par me faire cramer ^^'

              Du coup je l'utilise seulement du Zaap jusqu'à la pos de départ de la chasse, et pour le reste, le programme simule des clics sur les différentes maps.

              Claudine

              Le /travel n'est pas géré par le client ?

              Ah c'est une bonne question, je sais pas vraiment comment son gérées les commandes, mais en effet si c'est seulement côté client (et c'est fort probable) y devrait pas y avoir de soucis à se faire !

              Je rebondis par rapport au World Path Finder, j'ai passé pas mal de temps à en construire un (commencé avant que les DD autopilotées arrivent) et je suis arrivé à quelque chose de respectable bien que le périmètre du truc ait ses limites.

              C'est pas mal galère d'en avoir un qui prend en compte tous les détails du jeu et qui reste performant.

              Il sait :

              - Calculer un chemin pertinent entre deux maps, avec en option les cellules de départ et d'arrivée

              - Gérer les maps séparées en plusieurs parties qui ne communiquent pas (en gros le problème principal de l'OP)

              - Gérer certains changements de maps particuliers, du style cliquer sur un activable pour changer de map, ou les cases qui te TP direct

              - Utiliser les Zaaps pour se rapprocher puis finir à pied

              - Faire ça de manière à peu près performante (~1 seconde dans le pire des cas où il faut calculer un chemin de Brak à Bonta sans zaaps)

              Il sait pas :

              - Gérer tous les changements de worldmap, surtout les sous-terrains.

              - Il y a des coords un peu galères où il y a plusieurs maps sur le même worldmap, et j'ai pas de solution implémentée pour le moment.

              Je me disais que peut-être il y aurait un intérêt pour le forum que je package ça dans une API et que je la mette à dispo.

              Hésitez pas à faire signe si ça vous intéresse, je pourrais me chauffer et le publier rapidement (en fonction de mes dispos) si il y a de la demande.