Core/Entities: After some research redefine MOVEMENTFLAG_MASK_MOVING and make it entirely mutually exclusive with MOVEMENTFLAG_ROOT - fixes the last of the related client freezes.
This commit is contained in:
@@ -15761,11 +15761,10 @@ void Unit::SetStunned(bool apply)
|
|||||||
SetTarget(0);
|
SetTarget(0);
|
||||||
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
|
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
|
||||||
|
|
||||||
// MOVEMENTFLAG_ROOT cannot be used in conjunction with
|
// MOVEMENTFLAG_ROOT cannot be used in conjunction with MOVEMENTFLAG_MASK_MOVING (tested 3.3.5a)
|
||||||
// MOVEMENTFLAG_FORWARD, MOVEMENTFLAG_BACKWARD, MOVEMENTFLAG_STRAFE_LEFT, MOVEMENTFLAG_STRAFE RIGHT, MOVEMENTFLAG_FALLING (tested 3.3.5a)
|
// this will freeze clients. That's why we remove MOVEMENTFLAG_MASK_MOVING before
|
||||||
// this will freeze clients. That's why we remove any current movement flags before
|
|
||||||
// setting MOVEMENTFLAG_ROOT
|
// setting MOVEMENTFLAG_ROOT
|
||||||
RemoveUnitMovementFlag(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT | MOVEMENTFLAG_FALLING);
|
RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING);
|
||||||
AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
|
AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
|
||||||
|
|
||||||
// Creature specific
|
// Creature specific
|
||||||
@@ -15810,11 +15809,10 @@ void Unit::SetRooted(bool apply)
|
|||||||
if (m_rootTimes > 0) // blizzard internal check?
|
if (m_rootTimes > 0) // blizzard internal check?
|
||||||
m_rootTimes++;
|
m_rootTimes++;
|
||||||
|
|
||||||
// MOVEMENTFLAG_ROOT cannot be used in conjunction with
|
// MOVEMENTFLAG_ROOT cannot be used in conjunction with MOVEMENTFLAG_MASK_MOVING (tested 3.3.5a)
|
||||||
// MOVEMENTFLAG_FORWARD, MOVEMENTFLAG_BACKWARD, MOVEMENTFLAG_STRAFE_LEFT, MOVEMENTFLAG_STRAFE RIGHT, MOVEMENTFLAG_FALLING (tested 3.3.5a)
|
// this will freeze clients. That's why we remove MOVEMENTFLAG_MASK_MOVING before
|
||||||
// this will freeze clients. That's why we remove any current movement flags before
|
|
||||||
// setting MOVEMENTFLAG_ROOT
|
// setting MOVEMENTFLAG_ROOT
|
||||||
RemoveUnitMovementFlag(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT | MOVEMENTFLAG_FALLING);
|
RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING);
|
||||||
AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
|
AddUnitMovementFlag(MOVEMENTFLAG_ROOT);
|
||||||
|
|
||||||
if (GetTypeId() == TYPEID_PLAYER)
|
if (GetTypeId() == TYPEID_PLAYER)
|
||||||
|
|||||||
@@ -643,7 +643,7 @@ enum MovementFlags
|
|||||||
MOVEMENTFLAG_WALKING = 0x00000100, // Walking
|
MOVEMENTFLAG_WALKING = 0x00000100, // Walking
|
||||||
MOVEMENTFLAG_ONTRANSPORT = 0x00000200, // Used for flying on some creatures
|
MOVEMENTFLAG_ONTRANSPORT = 0x00000200, // Used for flying on some creatures
|
||||||
MOVEMENTFLAG_LEVITATING = 0x00000400,
|
MOVEMENTFLAG_LEVITATING = 0x00000400,
|
||||||
MOVEMENTFLAG_ROOT = 0x00000800, // Must not be set along with MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT -> client freeze
|
MOVEMENTFLAG_ROOT = 0x00000800, // Must not be set along with MOVEMENTFLAG_MASK_MOVING
|
||||||
MOVEMENTFLAG_JUMPING = 0x00001000,
|
MOVEMENTFLAG_JUMPING = 0x00001000,
|
||||||
MOVEMENTFLAG_FALLING = 0x00002000, // damage dealt on that type of falling
|
MOVEMENTFLAG_FALLING = 0x00002000, // damage dealt on that type of falling
|
||||||
MOVEMENTFLAG_PENDING_STOP = 0x00004000,
|
MOVEMENTFLAG_PENDING_STOP = 0x00004000,
|
||||||
@@ -664,11 +664,13 @@ enum MovementFlags
|
|||||||
MOVEMENTFLAG_FALLING_SLOW = 0x20000000, // active rogue safe fall spell (passive)
|
MOVEMENTFLAG_FALLING_SLOW = 0x20000000, // active rogue safe fall spell (passive)
|
||||||
MOVEMENTFLAG_HOVER = 0x40000000, // hover, cannot jump
|
MOVEMENTFLAG_HOVER = 0x40000000, // hover, cannot jump
|
||||||
|
|
||||||
MOVEMENTFLAG_MOVING =
|
// TODO: Check if PITCH_UP and PITCH_DOWN really belong here..
|
||||||
MOVEMENTFLAG_FORWARD |MOVEMENTFLAG_BACKWARD |MOVEMENTFLAG_STRAFE_LEFT|MOVEMENTFLAG_STRAFE_RIGHT|
|
MOVEMENTFLAG_MASK_MOVING =
|
||||||
MOVEMENTFLAG_PITCH_UP|MOVEMENTFLAG_PITCH_DOWN|MOVEMENTFLAG_JUMPING
|
MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT |
|
||||||
|MOVEMENTFLAG_FALLING|MOVEMENTFLAG_ASCENDING| MOVEMENTFLAG_SPLINE_ELEVATION,
|
MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN | MOVEMENTFLAG_JUMPING | MOVEMENTFLAG_FALLING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING |
|
||||||
MOVEMENTFLAG_TURNING =
|
MOVEMENTFLAG_SPLINE_ELEVATION,
|
||||||
|
|
||||||
|
MOVEMENTFLAG_MASK_TURNING =
|
||||||
MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT,
|
MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT,
|
||||||
};
|
};
|
||||||
enum MovementFlags2
|
enum MovementFlags2
|
||||||
@@ -2109,8 +2111,8 @@ class Unit : public WorldObject
|
|||||||
|
|
||||||
void BuildMovementPacket(ByteBuffer *data) const;
|
void BuildMovementPacket(ByteBuffer *data) const;
|
||||||
|
|
||||||
bool isMoving() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MOVING); }
|
bool isMoving() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING); }
|
||||||
bool isTurning() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_TURNING); }
|
bool isTurning() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_TURNING); }
|
||||||
bool canFly() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
|
bool canFly() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
|
||||||
bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING); }
|
bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING); }
|
||||||
void SetFlying(bool apply);
|
void SetFlying(bool apply);
|
||||||
|
|||||||
Reference in New Issue
Block a user