Bon je bloque à nouveau...
Là je suis en train d'analyser le message
ExchangeObjectAddedMessage
lorsqu'on ajoute un item dans l'interface de FM.
Voici donc la "doc"
Cliquez pour révéler
Cliquez pour masquer
{
"fields": [
{
"name": "object",
"position": 0,
"self_serialize_method": "serializeAs_ObjectItem",
"type": "ObjectItem",
"type_namespace": "com.ankamagames.dofus.network.types.game.data.items"
}
],
"name": "ExchangeObjectAddedMessage",
"namespace": "com.ankamagames.dofus.network.messages.game.inventory.exchanges",
"protocolID": 5516,
"super": "ExchangeObjectMessage",
"super_serialize": true,
"supernamespace": "com.ankamagames.dofus.network.messages.game.inventory.exchanges",
"use_hash_function": false
}
Donc là je comprend qu'après avoir récupéré Protocole + Taille du message, je dois récupérer un objet du type
ObjectItem
Cliquez pour révéler
Cliquez pour masquer
{
"fields": [
{
"bounds": {
"low": "0"
},
"default_value": "0",
"name": "objectGID",
"position": 1,
"type": "uint",
"write_method": "writeVarShort"
},
{
"default_value": "63",
"name": "position",
"position": 0,
"type": "uint",
"write_method": "writeShort"
},
{
"bounds": {
"low": "0"
},
"default_value": "0",
"name": "objectUID",
"position": 3,
"type": "uint",
"write_method": "writeVarInt"
},
{
"is_vector": true,
"name": "effects",
"position": 2,
"prefixed_by_type_id": true,
"self_serialize_method": "serialize",
"type": "ObjectEffect",
"type_namespace": "com.ankamagames.dofus.network.types.game.data.items.effects",
"write_length_method": "writeShort",
"write_type_id_method": "writeShort"
},
{
"bounds": {
"low": "0"
},
"default_value": "0",
"name": "quantity",
"position": 4,
"type": "uint",
"write_method": "writeVarInt"
}
],
"name": "ObjectItem",
"namespace": "com.ankamagames.dofus.network.types.game.data.items",
"protocolID": 37,
"super": "Item",
"super_serialize": true,
"supernamespace": "com.ankamagames.dofus.network.types.game.data.items",
"use_hash_function": false
}
Qui contient lui même ce qui m'intéresse le plus dans mon objectif : un
ObjectEffect
Cliquez pour révéler
Cliquez pour masquer
{
"fields": [
{
"bounds": {
"low": "0"
},
"default_value": "0",
"name": "actionId",
"position": 0,
"type": "uint",
"write_method": "writeVarShort"
}
],
"name": "ObjectEffect",
"namespace": "com.ankamagames.dofus.network.types.game.data.items.effects",
"protocolID": 76,
"super": "",
"super_serialize": false,
"supernamespace": "",
"use_hash_function": false
}
Mais là est mon soucis, je n'arrive pas à bien segmenter le buffer pour récupérer correctement les informations...
De plus je ne comprend pas ce qu'est
actionId
Voici ce que j'arrive à récupérer lorsque je met un Anneau du Piou Vert
Protocol ID : 5516 (ExchangeObjectAddedMessage)
Length (type/value) : 1 / 21
Message : [ 0, 63, 65533, 64, 0, 2, 0, 70, 124, 8, 0, 70, 65533, 3, 1, 65533, 65533, 65533, 70, 1, 2, 65533 ]
Selon la "doc" :
- 1er short
position
nous donne
63
, j'imagine l'id de la cellule de FM ? Je ne sais pas trop, enfin ce n'est pas très important dans tous les cas.
- 2ème short
objectGID
(en BigEndian) nous donne
40512
, l'id global de l'item (différent de UID qui rend l'item unique comme vu ici
https://cadernis.com/d/2033-suis-je-sur-la-bonne-voie )
Mais là y'a un concept de
writeVarShort
que je n'arrive pas à bien comprendre, cela veut dire que ce n'est pas juste 2 octets ? ça peut être + ou - ?
Bref quand je regarde le message j'arrive quand même à trouver des valeurs cohérentes à certains endroits qui m'ont permis de sortir ça
{
position: 63,
objectGID: 40512,
statsLength: 2,
stats: [
{ something: 70, id: 124, value: 8 },
{ something: 70, id: 172, value: 3 }
]
}
Mais c'est très inconsistant, des fois selon l'items y'a comme un octet en + qui décale tout et qui met le bazar mais je n'arrive pas à définir quand il est là où pas, je pense à cause du concept de
writeVarShort
.