Page 1 of 1

TraitsList struct

Posted: Sat Aug 08, 2009 5:12 pm
by Zcoretri
I have a preliminary struct laid out for opcode OP_TraitsList
Let me know what you think about this and suggest any changes we need to make it better.
Also, is there a way we can make our own arrays in the struct, or does that kind a data have to be in the packet.

Code: Select all

<Struct Name="WS_TraitsList" ClientVersion="987" OpcodeName="OP_TraitsList" >
<Data ElementName="num_traits" Type="int8" Size="1" />
<Data ElementName="traits_array" Type="Array" ArraySizeVariable="num_traits">
    <Data ElementName="trait_level" Type="int8" Size="1" />
    <Data ElementName="trait_line" Type="int8" Size="1" />
    <Data ElementName="trait0_icon" Type="int16" Size="1" />
    <Data ElementName="trait0_icon2" Type="int16" Size="1" />
    <Data ElementName="trait0_id" Type="int32" Size="1" />
    <Data ElementName="trait0_unknown" Type="int32" Size="1" />
    <Data ElementName="trait0_name" Type="EQ2_16Bit_String" />
    <Data ElementName="trait1_icon" Type="int16" Size="1" />
    <Data ElementName="trait1_icon2" Type="int16" Size="1" />
    <Data ElementName="trait1_id" Type="int32" Size="1" />
    <Data ElementName="trait1_unknown" Type="int32" Size="1" />
    <Data ElementName="trait1_name" Type="EQ2_16Bit_String" />
    <Data ElementName="trait2_icon" Type="int16" Size="1" />
    <Data ElementName="trait2_icon2" Type="int16" Size="1" />
    <Data ElementName="trait2_id" Type="int32" Size="1" />
    <Data ElementName="trait2_unknown" Type="int32" Size="1" />
    <Data ElementName="trait2_name" Type="EQ2_16Bit_String" />
    <Data ElementName="trait3_icon" Type="int16" Size="1" />
    <Data ElementName="trait3_icon2" Type="int16" Size="1" />
    <Data ElementName="trait3_id" Type="int32" Size="1" />
    <Data ElementName="trait3_unknown" Type="int32" Size="1" />
    <Data ElementName="trait3_name" Type="EQ2_16Bit_String" />
    <Data ElementName="trait4_icon" Type="int16" Size="1" />
    <Data ElementName="trait4_icon2" Type="int16" Size="1" />
    <Data ElementName="trait4_id" Type="int32" Size="1" />
    <Data ElementName="trait4_unknown" Type="int32" Size="1" />
    <Data ElementName="trait4_name" Type="EQ2_16Bit_String" />
</Data>
<Data ElementName="num_trainings" Type="int8" Size="1" />
<Data ElementName="training_array" Type="Array" ArraySizeVariable="num_trainings">
    <Data ElementName="training_level" Type="int8" Size="1" />
    <Data ElementName="training_line" Type="int8" Size="1" />
    <Data ElementName="training0_icon" Type="int16" Size="1" />
    <Data ElementName="training0_icon2" Type="int16" Size="1" />
    <Data ElementName="training0_id" Type="int32" Size="1" />
    <Data ElementName="training0_unknown" Type="int32" Size="1" />
    <Data ElementName="training0_name" Type="EQ2_16Bit_String" />
    <Data ElementName="training1_icon" Type="int16" Size="1" />
    <Data ElementName="training1_icon2" Type="int16" Size="1" />
    <Data ElementName="training1_id" Type="int32" Size="1" />
    <Data ElementName="training1_unknown" Type="int32" Size="1" />
    <Data ElementName="training1_name" Type="EQ2_16Bit_String" />
    <Data ElementName="training2_icon" Type="int16" Size="1" />
    <Data ElementName="training2_icon2" Type="int16" Size="1" />
    <Data ElementName="training2_id" Type="int32" Size="1" />
    <Data ElementName="training2_unknown" Type="int32" Size="1" />
    <Data ElementName="training2_name" Type="EQ2_16Bit_String" />
    <Data ElementName="training3_icon" Type="int16" Size="1" />
    <Data ElementName="training3_icon2" Type="int16" Size="1" />
    <Data ElementName="training3_id" Type="int32" Size="1" />
    <Data ElementName="training3_unknown" Type="int32" Size="1" />
    <Data ElementName="training3_name" Type="EQ2_16Bit_String" />
    <Data ElementName="training4_icon" Type="int16" Size="1" />
    <Data ElementName="training4_icon2" Type="int16" Size="1" />
    <Data ElementName="training4_id" Type="int32" Size="1" />
    <Data ElementName="training4_unknown" Type="int32" Size="1" />
    <Data ElementName="training4_name" Type="EQ2_16Bit_String" />
</Data>
<Data ElementName="num_traditions" Type="int8" Size="1" />
    <Data ElementName="tradition_array" Type="Array" ArraySizeVariable="num_traditions">
    <Data ElementName="tradition_selected" Type="int8" Size="1" />
    <Data ElementName="tradition_icon" Type="int16" Size="1" />
    <Data ElementName="tradition_icon2" Type="int16" Size="1" />
    <Data ElementName="tradition_id" Type="int32" Size="1" />
    <Data ElementName="tradition_unknown" Type="int32" Size="1" />
    <Data ElementName="tradition_name" Type="EQ2_16Bit_String" />
</Data>
<Data ElementName="unknown" Type="int8" Size="1" />
<Data ElementName="num_abilities" Type="int8" Size="1" />
    <Data ElementName="ability_array" Type="Array" ArraySizeVariable="num_abilities">
    <Data ElementName="ability_icon" Type="int16" Size="1" />
    <Data ElementName="ability_icon2" Type="int16" Size="1" />
    <Data ElementName="ability_id" Type="int32" Size="1" />
    <Data ElementName="ability_unknown" Type="int32" Size="1" />
    <Data ElementName="ability_name" Type="EQ2_16Bit_String" />
</Data>
</Struct>
I have successfully parsed data from current collects with this :)

Re: TraitsList struct

Posted: Sat Aug 08, 2009 6:37 pm
by Zcoretri
Oh...and is there a way we can brute force test this?

Re: TraitsList struct

Posted: Sat Aug 08, 2009 9:22 pm
by LethalEncounter
Zcoretri wrote:Oh...and is there a way we can brute force test this?
huh? Definitely a strange struct

Re: TraitsList struct

Posted: Sat Aug 08, 2009 9:41 pm
by Zcoretri
LethalEncounter wrote:
Zcoretri wrote:Oh...and is there a way we can brute force test this?
huh? Definitely a strange struct
Yes it is, been trying to figure out why they didn't array some of that stuff

Re: TraitsList struct

Posted: Mon Aug 17, 2009 7:15 am
by John Adams
I am the last guy to think he knows what he's talking about where these Structs are concerned, but Zcoretri - consider this.

When I look at an exploded (DumpPacket) of an Item, I see stuff like this (ignore the Data, talking about the array names):

Code: Select all

Name: footer_num_effects_0  	Index:  0 	Type:  int8		Data:  222 
Array:	Data: 
Name: subbulletflag_0  	Index:  0 	Type:  int8		Data:  04 
Name: effect_0  	Index:  0 	Type:  EQ2_16BitString	Data:  
Name: percentage_0  	Index:  0 	Type:  int8		Data:  75 
Name: subbulletflag_1  	Index:  0 	Type:  int8		Data:  61 
Name: effect_1  	Index:  0 	Type:  EQ2_16BitString	Data:  
Name: percentage_1  	Index:  0 	Type:  int8		Data:  190 
Name: subbulletflag_2  	Index:  0 	Type:  int8		Data:  06 
Name: effect_2  	Index:  0 	Type:  EQ2_16BitString	Data:  Ironforge Parade Breastplate
Name: percentage_2  	Index:  0 	Type:  int8		Data:  06 
Name: subbulletflag_3  	Index:  0 	Type:  int8		Data:  00 
Name: effect_3  	Index:  0 	Type:  EQ2_16BitString	Data:  
Name: percentage_3  	Index:  0 	Type:  int8		Data:  147 
Name: subbulletflag_4  	Index:  0 	Type:  int8		Data:  39 
Name: effect_4  	Index:  0 	Type:  EQ2_16BitString	Data:  
Name: percentage_4  	Index:  0 	Type:  int8		Data:  156 
Name: subbulletflag_5  	Index:  0 	Type:  int8		Data:  217 
Name: effect_5  	Index:  0 	Type:  EQ2_16BitString	Data:  
Name: percentage_5  	Index:  0 	Type:  int8		Data:  191 
Name: subbulletflag_6  	Index:  0 	Type:  int8		Data:  06 
Name: effect_6  	Index:  0 	Type:  EQ2_16BitString	Data:  Ironforge Parade Boots
Looking at how you put together your struct, is it possible it could actually be an array, but you built it based on what you saw in the dumped packet? I'm sure this is the wrong assumption, but just wanted to ask in case you hadn't considered it.

The fact you said the 5th one is sometimes 65535 makes me think they did in fact hard-code 5 values and there is no "num_traits_array" or whatever, like we seen in spell and items effects.

Re: TraitsList struct

Posted: Mon Aug 17, 2009 11:53 am
by Zcoretri
John Adams wrote: The fact you said the 5th one is sometimes 65535 makes me think they did in fact hard-code 5 values and there is no "num_traits_array" or whatever, like we seen in spell and items effects.
I could not find a data value that would preclude it to be an array like we see in spells and item effects, exactly.