jimbo
Member
- Joined
- Jun 16, 2006
- RedCents
- 0¢
The movement tracking packet consists of one or more segments of 17 bytes, plus one byte tacked onto the end.
That last byte seems so simple now, but it was a big pain in the ass to figure out. When the last movement_type was 2 (stationary), the last byte is just a copy of the first byte of the last segment.
Otherwise (movement_type 1 (moving normally) for example), that last byte is simply what was left over in that memory position the last time it was written. ie. Let's say you have a 15-segment movement tracking packet, and that last byte is 'AE'. Look back at the last time your movement tracking packet was 16-segments or longer, and you will find the first byte of the 16th segment was 'AE'. I don't know if this is a check of some kind on the server side, but I am dubious. It may be just sloppy coding on the part of an EQ dev. I think I will spoof it properly just to be sure.
Here is the struct of the segment:
Enjoy.
--jimbo
Throw me a red cent if this is useful to you.
That last byte seems so simple now, but it was a big pain in the ass to figure out. When the last movement_type was 2 (stationary), the last byte is just a copy of the first byte of the last segment.
Otherwise (movement_type 1 (moving normally) for example), that last byte is simply what was left over in that memory position the last time it was written. ie. Let's say you have a 15-segment movement tracking packet, and that last byte is 'AE'. Look back at the last time your movement tracking packet was 16-segments or longer, and you will find the first byte of the 16th segment was 'AE'. I don't know if this is a check of some kind on the server side, but I am dubious. It may be just sloppy coding on the part of an EQ dev. I think I will spoof it properly just to be sure.
Here is the struct of the segment:
Rich (BB code):
typedef struct _MovementTrackingSegment {
float Y;
float X;
float Z;
unsigned char movement_type; //1=regular, 2=stationary, 3=warp
unsigned short timestamp2; //milliseconds in real time
unsigned short timestamp; //same as MovePacket TimeStamp
//BYTE unknown18;
} MovementTrackingSegment, *pMovementTrackingSegment;
--jimbo
Throw me a red cent if this is useful to you.

