View Single Post
  #5  
Old 01-10-2010, 10:29 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

No, looking at your client update collected data looks all wrong to me. Most likely, your packet structure is way off. Unfortunately, clientupdate is one of the packets that SOE likes to completely jumble around every patch or so to throw off ShowEQ people for a couple of days lol. So, most likely the structure you are using is for an older version of the client.

For testing purposes while creating your tool, you might be better off using structs from EQEmu to test it collecting data for either Titanium or SoF, whichever you chose. Both should be considerably more accurate packet structures than what ShowEQ has for them. Also, you would probably want to test on the SoF client, since it is by far closer to Live than Titanium is.

Then, once you know your tool is able to collect everything how you want it, it is just a matter of adjusting the packet structures and opcodes to match Live. For only a few packets like this, it should be very easy. I can figure out almost all of the packet structures we might need very quickly. Though, the clientupdate one is a bit harder for me, due to how they seem to throw in crap we don't care about as what we call padding. I think clientupdate is one of the only (or very few) packets that actually breaks int32s into separate sections, and only uses some of the bits. Without looking at the ISM output from IDA, it is hard to figure out what goes where. And, I don't know how to read ISM well enough to figure that stuff out yet. I had to lean on what info ShowEQ had and do some testing to finally get it working properly for SoF.

Here is the OP_ClientUpdate struct we use in SoF:

Code:
struct PlayerPositionUpdateServer_Struct
{
/*0000*/ uint16   spawn_id;			// Entity ID of the Spawn/Player
/*0002*/ signed   padding0000:12;	// ***Placeholder
		 signed   x_pos:19;			// x coord
		 signed   padding0290:1;	// ***Placeholder
/*0006*/ signed   delta_x:13;		// change in x
		 signed   delta_y:13;		// change in y
		 signed   padding0294:6;	// ***Placeholder
/*0010*/ signed   z_pos:19;			// z coord
		 signed   delta_heading:10;	// change in heading
		 signed   padding0298:3;	// ***Placeholder
/*0014*/ signed   y_pos:19;			// y coord
		 signed   delta_z:13;		// change in z
/*0022*/ signed   animation:10;		// animation
		 unsigned heading:12;		// heading
		 signed   padding0302:10;	// ***Placeholder
/*0026*/
};
I am sure that has been completely re-arranged by now on Live. ShowEQ does require at least some of these fields to be correct for their tool to work at all, so their structure should be at least partially correct if ShowEQ works with Live currently to show NPC movement.

I believe this is the current ShowEQ version for EQLive (as of 12/1 for OP_ClientUpdate:

Code:
struct playerSpawnPosStruct
{
/*0000*/ uint16_t spawnId;
/*0002*/ signed   padding0000:12; // ***Placeholder
         signed   deltaX:13;      // change in x
         signed   padding0005:7;  // ***Placeholder
/*0006*/ signed   deltaHeading:10;// change in heading
         signed   deltaY:13;      // change in y
         signed   padding0006:9;  // ***Placeholder
/*0010*/ signed   y:19;           // y coord
         signed   animation:10;   // animation
         signed   padding0010:3;  // ***Placeholder
/*0014*/ unsigned heading:12;     // heading
         signed   x:19;           // x coord
         signed   padding0014:1;  // ***Placeholder
/*0018*/ signed   z:19;           // z coord
         signed   deltaZ:13;      // change in z
/*0022*/
};
If you know the exact loc of an NPC, you can break down the packets using the suggested packet structs from ShowEQ and see if it matches the loc info. Delta is hard to figure out this way, but X, Y and Z aren't too bad. The only problem there is that there is no way to get a #loc of an NPC from Live. It is best to just have someone that is good with IDA to figure that particular struct out. The other structs are all pretty straight forward, and don't normally change much either.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote