Bonsoir, j'espère que vous allez bien ! Bon, j'ai repris Rebirth1 il y a peu afin de le rendre compatible avec la version actuel Dofus. Dans un premier lieu, j'ai réussi à me connecter à la liste du serveur, cependant en essayant de me connecter à un serveur D2, on me déconnecte systématiquement après la reception du 42.
Alors, j'ai suivi le code en mettant des points d'arrêt afin de me renseigner sur l'emplacement du bug, apparemment c'est lors du deserialize du 42
J'ai reverifié les readers ( ceux d'BlueDream que j'ai traduit en VB) mais ils sont bel et bien corrects. Les voilà ainsi que le 42 :
42 :
Readers concernés ( ceux d'BlueDream que j'ai traduit en VB) :
Une autre chose bizarre remarquée c'est qu'en analysant les datas du 42 , le canCreateNewCharacter n'a pas de bytes correspondants et l'adresse est 213.248.126.94 alors que c'est en local normalement. Voilà le screen corresponsant "pas de bytes pour le canCreateNewCharacter" :
Alors, j'ai suivi le code en mettant des points d'arrêt afin de me renseigner sur l'emplacement du bug, apparemment c'est lors du deserialize du 42
ElseIf (PacketID = 42 Or PacketID = 6469) Then
Dim Message As New SelectedServerDataMessage
If (PacketID = 6469) Then
Message = New SelectedServerDataExtendedMessage
End If
Message.Deserialize(Reader)
Dim Message As New SelectedServerDataMessage
If (PacketID = 6469) Then
Message = New SelectedServerDataExtendedMessage
End If
Message.Deserialize(Reader)
J'ai reverifié les readers ( ceux d'BlueDream que j'ai traduit en VB) mais ils sont bel et bien corrects. Les voilà ainsi que le 42 :
42 :
Imports RebirthAPI.Network
Namespace Dofus.Network.Messages.Connection
Public Class SelectedServerDataMessage
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 42
Private _ServerId As UShort
Private _Address As String
Private _Port As UShort
Private _CanCreateNewCharacter As Boolean
Private _Ticket As SByte()
Public Property [ServerId] As UShort
Get
Return Me._ServerId
End Get
Set(value As UShort)
Me._ServerId = value
End Set
End Property
Public Property [Address] As String
Get
Return Me._Address
End Get
Set(value As String)
Me._Address = value
End Set
End Property
Public Property [Port] As UShort
Get
Return Me._Port
End Get
Set(value As UShort)
Me._Port = value
End Set
End Property
Public Property [CanCreateNewCharacter] As Boolean
Get
Return Me._CanCreateNewCharacter
End Get
Set(value As Boolean)
Me._CanCreateNewCharacter = value
End Set
End Property
Public Property [Ticket] As SByte()
Get
Return Me._Ticket
End Get
Set(value As SByte())
Me._Ticket = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As DofusMessage)
Writer.WriteVaruhshort(Me._ServerId)
Writer.WriteString(Me._Address)
Writer.WriteUInt16(Me._Port)
Writer.WriteBoolean(Me._CanCreateNewCharacter)
Writer.WriteVarint(CInt(CUShort(Ticket.Length)))
For Each entry As SByte In Ticket
Writer.WriteSByte(entry)
Next
End Sub
Public Overrides Sub Deserialize(ByVal Reader As DofusReader)
Me._ServerId = Reader.ReadVaruhshort
Me._Address = Reader.ReadString
Me._Port = Reader.ReadUInt16
Me._CanCreateNewCharacter = Reader.ReadBoolean
Dim limit = CUShort(Reader.ReadVarInt())
_Ticket = New SByte(limit - 1) {}
For i As Integer = 0 To limit - 1
_Ticket(i) = Reader.ReadSByte()
Next
End Sub
End Class
End Namespace
Namespace Dofus.Network.Messages.Connection
Public Class SelectedServerDataMessage
Inherits NetworkMessage
Public Overrides Property ProtocolID As UInteger = 42
Private _ServerId As UShort
Private _Address As String
Private _Port As UShort
Private _CanCreateNewCharacter As Boolean
Private _Ticket As SByte()
Public Property [ServerId] As UShort
Get
Return Me._ServerId
End Get
Set(value As UShort)
Me._ServerId = value
End Set
End Property
Public Property [Address] As String
Get
Return Me._Address
End Get
Set(value As String)
Me._Address = value
End Set
End Property
Public Property [Port] As UShort
Get
Return Me._Port
End Get
Set(value As UShort)
Me._Port = value
End Set
End Property
Public Property [CanCreateNewCharacter] As Boolean
Get
Return Me._CanCreateNewCharacter
End Get
Set(value As Boolean)
Me._CanCreateNewCharacter = value
End Set
End Property
Public Property [Ticket] As SByte()
Get
Return Me._Ticket
End Get
Set(value As SByte())
Me._Ticket = value
End Set
End Property
Public Overrides Sub Serialize(ByVal Writer As DofusMessage)
Writer.WriteVaruhshort(Me._ServerId)
Writer.WriteString(Me._Address)
Writer.WriteUInt16(Me._Port)
Writer.WriteBoolean(Me._CanCreateNewCharacter)
Writer.WriteVarint(CInt(CUShort(Ticket.Length)))
For Each entry As SByte In Ticket
Writer.WriteSByte(entry)
Next
End Sub
Public Overrides Sub Deserialize(ByVal Reader As DofusReader)
Me._ServerId = Reader.ReadVaruhshort
Me._Address = Reader.ReadString
Me._Port = Reader.ReadUInt16
Me._CanCreateNewCharacter = Reader.ReadBoolean
Dim limit = CUShort(Reader.ReadVarInt())
_Ticket = New SByte(limit - 1) {}
For i As Integer = 0 To limit - 1
_Ticket(i) = Reader.ReadSByte()
Next
End Sub
End Class
End Namespace
Readers concernés ( ceux d'BlueDream que j'ai traduit en VB) :
Public Function ReadVarShort() As Short
Dim local_4 = 0
Dim local_1 = 0
Dim local_2 = 0
Dim local_3 = False
While local_2 < SHORT_SIZE
local_4 = ReadByte()
local_3 = (local_4 And MASK_1) = MASK_1
If local_2 > 0 Then
local_1 += ((local_4 And MASK_0) << local_2)
Else
local_1 += (local_4 And MASK_0)
End If
local_2 += CHUNCK_BIT_SIZE
If Not local_3 Then
If local_1 > SHORT_MAX_VALUE Then
local_1 -= UNSIGNED_SHORT_MAX_VALUE
End If
Return local_1
End If
End While
Throw New System.Exception("Too much data")
End Function
Public Function ReadVarUhShort() As UShort
Return CUShort(ReadVarShort())
End Function
Dim local_4 = 0
Dim local_1 = 0
Dim local_2 = 0
Dim local_3 = False
While local_2 < SHORT_SIZE
local_4 = ReadByte()
local_3 = (local_4 And MASK_1) = MASK_1
If local_2 > 0 Then
local_1 += ((local_4 And MASK_0) << local_2)
Else
local_1 += (local_4 And MASK_0)
End If
local_2 += CHUNCK_BIT_SIZE
If Not local_3 Then
If local_1 > SHORT_MAX_VALUE Then
local_1 -= UNSIGNED_SHORT_MAX_VALUE
End If
Return local_1
End If
End While
Throw New System.Exception("Too much data")
End Function
Public Function ReadVarUhShort() As UShort
Return CUShort(ReadVarShort())
End Function
Une autre chose bizarre remarquée c'est qu'en analysant les datas du 42 , le canCreateNewCharacter n'a pas de bytes correspondants et l'adresse est 213.248.126.94 alors que c'est en local normalement. Voilà le screen corresponsant "pas de bytes pour le canCreateNewCharacter" :
Dernière édition par un modérateur: