diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-11-22 22:39:16 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-11-22 22:39:16 +0100 |
commit | 630adfec227c18b8825f4871a1bf1a395b8dee05 (patch) | |
tree | 6137c8b41209a4f960daa884d0625e64ad0e268e /src/server | |
parent | cb8b6370612e6684b3b3fbdb4a08f8ec21d51f3e (diff) |
Core/Phasing: Fixed inverse phaseshift logic
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/game/DataStores/DB2Structure.h | 2 | ||||
-rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 17 | ||||
-rw-r--r-- | src/server/game/Phasing/PhaseShift.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Phasing/PhasingHandler.cpp | 4 |
4 files changed, 22 insertions, 12 deletions
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 7a3e476542e..b4d68c2930d 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -2707,6 +2707,8 @@ struct PhaseEntry { uint32 ID; uint16 Flags; + + EnumFlag<PhaseEntryFlags> GetFlags() const { return static_cast<PhaseEntryFlags>(Flags); } }; struct PhaseXPhaseGroupEntry diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 5f752cfe715..705ad1a0444 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1365,13 +1365,22 @@ enum MountFlags MOUNT_FLAG_HIDE_IF_UNKNOWN = 0x40 }; -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, + Personal = 0x020, + Expensive = 0x040, + EventsAreObservable = 0x080, + UsesPreloadConditions = 0x100, + UnshareablePersonal = 0x200, + ObjectsAreVisible = 0x400, }; +DEFINE_ENUM_FLAG(PhaseEntryFlags); + // PhaseUseFlags fields in different db2s enum PhaseUseFlagsValues : uint8 { diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp index c5c0bba5549..f9753226918 100644 --- a/src/server/game/Phasing/PhaseShift.cpp +++ b/src/server/game/Phasing/PhaseShift.cpp @@ -124,8 +124,8 @@ 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; + if (phaseShift.Flags.HasFlag(PhaseShiftFlags::Unphased) && excludedPhaseShift.Flags.HasFlag(PhaseShiftFlags::InverseUnphased)) + return false; for (PhaseRef const& phase : phaseShift.Phases) { @@ -133,11 +133,10 @@ bool PhaseShift::CanSee(PhaseShift const& other) const continue; auto itr2 = std::find(excludedPhaseShift.Phases.begin(), excludedPhaseShift.Phases.end(), phase); - 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 57260d54c18..7ac874c16c6 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -38,10 +38,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; } |