Man nehme den Pointer [0xE8EEF4] und addiere 0xc20 zu dem Offset auf das er Zeigt, schon ist man dort.
Das erste byte ist für bewegungen da wie, Forwärts Rückrwärts, Links Rechts, Hoch und Runter.
Das Folgende Enum ist c&p, aber ich kann zu großenteilen auch die Unconfirmed sachen bestätigen
Da fehlen zwar noch ein paar Movent States aber das ist nicht so wichtig.Quote:
enum MovementFlags
{
// Byte 1 (Resets on Movement Key Press)
MOVEFLAG_MOVE_STOP = 0x00, //verified
MOVEFLAG_MOVE_FORWARD = 0x01, //verified
MOVEFLAG_MOVE_BACKWARD = 0x02, //verified
MOVEFLAG_STRAFE_LEFT = 0x04, //verified
MOVEFLAG_STRAFE_RIGHT = 0x08, //verified
MOVEFLAG_TURN_LEFT = 0x10, //verified
MOVEFLAG_TURN_RIGHT = 0x20, //verified
MOVEFLAG_PITCH_DOWN = 0x40, //Unconfirmed
MOVEFLAG_PITCH_UP = 0x80, //Unconfirmed
// Byte 2 (Resets on Situation Change)
MOVEFLAG_WALK = 0x100, //verified
MOVEFLAG_TAXI = 0x200,
MOVEFLAG_NO_COLLISION = 0x400,
MOVEFLAG_FLYING = 0x800, //verified
MOVEFLAG_REDIRECTED = 0x1000, //Unconfirmed
MOVEFLAG_FALLING = 0x2000, //verified
MOVEFLAG_FALLING_FAR = 0x4000, //verified
MOVEFLAG_FREE_FALLING = 0x8000, //half verified
// Byte 3
MOVEFLAG_TB_PENDING_STOP = 0x10000, // (MOVEFLAG_PENDING_STOP)
MOVEFLAG_TB_PENDING_UNSTRAFE = 0x20000, // (MOVEFLAG_PENDING_UNSTRAFE)
MOVEFLAG_TB_PENDING_FALL = 0x40000, // (MOVEFLAG_PENDING_FALL)
MOVEFLAG_TB_PENDING_FORWARD = 0x80000, // (MOVEFLAG_PENDING_FORWARD)
MOVEFLAG_TB_PENDING_BACKWARD = 0x100000, // (MOVEFLAG_PENDING_BACKWARD)
MOVEFLAG_SWIMMING = 0x200000, // verified
MOVEFLAG_FLYING_PITCH_UP = 0x400000, // (half confirmed)(MOVEFLAG_PENDING_STR_RGHT)
MOVEFLAG_TB_MOVED = 0x800000, // (half confirmed) gets called when landing (MOVEFLAG_MOVED)
// Byte 4 (Script Based Flags. Never reset, only turned on or off.)
MOVEFLAG_AIR_SUSPENSION = 0x1000000, // confirmed allow body air suspension(good name? lol).
MOVEFLAG_AIR_SWIMMING = 0x2000000, // confirmed while flying.
MOVEFLAG_SPLINE_MOVER = 0x4000000, // Unconfirmed
MOVEFLAG_IMMOBILIZED = 0x8000000,
MOVEFLAG_WATER_WALK = 0x10000000,
MOVEFLAG_FEATHER_FALL = 0x20000000, // Does not negate fall damage.
MOVEFLAG_LEVITATE = 0x40000000,
MOVEFLAG_LOCAL = 0x80000000, // This flag defaults to on. (Assumption)
// Masks
MOVEFLAG_MOVING_MASK = 0x03,
MOVEFLAG_STRAFING_MASK = 0x0C,
MOVEFLAG_TURNING_MASK = 0x30,
MOVEFLAG_FALLING_MASK = 0x6000,
MOVEFLAG_MOTION_MASK = 0xE00F, // Forwards, Backwards, Strafing, Falling
MOVEFLAG_PENDING_MASK = 0x7F0000,
MOVEFLAG_PENDING_STRAFE_MASK = 0x600000,
MOVEFLAG_PENDING_MOVE_MASK = 0x180000,
MOVEFLAG_FULL_FALLING_MASK = 0xE000,
};
Ausgerüstet mit diesen Informationen kann man sich jetzt wpe pro filter basteln, oder aber man versucht herauszu bekommen welche Funktion aufgerufen wird wenn man Schwimmt und eben diese durch verändurng von Opcodes zu erzwingen, dadurch sollte man Fliegen können ohne ein verändertes Movement State an den Server zu schicken.
Ich würde davon ausgehen das es eine Funktion gibt welche die Byte Mask mit Constanten vergleicht und dann die entsprechenden Funktionen ausführt, ausserdem gibt es Funktionen welche die Byte Mask verändern, wenn man jetzt nur einen Memory Read/write Breakpoint auf die 4 Bytes des Movement States setzt, wird ein ganzer Wald an Funktionen auftauchen, für jede Bewegung gibt es eine Funktion, jetzt kann man sich ja ausrechnen wieviele da kommen.
Und genau dort ist das Problem, wie findet man unter all den Funktionen die welche für das Schwimmen zu ständig ist, also die Funktion die das 3te Byte auf 0x2 setzt?