TraitsList struct

EQ2Emulator Development forum.

Moderator: Team Members

Post Reply
User avatar
Zcoretri
Team Member
Posts: 1642
Joined: Fri Jul 27, 2007 12:55 pm
Location: SoCal

TraitsList struct

Post by Zcoretri » Sat Aug 08, 2009 5:12 pm

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 :)

User avatar
Zcoretri
Team Member
Posts: 1642
Joined: Fri Jul 27, 2007 12:55 pm
Location: SoCal

Re: TraitsList struct

Post by Zcoretri » Sat Aug 08, 2009 6:37 pm

Oh...and is there a way we can brute force test this?

LethalEncounter
Team: Zombie
Posts: 2717
Joined: Wed Jul 25, 2007 10:10 pm

Re: TraitsList struct

Post by LethalEncounter » Sat Aug 08, 2009 9:22 pm

Zcoretri wrote:Oh...and is there a way we can brute force test this?
huh? Definitely a strange struct

User avatar
Zcoretri
Team Member
Posts: 1642
Joined: Fri Jul 27, 2007 12:55 pm
Location: SoCal

Re: TraitsList struct

Post by Zcoretri » Sat Aug 08, 2009 9:41 pm

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

User avatar
John Adams
Retired
Posts: 9684
Joined: Thu Jul 26, 2007 6:27 am
EQ2Emu Server: EQ2Emulator Test Center
Characters: John
Location: Arizona
Contact:

Re: TraitsList struct

Post by John Adams » Mon Aug 17, 2009 7:15 am

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.

User avatar
Zcoretri
Team Member
Posts: 1642
Joined: Fri Jul 27, 2007 12:55 pm
Location: SoCal

Re: TraitsList struct

Post by Zcoretri » Mon Aug 17, 2009 11:53 am

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.

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests