diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 28ead6c6f1b..c9f80d2dc5e 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -469,13 +469,17 @@ enum MountCapabilityFlags MOUNT_CAPABIILTY_FLAG_IGNORE_RESTRICTIONS = 0x20, }; -enum PhaseEntryFlags : uint16 +enum class PhaseEntryFlags : uint16 { - PHASE_FLAG_NORMAL = 0x08, - PHASE_FLAG_COSMETIC = 0x10, - PHASE_FLAG_PERSONAL = 0x20 + ReadOnly = 0x001, + InternalPhase = 0x002, + Normal = 0x008, + Cosmetic = 0x010, // unused in 4.x but used for cherry pick compatability + Personal = 0x020 // unused in 4.x but used for cherry pick compatability }; +DEFINE_ENUM_FLAG(PhaseEntryFlags); + // PhaseUseFlags fields in different DBCs enum PhaseUseFlagsValues : uint8 { diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 783871b2d00..054ac79e2b6 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1618,6 +1618,8 @@ struct PhaseEntry uint32 ID; // 0 char* Name; // 1 uint32 Flags; // 2 + + EnumFlag GetFlags() const { return static_cast(Flags); } }; struct PhaseGroupEntry diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp index 773a65f1df0..d3c2db1d938 100644 --- a/src/server/game/Phasing/PhaseShift.cpp +++ b/src/server/game/Phasing/PhaseShift.cpp @@ -124,7 +124,7 @@ bool PhaseShift::CanSee(PhaseShift const& other) const auto checkInversePhaseShift = [excludePhasesWithFlag](PhaseShift const& phaseShift, PhaseShift const& excludedPhaseShift) { if (phaseShift.Flags.HasFlag(PhaseShiftFlags::Unphased) && !excludedPhaseShift.Flags.HasFlag(PhaseShiftFlags::InverseUnphased)) - return true; + return false; for (auto itr = phaseShift.Phases.begin(); itr != phaseShift.Phases.end(); ++itr) { @@ -132,11 +132,11 @@ bool PhaseShift::CanSee(PhaseShift const& other) const continue; auto itr2 = std::find(excludedPhaseShift.Phases.begin(), excludedPhaseShift.Phases.end(), *itr); - if (itr2 == excludedPhaseShift.Phases.end() || itr2->Flags.HasFlag(excludePhasesWithFlag)) - return true; + if (itr2 != excludedPhaseShift.Phases.end() && !itr2->Flags.HasFlag(excludePhasesWithFlag)) + return false; } - return false; + return true; }; if (other.Flags.HasFlag(PhaseShiftFlags::Inverse)) diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp index 9299d31220c..6557ea76aeb 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -37,10 +37,10 @@ inline PhaseFlags GetPhaseFlags(uint32 phaseId) { if (PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseId)) { - if (phase->Flags & PHASE_FLAG_COSMETIC) + if (phase->GetFlags().HasFlag(PhaseEntryFlags::Cosmetic)) return PhaseFlags::Cosmetic; - if (phase->Flags & PHASE_FLAG_PERSONAL) + if (phase->GetFlags().HasFlag(PhaseEntryFlags::Personal)) return PhaseFlags::Personal; }