Salut,
Pour un petit projet personnel, j'ai besoin de récupérer le fonctionnement du WorldPathFinder de D2.
Le WorldPathFinder se base sur les données d'un fichier binaire (worldgraph.bin disponible dans les fichiers du jeu) afin de récupérer les nœuds et transitions.
Et c'est bien sur la lecture de ce fichier que je bloque, et notamment sur la classe Worldgraph qui s'en occupe (com.ankamagames.dofus.modules.utils.pathfinding.world) :

En paramètre de cette fonction, il y a un objet de ByteArray bien récupéré du fichier Worldgraph.bin :
![img]()

Ok, jusque là ça va. Il suffit juste de lire ce fichier binaire, en faire un tableau de bytes et de le parcourir comme le constructeur Worldgraph le fait.
Un exemple des premiers 50 bytes du tableau récupérés de ce fichier (en C# avec readAllBytes("worldgraph.bin")) :
0 0 119 20 65 1 217 184 0 0 0 0 0 0 0 1 65 1 217 176 0 0 0 0 0 0 0 1 0 0 0 1 2 1 255 255 255 255 0 0 0 0 65 1 217 176 0 0 0 0 0 0 2 29 191 240 0 0 0 0 0 0 65 3 64 32 0 0 0 0 0 0 0 1 65 3 48 32 0 0 0 0 0 0 0 1 0 0 0 1 0 1 255 255 255 255 0 0 0 0 65 3 48 32 0 0 0 0 0 0 1 93 191 240 0 0 0 0 0 0 65 137 211 138 56 0 0 0 0 0 0 1 65 137 211 122 56
Si on regarde le code AS3 du Worldgraph, la tout première interaction avec le tableau de bytes est un readInt() dans la variable edgeCount. Donc d'après la doc AS3 sur les readInt() de ByteArray, il lit un int32 (à partir de la position 0, comme aucune lecture ne s'est passé avant), donc dans mon cas :
0 0 119 20 = 343343104. (edgeCount)
BitConverter.ToInt32(array, 0) en C#
Ensuite, je décale de 4 sur le tableau et je lis en double, sur 8 bytes cette fois :
65 1 217 184 0 0 0 0 = 1,53221089504935E-314
BitConverter.ToDouble(array, 3) en C#
Ce readDouble est passé en paramètre de la fonction addVertex, addVertex qui prends comme premier paramètre :

![img]()
Une mapId.
Une map qui porte comme ID : 1,53221089504935E-314 ?
Qu'ai-je raté dans la compréhension du code AS3 ?
Je vous remercie d'avance !
Wukzu