VB/VB.Net Problème avec le Writer

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#1
Bonjour, bonnes fêtes à vous pour commencer.

J'ai actuellement un soucis !
En effet, je souhaite parler avec un PNJ à l'aide de mon programme mais un problème survient alors.

Quand je sniffe, voilà ce que j'envoie (à l'aide du client donc)
Code:
 Client : Id=5898 Len=9     
FF FF FF FF 03 03 F0 0A 02
Et voici avec quoi je l'écris :
Code:
        param1.WriteInt32(Me.npcId)
        param1.WriteByte(Me.npcActionId)
        param1.WriteInt32(Me.npcMapId)
Si on analyse ce packet,
FF FF FF FF <=> param1.WriteInt32(Me.npcId)
03 <=> param1.WriteByte(Me.npcActionId)
03 F0 0A 02 <=> param1.WriteInt32(Me.npcMapId)

Et voilà ce que envoie mon programme :
Code:
Bot : Id=5898 Len=9     
00 00 05 F7 03 03 F0 0A 02
De la même manière, si on analyse ce packet
00 00 05 F7 <=> param1.WriteInt32(Me.npcId)
03 <=> param1.WriteByte(Me.npcActionId)
03 F0 0A 02 <=> param1.WriteInt32(Me.npcMapId)

Je vous vois venir : "Bah tu sais qu'il faut envoyer FF FF FF FF, pourquoi tu le fait pas ?"

Le problème étant que lors de la deserialization du packet 226, je trouve que l'ID du PNJ auquel je souhaite interagir est 1527
Or, 1527 en Hexa donne bien 5F7(et non pas 4294967295, qui es l'écriture décimale de FF FF FF FF comme le dit le client)
De plus mon Writer est correct puisque l'écriture de la MapId est elle aussi en Int32 et est pourtant cohérente avec mon packet sniffer

Pour résumer, pourquoi le client envoie FF FF FF FF ? Je souhaite comprendre car l'erreur m'échappe, c'est surement quelque chose de tout simple pourtant ..


J'espère que mon problème a été expliqué clairement, si ce n'est pas le cas n'hésitez pas à me demander.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
Salut , bonnes fetes ,
ca vient peu etre du parseur de d0fusenter , essais avec wpepro si tu as encore FF FF FF FF ou essai de lire data (donc "Buffer" si mes souvenirs sont bons) avant qu'il soit parsé , cette erreur ressemble a la lecture d'un uint a la place d'un int (ce qui me parait bizarre car le parseur ecrit les octets en brut)
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#3
Je vais suivre tes conseils, j'éditerais si ça avance :) merci de ton aide !

Voilà ce que reçoit(enfin plutôt envoie) WPE Pro :
5C 29 09 FF FF FF FF 03 03 F0 03 05

Donc effectivement il y a un problème avec le parseur :/ Et meurde :p
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
heu non le parseur donne la meme chose que wpe (FF FF FF FF 03 03 F0 03 05 sans le header) donc ca vien d'ailleur (ouffff) , j'avais fait ca pour le banquier mais je me souvien plus comment je crois que il faut pas regarder le npcId mais le actorId du npc
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#5
Ah oui j'suis bête 09 c'est sa taille et 5C 29 c'est l'header, j'avais zappé
Bah j'vais faire des p'tits test dans ce cas
(mais FF FF FF FF me paraît quand même beaucoup ..)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
non c'est juste -1 :) (comme les id des groupes de monstres)
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#7
Oui tifoux m'a indiqué que c'était le Contextual Id et non le npcId :)
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#8
Rebonjour, besoin de vous :p

Code:
param1.WriteShort(Me.keyMovements.Count)
        For i As Integer = 0 To Me.keyMovements.Count - 1
            param1.WriteShort(Me.keyMovements(i))
        Next
        param1.WriteInt32(Me.mapId)
Voici mon code pour le déplacement.
Or celui-ci provoque un dépassement des capacités (quand je "WriteShort")
Ma question : C'est bien les CellID que l'on écrit dans les short ? si oui, je ne comprends pas pourquoi sa provoque un dépassement :/
 
Inscrit
29 Septembre 2011
Messages
393
Reactions
3
#9
tu a essayer comme sa
param1.WriteShort(Me.keyMovements.Count)
For i As Integer = 0 To Me.keyMovements.Count - 1
param1.WriteUShort(Me.keyMovements(i))
Next
param1.WriteInt32(Me.mapId)
 

4R7Y

Contributeur
Inscrit
6 Mars 2011
Messages
213
Reactions
0
#10
voici le code As (sans les trucks inutiles)
Code:
public function serializeAs_GameMapMovementRequestMessage(param1:IDataOutput) : void
        {
            param1.writeShort(this.keyMovements.length);
            var _loc_2:uint = 0;
            while (_loc_2 < this.keyMovements.length)
            {
                param1.writeShort(this.keyMovements[_loc_2]);
                _loc_2 = _loc_2 + 1;
            }
            param1.writeInt(this.mapId);
            return;
        }// end function
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#11
param1.WriteShort(Me.keyMovements(i)) ou Ushort ca change pas grand chose on depasse jamais 32768 (559 au pire) , keymovements c'est un tableau de quoi ? le probleme arrive au 1er writeshort ou a celui de la boucle ? que contient keymovements ? le writeshort il vient d'ou (au pire donne le code , si je me souvient celui du bot overedge bug) ?
 

Lakh92

Membre Actif
Inscrit
24 Decembre 2009
Messages
118
Reactions
0
#12
M'est avis que tu devrais aller voir du côté de MapMovementAdapter.as !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#13
c'est WriteShort qui allé pas
 
Haut Bas