ProtocolTypeManager

A

Anonymous

Invité
#1
Es-ce que quelqu'un pourrait m'expliquer à quoi sert le ProtocolTypeManager ? Car par exemple dans le packet CharactersListMessage on dpeut carrément ignorer le protocoltypemanager et mettre un simple CharacterBaseInformations.deserialise sans aucun problème et le packet est lu correctement mais quand on arrive à des packets comme le 226 cela ne fonctionne plus :roll:

J'espère avoir été assez clair mais dans le cas contraire laissez un message :mrgreen:
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#2
en fait pour le 226 le chiffre qui est lu juste avant le protocoletypemanager change (donc ca deserialize autre chose a chaque fois que le chiffre est different) , d'ailleur pour CharactersListMessage ca change aussi (pour le serveur hardcore par exemple) mais c'est tellement rare que tu t'en appercois pas ,il doit avoir quelquepart un protocoletype manager prefait en vb
 
A

Anonymous

Invité
#3
Ok donc je n'aurai pas le choix d'attaquer la traduction de protocoltype manager donc je ne comprend pas grand chose a première vu :(

Edit: Je code en C# ! Donc je penses que c'Est possible de m'aider de celui fait pas raphy :p
 
A

Anonymous

Invité
#6
Je n'arrive toujours pas a lire ce foutu paquet 226 :s Je sais pas si c'est ma fonction protocolTypeManager qui est en cause et je pense que oui , si t'as le temps il serait sympa que tu vérifie :)

Voici le PTM avec seulement un cas , inutile d'en mettre plus comme c'est identique
Code:
    public class ProtocolTypeManager
    {
        public static object GetInstance(int Id)
        {
            object ObjetValue = null;
            switch (Id)
            {
                case GameRolePlayCharacterInformations.ProtocolID:
                    ObjetValue = new GameRolePlayCharacterInformations();
                    break;
                default:
                    break;
            }
            return ObjetValue;
        }
    }
Et voila comment je l'appel

Code:
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
                GameRolePlayActorInformations Var = (GameRolePlayActorInformations)ProtocolTypeManager.GetInstance(reader.readShort());
                Var.Deserialize(reader);
        	    actors.Add(Var);
       		}
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#7
l'erreure c'est quoi ? es tu sur d'avoir toujours le meme ID pour tout les persos de la map , je sais que pour par exemple les percepteur ont un id different , les marchands aussi , les PNJ ...(met un msgbox ou un consolewriteline dans le default: qui renvois l'ID pour etre sur que tu as bien tout les ID demandés , un seul me parait bizarre) ou essais sur une carte ou tu es sur d'etre seul
 
A

Anonymous

Invité
#8
Pour récupérer les Id je met un "stop" avec visual studio et je le lance en mode débug. Pour l'erreur justement je ne la trouve pas c'est pour sa que je poste ici :roll: Il finit par rentrer dans le switch avec l'ID 11 (Version) et plante, donc il se goure quelque part car je ne vois vraiment pas pourquoi on aurait besoin de l'ID 11 à ce moment.

Pour résumé ce qui se passe pour le moment.

Il arrive premièrement à la ligne
Code:
GameRolePlayActorInformations Var = (GameRolePlayActorInformations)ProtocolTypeManager.GetInstance(reader.readShort());
La valeur Id lu est 36 donc il va dans le switch et exécute la ligne

Code:
ObjetValue = new GameRolePlayCharacterInformations();
return ObjetValue
Mais la il fait exactement comme si le ProtocolTypeManager n'existait pas et désérialise en utilisant GameRolePlayActorInformations non pas GameRolePlayCharacterInformations

J'espère qu'avec sa tu comprendra mieux !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#9
il faut lire ca avant : (meme si tu t'en serts pas)
Code:
 SubareaId = Data.ReadShort
            MapId = Data.ReadInt32
            SubareaAlignmentSide = Data.ReadByte
            Dim NombreMaison As UInteger = Data.ReadUnSignedshort
            For i As Integer = 1 To NombreMaison
                Dim House As HouseInformations
                House = ProtocolTypeManager.GetInstance(Data.ReadUnSignedshort)
                House.deserialize(Data)
                Houses.Add(House)
            Next
sinon tu parts du mauvais octet pour lire le nombre de persos puis tu decales tout (ce qui pourrait expliquer pourquoi tu as 11)
 
A

Anonymous

Invité
#10
Oui Je sais mais je voulais seulement afficher la partie où sa plantais , et comme il n'y a pas de maison sur la carte où je me situe bah sa passe. Toute mes excuse je poste la version complète

Code:
        	subAreaId = reader.readShort();
        	mapId = reader.readInt();
        	subareaAlignmentSide = reader.readByte();
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
                HouseInformations Var = (HouseInformations)ProtocolTypeManager.GetInstance(reader.readShort());
        	    Var.Deserialize(reader);
        	    houses.Add(Var);
       		}
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
                GameRolePlayActorInformations Var = (GameRolePlayActorInformations)ProtocolTypeManager.GetInstance(reader.readShort());
                Var.Deserialize(reader);
        	    actors.Add(Var);
       		}
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
 		        InteractiveElement Var = new InteractiveElement();
        	    Var.Deserialize(reader);
        	    interactiveElements.Add(Var);
       		}
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
 		        StatedElement Var = new StatedElement();
        	    Var.Deserialize(reader);
        	    statedElements.Add(Var);
       		}
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
 		        MapObstacle Var = new MapObstacle();
        	    Var.Deserialize(reader);
        	    obstacles.Add(Var);
       		}
            Count = reader.readShort();
        	for(int i=0;i<Count;i++)
	    	{
 		        FightCommonInformations Var = new FightCommonInformations();
        	    Var.Deserialize(reader);
        	    fights.Add(Var);
       		}
Désolé pour l'indentation je n'arrive pas à le poster correctement
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#11
je connais pas trop c# mais ca tu es obligé ? (GameRolePlayActorInformations)ProtocolTypeManager.GetInstance(reader.readShort());
 
A

Anonymous

Invité
#12
Sinon il me met un erreur :? Et ne se lance tout simplement pas
 
Haut Bas