Aussi, je viens de remarquer, mais dans le dofusinvoker de nightwolf, le serialize de l'IdentificationMessage est différent de l'officiel.
Version patché
Cliquez pour révéler
Cliquez pour masquer
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_++;
}
}
Officiel
Cliquez pour révéler
Cliquez pour masquer
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 :
code
Cliquez pour révéler
Cliquez pour masquer
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 = (uint) reader.ReadVarShort();
}