Packet to mapID

Inscrit
4 Novembre 2017
Messages
10
Reactions
0
#1
Bonjour, j'ai une question :
j'ai la packet suivant sur WPE : 03 85 00 00 00 C8 08 41 A3 68 00 00 00 00 00
qui correspond à MapInformationsRequestMessage d'apres AnkamaCore Sniffer, ce packet contient la mapid, pourriez vous me dire comment extraire manuellement la mapid depuis ce packet ?
mapid est : 162791424

merci
 
Inscrit
29 Octobre 2016
Messages
65
Reactions
2
#2
Ben ... D'après le packet ..

Code:
03 85 // Id 225 Taille 1

00 00 00 C8 // numéro packet

08 // taille

41A3680000000000 // map ID
Et 41A3680000000000 en double ça donne .. 162791424 !
Par contre en int oui ça te donne pas ça.

Edit: Après un peu de recherche j'ai trouver ce code qui marche (j'ai essayer), par contre il faut activé dans le débugger le mode "unsafe":

Code:
double idMap = getDouble(0x41A3680000000000);

public unsafe static double getDouble (UInt64 b) {
    return *(double*)&b;
}
 
Dernière édition:
Inscrit
4 Novembre 2017
Messages
10
Reactions
0
#3
Merci beaucoup j'ai bien compris le principe je savais pas que c'était en double ^^
j'ai une deuxième question : est il possible d'avoir la position de la map [x,y] à partir de mapid ?
 
Inscrit
4 Novembre 2017
Messages
10
Reactions
0
#4
J'ai lu beaucoup de topic, je pense que je dois passer par MapPositions.d2o , avez-vous une idée/un outil pour décompiler ce fichier ?
 
Inscrit
29 Octobre 2016
Messages
65
Reactions
2
#5
J'ai lu beaucoup de topic, je pense que je dois passer par MapPositions.d2o , avez-vous une idée/un outil pour décompiler ce fichier ?
Sachant que je me suis arrêté à la connexion au serveur car je bloque sur le décryptage AES je ne sais pas.

Toutes les informations des maps,items etc sont dans les D2*, donc à priori ça serait dans le D2O mappositions qu'il faut décompiler comme les packets si j'ai bien compris mais je ne me suis pas attardé sur le sujet.

Il y à ici un sujet sur les D2I, je sais pas si les D2O sont fait de la même façon :/

Sinon, pour savoir que c'est en double dans Dofusinvoker.swf la class MapInformationsRequestMessage.as:

Code:
 public function serialize(param1:ICustomDataOutput) : void {
    this.serializeAs_MapInformationsRequestMessage(param1);
}

public function serializeAs_MapInformationsRequestMessage(param1:ICustomDataOutput) : void {
    if(this.mapId < 0 || this.mapId > 9007199254740990) {
    throw new Error("Forbidden value (" + this.mapId + ") on element mapId.");
    }
    param1.writeDouble(this.mapId);
}
La fonction serialize appel la fonction serializeAs_MapInformationsRequestMessage qui lui va vérifier si la map ID est pas un truc farfelu, juste il faut retenir le "param1.writeDouble(this.mapId);" donc "writeDouble" je penses que ça veux tout dire, il suffit de lire la class lié au packet :)
 
Inscrit
4 Novembre 2017
Messages
10
Reactions
0
#6
Merci beaucoup pour votre aide, je commence un peu un comprendre le truc ^^
Pour avoir le pos de la map à partir de mapid, je me suis contenté d'utilisé une décompilation de MapPositions.d2o que j'ai trouvé ici : https://dozenofelites.com/topic/8552-fichiers-d2o-décompiler-json/ , elle est un peu ancienne mais j'ai trouvé la liste des maps que je veux, voici un fichier où j'ai organisé tout ça : (format : "mapid,x,y,")
 

Pièces jointes

Dernière édition:
Inscrit
29 Octobre 2016
Messages
65
Reactions
2
#7
Tu vas vite être limité sans l'utilisations des D2 :)
 
Inscrit
8 Février 2018
Messages
11
Reactions
0
#9
Ben ... D'après le packet ..

Code:
03 85 // Id 225 Taille 1

00 00 00 C8 // numéro packet

08 // taille

41A3680000000000 // map ID
Et 41A3680000000000 en double ça donne .. 162791424 !
Par contre en int oui ça te donne pas ça.

Edit: Après un peu de recherche j'ai trouver ce code qui marche (j'ai essayer), par contre il faut activé dans le débugger le mode "unsafe":

Code:
double idMap = getDouble(0x41A3680000000000);

public unsafe static double getDouble (UInt64 b) {
    return *(double*)&b;
}
Merci pour ces infos détaillées; je teste
 
Haut Bas