diff --git a/src/game/Entities/Player.cpp b/src/game/Entities/Player.cpp index 875029ca043..3873133d79c 100644 --- a/src/game/Entities/Player.cpp +++ b/src/game/Entities/Player.cpp @@ -21268,11 +21268,10 @@ void Player::SetPhaseMask(uint32 newPhaseMask, bool update) if (IsGameMaster()) newPhaseMask = static_cast(PHASEMASK_ANYWHERE); - // phase auras normally not expected at BG but anyway better check - if (BattleGround* bg = GetBattleGround()) - bg->HandlePlayerDroppedFlag(this); - Unit::SetPhaseMask(newPhaseMask, update); + + if (Unit* vehicle = const_cast(FindRootVehicle())) + vehicle->SetPhaseMask(newPhaseMask, update); GetSession()->SendSetPhaseShift(GetPhaseMask()); } diff --git a/src/game/Spells/SpellAuras.cpp b/src/game/Spells/SpellAuras.cpp index d4bfbdb36d6..ad8e37b1ece 100755 --- a/src/game/Spells/SpellAuras.cpp +++ b/src/game/Spells/SpellAuras.cpp @@ -9455,6 +9455,13 @@ void Aura::HandlePhase(bool apply, bool Real) newPhase |= (*itr)->GetMiscValue(); target->SetPhaseMask(newPhase ? newPhase : uint32(PHASEMASK_NORMAL), true); + + if (apply) + { + // drop flag at invisibiliy in bg + target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_STEALTH_INVIS_CANCELS); + } + // no-phase is also phase state so same code for apply and remove if (target->GetTypeId() == TYPEID_PLAYER) {