Analyse Probleme d'analyse manuelle

Inscrit
13 Février 2020
Messages
1
Reactions
0
#1
Bonjour a tous! Je suis nouveau sur ce forum et j'y ai appris plein de chose donc je vous en remercie.
Apres avoir lu je pense tous les tutos en lien avec mon problème je doit surement passer a coté de quelque chose.

Avec wireshark j'ai récupéré le message contenant les informations de la map sur laquelle j'arrive (lors d'un changement de map). Mon probleme se situe dans les premieres lignes

23 ce 04 05 60 41 a7 08 00 06 00 00 00 00 00 00 04 0b

pour le debut biensur 23 ce signifie 100011110011 = 2291 et 10 = 2. la taille du message est donc 04 05 = 1029

voila le debut du deserialize associé:

public function deserializeAs_MapComplementaryInformationsDataMessage(input:ICustomDataInput) : void
{
var _id3:uint = 0;
var _item3:HouseInformations = null;
var _id4:uint = 0;
var _item4:GameRolePlayActorInformations = null;
var _id5:uint = 0;
var _item5:InteractiveElement = null;
var _item6:StatedElement = null;
var _item7:MapObstacle = null;
var _item8:FightCommonInformations = null;
this._subAreaIdFunc(input);
this._mapIdFunc(input);
var _housesLen:uint = input.readUnsignedShort();
for(var _i3:uint = 0; _i3 < _housesLen; _i3++)
{
_id3 = input.readUnsignedShort();
_item3 = ProtocolTypeManager.getInstance(HouseInformations,_id3);
_item3.deserialize(input);
this.houses.push(_item3);
}
var _actorsLen:uint = input.readUnsignedShort();
for(var _i4:uint = 0; _i4 < _actorsLen; _i4++)
{
_id4 = input.readUnsignedShort();
_item4 = ProtocolTypeManager.getInstance(GameRolePlayActorInformations,_id4);
_item4.deserialize(input);
this.actors.push(_item4);
}
...

et les fonction mapIdFunc:

private function _mapIdFunc(input:ICustomDataInput) : void
{
this.mapId = input.readDouble();
if(this.mapId < 0 || this.mapId > 9007199254740990)
{
throw new Error("Forbidden value (" + this.mapId + ") on element of MapComplementaryInformationsDataMessage.mapId.");
}
}

et subAreaidFunc:

private function _subAreaIdFunc(input:ICustomDataInput) : void
{
this.subAreaId = input.readVarUhShort();
if(this.subAreaId < 0)
{
throw new Error("Forbidden value (" + this.subAreaId + ") on element of MapComplementaryInformationsDataMessage.subAreaId.");
}
}

de la j'en deduis que 60 41 = 24641 est l'id de la sous zone et a7 08 00 06 00 00 00 00 = 100665511 l'id de la map sur laquelle je me trouve que j'obtiens en inversant l'endianness (si j'ai bien compris) ensuite 00 00 = 0 le nombre de maisons et 04 0b = 1035 le nombre d'acteurs sur la map. Problème: a moins que je n'ai pas compris ce qu'est un acteur (j'ai supposé qu'il s'agissait des monstres, NPC, et joueurs ) il n'y en a pas 1035 sur la map mais 4 soit le premier byte.

Question 1: Pourquoi? Quelle valeur ne prend qu'un bytes?.
Question 2: pour obtenir l'id de la map j'ai convertis les 8 bytes associés, faut-il plutot le convertir comme un double c'est a dire prendre le premier bytes pour le signe les 5 (peut etre 5 je ne sais plus) suivant pour l'exposant et la suite pour la valeur?

Merci déjà a ceux qui liront mon postes et essayerons d'y répondre!
 
Haut Bas