aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchesD <majklprofik@seznam.cz>2016-05-18 20:06:47 +0200
committerMitchesD <majklprofik@seznam.cz>2016-05-18 20:06:47 +0200
commitf636141345a98569840548372dbb6030299d91b3 (patch)
tree40ae2c2bb32ccf66f14a38ff90544118968a9ac4
parent042e1ae266c968ce27994b1b4feb7342adb52db7 (diff)
Core/Phase: phase_area table now support even parent area (known as zone)
Closes https://github.com/TrinityCore/TrinityCore/issues/17025
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp8
-rw-r--r--src/server/game/Entities/Object/Object.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Globals/ObjectMgr.h8
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
6 files changed, 14 insertions, 14 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 5494f5a8bb4..2ff7196a2dc 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -1379,7 +1379,7 @@ bool ConditionMgr::addToPhases(Condition* cond) const
if (!cond->SourceEntry)
{
bool found = false;
- PhaseInfo& p = sObjectMgr->GetAreaPhasesForLoading();
+ PhaseInfo& p = sObjectMgr->GetAreaAndZonePhasesForLoading();
for (auto phaseItr = p.begin(); phaseItr != p.end(); ++phaseItr)
{
for (PhaseInfoStruct& phase : phaseItr->second)
@@ -1395,7 +1395,7 @@ bool ConditionMgr::addToPhases(Condition* cond) const
if (found)
return true;
}
- else if (std::vector<PhaseInfoStruct>* phases = sObjectMgr->GetPhasesForAreaForLoading(cond->SourceEntry))
+ else if (std::vector<PhaseInfoStruct>* phases = sObjectMgr->GetPhasesForAreaOrZoneForLoading(cond->SourceEntry))
{
for (PhaseInfoStruct& phase : *phases)
{
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 1fe1b3b73c4..f9fa1b3aeb6 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2809,16 +2809,16 @@ bool WorldObject::HasInPhaseList(uint32 phase)
// Updates Area based phases, does not remove phases from auras
// Phases from gm commands are not taken into calculations, they can be lost!!
-void WorldObject::UpdateAreaPhase()
+void WorldObject::UpdateAreaAndZonePhase()
{
bool updateNeeded = false;
- PhaseInfo const& phases = sObjectMgr->GetAreaPhases();
+ PhaseInfo const& phases = sObjectMgr->GetAreaAndZonePhases();
for (PhaseInfo::const_iterator itr = phases.begin(); itr != phases.end(); ++itr)
{
- uint32 areaId = itr->first;
+ uint32 areaOrZoneId = itr->first;
for (PhaseInfoStruct const& phase : itr->second)
{
- if (areaId == GetAreaId())
+ if (areaOrZoneId == GetAreaId() || areaOrZoneId == GetZoneId())
{
if (sConditionMgr->IsObjectMeetToConditions(this, phase.Conditions))
{
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index dfb2647d760..503555037e1 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -453,7 +453,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
virtual void SetPhaseMask(uint32 newPhaseMask, bool update);
virtual bool SetInPhase(uint32 id, bool update, bool apply);
void CopyPhaseFrom(WorldObject* obj, bool update = false);
- void UpdateAreaPhase();
+ void UpdateAreaAndZonePhase();
void ClearPhases(bool update = false);
void RebuildTerrainSwaps();
void RebuildWorldMapAreaSwaps();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 912f13b8515..1efc4988a08 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -6846,7 +6846,7 @@ void Player::UpdateArea(uint32 newArea)
UpdatePvPState(true);
UpdateAreaDependentAuras(newArea);
- UpdateAreaPhase();
+ UpdateAreaAndZonePhase();
// previously this was in UpdateZone (but after UpdateArea) so nothing will break
pvpInfo.IsInNoPvPArea = false;
@@ -6955,7 +6955,7 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
UpdateZoneDependentAuras(newZone);
- UpdateAreaPhase();
+ UpdateAreaAndZonePhase();
}
//If players are too far away from the duel flag... they lose the duel
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index faea0d7f414..31eff02b3dc 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -1330,14 +1330,14 @@ class TC_GAME_API ObjectMgr
return itr != _phases.end() ? &itr->second : nullptr;
}
TerrainPhaseInfo const& GetDefaultTerrainSwapStore() const { return _terrainMapDefaultStore; }
- PhaseInfo const& GetAreaPhases() const { return _phases; }
+ PhaseInfo const& GetAreaAndZonePhases() const { return _phases; }
// condition loading helpers
- std::vector<PhaseInfoStruct>* GetPhasesForAreaForLoading(uint32 area)
+ std::vector<PhaseInfoStruct>* GetPhasesForAreaOrZoneForLoading(uint32 areaOrZone)
{
- auto itr = _phases.find(area);
+ auto itr = _phases.find(areaOrZone);
return itr != _phases.end() ? &itr->second : nullptr;
}
- PhaseInfo& GetAreaPhasesForLoading() { return _phases; }
+ PhaseInfo& GetAreaAndZonePhasesForLoading() { return _phases; }
// for wintergrasp only
GraveYardContainer GraveYardStore;
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index b274750c5ab..d605e1d8679 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -5927,7 +5927,7 @@ void Spell::EffectUpdatePlayerPhase(SpellEffIndex /*effIndex*/)
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- unitTarget->UpdateAreaPhase();
+ unitTarget->UpdateAreaAndZonePhase();
}
void Spell::EffectUpdateZoneAurasAndPhases(SpellEffIndex /*effIndex*/)