Analyse Map message interpretation

Inscrit
23 Janvier 2016
Messages
21
J'aime
5
#1
Hello !

Je suis en train de faire les deserializer pour les informations de map,
et j'ai quelques petites questions :

1/ Dans le CurrentMapMessage(220), on fait 2 choses : readDouble puis readUTF resp. pour mapid et mapkey.
C'est quoi le mapkey ? Je trouve une chaîne cheloue 649.............................f4

2/ Qqn a compris l'utilité du MapInformationsRequestMessage(225) ? Je ne lis qu'un mapId qui vaut tt le temps 0,
edit: J'ai 32 bits à 0 devant le mapid, aucune idée de ce à quoi ça correspond, j'ai pe un soucis au niveau de la lecture de la taille... une exception lorsqu'elle vaut 0 ? (je lis un len_type=1, puis l'octet de taille vaut 0, donc j'ai len=0 il y a un truck à faire dans ce cas ?)

3/ On passe comment du mapid aux coordonnées ? La fonction com.ankamagames.jerakine.types.positions.WorldPoint.setfromMapId() fonctionne po trop (pas du tout en fait .. localement dans le jeu on peut corriger les coordonnées (genre x+=23, y+=2) et ça fonctionnera sur les quelques maps aux alentours, mais après c dead)

Merci d'avance à ceux qui auront les réponses :inlove:

Edit: J'ai pas mal traîné sur le forum, et apparemment je dois lire les d2o pour récup les coordonnées à partir des mapid
 
Dernière édition:
Inscrit
29 Juin 2019
Messages
1
J'aime
0
#2
2/ MapInformationsRequestMessage est un message Client, donc tu as l'intanceId qui correspond à tes 32 bits (int)
 
Inscrit
23 Janvier 2016
Messages
21
J'aime
5
#3
2/ MapInformationsRequestMessage est un message Client, donc tu as l'intanceId qui correspond à tes 32 bits (int)
Ah ok, jpensais avoir filtré que les messages serveur, bizarre.
Merci :)


----------------------------

Du coup maintenant il reste : le mapkey, mais ça osef (sauf si qqn sait), et surtout un moyen simple pour passer de la mapid aux coords.
ça doit se faire non ? x) une coord c'est sur 9bits, il faut 2 coords, ça fait 18 pour les 2 coords, ça devrait tenir dans les 64bits d'un mapid nan ?

J'ai pas envie de parser les d2o :'( je sens que ça va me prendre bcp trop de temps à faire.
ça + Int64 bcp trop relou à faire mdr
 
Dernière édition:
Inscrit
23 Janvier 2019
Messages
2
J'aime
3
#4
1/ Le mapKey (l'actuel étant 649ae451ca33ec53bbcbcc33becf15f4) est utilisé pour décrypter les dlm des maps dofus.
=> https://github.com/balciseri/PyDofus/blob/master/dlm_unpack.py


2/ Exemple : [=>][MapInformationsRequestMessage#225]:{'mapId': 142088206}
Effectivement, il vient du client donc avec l'instanceId.

3/ Pour les mapId, le plus simple que j'ai trouvé est effectivement d'utiliser un dictionnaire contenant les coordonnées.
Si tu as réussi à avoir le MapPositions.json, tu devrais t'en sortir avec un petit script python du type :

Code:
import json

with open('MapPositions.Json') as f:
    mapPositions = json.load(f)

mapIdToCoords = {}
for k in mapPositions:
    mapIdToCoords[int(k['id'])] = [k['posX'], k['posY']]

#J'ai choisi d'indenter au maximum ce fichier pour l'exemple

with open('MapPositionsId.json', 'w') as f:
    json.dump(mapIdToCoords, f, indent = 4)
 
Haut Bas