C# [Résolu] - [C#] - Réception d'inventaire

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

Anonymous

Invité
#1
Bonjour à tous !

J'ai un petit problème au niveau de la réception de l'inventaire.
Je dois mal le parser, mais après avoir lu, relu et vérifié je ne trouve toujours pas où je me trompe.
Je récupère donc le packet 3016 (InventoryContentMessage).

  • Je lis un short (qui correspond au nombre d'éléments dans mon inventaire, jusqu'ici c'est bon).
    Je boucle sur le nombre d'objets dans l'inventaire.
    • Je deserialize un ObjectItem.
      • Je lis un byte (position).
        Je lis un short (GID de l'objet).
        Je lis un short (PowerRate).
        Je lis un bool (OverMax).
        Je lis un short qui correspond au nombre "d'effets" de l'objet en cours.
        Je boucle sur le nombre d'effets pour l'objet en cours
        • Je lis un short qui sert à rien.
          Je lis un short (cela correspond au deserialize de l'ObjectEffect).
        Je lis un int (UID de l'objet).
        Je lis un int (quantité de l'objet).
    Je lis un int (nombre de K.)

Malheureusement je reçois n'importe quoi au niveau GID, UID, quantité etc...
J'ai surement oublié de lire quelque chose, mais où ?

Merci par avance pour votre aide ! :)
 
A

Anonymous

Invité
#2
Re: [C#] - Réception d'inventaire

Si la quantité n'est pas correcte c'est que t'as un décalage donc go tout retraduire !
 
A

Anonymous

Invité
#3
Re: [C#] - Réception d'inventaire

Je sais bien, c'est ce que je dis dans mon post.
Mais la question est "Où ?"
Parce qu'il me semble bien tout lire comme il faut donc je ne comprends pas d'où vient ce décalage :/
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#4
Re: [C#] - Réception d'inventaire

surement du ProtocolTypeManager (tu en as un ?) de ObjectItem , parceque le short il sert pas a rien justement , remplaces le bleu par le rouge

xiwiz a dit:
Bonjour à tous !

J'ai un petit problème au niveau de la réception de l'inventaire.
Je dois mal le parser, mais après avoir lu, relu et vérifié je ne trouve toujours pas où je me trompe.
Je récupère donc le packet 3016 (InventoryContentMessage).

  • Je lis un short (qui correspond au nombre d'éléments dans mon inventaire, jusqu'ici c'est bon).
    Je boucle sur le nombre d'objets dans l'inventaire.
    • Je deserialize un ObjectItem.
      • Je lis un byte (position).
        Je lis un short (GID de l'objet).
        Je lis un short (PowerRate).
        Je lis un bool (OverMax).
        Je lis un short qui correspond au nombre "d'effets" de l'objet en cours.
        Je boucle sur le nombre d'effets pour l'objet en cours
        • Je lis un short qui sert à rien. qui sert au protocoletypemanager
          Effect = ProtocolTypeManager.GetInstance(le short qui sert a rien)
          Effect.deserialize(param1)
          Me.effects.Add(Effect)

          Je lis un short (cela correspond au deserialize de l'ObjectEffect).
        Je lis un int (UID de l'objet).
        Je lis un int (quantité de l'objet).
    Je lis un int (nombre de K.)

Malheureusement je reçois n'importe quoi au niveau GID, UID, quantité etc...
J'ai surement oublié de lire quelque chose, mais où ?

Merci par avance pour votre aide ! :)
 
A

Anonymous

Invité
#5
Re: [C#] - Réception d'inventaire

Quand je disais qu'il ne servait pas c'était un abus de langage.
Bien sûr il sert, mais pas dans mon cas puisque je n'ai pas de ProtocoleTypeManager.
Du coup je le lis, et après je simule le deserialize du ObjectEffect avec la lecture d'un short.
Ce n'est pas bon ?

[Edit] : Aaah, je crois avoir compris ! Du coup ce n'est pas forcément un ObjectEffect à deserialize c'est ça ?
Je vais essayer, je vous tiens au courant !
Merci :)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#6
Re: [C#] - Réception d'inventaire

si le short est toujours de meme valeur (ce qui m'etonnerait sinon ils auraient pas mis un protocoletypemanager) c'est bon
si il a une valeur qui varie il va renvoyer sur autre chose que ObjectEffect donc il n'yaura peu etre pas que le short de ObjectEffect a lire
 
A

Anonymous

Invité
#7
Re: [C#] - Réception d'inventaire

Oui !
Je comprends mieux maintenant, merci ToOnS !
Je te tiens au courant et je passe le sujet en résolu dès que c'est bon.
Sinon, concernant les noms des objets, il faut parser le fichier d2i c'est bien ça ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#8
Re: [C#] - Réception d'inventaire

c'est ca
 
A

Anonymous

Invité
#9
Re: [C#] - Réception d'inventaire

Très bien, ça fonctionne beaucoup mieux d'un coup :)
C'est l'UID qu'il faut utiliser pour retrouver le nom ?
Merci !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#10
Items.ReadObject(ObjectGID).nameid
 
A

Anonymous

Invité
#11
Hum, c'est quoi exactement ce Items.ReadObjects() ?
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#12
c'etait pour lire le fichier Items.d2i avec la DLL de bouh2 qui ne doit plus etre a jour (mais il y'a celle de maxilia qui doit etre deja un peu mieux a jour) , ce qu'il faut lire dans mon precedant message c'est juste que ce n'est pas UID mais c'est GID
 
A

Anonymous

Invité
#13
D'accord.
Je n'ai pas la DLL.
J'ai essayé avec les sources du EuuBot mais ce n'est pas concluant non plus.
Il va falloir que je me penche sur les sources et que je refasse un reader... :p

Où puis-je la trouver celle de Maxilia ?
 
A

Anonymous

Invité
#15
Je vais me mettre dessus alors.
Et je partagerai si des gens sont intéressés et que le code n'est pas trop gore...
 
A

Anonymous

Invité
#16
Re: [C#] - Réception d'inventaire

Je me permet de ré-ouvrir le sujet, j'ai un petit problème...
J'ai mon reader de D2I, il fonctionne.
Par contre, j'ai un soucis, les GID de mes objets n'ont pas l'air bons...
En tout cas ils ne correspondent pas au texte que j'obtiens dans le reader.
Voici les GID de mes objets :
  • 10794
    10785
    10800
    10797
    10798
    10801
    10799
    10784
    10792
    10793
    10795
    10796
    8545
    367
    301
    366
    306
    374
Je devrais normalement avoir un 53775 qui correspond à l'0euf de t0fu.
Comment avoir le nameid d'un objet ?
Avez-vous une idée ?

Merci !
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#17
Re: [C#] - Réception d'inventaire

367 => Oeuf de Tofu , t'es sur de ton reader ? voila quelques items mais il date de y'a 1 an donc y'a pas les nouveaux http://toonsmil.chez-alice.fr/Items.txt (si te veux la lire sans les caracteres bizarres click doit et enregistrer sous)

pour en revenir au reader il faut lire Items.d2o qui te donnera en fonction du GID un "offset" et une "longueur" , tu ouvres le fichier d2i et tu mets le stream.position = "offset" et tu lis le nombres de caracteres de la "longueur"
 
A

Anonymous

Invité
#18
Re: [C#] - Réception d'inventaire

En fait j'ai lu le fichier D2I (i18n_fr.d2i)...
C'est surement pour ça.
Du coup il faut que je fasse un reader pour les fichiers D2O et lire Items.d2o.
La longueur correspond à la longueur de la string du nom de l'objet ?
Merci de ton aide ! :)

[Edit] : C'est bon ! Dans le Items.d2o je récupère l'id qui me permet de faire un getText dans mon d2i.
J'ai juste un item avec un nom bizarre, surement en problème d'id mais peu importe...
Merci encore, maintenant je vais essayer de m'attaquer aux maps.
 
Haut Bas