diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index c067d7befc..7444320298 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -470,9 +470,10 @@ enum MountCapabilityFlags enum PhaseEntryFlags : uint16 { - PHASE_FLAG_NORMAL = 0x08, - PHASE_FLAG_COSMETIC = 0x10, - PHASE_FLAG_PERSONAL = 0x20 + PHASE_FLAG_SEND_TO_CLIENT = 0x04, + PHASE_FLAG_NORMAL = 0x08, + PHASE_FLAG_COSMETIC = 0x10, + PHASE_FLAG_PERSONAL = 0x20 }; // PhaseUseFlags fields in different DBCs diff --git a/src/server/game/Phasing/PhaseShift.h b/src/server/game/Phasing/PhaseShift.h index c30b477c9a..35bb74e001 100644 --- a/src/server/game/Phasing/PhaseShift.h +++ b/src/server/game/Phasing/PhaseShift.h @@ -43,9 +43,10 @@ enum class PhaseShiftFlags : uint32 enum class PhaseFlags : uint16 { - None = 0x0, - Cosmetic = 0x1, - Personal = 0x2 + None = 0x0, + Cosmetic = 0x1, + Personal = 0x2, + SendToClient = 0x4 }; class TC_GAME_API PhaseShift diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp index 0e775a3f14..4a564f7c16 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -36,6 +36,9 @@ inline PhaseFlags GetPhaseFlags(uint32 phaseId) { if (PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseId)) { + if (phase->Flags & PHASE_FLAG_SEND_TO_CLIENT) + return PhaseFlags::SendToClient; + if (phase->Flags & PHASE_FLAG_COSMETIC) return PhaseFlags::Cosmetic; @@ -398,9 +401,11 @@ void PhasingHandler::SendToPlayer(Player const* player, PhaseShift const& phaseS WorldPackets::Misc::PhaseShiftChange phaseShiftChange; phaseShiftChange.Client = player->GetGUID(); phaseShiftChange.Phaseshift.PhaseShiftFlags = phaseShift.Flags.AsUnderlyingType(); - phaseShiftChange.Phaseshift.Phases.reserve(phaseShift.Phases.size()); - std::transform(phaseShift.Phases.begin(), phaseShift.Phases.end(), std::back_inserter(phaseShiftChange.Phaseshift.Phases), - [](PhaseShift::PhaseRef const& phase) -> uint16 { return phase.Id; }); + + for (auto phase : phaseShift.Phases) + if (phase.Flags.HasFlag(PhaseFlags::SendToClient)) + phaseShiftChange.Phaseshift.Phases.push_back(phase.Id); + phaseShiftChange.VisibleMapIDs.reserve(phaseShift.VisibleMapIds.size()); std::transform(phaseShift.VisibleMapIds.begin(), phaseShift.VisibleMapIds.end(), std::back_inserter(phaseShiftChange.VisibleMapIDs), [](PhaseShift::VisibleMapIdContainer::value_type const& visibleMapId) { return visibleMapId.first; });