C# Client ne répondant pas lors de la connexion

Inscrit
3 Mars 2017
Messages
13
Reactions
0
#22
Inscrit
27 Mai 2016
Messages
14
Reactions
0
#23
Aussi, je viens de remarquer, mais dans le dofusinvoker de nightwolf, le serialize de l'IdentificationMessage est différent de l'officiel.
C#:
public function serializeAs_IdentificationMessage(param1:ICustomDataOutput) : void
      {
         var _loc2_:uint = 0;
         _loc2_ = BooleanByteWrapper.setFlag(_loc2_,0,this.autoconnect);
         _loc2_ = BooleanByteWrapper.setFlag(_loc2_,1,this.useCertificate);
         _loc2_ = BooleanByteWrapper.setFlag(_loc2_,2,this.useLoginToken);
         param1.writeByte(_loc2_);
         this.version.serializeAs_VersionExtended(param1);
         param1.writeUTF(this.lang);
         param1.writeShort(this.serverId);
         if(this.sessionOptionalSalt < -9007199254740990 || this.sessionOptionalSalt > 9007199254740990)
         {
            throw new Error("Forbidden value (" + this.sessionOptionalSalt + ") on element sessionOptionalSalt.");
         }
         param1.writeVarLong(this.sessionOptionalSalt);
         param1.writeShort(this.failedAttempts.length);
         var _loc4_:uint = 0;
         while(_loc4_ < this.failedAttempts.length)
         {
            if(this.failedAttempts[_loc4_] < 0)
            {
               throw new Error("Forbidden value (" + this.failedAttempts[_loc4_] + ") on element 9 (starting at 1) of failedAttempts.");
            }
            param1.writeVarShort(this.failedAttempts[_loc4_]);
            _loc4_++;
         }
      }
C#:
public function serializeAs_IdentificationMessage(param1:ICustomDataOutput) : void
      {
         var _loc2_:uint = 0;
         _loc2_ = BooleanByteWrapper.setFlag(_loc2_,0,this.autoconnect);
         _loc2_ = BooleanByteWrapper.setFlag(_loc2_,1,this.useCertificate);
         _loc2_ = BooleanByteWrapper.setFlag(_loc2_,2,this.useLoginToken);
         param1.writeByte(_loc2_);
         this.version.serializeAs_VersionExtended(param1);
         param1.writeUTF(this.lang);
         param1.writeVarInt(this.credentials.length);
         var _loc3_:uint = 0;
         while(_loc3_ < this.credentials.length)
         {
            param1.writeByte(this.credentials[_loc3_]);
            _loc3_++;
         }
         param1.writeShort(this.serverId);
         if(this.sessionOptionalSalt < -9007199254740990 || this.sessionOptionalSalt > 9007199254740990)
         {
            throw new Error("Forbidden value (" + this.sessionOptionalSalt + ") on element sessionOptionalSalt.");
         }
         param1.writeVarLong(this.sessionOptionalSalt);
         param1.writeShort(this.failedAttempts.length);
         var _loc4_:uint = 0;
         while(_loc4_ < this.failedAttempts.length)
         {
            if(this.failedAttempts[_loc4_] < 0)
            {
               throw new Error("Forbidden value (" + this.failedAttempts[_loc4_] + ") on element 9 (starting at 1) of failedAttempts.");
            }
            param1.writeVarShort(this.failedAttempts[_loc4_]);
            _loc4_++;
         }
      }

On remarque que dans le dofusinvoker patché, on ne serialize pas les credentials.
Donc si on utilise le déserialize présent dans la version officielle, il y aura forcément un problème lorsque l'on déserialize.

Voici le déserialize qui correspond :
C#:
public override void Deserialize(IDataReader reader)
        {
            var flag1 = reader.ReadByte();
            Autoconnect = BooleanByteWrapper.GetFlag(flag1, 0);
            UseCertificate = BooleanByteWrapper.GetFlag(flag1, 1);
            UseLoginToken = BooleanByteWrapper.GetFlag(flag1, 2);
            Version = new VersionExtended();
            Version.Deserialize(reader);
            Lang = reader.ReadUTF();
            ServerId = reader.ReadShort();
            SessionOptionalSalt = reader.ReadVarLong();

            var failLimit = reader.ReadShort();
            for (var i = 0; i < failLimit; i++)
                FailedAttempts[i] = (uint) reader.ReadVarShort();
        }
 
Inscrit
27 Mai 2016
Messages
14
Reactions
0
#24
Oui c'est sur que c'est mieux de faire comme ça ^^ mais peut être que cela lui sera utile et que ça réglera son problème :)
 
Inscrit
3 Mars 2017
Messages
13
Reactions
0
#25
Oui c'est sur que c'est mieux de faire comme ça ^^ mais peut être que cela lui sera utile et que ça réglera son problème :)
Malheureusement ça ne change rien, du coup je pense que je dois tout mettre à jour
 
Inscrit
3 Mars 2017
Messages
13
Reactions
0
#26
J'ai fait une application pour traduire rapidement les classes AS3 en C#, il est pas tip top et j'ai du réinventer la roue mais bon, c'est déjà ça ! J'ai juste mis à jour les packets concernés pour le moment.

Après quelques modifs au niveau du Writer, j'en suis venu ici :



j'ai réussi à réanimer le client, je me connecte, petit temps d'attente puis les textbox ne deviennent plus grisées, mais pas de popup comme quoi l'authentification a fail, et il y a toujours ce Id 0 Length 0 qui pose problème

l'autre packet inconnu a disparu, il ne reste plus que celui-là
 

Labo

Membre Actif
Inscrit
16 Aout 2013
Messages
799
Reactions
15
#27
Moi ce que je conseille toujours dans ces cas, c'est de regarder exactement ce qui est envoyé avec Wireshark (ou mes LaBot-Tools ou équivalent).
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#28
ca c'est surement le parser qui delire (quand est ce que ce "tuto" C# qui a jamais marché va sauter ? j'ai l'impression que tout ceux qui font du C# tombent dessus)
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#29
Enfin ya même pas vraiment de problème, il utilise les sources d'un DofusInvoker qui ne correspond pas à l'émulateur, c'est normal que ça pose des problèmes.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#30
de toute maniere , le parser ne doit jamais renvoyer un ID = 0 et length = 0 , sinon c'est qu'il est mal foutu
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#31
Une exception dans le Deserialize provoque un paquet null je pense, a moins que le paquet soit vide.
 
Haut Bas