aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMachiavelli <machiavelli.trinity@gmail.com>2012-03-16 17:21:15 +0100
committerMachiavelli <machiavelli.trinity@gmail.com>2012-03-16 17:21:15 +0100
commitdf31af5b4f53a6fd9c43236418e719dab6c81cc5 (patch)
treef434f45afb9bb0a62f77643867894fa634d8733f /src
parentf8c04b1bc56fa67553a3e8706a07f5edf2ce183e (diff)
Core/Movement: Add server-side check for movementflag correction in previous commit. This effectively prevents (most if not all) flyhacking.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Server/WorldSession.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 84907937de5..081abbd9e31 100755
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -849,6 +849,17 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo* mi)
//! Cannot hover without SPELL_AURA_HOVER
if (mi->HasMovementFlag(MOVEMENTFLAG_HOVER) && !GetPlayer()->HasAuraType(SPELL_AURA_HOVER))
mi->flags &= ~MOVEMENTFLAG_HOVER;
+
+ /*! Cannot fly if no fly auras present. Exception is being a GM.
+ Note that we check for account level instead of Player::IsGameMaster() because in some
+ situations it may be feasable to use .gm fly on as a GM without having .gm on,
+ e.g. aerial combat.
+ */
+
+ if (mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && GetSecurity() == SEC_PLAYER &&
+ !GetPlayer()->HasAuraType(SPELL_AURA_FLY) &&
+ !GetPlayer()->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))
+ mi->flags &= ~(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY);
}
void WorldSession::WriteMovementInfo(WorldPacket* data, MovementInfo* mi)