-
Member
How to find MovementFlags?
here enum in mangos:
Code:
enum MovementFlags
{
MOVEFLAG_NONE = 0x00000000,
MOVEFLAG_FORWARD = 0x00000001,
MOVEFLAG_BACKWARD = 0x00000002,
MOVEFLAG_STRAFE_LEFT = 0x00000004,
MOVEFLAG_STRAFE_RIGHT = 0x00000008,
MOVEFLAG_TURN_LEFT = 0x00000010,
MOVEFLAG_TURN_RIGHT = 0x00000020,
MOVEFLAG_PITCH_UP = 0x00000040,
MOVEFLAG_PITCH_DOWN = 0x00000080,
MOVEFLAG_WALK_MODE = 0x00000100,
MOVEFLAG_LEVITATING = 0x00000400,
MOVEFLAG_FLYING = 0x00000800,
MOVEFLAG_FALLING = 0x00002000,
MOVEFLAG_FALLINGFAR = 0x00004000,
MOVEFLAG_SWIMMING = 0x00200000,
MOVEFLAG_SPLINE_ENABLED = 0x00400000,
MOVEFLAG_CAN_FLY = 0x00800000,
MOVEFLAG_FLYING_OLD = 0x01000000,
MOVEFLAG_ONTRANSPORT = 0x02000000,
MOVEFLAG_SPLINE_ELEVATION = 0x04000000,
MOVEFLAG_ROOT = 0x08000000,
MOVEFLAG_WATERWALKING = 0x10000000,
MOVEFLAG_SAFE_FALL = 0x20000000,
MOVEFLAG_HOVER = 0x40000000,
MOVEFLAG_MASK_MOVING_FORWARD = MOVEFLAG_FORWARD | MOVEFLAG_STRAFE_LEFT | MOVEFLAG_STRAFE_RIGHT | MOVEFLAG_FALLING,
};
and asm code in Script_IsSwimming(1.13.2.32887):
Code:
mov rax, [rax+198h] ; rax: unit_ptr base
test dword ptr [rax+58h], 100000h ; should be MOVEFLAG_SWIMMING?
jz short loc_7FF7D7E6F554
MOVEFLAG_SWIMMING is 0x100000 in Script_IsSwimming, and 0x00200000 in mangos. That is confuse me.
How to find the MovementFlags correctly?
-
I wrote a small code segment that displays the movement flags uint in bit format and did shit in the game and documented which bit meant what.
Here is what that resulted in
Code:
public enum eCGMovementFlags : UInt32
{
NONE = 0x00000000,
FORWARD = 0x00000001, // 0000 0000 0000 0001
BACKWARD = 0x00000002, // 0000 0000 0000 0010
STRAFE_LEFT = 0x00000004, // 0000 0000 0000 0100
STRAFE_RIGHT = 0x00000008, // 0000 0000 0000 1000
ROTATE_LEFT = 0x00000010, // 0000 0000 0001 0000
ROTATE_RIGHT = 0x00000020, // 0000 0000 0010 0000
PITCH_UP = 0x00000040, // 0000 0000 0100 0000
PITCH_DOWN = 0x00000080, // 0000 0000 1000 0000
WALK = 0x00000100, // 0000 0001 0000 0000
ONTRANSPORT = 0x00000200, // 0000 0010 0000 0000 Used for flying on some creatures
IMMOBILIZED = 0x00000400, // 0000 0100 0000 0000
JUMPING = 0x00000800, // 0000 1000 0000 0000
FALLING = 0x00001000, // 0001 0000 0000 0000
ROOTED = 0x00002000, // 0010 0000 0000 0000
ZONEING_IN = 0x00004000, // 0100 0000 0000 0000
UNKNOWN1 = 0x00008000, // 1000 0000 0000 0000
FLIGHTPATH = 0x00010000, // 0000 0000 0000 0001 Next ushort
UNKNOWN2 = 0x00020000, // 0000 0000 0000 0010
UNKNOWN3 = 0x00040000, // 0000 0000 0000 0100
UNKNOWN4 = 0x00080000, // 0000 0000 0000 1000
SWIMMING = 0x00100000, // 0000 0000 0001 0000
FLY_UP = 0x00200000, // 0000 0000 0010 0000
FLY_DOWN = 0x00400000, // 0000 0000 0100 0000
CANFLY = 0x00800000, // 0000 0000 1000 0000 On Flying mount
FLYING = 0x01000000, // 0000 0001 0000 0000 Actual flying mode
UNKNOWn5 = 0x02000000, // 0000 0010 0000 0000
WATERWALKING = 0x04000000, // 0000 0100 0000 0000
KITE = 0x08000000, // 0000 1000 0000 0000
HOVERMAYBE = 0x10000000, // 0001 0000 0000 0000 prevent unit from falling through water
SAFE_FALL = 0x20000000, // 0010 0000 0000 0000 active rogue safe fall spell (passive)
ZONEDOUT = 0x40000000, // 0100 0000 0000 0000
UNKNOWN8 = 0x80000000, // 1000 0000 0000 0000
IS_MOVING_3D = ( FORWARD | BACKWARD | STRAFE_LEFT | STRAFE_RIGHT | PITCH_UP | PITCH_DOWN | JUMPING | FALLING | FLY_UP | FLY_DOWN | ROTATE_LEFT | ROTATE_RIGHT ),
IS_MOVING_2D = ( FORWARD | BACKWARD | STRAFE_LEFT | STRAFE_RIGHT ),
IS_ROTATING = ROTATE_LEFT | ROTATE_RIGHT,
};
-
Post Thanks / Like - 1 Thanks
xkyii (1 members gave Thanks to counted for this useful post)
-
Mangos is for much older clients. Trinity is a better reference for 8.3/1.13. TrinityCore/UnitDefines.h at master . TrinityCore/TrinityCore . GitHub
Code:
enum MovementFlags : uint32
{
MOVEMENTFLAG_NONE = 0x00000000,
MOVEMENTFLAG_FORWARD = 0x00000001,
MOVEMENTFLAG_BACKWARD = 0x00000002,
MOVEMENTFLAG_STRAFE_LEFT = 0x00000004,
MOVEMENTFLAG_STRAFE_RIGHT = 0x00000008,
MOVEMENTFLAG_LEFT = 0x00000010,
MOVEMENTFLAG_RIGHT = 0x00000020,
MOVEMENTFLAG_PITCH_UP = 0x00000040,
MOVEMENTFLAG_PITCH_DOWN = 0x00000080,
MOVEMENTFLAG_WALKING = 0x00000100, // Walking
MOVEMENTFLAG_DISABLE_GRAVITY = 0x00000200, // Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible.
MOVEMENTFLAG_ROOT = 0x00000400, // Must not be set along with MOVEMENTFLAG_MASK_MOVING
MOVEMENTFLAG_FALLING = 0x00000800, // damage dealt on that type of falling
MOVEMENTFLAG_FALLING_FAR = 0x00001000,
MOVEMENTFLAG_PENDING_STOP = 0x00002000,
MOVEMENTFLAG_PENDING_STRAFE_STOP = 0x00004000,
MOVEMENTFLAG_PENDING_FORWARD = 0x00008000,
MOVEMENTFLAG_PENDING_BACKWARD = 0x00010000,
MOVEMENTFLAG_PENDING_STRAFE_LEFT = 0x00020000,
MOVEMENTFLAG_PENDING_STRAFE_RIGHT = 0x00040000,
MOVEMENTFLAG_PENDING_ROOT = 0x00080000,
MOVEMENTFLAG_SWIMMING = 0x00100000, // appears with fly flag also
MOVEMENTFLAG_ASCENDING = 0x00200000, // press "space" when flying
MOVEMENTFLAG_DESCENDING = 0x00400000,
MOVEMENTFLAG_CAN_FLY = 0x00800000, // Appears when unit can fly AND also walk
MOVEMENTFLAG_FLYING = 0x01000000, // unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity
MOVEMENTFLAG_SPLINE_ELEVATION = 0x02000000, // used for flight paths
MOVEMENTFLAG_WATERWALKING = 0x04000000, // prevent unit from falling through water
MOVEMENTFLAG_FALLING_SLOW = 0x08000000, // active rogue safe fall spell (passive)
MOVEMENTFLAG_HOVER = 0x10000000, // hover, cannot jump
MOVEMENTFLAG_DISABLE_COLLISION = 0x20000000,
MOVEMENTFLAG_MASK_MOVING =
MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT |
MOVEMENTFLAG_FALLING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING,
MOVEMENTFLAG_MASK_TURNING =
MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN,
MOVEMENTFLAG_MASK_MOVING_FLY =
MOVEMENTFLAG_FLYING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING,
// Movement flags allowed for creature in CreateObject - we need to keep all other enabled serverside
// to properly calculate all movement
MOVEMENTFLAG_MASK_CREATURE_ALLOWED =
MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT | MOVEMENTFLAG_SWIMMING |
MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_DISABLE_COLLISION,
/// @todo if needed: add more flags to this masks that are exclusive to players
MOVEMENTFLAG_MASK_PLAYER_ONLY =
MOVEMENTFLAG_FLYING,
/// Movement flags that have change status opcodes associated for players
MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE = MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT |
MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_DISABLE_COLLISION
};
-
Post Thanks / Like - 1 Thanks
xkyii (1 members gave Thanks to Jadd for this useful post)
-
Member