Bonjour à tous,
Cela fait quelques jours que je parcours Cadernis en long, en large et en travers pour m'aider à comprendre comment fonctionne Dofus - Merci à tous pour ces ressources, ça m'aurait pris des mois sans :)
Je rencontre un problème de compréhension des fichiers DLM, correspondant aux différentes maps : J'essaie de déterminer, sur une map, quelles sont les cellules "walkable", quelles sont les cellules au contraire bloquées, et quelles cellules permettent de changer de map.
J'utilise pour cela PyDofus (peut-être codé par quelqu'un d'ici d'ailleurs ?) pour :
- Convertir les .d2p en .dlm
- Convertir les .dlm en .json
Cependant, lorsque je regarde un de ces fichiers JSON, le résultat me paraît incohérent.
Prenons l'exemple de la map en -8;-25 dans le Massif de Cania (mapId = 165154826, mapVersion = 11)
![[Image Introuvable]](https://i.ibb.co/tc91bbr/Capture-d-e-cran-2020-04-17-a-11-52-44.png)
Ici il est possible d'aller en haut, en bas, à droite, mais pas à gauche. D'ailleurs, la moitié gauche de la map est inaccessible.
Je m'attends à retrouver ces informations dans le fichier JSON de la map, mais pas du tout.
Le Pastebin contenant le JSON est disponible ici.
- Le JSON comprend une valeur pour la clé "leftNeighbourId" alors qu'il est impossible d'aller à gauche
- La clé "cells" est bien un tableau de 560 entrées, qui devraient donc correspondre aux 560 cellules de la carte.
De ma compréhension, pour chaque "cell", la propriété "mov" indique si le personnage peut marcher sur la case et la propriété "mapChangeData" indique s'il est possible de changer de map.
Cependant les résultats que j'obtiens en analysant la valeur de toutes les "cells" est incohérent.
Par exemple ci-dessous la liste des cells, pour lesquelles j'ai mis un X quand "mov" est true, et un point quand "mov" est false :
Cliquez pour révéler
Cliquez pour masquer
X X X . . X X X . X X X X .
. X X X . X X . X . X X X X
. X X X X . . X X X . X X X
X . X X X X . X X . X . X X
X X . X X X X . X X X X . X
X X X . X X X X . X X . X .
X X X X . X X X X . . X X X
. X X . X . X X X X . X X X
X . X X X X . X X . X . . X
X X . X X . X . X X X X . X
X . X . . X X . . X X X X .
X X X . X X X . X X X . X X
X X X X X . . X X . . X . .
. X X X X X X X X X X X X .
. X . . X X X . X X . . . X
X . . X X X X X X X X X X X
X . X X X X X X X . X . X X
X X X X X X X X X X X X X X
X . X X X . X X X . X X X X
X X X . X X X . . X X X X X
X X X X X X X X X X X X X X
X X X X X X X X X X X X X X
X X X . . X X X X X X . X .
. X X X X X X . X . X X X .
X X X X X X X . X X . . . X
X . . X X X X X X X X X X X
X X X X X X X X X X X X X .
X X . . . X X . . X . . X X
X . X X X X X X X X X X X X
X . X X X X X X X . X . . X
X X X X X . X . X X X . . X
. . . X X . X X . . X X X .
X X . . X X X . . X . . X X
X . . X X X X X X X X X X X
X X X X X X X X X X X X X X
X X X . X X X X X X X X X .
. X X X X X X . X . X X X .
. X . . . X X . . X . . X X
X . X X . . . X X . . X . .
. X X X X X X X X X X X X X
Et ci-dessous la liste des "mapChangeData" :
Cliquez pour révéler
Cliquez pour masquer
0 -1 0 0 2 0 -21 5 0 0 0 -1 0 0
2 0 -75 5 0 0 14 -1 0 -4 3 0 -21 7
0 0 14 -1 0 0 4 0 -31 7 0 0 0 -1
0 0 5 0 -31 8 0 0 0 -1 0 -4 5 0
-31 8 0 0 14 -1 0 0 0 0 -31 -2 0 0
0 -1 0 0 1 0 -19 0 0 0 0 -1 0 0
1 0 -31 4 0 0 0 -1 0 0 2 0 -21 6
0 0 14 -1 0 -4 3 0 -21 7 0 0 0 -1
0 0 4 0 -31 8 0 0 0 -1 0 0 5 0
-21 8 0 0 0 -1 0 0 5 0 -31 8 0 0
14 -1 0 -4 6 0 -31 7 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 2 0
0 0 -31 5 0 8 -21 5 0 0 0 0 0 0
0 0 1 -4 0 0 1 -4 0 0 1 -4 0 0
2 -4 0 0 -31 7 0 13 -31 7 0 0 0 0
0 0 0 0 -31 8 0 0 0 0 0 -4 1 0
-21 7 0 14 -31 -1 0 15 -31 -1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 0 0 0 -31 5 0 21
-31 6 0 22 -21 7 0 23 -21 7 0 24 -21 7
0 25 -21 8 0 26 -31 8 0 27 -31 8 0 0
0 0 0 0 0 0 -21 7 0 0 0 0 0 0
1 0 -21 7 0 0 7 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0
2 0 0 0 -31 1 0 33 -31 3 0 34 -31 5
0 35 -31 5 0 36 -21 6 0 0 0 0 0 0
0 0 1 -4 0 0 1 -4 0 0 1 -4 0 0
2 -4 0 0 -31 8 0 41 -31 7 0 0 0 0
0 0 0 0 -31 8 0 0 14 0 0 0 1 0
-31 7 0 0 14 0 0 -4 1 0 1 0 0 0
1 0 0 0 1 0 0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0 0 0 1 0 0 0
2 -4 0 0 -31 7 0 51 -21 7 0 52 -21 7
0 53 -21 8 0 54 -21 8 0 0 0 0 0 0
0 0 0 0 0 0 -31 8 0 0 0 0 0 -4
1 0 -31 7 0 0 10 0 0 -4 1 0 1 0
0 0 1 0 0 0 1 0 0 0 1 0 0 0
1 0 0 0 1 0 0 0 1 0 0 0 2 0
0 0 -31 5 0 64 -31 6 0 65 -21 7 0 0
Rien ne reflète ici que la map de gauche est inaccessible, ni que la partie gauche de la map n'est pas accessible non plus.
J'ai plusieurs hypothèses :
- Le parsing du fichier DLM est incorrect : ça m'étonne, car j'ai comparé avec le parsing fait dans le "Raidbot" (trouvé sur ce forum aussi), et il m'a l'air similaire
- Les "cells" ne sont pas triées correctement (ce qui voudrait dire que la première cellule de ce tableau n'est pas la cellId = 1, en haut à gauche)
- Le parser ne fonctionne pas avec des map dont la mapVersion est égal à 11
- Je me trompe complètement sur l'interprétation des DLM, ou bien l'info que je cherche n'est pas à cet endroit, et dans ce cas-là je suis perdu :'(
Désolé pour le pavé, j'espère que quelqu'un aura une idée !