From 98aa7806c44d37dd97268f456a0fad684fb3da18 Mon Sep 17 00:00:00 2001 From: Treeston Date: Tue, 25 Jul 2017 19:59:59 +0200 Subject: Core/Player: Always set flight state change packets for players, even if their latest MovementInfo doesn't indicate it's needed (the MI might be outdated). Fixes a player flight exploit and closes #20079. --- src/server/game/Entities/Player/Player.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/server') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a41581d6c53..9d9323e8d3f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -26266,9 +26266,6 @@ bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/) bool Player::SetCanFly(bool apply, bool packetOnly /*= false*/) { - if (!packetOnly && !Unit::SetCanFly(apply)) - return false; - if (!apply) SetFallInformation(0, GetPositionZ()); @@ -26277,11 +26274,16 @@ bool Player::SetCanFly(bool apply, bool packetOnly /*= false*/) data << uint32(0); //! movement counter SendDirectMessage(&data); - data.Initialize(MSG_MOVE_UPDATE_CAN_FLY, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - SendMessageToSet(&data, false); - return true; + if (packetOnly || Unit::SetCanFly(apply)) + { + data.Initialize(MSG_MOVE_UPDATE_CAN_FLY, 64); + data << GetPackGUID(); + BuildMovementPacket(&data); + SendMessageToSet(&data, false); + return true; + } + else + return false; } bool Player::SetHover(bool apply, bool packetOnly /*= false*/) -- cgit v1.2.3