jimbo
Member
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.
