VB/VB.Net [Requete] Connaître la Cellid ?

  • Auteur de la discussion Anonymous
  • Date de début
A

Anonymous

Invité
#41
Rrrrrrrrrrrrrrrrr

Je vais chercher encore ...

Si vous n'avez rien à faire (on sait jamais hein :D )
Code:
Private _isInitialized As Boolean = False
    Public subareaId As Integer = 0
    Public mapId As Integer = 0
    Public subareaAlignmentSide As Integer = 0
    Public houses As New List(Of HouseInformations)
    Public actors As New List(Of GameRolePlayActorInformations)
    Public interactiveElements As New List(Of InteractiveElement)
    Public statedElements As New List(Of StatedElement)
    Public obstacles As New List(Of MapObstacle)
    Public fights As New List(Of FightCommonInformations)
    Public Const protocolId As UInteger = 226
Public Function deserializeAs_MapComplementaryInformationsDataMessage(ByVal param1 As Dofus.DofusReader)

        Dim _loc_14 As UInteger = 0
        Dim _loc_15 As HouseInformations = Nothing
        Dim _loc_16 As UInteger = 0
        Dim _loc_17 As GameRolePlayActorInformations = Nothing
        Dim _loc_18 As InteractiveElement = Nothing
        Dim _loc_19 As StatedElement = Nothing
        Dim _loc_20 As MapObstacle = Nothing
        Dim _loc_21 As FightCommonInformations = Nothing
        Me.subareaId = param1.ReadShort()
        If (Me.subareaId < 0) Then

            Console.WriteLine("Forbidden value (" + Me.subareaId + ") on element of MapComplementaryInformationsDataMessage.subareaId.")
        End If
        Me.mapId = param1.ReadInt()
        If (Me.mapId < 0) Then

            Console.WriteLine("Forbidden value (" + Me.mapId + ") on element of MapComplementaryInformationsDataMessage.mapId.")
        End If
        Me.subareaAlignmentSide = param1.ReadByte()
        Dim _loc_2 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_3 As Integer = 0
        While (_loc_3 < _loc_2)


            _loc_14 = param1.ReadUnSignedshort()
            _loc_15 = ProtocolTypeManager.getInstance(_loc_14)
            _loc_15.deserialize(param1)
            Me.houses.add(_loc_15)
            _loc_3 = _loc_3 + 1
        End While
        Dim _loc_4 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_5 As UInteger = 0
        While (_loc_5 < _loc_4)


            _loc_16 = param1.ReadUnSignedshort()
            _loc_17 = ProtocolTypeManager.getInstance(_loc_16) 'Avant ici
            _loc_17.deserialize(param1)
            Me.actors.add(_loc_17)
            _loc_5 = _loc_5 + 1
        End While
        Dim _loc_6 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_7 As Integer = 0
        While (_loc_7 < _loc_6)


            _loc_18 = New InteractiveElement()
            _loc_18.deserialize(param1)
            Me.interactiveElements.add(_loc_18)
            _loc_7 = _loc_7 + 1
        End While
        Dim _loc_8 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_9 As Integer = 0
        While (_loc_9 < _loc_8)


            _loc_19 = New StatedElement()
            _loc_19.deserialize(param1)
            Me.statedElements.add(_loc_19)
            _loc_9 = _loc_9 + 1
        End While
        Dim _loc_10 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_11 As UInteger = 0
        While (_loc_11 < _loc_10)


            _loc_20 = New MapObstacle()
            _loc_20.deserialize(param1)
            Me.obstacles.add(_loc_20)
            _loc_11 = _loc_11 + 1
        End While
        Dim _loc_12 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_13 As Integer = 0
        While (_loc_13 < _loc_12)


            _loc_21 = New FightCommonInformations()
            _loc_21.deserialize(param1)
            Me.fights.add(_loc_21)
            _loc_13 = _loc_13 + 1
        End While
        Return Me
    End Function
 
A

Anonymous

Invité
#42
Ca semble bon. Ton code _loc_14 il est erroné sur la première maison? D'après moi la première maison que tu rencontres est correcte et ton _loc_14 devient corrompu à la deuxième lecture car tu ne parse pas HouseInformations correctement.
 
A

Anonymous

Invité
#43
Oui en effet, la première boucle marche bien, mais c'est dans la seconde que ça cloche ...

Mais je précise que je suis sur une map où il n'y a pas de maison ...

Est-ce normal?


car tu ne parse pas HouseInformations correctement.
C'est à dire ?

Merci
 
A

Anonymous

Invité
#44
Si tu es sur une map sans maison alors comment ca fais tu une premiere boucle pour lire les informations d'une maison?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#45
parceque l'erreur doit venir d'avant Dim _loc_2 As UInteger = param1.ReadUnSignedshort() , sinon loc_2 serait a 0 et donc pas de boucle pour les maisons , juste comme ca MapiD est bon ? de memoire il est sur 4 bytes donc readint32 ?
 
A

Anonymous

Invité
#46
Bien vu ToOnS !

Par contre pour la boucle suivante :
Code:
Dim _loc_4 As UInteger = param1.ReadUnSignedshort()
        Dim _loc_5 As UInteger = 0
        While (_loc_5 < _loc_4)


            _loc_16 = param1.ReadUnSignedshort()
            _loc_17 = ProtocolTypeManager.getInstance(_loc_16)
            _loc_17.deserialize(param1)
            Me.actors.add(_loc_17)
            _loc_5 = _loc_5 + 1
        End While
Le premier tour se fait normalement (_loc_16 = 36 ->GameRolePlayCharacterInformations) mais dans le 2eme tour, je me retrouve avec _loc_16 = 10 ...
Le 10 c'est pour voir la liste d'attente lors de la connexion donc rien à voir ...


-------------------------------------------------------------------------------------

De même pour mon ObjectItem:

Code:
Dim _loc_2 As Integer = param1.ReadUnSignedshort()
            Dim _loc_3 As UInteger = 0
            While (_loc_3 < _loc_2)
                _loc_4 = param1.ReadUnSignedshort()
                _loc_5 = ProtocolTypeManager.getInstance(_loc_4)
                _loc_5.deserialize(param1)
                Me.effects.Add(_loc_5)
                _loc_3 = _loc_3 + 1
            End While
La première boucle fonctionne ( _loc_4 = 70->ObjectEffectInteger) mais à la 2eme, _loc_4 devient = à 1 ....







Je ne comprend pas ... :?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#47
si loc_5 contient bien le bon nombre de perso sur la carte et que loc_16 donne bien la 1ere fois 36 alors ca vient de GameRolePlayActorInformations
 
A

Anonymous

Invité
#48
Salut :)

C'est loc_4 qui contient le nombre de personnage sur la map

Je crois avoir repéré où se situe l'erreur car :

Je récapitule :
Case 226 -> MapComplementaryInformationsDataMessage ->2eme While 1er tour -> GameRolePlayActorInformations -> GameContextActorInformations ->EntityLook et EntityDispositionInformations

Hors, dans mon GameContextActorInformations j'ai :
Code:
Public Function deserializeAs_GameContextActorInformations(ByVal param1 As Dofus.DofusReader)

            Me.contextualId = param1.ReadInt32()
            Me.look = New EntityLook()
            Me.look.deserialize(param1)
            Dim _loc_2 As Integer = param1.ReadUnSignedshort()
            Me.disposition = ProtocolTypeManager.getInstance(_loc_2)
            Me.disposition.deserialize(param1)
            Return Me
        End Function
J'ai vu que _loc_2 a la bonne valeur, donc normalement mon problème vien de la deserialization de EntityDispositionInformations

Cependant impossible de trouver l'erreur :? ...

EntityDispositionInformation :
Code:
Public Class EntityDispositionInformations
        Public cellId As Integer = 0
        Public direction As UInteger = 1
        Public Const protocolId As UInteger = 60
Public Function deserialize(ByVal param1 As Dofus.DofusReader)

            Me.deserializeAs_EntityDispositionInformations(param1)
            Return Me
        End Function

        Public Function deserializeAs_EntityDispositionInformations(ByVal param1 As Dofus.DofusReader)

            Me.cellId = param1.ReadShort()
            If (Me.cellId < -1 Or Me.cellId > 559) Then

                Console.WriteLine("Forbidden value (" + Me.cellId + ") on element of EntityDispositionInformations.cellId.")
            End If
            Me.direction = param1.ReadByte()
            If (Me.direction < 0) Then

                Console.WriteLine("Forbidden value (" + Me.direction + ") on element of EntityDispositionInformations.direction.")
            End If
            Return Me
        End Function

La voyez vous ?



Merci ;)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#49
ca a l'aire ok ca
 
A

Anonymous

Invité
#50
Il me semble aussi ...

La direction doit être sous quelle forme?

Car en plaçant un espion sur Me.direction , je trouve qu'elle est égale à 1
Et comme lors de la création on lui donne déjà la valeur 1, c'est possible qu'on ne l'ai pas touché


Enfin je ne sais pas c'est une hypothèse


Je précise que la Cell_ID correspond bien



Edit : J'ai modifié la direction de mon personnage et Me.direction a bien été modifiée ...



Je ne vois vraiment pas ce qui cloche ...

Une idée :?:
 
A

Anonymous

Invité
#51
Bon...

J'ai changer de map et les maisons ne marche pas non plus ...
On me sur 0 en id pour mon protocol à la 2eme boucle toujours ...


Je crois que je vais tout recommencer ...


Quelqu'un pourrait-il le refaire avec moi ?
Je pense qu'a 2 on pourrait mieux faire

Ou bien quelqu'un l'a déjà fait et voudrait bien me donner quelque tuyaux ?


Merci
 
A

Anonymous

Invité
#52
Bonjour,

Déjà désolé pour mon triple-post, et oui sa m'arrive souvent le monologue ...


Bon sinon j'ai refait tout mon 226, les 20 sous-class et j'arrive au même problème...
Le premier tour de la boucle marche mais le second non ... :cry:
Voici toute les class refaite aujourdui : Téléchargement MegaUpload (mot de passe : Killer)

Je cris au secours car j'ai fait tout ce que j'ai pu pour résoudre mon erreur mais je n'y arrive pas ...
C'est pourquoi je vous demande de m'aider :geek:


Merci :D
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#53
ton probleme arrive deja quand tu as des maisons ou ca ca va maintenant ?
 
A

Anonymous

Invité
#54
Oui que se soit dans la boucle pour les maison ou celle pour les personnages, le 2eme tour envoi une valeur fausse au ProtocolTypeManager
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#55
je comprend pas trop tu as les memes code pour MapComplementaryInformationsDataMessage et HouseInformations que Arty qui eux fonctionnent (a part les noms et que Arty utilise pas des while mais des for)
 
A

Anonymous

Invité
#56
ToOnS a dit:
je comprend pas trop tu as les memes code pour MapComplementaryInformationsDataMessage et HouseInformations que Arty qui eux fonctionnent (a part les noms et que Arty utilise pas des while mais des for)
Non il utilise des while car j'ai remis normalement partout des while ^^ pour etre le plus proche du code de chez An.......
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#57
ah alors j'ai pas la derniere version , ca colle avec ca ?
Code:
  Public Function deserializeAs_MapComplementaryInformationsDataMessage(ByVal param1 As Dofus.DofusReader)

            Dim _loc_14 As UInteger = 0
            Dim _loc_15 As HouseInformations = Nothing
            Dim _loc_16 As UInteger = 0
            Dim _loc_17 As GameRolePlayActorInformations = Nothing
            Dim _loc_18 As InteractiveElement = Nothing
            Dim _loc_19 As StatedElement = Nothing
            Dim _loc_20 As MapObstacle = Nothing
            Dim _loc_21 As FightCommonInformations = Nothing
            Me.subareaId = param1.ReadShort()
            If (Me.subareaId < 0) Then

                Console.WriteLine("Forbidden value (" + Me.subareaId + ") on element of MapComplementaryInformationsDataMessage.subareaId.")
            End If
            Me.mapId = param1.ReadInt32()
            If (Me.mapId < 0) Then

                Console.WriteLine("Forbidden value (" + Me.mapId + ") on element of MapComplementaryInformationsDataMessage.mapId.")
            End If
            Me.subareaAlignmentSide = param1.ReadByte()
            Dim _loc_2 As UInteger = param1.ReadUnSignedshort()
            Dim _loc_3 As UInteger = 0
            While (_loc_3 < _loc_2) '<--------------------


                _loc_14 = param1.ReadUnSignedshort()
                _loc_15 = ProtocolTypeManager.getInstance(_loc_14)
                _loc_15.deserialize(param1)
                Me.houses.Add(_loc_15)
                _loc_3 = _loc_3 + 1 '<--------------------
            End While
 
A

Anonymous

Invité
#58
Donc vous ne voyez pas de solutions ?

J'ai passer en tout 7 heure dessus ... pour avoir une erreur en résultat ...


Pouvez-vous me passer un 226 fonctionnelle pour que je le teste ?


Merci
 
A

Anonymous

Invité
#59
Un 226, un 226 ...
Ah, ici.

Code:
Imports Dofus.Network.Types.Game.Context.Fight
Imports Dofus.Network.Types.Game.Context.Roleplay
Imports Dofus.Network.Types.Game.House
Imports Dofus.Network.Types.Game.Interactive

Namespace Messages.Game.Context.Roleplay
    Public Class MapComplementaryInformationsDataMessage
        Inherits NetworkMessage
        
        Public SubareaId As UInteger = 0
        Public MapId As UInteger = 0
        Public SubareaAlignmentSide As Integer = 0
        Public Houses As New List(Of HouseInformations)
        Public Actors As New List(Of GameRolePlayActorInformations)
        Public InteractiveElements As New List(Of InteractiveElement)
        Public StatedElements As New List(Of StatedElement)
        Public Obstacles As New List(Of MapObstacle)
        Public Fights As New List(Of FightCommonInformations)

        Public Overrides Property ProtocolId As UInteger = 226

        Public Sub InitMapComplementaryInformationsDataMessage(Param1 As UInteger, Param2 As UInteger, Param3 As Integer, Param4 As List(Of HouseInformations), Param5 As List(Of GameRolePlayActorInformations), Param6 As List(Of InteractiveElement), Param7 As List(Of StatedElement), Param8 As List(Of MapObstacle), Param9 As List(Of FightCommonInformations))
            Me.SubareaId = Param1
            Me.MapId = Param2
            Me.SubareaAlignmentSide = Param3
            Me.Houses = Param4
            Me.Actors = Param5
            Me.InteractiveElements = Param6
            Me.StatedElements = Param7
            Me.Obstacles = Param8
            Me.Fights = Param9
        End Sub

        Public Overrides Sub Serialize(ByVal Data As DofusMessage)

            Data.WriteInt16(SubareaId)
            Data.WriteInt32(MapId)
            Data.WriteByte(SubareaAlignmentSide)
            Data.WriteInt16(Houses.Count)
            For Each House As HouseInformations In Houses
                Data.WriteInt16(House.ProtocolId)
                House.Serialize(Data)
            Next
            Data.WriteInt16(Actors.Count)
            For Each Actor As GameRolePlayActorInformations In Actors
                Data.WriteInt16(Actor.ProtocolId)
                Actor.Serialize(Data)
            Next
            Data.WriteInt16(InteractiveElements.Count)
            For Each InteractiveElement As InteractiveElement In InteractiveElements
                InteractiveElement.Serialize(Data)
            Next
            Data.WriteInt16(StatedElements.Count)
            For Each StatedElement As StatedElement In StatedElements
                StatedElement.Serialize(Data)
            Next
            Data.WriteInt16(Obstacles.Count)
            For Each Obstacle As MapObstacle In Obstacles
                Obstacle.Serialize(Data)
            Next
            Data.WriteInt16(Fights.Count)
            For Each Fight As FightCommonInformations In Fights
                Fight.Serialize(Data)
            Next

        End Sub

        Public Overrides Sub Deserialize(ByVal Data As DofusReader)
            
            SubareaId = Data.ReadInt16
            MapId = Data.ReadInt32
            SubareaAlignmentSide = Data.ReadByte
            For i As Integer = 1 To Data.ReadUInt16
                Dim House As HouseInformations = ProtocolTypeManager.GetInstance(Data.ReadUInt16)
                House.Deserialize(Data)
                Houses.Add(House)
            Next
            For i As Integer = 1 To Data.ReadUInt16
                Dim Actor As GameRolePlayActorInformations = ProtocolTypeManager.GetInstance(Data.ReadUInt16)
                Actor.Deserialize(Data)
                Actors.Add(Actor)
            Next
            For i As Integer = 1 To Data.ReadUInt16
                Dim InteractiveElement As New InteractiveElement
                InteractiveElement.Deserialize(Data)
                InteractiveElements.Add(InteractiveElement)
            Next
            For i As Integer = 1 To Data.ReadUInt16
                Dim StatedElement As New StatedElement
                StatedElement.Deserialize(Data)
                StatedElements.Add(StatedElement)
            Next
            For i As Integer = 1 To Data.ReadUInt16
                Dim Obstacle As New MapObstacle
                Obstacle.Deserialize(Data)
                Obstacles.Add(Obstacle)
            Next
            For i As Integer = 1 To Data.ReadUInt16
                Dim Fight As New FightCommonInformations
                Fight.Deserialize(Data)
                Fights.Add(Fight)
            Next

        End Sub

    End Class
End Namespace

Pour l'utiliser il te faut bien sûr un ProtocolTypeManager complet et tous les types éventuels de ce packet.
 
Haut Bas