Originally Posted by
Empted
Notice that you should check exact type of movement. For example running forward, autorun and CTM are different flags.
This is an awful way of doing it. You should check the real movement flags from your object, not these local control variables. They provide much more information, and being based off an object:
1. You can check them for each object.
2. You almost never have to update the offset.
A unit's CMovement_C class is at CGObject_C + 0xE4. This class contains, among many other things, movement flags. They are at CMovement_C + 0x38. Or to put it much simpler:
Code:
Offsets::ObjectManager::UnitMovementData = 0xE4
Offsets::ObjectManager::UnitMovementFlags = 0x38
...
/// <summary>
/// Gets the unit's movement structure pointer.
/// </summary>
DWORD_PTR CGUnit_C::GetMovementData() const
{
return Process::GetMemory<DWORD_PTR>(
(DWORD_PTR) this +
Offsets::ObjectManager::UnitMovementData );
}
/// <summary>
/// Gets the unit's movement flags.
/// </summary>
DWORD CGUnit_C::GetMovementFlags() const
{
return Process::GetMemory<DWORD>(
GetMovementData() +
Offsets::ObjectManager::UnitMovementFlags );
}
This is the information that it will return:
Code:
enum WoWMovementFlag : DWORD
{
MOVEMENTFLAG_FORWARD = 0x1,
MOVEMENTFLAG_BACKWARD = 0x2,
MOVEMENTFLAG_STRAFE_LEFT = 0x4,
MOVEMENTFLAG_STRAFE_RIGHT = 0x8,
MOVEMENTFLAG_TURN_LEFT = 0x10,
MOVEMENTFLAG_TURN_RIGHT = 0x20,
MOVEMENTFLAG_PITCH_UP = 0x40,
MOVEMENTFLAG_PITCH_DOWN = 0x80,
MOVEMENTFLAG_WALKING = 0x100,
MOVEMENTFLAG_GRAVITY_DISABLED = 0x200,
MOVEMENTFLAG_ROOTED = 0x400,
MOVEMENTFLAG_FALLING = 0x800,
MOVEMENTFLAG_FALLING_FAR = 0x1000,
MOVEMENTFLAG_PENDING_STOP = 0x2000,
MOVEMENTFLAG_PENDING_STRAFE_STOP = 0x4000,
MOVEMENTFLAG_PENDING_FORWARD = 0x8000,
MOVEMENTFLAG_PENDING_BACKWARD = 0x10000,
MOVEMENTFLAG_PENDING_STRAFE_LEFT = 0x20000,
MOVEMENTFLAG_PENDING_STRAFE_RIGHT = 0x40000,
MOVEMENTFLAG_PENDING_ROOT = 0x80000,
MOVEMENTFLAG_SWIMMING = 0x100000,
MOVEMENTFLAG_ASCENDING = 0x200000,
MOVEMENTFLAG_DESCENDING = 0x400000,
MOVEMENTFLAG_CANFLY = 0x800000,
MOVEMENTFLAG_FLYING = 0x1000000,
MOVEMENTFLAG_STUCK = 0x2000000,
MOVEMENTFLAG_WATERWALKING = 0x4000000,
MOVEMENTFLAG_SAFEFALL = 0x8000000,
MOVEMENTFLAG_HOVER = 0x10000000,
MOVEMENTFLAG_COLLISION_DISABLED = 0x20000000,
MOVEMENTFLAG_ON_TRANSPORT = 0x40000000,
MOVEMENTFLAG_LOCAL_CONTROL = 0x80000000
};