Originally Posted by
r6express
Fransick,
The charProfileStruct change is now modeled after how the spawnStruct is populated. Instead of doing a simple byte copy from the packet data into the charProfileStruct, it now starts at data byte 0 and dynamically reads each piece of information and then puts it into the correct struct location. I had to make this change because EQ now sends dynamically sized information, primarily related to string sizes. Specifically, the potion belt or bandolier data segments were compacted to a set of dynamically sized strings instead of a hardcoded string length. This made the packet smaller but forced us to read the charProfileStruct more intelligently. If you look at the new function called fillProfileStruct(), you can see how it starts at byte 0 of the packet's data array and starts to read each individual piece of info. Also, I noticed that apparently for a very long time showeq was making a lot of assumptions about how many array elements are in the object arrays embedded in the packet data. However, I found that each array inside the packet is prefaced with the array length. So my new function first reads the array length and then iterates across that count, populating each new array element. So it's now less brittle for those occasions when SOE increases the amount of elements stored in the arrays. That said, there are still several MAX_*** constants that should be removed from showeq and instead the charProfileStruct array should be instantiated based on the dynamic count I'm now reading in the packet. I didn't take the time to clean that up because it was busy work and I didn't have a lot of time to spend on it. Also, some more cleanup would be to remove all those now unneeded filler struct members like unknown00801, etc. Since we don't fill the struct in one big byte copy those filler members are pointless now.
I'll try to check the forums more frequently in case you have more questions.