C/C++ [Help][1.29]décoder une map (packet GDM)

A

Anonymous

Invité
#1
Bonjour,

Je suis nouveau à la fois sur le forum et sur la création de bot D1.29.

Je n'ai pas trouvé (j'ai bien cherché) comment étant donné une map je pouvais avoir accès aux informations de ses cellules (cellule libre ou bloquée par exemple).

Pour l'instant ce que j'ai :

Je reçois le paquet GDM, j'en extrait l'id de la map sur laquelle je me trouve ainsi qu'une clef.
Ensuite je me rend dans le dossier data/maps/ du jeu, je décompile le fichier .swf qui correspond à l'id de la map.
Dans ce fichier se trouve une chaine de caractère mapdata (sa taille est un multiple de 10, surement 10 caractère par cellule).

Donc je me retrouve avec deux chaines de caractères : une clef et une mapdata, je ne sais absolument pas comment les utiliser pour décoder la map.

Merci d'avance pour votre aide.
 
Inscrit
31 Mars 2016
Messages
33
Reactions
0
#2
Up ! je suis bloqué au même endroit ! :/
 
Inscrit
31 Mars 2016
Messages
33
Reactions
0
#4
Je cherche, je cherche, mais j'ai l'impression que tous les liens que je trouve ne sont plus actifs pour les bot open source (1.29) ...
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#5
Regarde ce que j'ai trouvé :p

C'est la lecture des maps décompilés du bot M4x0uBot.
Ce bot étant désormais open source mais je ne met plus la main dessus.

C#:
[StandardModule]
  internal sealed class Maps
  {
  public static void LoadMap(int index, string idMap, string indice, string clef)
  {
  Perso perso = Declarations.comptes[index];
  try
  {
  perso.changeurBas = -1;
  perso.changeurDroite = -1;
  perso.changeurGauche = -1;
  perso.changeurHaut = -1;
  perso.Debug("Loading map " + idMap);
  if (!Directory.Exists("maps"))
  {
  Directory.CreateDirectory("maps");
  }
  if (!File.Exists("maps/" + idMap + "_" + indice + "X.txt"))
  {
  new SwfUnpacker().SwfUnpack(idMap + "_" + indice + "X.swf");
  }
  StreamReader reader = new StreamReader("maps/" + idMap + "_" + indice + "X.txt");
  string gettokText = reader.ReadLine();
  reader.Close();
  gettokText = Fonctions.Gettok(gettokText, "|", 2);
  string k = Conversions.ToString(Maphandler.prepareKey(clef));
  string sData = Conversions.ToString(Maphandler.decypherData(gettokText, k, (int) (Convert.ToInt64(Conversions.ToString(Maphandler.checksum(k)), 0x10) * 2L)));
  perso.mapDataActuel = Maphandler.uncompressMap(sData);
  perso.mapActuelle = Conversions.ToInteger(idMap);
  perso.TabUtilisateur.CoordsMap.Text = Config.GetMapPos(Conversions.ToInteger(idMap));
  int num = 1;
  do
  {
  if (perso.mapDataActuel[num].movement == 2)
  {
  int num2 = Conversions.ToInteger(Fonctions.getX(num));
  int num3 = Conversions.ToInteger(Fonctions.getY(num));
  if ((num2 - 1) == num3)
  {
  perso.changeurGauche = num;
  }
  else if ((num2 - 0x1b) == num3)
  {
  perso.changeurDroite = num;
  }
  else if ((num2 + num3) == 0x1f)
  {
  perso.changeurBas = num;
  }
  else if (num3 < 0)
  {
  num3 = Math.Abs(num3);
  if ((num2 - num3) == 1)
  {
  perso.changeurHaut = num;
  }
  }
  }
  num++;
  }
  while (num <= 500);
  LoadRessources(index, perso.mapDataActuel);
  }
  catch (Exception exception1)
  {
  ProjectData.SetProjectError(exception1);
  Exception exception = exception1;
  Interaction.MsgBox(exception.Message, MsgBoxStyle.Critical, "Error : Maps.vb --> LoadMap(" + idMap + ")");
  ProjectData.ClearProjectError();
  }
  perso = null;
  }

  private static void LoadRessources(int index, Maphandler.Cell[] spritesHandler)
  {
  Perso perso = Declarations.comptes[index];
  List<int> list = new List<int>();
  List<string> list3 = new List<string>();
  List<bool> list2 = new List<bool>();
  string str = "a";
  StreamReader reader = new StreamReader("data/ressources.txt");
  while (str != null)
  {
  str = reader.ReadLine();
  if (str != "")
  {
  string[] strArray = str.Split(new char[] { ':' });
  if (strArray.Length == 3)
  {
  int item = Conversions.ToInteger(strArray[0]);
  string str3 = strArray[1];
  string str2 = strArray[2];
  list.Add(item);
  list3.Add(str3);
  if (str2 == "o")
  {
  list2.Add(true);
  }
  else
  {
  list2.Add(false);
  }
  }
  }
  }
  reader.Close();
  int num = 0;
  perso.TabUtilisateur.ListeRessources.Items.Clear();
  int num3 = 1;
  do
  {
  if (list.Contains(spritesHandler[num3].layerObject2Num))
  {
  perso.TabUtilisateur.ListeRessources.Items.Add(list3[list.IndexOf(spritesHandler[num3].layerObject2Num)]);
  perso.TabUtilisateur.ListeRessources.Items[num].SubItems.Add(num3.ToString());
  perso.TabUtilisateur.ListeRessources.Items[num].SubItems.Add("Non coup\x00e9");
  spritesHandler[num3].object2Movement = list2[list.IndexOf(spritesHandler[num3].layerObject2Num)];
  num++;
  }
  num3++;
  }
  while (num3 <= 0x3e8);
  perso = null;
  }
  }
Le projet en bonus.
http://www.megafileupload.com/jzLE/M4x0uBot.rar
 
Inscrit
31 Mars 2016
Messages
33
Reactions
0
#6
Merci beaucoup, j'ai vraiment beaucoup appris grâce à ce forum et là je sens que je vais pouvoir enfin m'amuser ! =)
Merci
 
Inscrit
5 Novembre 2016
Messages
56
Reactions
2
#9
est ce que tu as le code source s'il te plait
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#10
Non, mais un passage avec reflector et tu as les bases du projet.
Sachant que les sources ont été partagées, mais je ne les possède pas.
 
Inscrit
22 Février 2020
Messages
26
Reactions
18
#12
Yo, je fais un petit up car j'épluchais désespérément les sources de dofus 1.29 pour décoder les paquets que je recevais… sans succès. Mais ces fameuses sources Maxoubot sont d'une aide très précieuse, je viens d'y retrouver mes fameux paquets GA ! Je cherche à coder un sniffer avec pyShark pour obtenir les infos des ressources sur une map et les intégrer à mon bot pixel. Je ferai une petite update quand j'aurai trouvé ce qu'il me faut dans ces sources :teeth:
 
Inscrit
5 Novembre 2016
Messages
56
Reactions
2
#13
Tu veux décoder une map/cellule (avec un bot socket/mitm) pour les integrer à un mot (bot pixel) ?
 
Inscrit
22 Février 2020
Messages
26
Reactions
18
#14
Tu veux décoder une map/cellule (avec un bot socket/mitm) pour les integrer à un mot (bot pixel) ?
Salut, non je ne veux pas décoder "avec un bot socket/mitm", je veux coder et intégrer une fonctionnalité à mon bot pixel permettant de gérer le sniffing/parsing des paquets pour obtenir les infos de dispo des ressources. En gérant aussi le mapdata, je pourrai naturellement me passer de la détection "pixel" des ressources mais ça reste un bot qui injecte ses actions via des clics sur le client. Je compte garder tout de même du template matching (ou le côté "bot pixel" si tu préfères) pour certaines choses comme fermer une fenêtre et quelques interactions.
Cordialement
 
Dernière édition:
Haut Bas