aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Conditions/DisableMgr.cpp12
-rw-r--r--src/server/game/Conditions/DisableMgr.h1
-rw-r--r--src/server/game/Phasing/PhasingHandler.cpp8
3 files changed, 20 insertions, 1 deletions
diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp
index 87f4f0f2917..0ef3df3ae3b 100644
--- a/src/server/game/Conditions/DisableMgr.cpp
+++ b/src/server/game/Conditions/DisableMgr.cpp
@@ -241,6 +241,17 @@ void LoadDisables()
TC_LOG_INFO("misc", "Pathfinding disabled for {} map {}.", MapTypeNames[mapEntry->InstanceType], entry);
break;
}
+ case DISABLE_TYPE_PHASE_AREA:
+ {
+ if (!sPhaseStore.LookupEntry(entry))
+ {
+ TC_LOG_ERROR("sql.sql", "Phase entry {} from `disables` doesn't exist in dbc, skipped.", entry);
+ continue;
+ }
+ if (flags)
+ TC_LOG_ERROR("sql.sql", "Disable flags specified for phase {}, useless data.", entry);
+ break;
+ }
default:
break;
}
@@ -383,6 +394,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, WorldObject const* ref, uint8
case DISABLE_TYPE_OUTDOORPVP:
case DISABLE_TYPE_CRITERIA:
case DISABLE_TYPE_MMAP:
+ case DISABLE_TYPE_PHASE_AREA:
return true;
case DISABLE_TYPE_VMAP:
return (flags & itr->second.flags) != 0;
diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h
index 158579f988e..8dce8467bb5 100644
--- a/src/server/game/Conditions/DisableMgr.h
+++ b/src/server/game/Conditions/DisableMgr.h
@@ -33,6 +33,7 @@ enum DisableType
DISABLE_TYPE_VMAP = 6,
DISABLE_TYPE_MMAP = 7,
DISABLE_TYPE_LFG_MAP = 8,
+ DISABLE_TYPE_PHASE_AREA = 9,
MAX_DISABLE_TYPES
};
diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp
index 9c11eb1c56e..d3f187f4a69 100644
--- a/src/server/game/Phasing/PhasingHandler.cpp
+++ b/src/server/game/Phasing/PhasingHandler.cpp
@@ -20,6 +20,7 @@
#include "ConditionMgr.h"
#include "Creature.h"
#include "DB2Stores.h"
+#include "DisableMgr.h"
#include "Language.h"
#include "Map.h"
#include "MiscPackets.h"
@@ -318,6 +319,9 @@ void PhasingHandler::OnAreaChange(WorldObject* object)
continue;
uint32 phaseId = phaseArea.PhaseInfo->Id;
+ if (DisableMgr::IsDisabledFor(DISABLE_TYPE_PHASE_AREA, phaseId, object))
+ continue;
+
if (sConditionMgr->IsObjectMeetToConditions(srcInfo, phaseArea.Conditions))
phaseShift.AddPhase(phaseId, GetPhaseFlags(phaseId), &phaseArea.Conditions);
else
@@ -388,7 +392,7 @@ bool PhasingHandler::OnConditionChange(WorldObject* object, bool updateVisibilit
for (auto itr = suppressedPhaseShift.Phases.begin(); itr != suppressedPhaseShift.Phases.end();)
{
- if (sConditionMgr->IsObjectMeetToConditions(srcInfo, *ASSERT_NOTNULL(itr->AreaConditions)))
+ if (!DisableMgr::IsDisabledFor(DISABLE_TYPE_PHASE_AREA, itr->Id, object) && sConditionMgr->IsObjectMeetToConditions(srcInfo, *ASSERT_NOTNULL(itr->AreaConditions)))
{
changed = phaseShift.AddPhase(itr->Id, itr->Flags, itr->AreaConditions, itr->References) || changed;
suppressedPhaseShift.ModifyPhasesReferences(itr, -itr->References);
@@ -642,6 +646,8 @@ void PhasingHandler::PrintToChat(ChatHandler* chat, WorldObject const* target)
phases << ' ' << '(' << cosmetic << ')';
if (phase.Flags.HasFlag(PhaseFlags::Personal))
phases << ' ' << '(' << personal << ')';
+ if (DisableMgr::IsDisabledFor(DISABLE_TYPE_PHASE_AREA, phase.Id, nullptr))
+ phases << " (Disabled)";
}
chat->PSendSysMessage(LANG_PHASESHIFT_PHASES, phases.str().c_str());