mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Phasing: Fixed inverse phaseshift logic
This commit is contained in:
@@ -2707,6 +2707,8 @@ struct PhaseEntry
|
||||
{
|
||||
uint32 ID;
|
||||
uint16 Flags;
|
||||
|
||||
EnumFlag<PhaseEntryFlags> GetFlags() const { return static_cast<PhaseEntryFlags>(Flags); }
|
||||
};
|
||||
|
||||
struct PhaseXPhaseGroupEntry
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user