[RESOLU]pb de recuperation des infos monstre en RP

A

Anonymous

Invité
#1
Bonsoir à tous :)

J'ai un petit souci depuis peu, je ne parviens pas à récupérer les infos des monstres présents sur une carte donnée.
En fait je reçois correctement le 226 et son fameux "actors:Vector.<GameRolePlayActorInformations>".
Je reçois donc l'id de chaque groupe de monstres : contextualId (-1, -2, -3...).
Mais c'est la que le problème se pose : comment détailler le contenu de chacun des groupes ???
J'ai cherché en vain une classe ou une méthode qui recevrait en paramètre le contextualId et qui renverrait le détail des monstres du groupe, principalement un gid... mais bon... nada.

Alors quelqu'un pourrait-il me dire si ces infos sont bien présentes dans le 226, ou si je dois envoyer un message "request" pour y accéder ?
Et si elles sont déjà là, alors par quelle hiérarchie d'appels puis-je y accéder ?

Merci d'avance.

Atlantide
 
A

Anonymous

Invité
#2
Re: pb de recuperation des infos monstre en RP

Maxilia pourra nous aider sur ce coup la, je me rappelle qu'il m'avait dit avoir travaillé ce système sur son bot.
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#3
Re: pb de recuperation des infos monstre en RP

Code:
For i As Integer = 0 To ID_Message.actors.Count - 1
                    Select Case ID_Message.actors(i).protocolId
                        Case 160 'Monstres
                            If ID_Message.Actors(i).underlings.count = 0 Then
                                Dim monster = Monsters.ReadObject(ID_Message.Actors(i).mainCreatureGenericId)
                                Dim lvl = monster.grades(ID_Message.Actors(i).mainCreatureGrade - 1).level
                                LV_MONSTERSINFORMATIONS.Invoke(MonstersOnMap, ID_Message.Actors(i).contextualId, lvl, ID_Message.Actors(i).underlings.count + 1, ID_Message.actors(i).ageBonus, ID_Message.Actors(i).disposition.cellid)
                            Else
                                Dim monster = Monsters.ReadObject(ID_Message.Actors(i).mainCreatureGenericId)
                                Dim lvl = monster.grades(ID_Message.Actors(i).mainCreatureGrade - 1).level
                                For Each creature_lvl In ID_Message.Actors(i).underlings
                                    monster = Monsters.ReadObject(creature_lvl.CreatureGenericId)
                                    lvl += monster.grades(creature_lvl.grade - 1).level
                                Next
                                LV_MONSTERSINFORMATIONS.Invoke(MonstersOnMap, ID_Message.Actors(i).contextualId, lvl, ID_Message.Actors(i).underlings.count + 1, ID_Message.actors(i).ageBonus, ID_Message.Actors(i).disposition.cellid)
                            End If
next
 
A

Anonymous

Invité
#4
Re: pb de recuperation des infos monstre en RP

Merci Toons...
mais c'est avant d'en arriver là que mon problème se pose : obtenir un 160 (GameRolePlayGroupMonsterInformations).
car pour l'instant, mon "actors.protocolId" est un 141 (GameRolePlayActorInformations).

Qu'est ce qui les relie, ou comment on peut passer de l'un à l'autre ???
C'est forcément par le biais du contextualId, non ??? Mais j'arrive pas à retracer le cheminement... et je suis pourtant sûr que c'est tout c.. :(

Atlantide
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#5
Re: pb de recuperation des infos monstre en RP

141 bizarre , ank@ma aurait ajouté des types d'actors sans me prevenir (a moins que ca soit un type qui ne nous servais pas quand arty a fait ca) , remarque depuis il y'a eu des changements que j'ai du louper ?
fais defiller i pour voir si tu as autre chose que 141 dans actors.protocolId pour les autres actors
Case 36 'Joueurs
Case 129, 146 'Marchand (Avec ou sans guilde)
Case 148 'Percepteur
Case 156 'PNJ
Case 160 'Monstres
Case 180 'Dragodinde
 
A

Anonymous

Invité
#6
Re: pb de recuperation des infos monstre en RP

ToOns à quasiment tout dit, tout d'abord pour distinguer un groupe de monstres et un personnage il faut se concentrer sur la variable ProtocolId des classes deserializée. Ici tu cherche à obtenir des informations sur les monstres, tu dois donc te concentrer sur ProtocolId = 160

Code:
foreach GameRolePlayActorInformations Actor in ID_Message.actors
{
if (Actor.ProtocolId = 160)
{
// On est ici
}
}
Ensuite le GID du monstre "chef" du groupe est contenue dans la variable "mainCreatureGenericId"
Puis ces petits partenaires se trouve dans une liste nomée "underlings" (son GID à lui se nome "CreatureGenericId")

Voila je pense avoir tout dis, avec le code de ToOnS et les quelques commentaire que je t'ai fait dessus tu devrais t'en sortir

PS : Ne t'occupes pas des lignes contenants "ReadObject", c'est un autre sujet
 
A

Anonymous

Invité
#7
Re: pb de recuperation des infos monstre en RP

Ok, merci pour votre aide :)

De mon côté j'ai trouvé le pourquoi du comment et comment tout cela est lié.
En fait, le "actors" reçu dans le 226 est bien un tableau de <GameRolePlayActorInformations> (141)
Mais ce 141 est la super classe de tous les autres, et c'est ce lien là que je n'avais pas compris, ça vient plus vite à l'esprit de remonter une chaine d'héritage que de la descendre.
Alors si ça peut intéresser qq1, voici la descendance complète de la classe "GameRolePlayActorInformations"

Code:
//141:GameRolePlayActorInformations
//        > NaN:GameContextPaddockItemInformations
//        > NaN:GroundObject
//        > 160:GameRolePlayGroupMonsterInformations
//        > 154:GameRolePlayNamedActorInformations
//                > 159:GameRolePlayHumanoidInformations
//                        >  36:GameRolePlayCharacterInformations
//                        >   3:GameRolePlayMutantInformations
//                > 129:GameRolePlayMerchantInformations
//                        > 146:GameRolePlayMerchantWithGuildInformations
//                > 180:GameRolePlayMountInformations
//        > 156:GameRolePlayNpcInformations
//                > 383:GameRolePlayNpcWithQuestInformations
//        > 161:GameRolePlayPrismInformations
//        > 148:GameRolePlayTaxCollectorInformations
Atlantide
 
Haut Bas