diff options
author | ModoX <moardox@gmail.com> | 2024-06-04 00:44:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-04 00:44:47 +0200 |
commit | 3aae692ec33fc1e66453442bf19a10983804c18b (patch) | |
tree | cdde541662e6049b0b083ef733be31ee72a0f79e /src | |
parent | 3fd967754388b7b859dbd8b954ec68a844e172f0 (diff) |
Core/Disables: Added DISABLE_TYPE_PHASE_AREA (#29997)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Conditions/DisableMgr.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Conditions/DisableMgr.h | 1 | ||||
-rw-r--r-- | src/server/game/Phasing/PhasingHandler.cpp | 8 |
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()); |