aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2012-04-08 12:17:43 +0200
committerMachiavelli <machiavelli.trinity@gmail.com>2012-04-08 17:03:44 +0200
commite636531da3603c10a9ebcb8a55d52d6cdb3a400a (patch)
tree2b9ec4c8c5db8c8fee18f4b4deb1fb942ec07068 /src/server/game/Entities
parent1922314858dee5be395a3eb2307e37cda8e094f2 (diff)
Core/Movement: Fix pushback issues and client freeze.
Diffstat (limited to 'src/server/game/Entities')
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp24
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h3
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp19
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h3
4 files changed, 44 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 100afd73b27..72a10f43533 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -25550,3 +25550,27 @@ void Player::SendMovementSetCanTransitionBetweenSwimAndFly(bool apply)
data << uint32(0); //! movement counter
SendDirectMessage(&data);
}
+
+void Player::SendMovementSetHover(bool apply)
+{
+ WorldPacket data(apply ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, 12);
+ data.append(GetPackGUID());
+ data << uint32(0); //! movement counter
+ SendDirectMessage(&data);
+}
+
+void Player::SendMovementSetWaterWalking(bool apply)
+{
+ WorldPacket data(apply ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, 12);
+ data.append(GetPackGUID());
+ data << uint32(0); //! movement counter
+ SendDirectMessage(&data);
+}
+
+void Player::SendMovementSetFeatherFall(bool apply)
+{
+ WorldPacket data(apply ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, 12);
+ data.append(GetPackGUID());
+ data << uint32(0); //! movement counter
+ SendDirectMessage(&data);
+}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 53b848a89b0..1b80b68113f 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2486,6 +2486,9 @@ class Player : public Unit, public GridObject<Player>
*/
void SendMovementSetCanFly(bool apply);
void SendMovementSetCanTransitionBetweenSwimAndFly(bool apply);
+ void SendMovementSetHover(bool apply);
+ void SendMovementSetWaterWalking(bool apply);
+ void SendMovementSetFeatherFall(bool apply);
bool CanFly() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index cf14bb02ed9..4f491c0ebe9 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -17598,26 +17598,35 @@ bool Unit::SetHover(bool enable)
void Unit::SendMovementHover()
{
+ if (GetTypeId() == TYPEID_PLAYER)
+ ToPlayer()->SendMovementSetHover(HasUnitMovementFlag(MOVEMENTFLAG_HOVER));
+
WorldPacket data(MSG_MOVE_HOVER, 64);
data.append(GetPackGUID());
BuildMovementPacket(&data);
- SendMessageToSet(&data, true);
+ SendMessageToSet(&data, false);
}
void Unit::SendMovementWaterWalking()
{
+ if (GetTypeId() == TYPEID_PLAYER)
+ ToPlayer()->SendMovementSetWaterWalking(HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING));
+
WorldPacket data(MSG_MOVE_WATER_WALK, 64);
data.append(GetPackGUID());
BuildMovementPacket(&data);
- SendMessageToSet(&data, true);
+ SendMessageToSet(&data, false);
}
void Unit::SendMovementFeatherFall()
{
+ if (GetTypeId() == TYPEID_PLAYER)
+ ToPlayer()->SendMovementSetFeatherFall(HasUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW));
+
WorldPacket data(MSG_MOVE_FEATHER_FALL, 64);
data.append(GetPackGUID());
BuildMovementPacket(&data);
- SendMessageToSet(&data, true);
+ SendMessageToSet(&data, false);
}
void Unit::SendMovementGravityChange()
@@ -17625,7 +17634,7 @@ void Unit::SendMovementGravityChange()
WorldPacket data(MSG_MOVE_GRAVITY_CHNG, 64);
data.append(GetPackGUID());
BuildMovementPacket(&data);
- SendMessageToSet(&data, true);
+ SendMessageToSet(&data, false);
}
void Unit::SendMovementCanFlyChange()
@@ -17650,5 +17659,5 @@ void Unit::SendMovementCanFlyChange()
WorldPacket data(MSG_MOVE_UPDATE_CAN_FLY, 64);
data.append(GetPackGUID());
BuildMovementPacket(&data);
- SendMessageToSet(&data, true);
+ SendMessageToSet(&data, false);
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index fcbe1afa389..bb826c14dfc 100755
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -707,6 +707,9 @@ enum MovementFlags
MOVEMENTFLAG_MASK_TURNING =
MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT,
+ MOVEMENTFLAG_MASK_MOVING_FLY =
+ MOVEMENTFLAG_FLYING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING,
+
//! TODO if needed: add more flags to this masks that are exclusive to players
MOVEMENTFLAG_MASK_PLAYER_ONLY =
MOVEMENTFLAG_FLYING,