Par rapport à la demande d'aide en général, j'imagine qu'il vaut mieux la demander dans la partie Développement > Questions / Réponses, plutôt que dans la partie Général, non? (ça me paraît logique, mais je préfère vérifier: j'aime les choses bien organisées).
Merci ybrik, pour le soutient.
Aussi, je me suis inscrit sur le Discord, mais je ne sais pas si les choses se feront vraiment là-bas. Il vaut mieux? (Je préfère ici, personnellement).
J'aimerais écrire sur ma manière de faire mes recherches, mes avancement, et ma compréhension du code. Le but: montrer qu'on est capable de commencer à partir de peu de choses (forum, et quelques bouts de code), de se dém*rder et d'arriver à un résultat sympa. Donc j'espère avoir la foi d'écrire mon avancée petit à petit.
Pour mon avancée, comme je disais avant, je me suis lancé sur la partie 'MapComplementaryInformationsDataMessage'. Et j'ai l'impression d'avoir tout plein d'informations très intéressantes (lorsque je sniff). Aussi, en farfouillant le forum, j'ai trouvé :
- https://cadernis.com/d/2466-compréhension-des-maps-dlm
- https://cadernis.com/d/656-c-gestion-des-maps-et-déplacements
- https://cadernis.com/d/2550-map-144931-banque-brak-bot-combat-déplacement
- https://cadernis.com/d/2264-parsing-dlm
- https://cadernis.com/d/1499-déplacement-changement-de-map
Le premier lien aide déjà beaucoup. Apparemment, on peu avoir recours à PyDofus de balciseri. Le but, si j'ai bien compris, étant de modifier les fichiers d2p pour pouvoir extraire les informations dont on a besoin.
- Convertir les .d2p en .dlm
- Convertir les .dlm en .json
J'ai donc utilisé PyDofus: la première conversion a fonctionné pour tous les fichiers .d2p (j'ai un peu modifié le code pour que ce soit mieux organisé, car de ce que j'ai compris, ce sont différentes personnes qui ont travaillé dessus, et le code n'était pas harmonieux (la sauvegarde n'était pas au bon endroit)).
Pour la deuxième conversion, je reprend Pydofus et cette fois, je veux transformer les .dlm en .json et... patatra:
Cliquez pour révéler
Cliquez pour masquer
Je lance le code en mode "bourrin" pour tous mes .dlm et... certains fonctionnent:
.\input\maps1_9.d2p\9\206832129.dlm
D'autres non:
Problème avec le fichier .\input\maps1_9.d2p\9\206832129.dlm
.\input\maps1_9.d2p\9\207094279.dlm
Plus précisément (je vous met ça là, on sait jamais si quelqu'un l'a déjà vu):
Traceback (most recent call last):
File "dlm_unpack.py", line 13, in <module>
data = dlm.read()
File "C:\Users\Nolly\Programmation\Projets_Python_Sniffer_MITM\Second_Projet\truc\PyDofus\pydofus\dlm.py", line 31, in read
map.read()
File "C:\Users\Nolly\Programmation\Projets_Python_Sniffer_MITM\Second_Projet\truc\PyDofus\pydofus\dlm.py", line 154, in read
la.read()
File "C:\Users\Nolly\Programmation\Projets_Python_Sniffer_MITM\Second_Projet\trucr\PyDofus\pydofus\dlm.py", line 326, in read
ce.read()
File "C:\Users\Nolly\Programmation\Projets_Python_Sniffer_MITM\Second_Projet\truc\PyDofus\pydofus\dlm.py", line 368, in read
el = BasicElement().GetElementFromType(self, self.raw().read_char(), self.mapVersion)
File "C:\Users\Nolly\Programmation\Projets_Python_Sniffer_MITM\Second_Projet\truc\PyDofus\pydofus\dlm.py", line 556, in GetElementFromType
raise InvalidDLMFile("Invalid element type.")
pydofus.dlm.InvalidDLMFile: Invalid element type.
Je me dis alors deux choses:
- soit "T'es un blaireau Nolly, t'as dû mal comprendre, ça pouvait pas être aussi simple."
- soit "Merde, PyDofus a été mis à jour il y a au moins deux ans, ça vient peut-être de là."
Comme je pense pas être un animal de sous-classe Théria (cf. Wikipedia), je me suis mis à essayer de comprendre les fichiers de PyDofus. De ce que j'ai compris, il y a bien eu une mise à jour il y a deux ans, donc ça a très bien pu ré-arriver entre temps. Petites questions en passant: Est-ce que quelqu'un en sait plus là-dessus? Et aussi: doit-on mettre à jour les fichiers .d2p à chaque nouvelle maj du jeu (j'imagine que ce n'est le cas que si des maps on été modifiées/ajoutées/enlevées)?
Bref, j'ai fait ce qui me semblait "intelligent" (entre guillemet car "Qu'est-ce que l'intelligence?") et j'ai comparé les fichiers de dofus : \com\ankamagames\atouin\data\map avec le code de PyDofus. "Et là, c'est le drame..." : j'ai trouvé des différences! Exemple (parmi tant d'autres):
Différences:
Cliquez pour révéler
Cliquez pour masquer
A la ligne ~125 du fichier dlm.py, l'attribut "useLowPassFilter" ne semble pas exister dans Map.as :
self._obj["useLowPassFilter"] = self.raw().read_bool() # de dlm.py
Est-ce que je travaille dans le bon sens? Est-ce que quelqu'un avait remarqué ça? Je pense que si j'ai raison et que je modifie correctement ce fichier, je peut demander de le pull pour que les prochaines personnes n'aient pas à se farcir tout ça.
J'espère alors que quand j'aurais tous les fichiers au format .json, je pourrais à nouveau progresser sur la suite.
Voilà mon avancement. Je sais, j'écris beaucoup. Mais c'est le but. J'espère que vous ne serez pas découragés par mes pavés. Pour les fatigués des yeux, je suis désolé. Encore une fois, c'est pour moi, mais c'est aussi pour que les potentiels nouveaux voient comment ça progresse.
D'ailleurs, je disais que j'aime bien l'organisation. Mais là... Ne devrais-je pas en parler autre part qu'ici? (genre dans les Questions/Réponses) *-*