Created
June 1, 2014 20:58
-
-
Save Subv/fe9dd777f411afe8dc23 to your computer and use it in GitHub Desktop.
Latest phase stuff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp | |
index a797f61..59633f8 100644 | |
--- a/src/server/game/Battlefield/Battlefield.cpp | |
+++ b/src/server/game/Battlefield/Battlefield.cpp | |
@@ -800,7 +800,6 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl | |
delete creature; | |
return NULL; | |
} | |
- | |
creature->SetHomePosition(x, y, z, o); | |
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry); | |
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp | |
index dff9928..ba207c1 100644 | |
--- a/src/server/game/Battlegrounds/Battleground.cpp | |
+++ b/src/server/game/Battlegrounds/Battleground.cpp | |
@@ -1539,6 +1539,7 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float | |
delete go; | |
return false; | |
} | |
+ | |
/* | |
uint32 guid = go->GetGUIDLow(); | |
diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp | |
index 339ec57..edf15aa 100644 | |
--- a/src/server/game/Combat/ThreatManager.cpp | |
+++ b/src/server/game/Combat/ThreatManager.cpp | |
@@ -75,7 +75,7 @@ bool ThreatCalcHelper::isValidProcess(Unit* hatedUnit, Unit* hatingUnit, SpellIn | |
return false; | |
// not in same map or phase | |
- if (!hatedUnit->IsInMap(hatingUnit) || !hatedUnit->InSamePhase(hatingUnit)) | |
+ if (!hatedUnit->IsInMap(hatingUnit) || !hatedUnit->IsInPhase(hatingUnit)) | |
return false; | |
// spell not causing threat | |
@@ -182,7 +182,7 @@ void HostileReference::updateOnlineStatus() | |
&& (getTarget()->GetTypeId() != TYPEID_PLAYER || !getTarget()->ToPlayer()->IsGameMaster()) | |
&& !getTarget()->HasUnitState(UNIT_STATE_IN_FLIGHT) | |
&& getTarget()->IsInMap(GetSourceUnit()) | |
- && getTarget()->InSamePhase(GetSourceUnit()) | |
+ && getTarget()->IsInPhase(GetSourceUnit()) | |
) | |
{ | |
Creature* creature = GetSourceUnit()->ToCreature(); | |
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp | |
index 74beed5..31f5594 100644 | |
--- a/src/server/game/Conditions/ConditionMgr.cpp | |
+++ b/src/server/game/Conditions/ConditionMgr.cpp | |
@@ -1512,11 +1512,11 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) | |
} | |
break; | |
case CONDITION_SOURCE_TYPE_PHASE_DEFINITION: | |
- if (!PhaseMgr::IsConditionTypeSupported(cond->ConditionType)) | |
+ /*if (!PhaseMgr::IsConditionTypeSupported(cond->ConditionType)) | |
{ | |
TC_LOG_ERROR("sql.sql", "Condition source type `CONDITION_SOURCE_TYPE_PHASE_DEFINITION` does not support condition type %u, ignoring.", cond->ConditionType); | |
return false; | |
- } | |
+ }*/ | |
break; | |
case CONDITION_SOURCE_TYPE_NPC_VENDOR: | |
{ | |
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp | |
index 517464f..a903044 100644 | |
--- a/src/server/game/Entities/Creature/Creature.cpp | |
+++ b/src/server/game/Entities/Creature/Creature.cpp | |
@@ -739,6 +739,9 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, | |
ASSERT(map); | |
SetMap(map); | |
SetPhaseMask(phaseMask, false); | |
+ | |
+ if (data && data->phaseid) | |
+ SetInPhase(data->phaseid, false, true); | |
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry); | |
if (!cinfo) | |
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h | |
index 8a22ce6..28d4923 100644 | |
--- a/src/server/game/Entities/Creature/Creature.h | |
+++ b/src/server/game/Entities/Creature/Creature.h | |
@@ -254,7 +254,7 @@ struct CreatureData | |
CreatureData() : id(0), mapid(0), phaseMask(0), displayid(0), equipmentId(0), | |
posX(0.0f), posY(0.0f), posZ(0.0f), orientation(0.0f), spawntimesecs(0), | |
spawndist(0.0f), currentwaypoint(0), curhealth(0), curmana(0), movementType(0), | |
- spawnMask(0), npcflag(0), unit_flags(0), dynamicflags(0), dbData(true) { } | |
+ spawnMask(0), npcflag(0), unit_flags(0), dynamicflags(0), phaseid(0), dbData(true) { } | |
uint32 id; // entry in creature_template | |
uint16 mapid; | |
uint32 phaseMask; | |
@@ -274,6 +274,7 @@ struct CreatureData | |
uint32 npcflag; | |
uint32 unit_flags; // enum UnitFlags mask values | |
uint32 dynamicflags; | |
+ uint32 phaseid; | |
bool dbData; | |
}; | |
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp | |
index d6a029d..ae96af5 100644 | |
--- a/src/server/game/Entities/GameObject/GameObject.cpp | |
+++ b/src/server/game/Entities/GameObject/GameObject.cpp | |
@@ -813,6 +813,9 @@ bool GameObject::LoadGameObjectFromDB(uint32 guid, Map* map, bool addToMap) | |
if (!Create(guid, entry, map, phaseMask, x, y, z, ang, rotation0, rotation1, rotation2, rotation3, animprogress, go_state, artKit)) | |
return false; | |
+ if (data->phaseid) | |
+ SetInPhase(data->phaseid, false, true); | |
+ | |
if (data->spawntimesecs >= 0) | |
{ | |
m_spawnedByDefault = true; | |
@@ -2053,6 +2056,13 @@ void GameObject::SetDisplayId(uint32 displayid) | |
UpdateModel(); | |
} | |
+void GameObject::SetInPhase(uint32 id, bool update, bool apply) | |
+{ | |
+ WorldObject::SetInPhase(id, update, apply); | |
+ if (m_model && m_model->isEnabled()) | |
+ EnableCollision(true); | |
+} | |
+ | |
void GameObject::SetPhaseMask(uint32 newPhaseMask, bool update) | |
{ | |
WorldObject::SetPhaseMask(newPhaseMask, update); | |
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h | |
index 640d571..13f3131 100644 | |
--- a/src/server/game/Entities/GameObject/GameObject.h | |
+++ b/src/server/game/Entities/GameObject/GameObject.h | |
@@ -592,7 +592,7 @@ struct GameObjectData | |
{ | |
explicit GameObjectData() : id(0), mapid(0), phaseMask(0), posX(0.0f), posY(0.0f), posZ(0.0f), orientation(0.0f), | |
rotation0(0.0f), rotation1(0.0f), rotation2(0.0f), rotation3(0.0f), spawntimesecs(0), | |
- animprogress(0), go_state(GO_STATE_ACTIVE), spawnMask(0), artKit(0), dbData(true) { } | |
+ animprogress(0), go_state(GO_STATE_ACTIVE), spawnMask(0), artKit(0), phaseid(0), dbData(true) { } | |
uint32 id; // entry in gamobject_template | |
uint16 mapid; | |
uint32 phaseMask; | |
@@ -609,6 +609,7 @@ struct GameObjectData | |
GOState go_state; | |
uint8 spawnMask; | |
uint8 artKit; | |
+ uint32 phaseid; | |
bool dbData; | |
}; | |
@@ -725,6 +726,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map | |
static void SetGoArtKit(uint8 artkit, GameObject* go, uint32 lowguid = 0); | |
void SetPhaseMask(uint32 newPhaseMask, bool update); | |
+ void SetInPhase(uint32 id, bool update, bool apply); | |
void EnableCollision(bool enable); | |
void Use(Unit* user); | |
@@ -876,6 +878,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map | |
//! Following check does check 3d distance | |
return IsInRange(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare); | |
} | |
+ | |
GameObjectAI* m_AI; | |
}; | |
#endif | |
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp | |
index a2fd19c..48f40b0 100644 | |
--- a/src/server/game/Entities/Object/Object.cpp | |
+++ b/src/server/game/Entities/Object/Object.cpp | |
@@ -1493,7 +1493,7 @@ bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool | |
bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D /*= true*/) const | |
{ | |
- return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D); | |
+ return obj && IsInMap(obj) && IsInPhase(obj) && _IsWithinDist(obj, dist2compare, is3D); | |
} | |
bool WorldObject::IsWithinLOS(float ox, float oy, float oz) const | |
@@ -1932,7 +1932,7 @@ bool WorldObject::CanSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo | |
bool WorldObject::CanNeverSee(WorldObject const* obj) const | |
{ | |
- return GetMap() != obj->GetMap() || !InSamePhase(obj); | |
+ return GetMap() != obj->GetMap() || !IsInPhase(obj); | |
} | |
bool WorldObject::CanDetect(WorldObject const* obj, bool ignoreStealth) const | |
@@ -2330,8 +2330,12 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert | |
} | |
uint32 phase = PHASEMASK_NORMAL; | |
+ std::set<uint32> phases; | |
if (summoner) | |
+ { | |
phase = summoner->GetPhaseMask(); | |
+ phases = summoner->GetPhases(); | |
+ } | |
TempSummon* summon = NULL; | |
switch (mask) | |
@@ -2359,6 +2363,10 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert | |
return NULL; | |
} | |
+ // Set the summon to the summoner's phase | |
+ for (auto phaseId : phases) | |
+ summon->SetInPhase(phaseId, false, true); | |
+ | |
summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId); | |
summon->SetHomePosition(pos); | |
@@ -2453,6 +2461,9 @@ GameObject* WorldObject::SummonGameObject(uint32 entry, float x, float y, float | |
return NULL; | |
} | |
+ for (auto phase : GetPhases()) | |
+ go->SetInPhase(phase, false, true); | |
+ | |
go->SetRespawnTime(respawnTime); | |
if (GetTypeId() == TYPEID_PLAYER || GetTypeId() == TYPEID_UNIT) //not sure how to handle this | |
ToUnit()->AddGameObject(go); | |
@@ -2835,9 +2846,31 @@ void WorldObject::SetPhaseMask(uint32 newPhaseMask, bool update) | |
UpdateObjectVisibility(); | |
} | |
+void WorldObject::SetInPhase(uint32 id, bool update, bool apply) | |
+{ | |
+ if (apply) | |
+ _phases.insert(id); | |
+ else | |
+ _phases.erase(id); | |
+ | |
+ if (update && IsInWorld()) | |
+ UpdateObjectVisibility(); | |
+} | |
+ | |
+bool WorldObject::IsInPhase(WorldObject const* obj) const | |
+{ | |
+ if (_phases.empty() && obj->GetPhases().empty()) | |
+ return true; | |
+ for (auto phase : _phases) | |
+ if (obj->IsInPhase(phase)) | |
+ return true; | |
+ return false; | |
+} | |
+ | |
bool WorldObject::InSamePhase(WorldObject const* obj) const | |
{ | |
- return InSamePhase(obj->GetPhaseMask()); | |
+ return IsInPhase(obj); | |
+ // return InSamePhase(obj->GetPhaseMask()); | |
} | |
void WorldObject::PlayDistanceSound(uint32 sound_id, Player* target /*= NULL*/) | |
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h | |
index 5e525f1..2d7a6f1 100644 | |
--- a/src/server/game/Entities/Object/Object.h | |
+++ b/src/server/game/Entities/Object/Object.h | |
@@ -676,9 +676,13 @@ class WorldObject : public Object, public WorldLocation | |
uint32 GetInstanceId() const { return m_InstanceId; } | |
virtual void SetPhaseMask(uint32 newPhaseMask, bool update); | |
+ virtual void SetInPhase(uint32 id, bool update, bool apply); | |
uint32 GetPhaseMask() const { return m_phaseMask; } | |
bool InSamePhase(WorldObject const* obj) const; | |
bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask); } | |
+ bool IsInPhase(uint32 phase) const { return _phases.find(phase) != _phases.end(); } | |
+ bool IsInPhase(WorldObject const* obj) const; | |
+ std::set<uint32> const& GetPhases() const { return _phases; } | |
uint32 GetZoneId() const; | |
uint32 GetAreaId() const; | |
@@ -861,6 +865,7 @@ class WorldObject : public Object, public WorldLocation | |
//uint32 m_mapId; // object at map with map_id | |
uint32 m_InstanceId; // in map copy with instance id | |
uint32 m_phaseMask; // in area phase state | |
+ std::set<uint32> _phases; | |
uint16 m_notifyflags; | |
uint16 m_executed_notifies; | |
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp | |
index 7f4bead..4a2e996 100644 | |
--- a/src/server/game/Entities/Pet/Pet.cpp | |
+++ b/src/server/game/Entities/Pet/Pet.cpp | |
@@ -179,6 +179,9 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c | |
if (!Create(guid, map, owner->GetPhaseMask(), petEntry, petId)) | |
return false; | |
+ for (auto itr : owner->GetPhases()) | |
+ SetInPhase(itr, false, true); | |
+ | |
setPetType(petType); | |
setFaction(owner->getFaction()); | |
SetUInt32Value(UNIT_CREATED_BY_SPELL, summonSpellId); | |
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp | |
index f5c6d12..6725967 100644 | |
--- a/src/server/game/Entities/Player/Player.cpp | |
+++ b/src/server/game/Entities/Player/Player.cpp | |
@@ -668,7 +668,7 @@ void KillRewarder::Reward() | |
} | |
-Player::Player(WorldSession* session): Unit(true), phaseMgr(this) | |
+Player::Player(WorldSession* session): Unit(true) | |
{ | |
m_speakTime = 0; | |
m_speakCount = 0; | |
@@ -2921,9 +2921,6 @@ void Player::SetGameMaster(bool on) | |
getHostileRefManager().setOnlineOfflineState(true); | |
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GM, SEC_PLAYER); | |
- | |
- phaseMgr.AddUpdateFlag(PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED); | |
- phaseMgr.Update(); | |
} | |
UpdateObjectVisibility(); | |
@@ -3164,11 +3161,6 @@ void Player::GiveLevel(uint8 level) | |
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL); | |
- PhaseUpdateData phaseUpdateData; | |
- phaseUpdateData.AddConditionType(CONDITION_LEVEL); | |
- | |
- phaseMgr.NotifyConditionChanged(phaseUpdateData); | |
- | |
// Refer-A-Friend | |
if (GetSession()->GetRecruiterId()) | |
if (level < sWorld->getIntConfig(CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL)) | |
@@ -7785,8 +7777,6 @@ void Player::UpdateArea(uint32 newArea) | |
// so apply them accordingly | |
m_areaUpdateId = newArea; | |
- phaseMgr.AddUpdateFlag(PHASE_UPDATE_FLAG_AREA_UPDATE); | |
- | |
AreaTableEntry const* area = GetAreaEntryByAreaID(newArea); | |
pvpInfo.IsInFFAPvPArea = area && (area->flags & AREA_FLAG_ARENA); | |
UpdatePvPState(true); | |
@@ -7816,14 +7806,10 @@ void Player::UpdateArea(uint32 newArea) | |
RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); | |
SetRestType(REST_TYPE_NO); | |
} | |
- | |
- phaseMgr.RemoveUpdateFlag(PHASE_UPDATE_FLAG_AREA_UPDATE); | |
} | |
void Player::UpdateZone(uint32 newZone, uint32 newArea) | |
{ | |
- phaseMgr.AddUpdateFlag(PHASE_UPDATE_FLAG_ZONE_UPDATE); | |
- | |
if (m_zoneUpdateId != newZone) | |
{ | |
sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); | |
@@ -7928,8 +7914,6 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea) | |
UpdateLocalChannels(newZone); | |
UpdateZoneDependentAuras(newZone); | |
- | |
- phaseMgr.RemoveUpdateFlag(PHASE_UPDATE_FLAG_ZONE_UPDATE); | |
} | |
//If players are too far away from the duel flag... they lose the duel | |
@@ -15476,10 +15460,6 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, | |
m_RewardedQuests.insert(quest_id); | |
m_RewardedQuestsSave[quest_id] = true; | |
- PhaseUpdateData phaseUpdateData; | |
- phaseUpdateData.AddQuestUpdate(quest_id); | |
- phaseMgr.NotifyConditionChanged(phaseUpdateData); | |
- | |
// StoreNewItem, mail reward, etc. save data directly to the database | |
// to prevent exploitable data desynchronisation we save the quest status to the database too | |
// (to prevent rewarding this quest another time while rewards were already given out) | |
@@ -16129,11 +16109,6 @@ void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*= | |
m_QuestStatusSave[questId] = true; | |
} | |
- PhaseUpdateData phaseUpdateData; | |
- phaseUpdateData.AddQuestUpdate(questId); | |
- | |
- phaseMgr.NotifyConditionChanged(phaseUpdateData); | |
- | |
if (update) | |
SendQuestUpdate(questId); | |
} | |
@@ -16145,11 +16120,6 @@ void Player::RemoveActiveQuest(uint32 questId, bool update /*= true*/) | |
{ | |
m_QuestStatus.erase(itr); | |
m_QuestStatusSave[questId] = false; | |
- | |
- PhaseUpdateData phaseUpdateData; | |
- phaseUpdateData.AddQuestUpdate(questId); | |
- | |
- phaseMgr.NotifyConditionChanged(phaseUpdateData); | |
} | |
if (update) | |
@@ -16163,11 +16133,6 @@ void Player::RemoveRewardedQuest(uint32 questId, bool update /*= true*/) | |
{ | |
m_RewardedQuests.erase(rewItr); | |
m_RewardedQuestsSave[questId] = false; | |
- | |
- PhaseUpdateData phaseUpdateData; | |
- phaseUpdateData.AddQuestUpdate(questId); | |
- | |
- phaseMgr.NotifyConditionChanged(phaseUpdateData); | |
} | |
if (update) | |
@@ -27532,6 +27497,9 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy | |
return NULL; | |
} | |
+ for (auto itr : GetPhases()) | |
+ pet->SetInPhase(itr, false, true); | |
+ | |
pet->SetCreatorGUID(GetGUID()); | |
pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, getFaction()); | |
@@ -27899,3 +27867,21 @@ void Player::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::Ext | |
#undef REMOVE_VIOLATING_FLAGS | |
} | |
+ | |
+void Player::UpdatePhasing() | |
+{ | |
+ std::set<uint32> phaseIds; | |
+ std::set<uint32> terrainswaps; | |
+ std::set<uint32> worldAreaSwaps; | |
+ | |
+ for (auto phase : GetPhases()) | |
+ { | |
+ PhaseInfo const* info = sObjectMgr->GetPhaseInfo(phase); | |
+ if (!info) | |
+ continue; | |
+ terrainswaps.insert(info->terrainSwapMap); | |
+ worldAreaSwaps.insert(info->worldMapAreaSwap); | |
+ } | |
+ | |
+ GetSession()->SendSetPhaseShift(GetPhases(), terrainswaps, worldAreaSwaps); | |
+} | |
\ No newline at end of file | |
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h | |
index dccbc55..d318efc 100644 | |
--- a/src/server/game/Entities/Player/Player.h | |
+++ b/src/server/game/Entities/Player/Player.h | |
@@ -25,7 +25,6 @@ | |
#include "Item.h" | |
#include "PetDefines.h" | |
-#include "PhaseMgr.h" | |
#include "QuestDef.h" | |
#include "SpellMgr.h" | |
#include "Unit.h" | |
@@ -56,7 +55,6 @@ class PlayerMenu; | |
class PlayerSocial; | |
class SpellCastTargets; | |
class UpdateMask; | |
-class PhaseMgr; | |
typedef std::deque<Mail*> PlayerMails; | |
@@ -1333,8 +1331,6 @@ class Player : public Unit, public GridObject<Player> | |
Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, uint32 despwtime); | |
void RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent = false); | |
- PhaseMgr& GetPhaseMgr() { return phaseMgr; } | |
- | |
/// Handles said message in regular chat based on declared language and in config pre-defined Range. | |
void Say(std::string const& text, const uint32 language); | |
/// Handles yelled message in regular chat based on declared language and in config pre-defined Range. | |
@@ -2361,6 +2357,8 @@ class Player : public Unit, public GridObject<Player> | |
void UpdateVisibilityOf(WorldObject* target); | |
void UpdateTriggerVisibility(); | |
+ void UpdatePhasing(); | |
+ | |
template<class T> | |
void UpdateVisibilityOf(T* target, UpdateData& data, std::set<Unit*>& visibleNow); | |
@@ -2885,8 +2883,6 @@ class Player : public Unit, public GridObject<Player> | |
uint32 _activeCheats; | |
uint32 _maxPersonalArenaRate; | |
- | |
- PhaseMgr phaseMgr; | |
}; | |
void AddItemsSetItem(Player*player, Item* item); | |
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp | |
index 5f0ae6e..05b7c25 100644 | |
--- a/src/server/game/Entities/Transport/Transport.cpp | |
+++ b/src/server/game/Entities/Transport/Transport.cpp | |
@@ -388,8 +388,15 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu | |
} | |
uint32 phase = PHASEMASK_NORMAL; | |
+ std::set<uint32> phases; | |
if (summoner) | |
+ { | |
phase = summoner->GetPhaseMask(); | |
+ phases = summoner->GetPhases(); | |
+ } | |
+ | |
+ if (phases.empty()) | |
+ phases = GetPhases(); // If there was no summoner, try to use the transport phases | |
TempSummon* summon = NULL; | |
switch (mask) | |
@@ -421,6 +428,9 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu | |
return NULL; | |
} | |
+ for (auto itr : phases) | |
+ summon->SetInPhase(itr, false, true); | |
+ | |
summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId); | |
summon->SetTransport(this); | |
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp | |
index 038db35..29c32b7 100644 | |
--- a/src/server/game/Entities/Unit/Unit.cpp | |
+++ b/src/server/game/Entities/Unit/Unit.cpp | |
@@ -435,7 +435,7 @@ float Unit::GetMeleeReach() const | |
bool Unit::IsWithinCombatRange(const Unit* obj, float dist2compare) const | |
{ | |
- if (!obj || !IsInMap(obj) || !InSamePhase(obj)) | |
+ if (!obj || !IsInMap(obj) || !IsInPhase(obj)) | |
return false; | |
float dx = GetPositionX() - obj->GetPositionX(); | |
@@ -451,7 +451,7 @@ bool Unit::IsWithinCombatRange(const Unit* obj, float dist2compare) const | |
bool Unit::IsWithinMeleeRange(const Unit* obj, float dist) const | |
{ | |
- if (!obj || !IsInMap(obj) || !InSamePhase(obj)) | |
+ if (!obj || !IsInMap(obj) || !IsInPhase(obj)) | |
return false; | |
float dx = GetPositionX() - obj->GetPositionX(); | |
@@ -3623,7 +3623,7 @@ void Unit::RemoveAurasWithAttribute(uint32 flags) | |
} | |
} | |
-void Unit::RemoveNotOwnSingleTargetAuras(uint32 newPhase) | |
+void Unit::RemoveNotOwnSingleTargetAuras(uint32 newPhase, bool phaseid) | |
{ | |
// single target auras from other casters | |
for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();) | |
@@ -3633,12 +3633,12 @@ void Unit::RemoveNotOwnSingleTargetAuras(uint32 newPhase) | |
if (aura->GetCasterGUID() != GetGUID() && aura->GetSpellInfo()->IsSingleTarget()) | |
{ | |
- if (!newPhase) | |
+ if (!newPhase && !phaseid) | |
RemoveAura(iter); | |
else | |
{ | |
Unit* caster = aura->GetCaster(); | |
- if (!caster || !caster->InSamePhase(newPhase)) | |
+ if (!caster || (newPhase && !caster->InSamePhase(newPhase)) || (!newPhase && !caster->IsInPhase(this))) | |
RemoveAura(iter); | |
else | |
++iter; | |
@@ -14526,6 +14526,56 @@ float Unit::MeleeSpellMissChance(const Unit* victim, WeaponAttackType attType, u | |
return missChance; | |
} | |
+void Unit::SetInPhase(uint32 id, bool update, bool apply) | |
+{ | |
+ WorldObject::SetInPhase(id, update, apply); | |
+ | |
+ if (!IsInWorld()) | |
+ return; | |
+ | |
+ RemoveNotOwnSingleTargetAuras(0, true); | |
+ | |
+ if (GetTypeId() == TYPEID_UNIT || (!ToPlayer()->IsGameMaster() && !ToPlayer()->GetSession()->PlayerLogout())) | |
+ { | |
+ HostileRefManager& refManager = getHostileRefManager(); | |
+ HostileReference* ref = refManager.getFirst(); | |
+ | |
+ while (ref) | |
+ { | |
+ if (Unit* unit = ref->GetSource()->GetOwner()) | |
+ if (Creature* creature = unit->ToCreature()) | |
+ refManager.setOnlineOfflineState(creature, creature->IsInPhase(this)); | |
+ | |
+ ref = ref->next(); | |
+ } | |
+ | |
+ // modify threat lists for new phasemask | |
+ if (GetTypeId() != TYPEID_PLAYER) | |
+ { | |
+ std::list<HostileReference*> threatList = getThreatManager().getThreatList(); | |
+ std::list<HostileReference*> offlineThreatList = getThreatManager().getOfflineThreatList(); | |
+ | |
+ // merge expects sorted lists | |
+ threatList.sort(); | |
+ offlineThreatList.sort(); | |
+ threatList.merge(offlineThreatList); | |
+ | |
+ for (std::list<HostileReference*>::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) | |
+ if (Unit* unit = (*itr)->getTarget()) | |
+ unit->getHostileRefManager().setOnlineOfflineState(ToCreature(), unit->IsInPhase(this)); | |
+ } | |
+ } | |
+ | |
+ for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) | |
+ if ((*itr)->GetTypeId() == TYPEID_UNIT) | |
+ (*itr)->SetInPhase(id, true, apply); | |
+ | |
+ for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i) | |
+ if (m_SummonSlot[i]) | |
+ if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i])) | |
+ summon->SetInPhase(id, true, apply); | |
+} | |
+ | |
void Unit::SetPhaseMask(uint32 newPhaseMask, bool update) | |
{ | |
if (newPhaseMask == GetPhaseMask()) | |
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h | |
index 21c55ff..9c03809 100644 | |
--- a/src/server/game/Entities/Unit/Unit.h | |
+++ b/src/server/game/Entities/Unit/Unit.h | |
@@ -1762,7 +1762,7 @@ class Unit : public WorldObject | |
void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit* stealer); | |
void RemoveAurasDueToItemSpell(uint32 spellId, uint64 castItemGuid); | |
void RemoveAurasByType(AuraType auraType, uint64 casterGUID = 0, Aura* except = NULL, bool negative = true, bool positive = true); | |
- void RemoveNotOwnSingleTargetAuras(uint32 newPhase = 0x0); | |
+ void RemoveNotOwnSingleTargetAuras(uint32 newPhase = 0x0, bool phaseid = false); | |
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except = 0); | |
void RemoveAurasWithAttribute(uint32 flags); | |
void RemoveAurasWithFamily(SpellFamilyNames family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, uint64 casterGUID); | |
@@ -1929,6 +1929,7 @@ class Unit : public WorldObject | |
// common function for visibility checks for player/creatures with detection code | |
void SetPhaseMask(uint32 newPhaseMask, bool update);// overwrite WorldObject::SetPhaseMask | |
+ void SetInPhase(uint32 id, bool update, bool apply); | |
void UpdateObjectVisibility(bool forced = true); | |
SpellImmuneList m_spellImmune[MAX_SPELL_IMMUNITY]; | |
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp | |
index 454d79a..174db44 100644 | |
--- a/src/server/game/Globals/ObjectMgr.cpp | |
+++ b/src/server/game/Globals/ObjectMgr.cpp | |
@@ -1627,8 +1627,8 @@ void ObjectMgr::LoadCreatures() | |
// 0 1 2 3 4 5 6 7 8 9 10 | |
QueryResult result = WorldDatabase.Query("SELECT creature.guid, id, map, modelid, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, spawndist, " | |
- // 11 12 13 14 15 16 17 18 19 20 21 | |
- "currentwaypoint, curhealth, curmana, MovementType, spawnMask, phaseMask, eventEntry, pool_entry, creature.npcflag, creature.unit_flags, creature.dynamicflags " | |
+ // 11 12 13 14 15 16 17 18 19 20 21 22 | |
+ "currentwaypoint, curhealth, curmana, MovementType, spawnMask, phaseMask, eventEntry, pool_entry, creature.npcflag, creature.unit_flags, creature.dynamicflags, creature.phaseid " | |
"FROM creature " | |
"LEFT OUTER JOIN game_event_creature ON creature.guid = game_event_creature.guid " | |
"LEFT OUTER JOIN pool_creature ON creature.guid = pool_creature.guid"); | |
@@ -1685,6 +1685,7 @@ void ObjectMgr::LoadCreatures() | |
data.npcflag = fields[19].GetUInt32(); | |
data.unit_flags = fields[20].GetUInt32(); | |
data.dynamicflags = fields[21].GetUInt32(); | |
+ data.phaseid = fields[22].GetUInt32(); | |
MapEntry const* mapEntry = sMapStore.LookupEntry(data.mapid); | |
if (!mapEntry) | |
@@ -1937,8 +1938,8 @@ void ObjectMgr::LoadGameobjects() | |
// 0 1 2 3 4 5 6 | |
QueryResult result = WorldDatabase.Query("SELECT gameobject.guid, id, map, position_x, position_y, position_z, orientation, " | |
- // 7 8 9 10 11 12 13 14 15 16 17 | |
- "rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, spawnMask, phaseMask, eventEntry, pool_entry " | |
+ // 7 8 9 10 11 12 13 14 15 16 17 18 | |
+ "rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, spawnMask, phaseMask, eventEntry, pool_entry, phaseid " | |
"FROM gameobject LEFT OUTER JOIN game_event_gameobject ON gameobject.guid = game_event_gameobject.guid " | |
"LEFT OUTER JOIN pool_gameobject ON gameobject.guid = pool_gameobject.guid"); | |
@@ -2035,6 +2036,7 @@ void ObjectMgr::LoadGameobjects() | |
data.phaseMask = fields[15].GetUInt32(); | |
int16 gameEvent = fields[16].GetInt8(); | |
uint32 PoolId = fields[17].GetUInt32(); | |
+ data.phaseid = fields[18].GetUInt32(); | |
if (data.rotation2 < -1.0f || data.rotation2 > 1.0f) | |
{ | |
@@ -9189,18 +9191,18 @@ void ObjectMgr::LoadPhaseDefinitions() | |
TC_LOG_INFO("server.loading", ">> Loaded %u phasing definitions in %u ms.", count, GetMSTimeDiffToNow(oldMSTime)); | |
} | |
-void ObjectMgr::LoadSpellPhaseInfo() | |
+void ObjectMgr::LoadPhaseInfo() | |
{ | |
- _SpellPhaseStore.clear(); | |
+ _PhaseInfoStore.clear(); | |
uint32 oldMSTime = getMSTime(); | |
- // 0 1 2 | |
- QueryResult result = WorldDatabase.Query("SELECT id, phasemask, terrainswapmap FROM `spell_phase`"); | |
+ // 0 1 2 | |
+ QueryResult result = WorldDatabase.Query("SELECT id, worldmapareaswap, terrainswapmap FROM `phase_info`"); | |
if (!result) | |
{ | |
- TC_LOG_INFO("server.loading", ">> Loaded 0 spell dbc infos. DB table `spell_phase` is empty."); | |
+ TC_LOG_INFO("server.loading", ">> Loaded 0 phase infos. DB table `phase_info` is empty."); | |
return; | |
} | |
@@ -9209,31 +9211,25 @@ void ObjectMgr::LoadSpellPhaseInfo() | |
{ | |
Field* fields = result->Fetch(); | |
- SpellPhaseInfo spellPhaseInfo; | |
- spellPhaseInfo.spellId = fields[0].GetUInt32(); | |
+ PhaseInfo phaseInfo; | |
+ phaseInfo.phaseId = fields[0].GetUInt32(); | |
- SpellInfo const* spell = sSpellMgr->GetSpellInfo(spellPhaseInfo.spellId); | |
- if (!spell) | |
+ PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseInfo.phaseId); | |
+ if (!phase) | |
{ | |
- TC_LOG_ERROR("sql.sql", "Spell %u defined in `spell_phase` does not exists, skipped.", spellPhaseInfo.spellId); | |
+ TC_LOG_ERROR("sql.sql", "Phase %u defined in `phase_info` does not exists, skipped.", phaseInfo.phaseId); | |
continue; | |
} | |
- if (!spell->HasAura(SPELL_AURA_PHASE)) | |
- { | |
- TC_LOG_ERROR("sql.sql", "Spell %u defined in `spell_phase` does not have aura effect type SPELL_AURA_PHASE, useless value.", spellPhaseInfo.spellId); | |
- continue; | |
- } | |
- | |
- spellPhaseInfo.phasemask = fields[1].GetUInt32(); | |
- spellPhaseInfo.terrainswapmap = fields[2].GetUInt32(); | |
+ phaseInfo.worldMapAreaSwap = fields[1].GetUInt32(); | |
+ phaseInfo.terrainSwapMap = fields[2].GetUInt32(); | |
- _SpellPhaseStore[spellPhaseInfo.spellId] = spellPhaseInfo; | |
+ _PhaseInfoStore[phaseInfo.phaseId] = phaseInfo; | |
++count; | |
} | |
while (result->NextRow()); | |
- TC_LOG_INFO("server.loading", ">> Loaded %u spell dbc infos in %u ms.", count, GetMSTimeDiffToNow(oldMSTime)); | |
+ TC_LOG_INFO("server.loading", ">> Loaded %u phase infos in %u ms.", count, GetMSTimeDiffToNow(oldMSTime)); | |
} | |
GameObjectTemplate const* ObjectMgr::GetGameObjectTemplate(uint32 entry) | |
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h | |
index 9008e74..467a567 100644 | |
--- a/src/server/game/Globals/ObjectMgr.h | |
+++ b/src/server/game/Globals/ObjectMgr.h | |
@@ -42,11 +42,9 @@ | |
#include <limits> | |
#include "ConditionMgr.h" | |
#include <functional> | |
-#include "PhaseMgr.h" | |
#include "DB2Stores.h" | |
class Item; | |
-class PhaseMgr; | |
struct AccessRequirement; | |
struct PlayerInfo; | |
struct PlayerLevelInfo; | |
@@ -132,6 +130,36 @@ typedef std::map<uint32, PageText> PageTextContainer; | |
// Benchmarked: Faster than std::map (insert/find) | |
typedef std::unordered_map<uint16, InstanceTemplate> InstanceTemplateContainer; | |
+// Phasing (visibility) | |
+enum PhasingFlags | |
+{ | |
+ PHASE_FLAG_OVERWRITE_EXISTING = 0x01, // don't stack with existing phases, overwrites existing phases | |
+ PHASE_FLAG_NO_MORE_PHASES = 0x02, // stop calculating phases after this phase was applied (no more phases will be applied) | |
+ PHASE_FLAG_NEGATE_PHASE = 0x04 // negate instead to add the phasemask | |
+}; | |
+ | |
+struct PhaseInfo | |
+{ | |
+ uint32 phaseId; | |
+ uint32 worldMapAreaSwap; | |
+ uint32 terrainSwapMap; | |
+}; | |
+ | |
+typedef std::unordered_map<uint32, PhaseInfo> PhaseInfoContainer; | |
+ | |
+struct PhaseDefinition | |
+{ | |
+ uint32 zoneId; | |
+ uint32 entry; | |
+ uint32 phasemask; | |
+ uint32 phaseId; | |
+ uint32 terrainswapmap; | |
+ uint8 flags; | |
+}; | |
+ | |
+typedef std::list<PhaseDefinition> PhaseDefinitionContainer; | |
+typedef std::unordered_map<uint32 /*zoneId*/, PhaseDefinitionContainer> PhaseDefinitionStore; | |
+ | |
struct GameTele | |
{ | |
float position_x; | |
@@ -1018,10 +1046,7 @@ class ObjectMgr | |
void AddSpellToTrainer(uint32 entry, uint32 spell, uint32 spellCost, uint32 reqSkill, uint32 reqSkillValue, uint32 reqLevel); | |
void LoadPhaseDefinitions(); | |
- void LoadSpellPhaseInfo(); | |
- | |
- PhaseDefinitionStore const* GetPhaseDefinitionStore() { return &_PhaseDefinitionStore; } | |
- SpellPhaseStore const* GetSpellPhaseStore() { return &_SpellPhaseStore; } | |
+ void LoadPhaseInfo(); | |
std::string GeneratePetName(uint32 entry); | |
uint32 GetBaseXP(uint8 level); | |
@@ -1277,6 +1302,8 @@ class ObjectMgr | |
return _gossipMenuItemsStore.equal_range(uiMenuId); | |
} | |
+ PhaseInfo const* GetPhaseInfo(uint32 phase) { return _PhaseInfoStore.find(phase) != _PhaseInfoStore.end() ? &_PhaseInfoStore[phase] : nullptr; } | |
+ | |
// for wintergrasp only | |
GraveYardContainer GraveYardStore; | |
@@ -1389,7 +1416,7 @@ class ObjectMgr | |
InstanceTemplateContainer _instanceTemplateStore; | |
PhaseDefinitionStore _PhaseDefinitionStore; | |
- SpellPhaseStore _SpellPhaseStore; | |
+ PhaseInfoContainer _PhaseInfoStore; | |
private: | |
void LoadScripts(ScriptsType type); | |
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp | |
index 5cf1dc4..76f81a1 100644 | |
--- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp | |
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp | |
@@ -258,7 +258,7 @@ void MessageDistDeliverer::Visit(PlayerMapType &m) | |
for (PlayerMapType::iterator iter = m.begin(); iter != m.end(); ++iter) | |
{ | |
Player* target = iter->GetSource(); | |
- if (!target->InSamePhase(i_phaseMask)) | |
+ if (!target->IsInPhase(i_source)) | |
continue; | |
if (target->GetExactDist2dSq(i_source) > i_distSq) | |
@@ -283,7 +283,7 @@ void MessageDistDeliverer::Visit(CreatureMapType &m) | |
for (CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter) | |
{ | |
Creature* target = iter->GetSource(); | |
- if (!target->InSamePhase(i_phaseMask)) | |
+ if (!target->IsInPhase(i_source)) | |
continue; | |
if (target->GetExactDist2dSq(i_source) > i_distSq) | |
@@ -305,7 +305,7 @@ void MessageDistDeliverer::Visit(DynamicObjectMapType &m) | |
for (DynamicObjectMapType::iterator iter = m.begin(); iter != m.end(); ++iter) | |
{ | |
DynamicObject* target = iter->GetSource(); | |
- if (!target->InSamePhase(i_phaseMask)) | |
+ if (!target->IsInPhase(i_source)) | |
continue; | |
if (target->GetExactDist2dSq(i_source) > i_distSq) | |
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h | |
index e229c78..e82533b 100644 | |
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h | |
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h | |
@@ -126,12 +126,11 @@ namespace Trinity | |
{ | |
WorldObject* i_source; | |
WorldPacket* i_message; | |
- uint32 i_phaseMask; | |
float i_distSq; | |
uint32 team; | |
Player const* skipped_receiver; | |
MessageDistDeliverer(WorldObject* src, WorldPacket* msg, float dist, bool own_team_only = false, Player const* skipped = NULL) | |
- : i_source(src), i_message(msg), i_phaseMask(src->GetPhaseMask()), i_distSq(dist * dist) | |
+ : i_source(src), i_message(msg), i_distSq(dist * dist) | |
, team(0) | |
, skipped_receiver(skipped) | |
{ | |
@@ -176,12 +175,12 @@ namespace Trinity | |
struct WorldObjectSearcher | |
{ | |
uint32 i_mapTypeMask; | |
- uint32 i_phaseMask; | |
- WorldObject* &i_object; | |
+ WorldObject*& i_object; | |
+ WorldObject const* _searcher; | |
Check &i_check; | |
WorldObjectSearcher(WorldObject const* searcher, WorldObject* & result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) | |
- : i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : i_mapTypeMask(mapTypeMask), _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(GameObjectMapType &m); | |
void Visit(PlayerMapType &m); | |
@@ -197,12 +196,12 @@ namespace Trinity | |
struct WorldObjectLastSearcher | |
{ | |
uint32 i_mapTypeMask; | |
- uint32 i_phaseMask; | |
WorldObject* &i_object; | |
+ WorldObject const* _searcher; | |
Check &i_check; | |
WorldObjectLastSearcher(WorldObject const* searcher, WorldObject* & result, Check& check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) | |
- : i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : i_mapTypeMask(mapTypeMask), _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(GameObjectMapType &m); | |
void Visit(PlayerMapType &m); | |
@@ -218,12 +217,12 @@ namespace Trinity | |
struct WorldObjectListSearcher | |
{ | |
uint32 i_mapTypeMask; | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
std::list<WorldObject*> &i_objects; | |
Check& i_check; | |
WorldObjectListSearcher(WorldObject const* searcher, std::list<WorldObject*> &objects, Check & check, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) | |
- : i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) { } | |
+ : i_mapTypeMask(mapTypeMask), _searcher(searcher), i_objects(objects), i_check(check) { } | |
void Visit(PlayerMapType &m); | |
void Visit(CreatureMapType &m); | |
@@ -239,18 +238,18 @@ namespace Trinity | |
struct WorldObjectWorker | |
{ | |
uint32 i_mapTypeMask; | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Do const& i_do; | |
WorldObjectWorker(WorldObject const* searcher, Do const& _do, uint32 mapTypeMask = GRID_MAP_TYPE_MASK_ALL) | |
- : i_mapTypeMask(mapTypeMask), i_phaseMask(searcher->GetPhaseMask()), i_do(_do) { } | |
+ : i_mapTypeMask(mapTypeMask), _searcher(searcher), i_do(_do) { } | |
void Visit(GameObjectMapType &m) | |
{ | |
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_GAMEOBJECT)) | |
return; | |
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -259,7 +258,7 @@ namespace Trinity | |
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_PLAYER)) | |
return; | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
void Visit(CreatureMapType &m) | |
@@ -267,7 +266,7 @@ namespace Trinity | |
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CREATURE)) | |
return; | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -276,7 +275,7 @@ namespace Trinity | |
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_CORPSE)) | |
return; | |
for (CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -285,7 +284,7 @@ namespace Trinity | |
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_DYNAMICOBJECT)) | |
return; | |
for (DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -294,7 +293,7 @@ namespace Trinity | |
if (!(i_mapTypeMask & GRID_MAP_TYPE_MASK_AREATRIGGER)) | |
return; | |
for (AreaTriggerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -306,12 +305,12 @@ namespace Trinity | |
template<class Check> | |
struct GameObjectSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
GameObject* &i_object; | |
Check &i_check; | |
GameObjectSearcher(WorldObject const* searcher, GameObject* & result, Check& check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(GameObjectMapType &m); | |
@@ -322,12 +321,12 @@ namespace Trinity | |
template<class Check> | |
struct GameObjectLastSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
GameObject* &i_object; | |
Check& i_check; | |
GameObjectLastSearcher(WorldObject const* searcher, GameObject* & result, Check& check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(GameObjectMapType &m); | |
@@ -337,12 +336,12 @@ namespace Trinity | |
template<class Check> | |
struct GameObjectListSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
std::list<GameObject*> &i_objects; | |
Check& i_check; | |
GameObjectListSearcher(WorldObject const* searcher, std::list<GameObject*> &objects, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) { } | |
+ : _searcher(searcher), i_objects(objects), i_check(check) { } | |
void Visit(GameObjectMapType &m); | |
@@ -353,12 +352,12 @@ namespace Trinity | |
struct GameObjectWorker | |
{ | |
GameObjectWorker(WorldObject const* searcher, Functor& func) | |
- : _func(func), _phaseMask(searcher->GetPhaseMask()) { } | |
+ : _func(func), _searcher(searcher) { } | |
void Visit(GameObjectMapType& m) | |
{ | |
for (GameObjectMapType::iterator itr = m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
_func(itr->GetSource()); | |
} | |
@@ -366,7 +365,7 @@ namespace Trinity | |
private: | |
Functor& _func; | |
- uint32 _phaseMask; | |
+ WorldObject const* _searcher; | |
}; | |
// Unit searchers | |
@@ -375,12 +374,12 @@ namespace Trinity | |
template<class Check> | |
struct UnitSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Unit* &i_object; | |
Check & i_check; | |
UnitSearcher(WorldObject const* searcher, Unit* & result, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(CreatureMapType &m); | |
void Visit(PlayerMapType &m); | |
@@ -392,12 +391,12 @@ namespace Trinity | |
template<class Check> | |
struct UnitLastSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Unit* &i_object; | |
Check & i_check; | |
UnitLastSearcher(WorldObject const* searcher, Unit* & result, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(CreatureMapType &m); | |
void Visit(PlayerMapType &m); | |
@@ -409,12 +408,12 @@ namespace Trinity | |
template<class Check> | |
struct UnitListSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
std::list<Unit*> &i_objects; | |
Check& i_check; | |
UnitListSearcher(WorldObject const* searcher, std::list<Unit*> &objects, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) { } | |
+ : _searcher(searcher), i_objects(objects), i_check(check) { } | |
void Visit(PlayerMapType &m); | |
void Visit(CreatureMapType &m); | |
@@ -427,12 +426,12 @@ namespace Trinity | |
template<class Check> | |
struct CreatureSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Creature* &i_object; | |
Check & i_check; | |
CreatureSearcher(WorldObject const* searcher, Creature* & result, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(CreatureMapType &m); | |
@@ -443,12 +442,12 @@ namespace Trinity | |
template<class Check> | |
struct CreatureLastSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Creature* &i_object; | |
Check & i_check; | |
CreatureLastSearcher(WorldObject const* searcher, Creature* & result, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(CreatureMapType &m); | |
@@ -458,12 +457,12 @@ namespace Trinity | |
template<class Check> | |
struct CreatureListSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
std::list<Creature*> &i_objects; | |
Check& i_check; | |
CreatureListSearcher(WorldObject const* searcher, std::list<Creature*> &objects, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) { } | |
+ : _searcher(searcher), i_objects(objects), i_check(check) { } | |
void Visit(CreatureMapType &m); | |
@@ -473,16 +472,16 @@ namespace Trinity | |
template<class Do> | |
struct CreatureWorker | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Do& i_do; | |
CreatureWorker(WorldObject const* searcher, Do& _do) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_do(_do) { } | |
+ : _searcher(searcher), i_do(_do) { } | |
void Visit(CreatureMapType &m) | |
{ | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -494,12 +493,12 @@ namespace Trinity | |
template<class Check> | |
struct PlayerSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Player* &i_object; | |
Check & i_check; | |
PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) { } | |
+ : _searcher(searcher), i_object(result), i_check(check) { } | |
void Visit(PlayerMapType &m); | |
@@ -509,12 +508,12 @@ namespace Trinity | |
template<class Check> | |
struct PlayerListSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
std::list<Player*> &i_objects; | |
Check& i_check; | |
PlayerListSearcher(WorldObject const* searcher, std::list<Player*> &objects, Check & check) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) { } | |
+ : _searcher(searcher), i_objects(objects), i_check(check) { } | |
void Visit(PlayerMapType &m); | |
@@ -524,11 +523,11 @@ namespace Trinity | |
template<class Check> | |
struct PlayerLastSearcher | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Player* &i_object; | |
Check& i_check; | |
- PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check) : i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) | |
+ PlayerLastSearcher(WorldObject const* searcher, Player*& result, Check& check) : _searcher(searcher), i_object(result), i_check(check) | |
{ | |
} | |
@@ -540,16 +539,16 @@ namespace Trinity | |
template<class Do> | |
struct PlayerWorker | |
{ | |
- uint32 i_phaseMask; | |
+ WorldObject const* _searcher; | |
Do& i_do; | |
PlayerWorker(WorldObject const* searcher, Do& _do) | |
- : i_phaseMask(searcher->GetPhaseMask()), i_do(_do) { } | |
+ : _searcher(searcher), i_do(_do) { } | |
void Visit(PlayerMapType &m) | |
{ | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
i_do(itr->GetSource()); | |
} | |
@@ -569,7 +568,7 @@ namespace Trinity | |
void Visit(PlayerMapType &m) | |
{ | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_searcher) && itr->GetSource()->IsWithinDist(i_searcher, i_dist)) | |
+ if (itr->GetSource()->IsInPhase(i_searcher) && itr->GetSource()->IsWithinDist(i_searcher, i_dist)) | |
i_do(itr->GetSource()); | |
} | |
@@ -1344,7 +1343,7 @@ namespace Trinity | |
AllWorldObjectsInRange(const WorldObject* object, float maxRange) : m_pObject(object), m_fRange(maxRange) { } | |
bool operator() (WorldObject* go) | |
{ | |
- return m_pObject->IsWithinDist(go, m_fRange, false) && m_pObject->InSamePhase(go); | |
+ return m_pObject->IsWithinDist(go, m_fRange, false) && m_pObject->IsInPhase(go); | |
} | |
private: | |
const WorldObject* m_pObject; | |
diff --git a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h | |
index febc42a..e73f18a 100644 | |
--- a/src/server/game/Grids/Notifiers/GridNotifiersImpl.h | |
+++ b/src/server/game/Grids/Notifiers/GridNotifiersImpl.h | |
@@ -54,7 +54,7 @@ void Trinity::WorldObjectSearcher<Check>::Visit(GameObjectMapType &m) | |
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -77,7 +77,7 @@ void Trinity::WorldObjectSearcher<Check>::Visit(PlayerMapType &m) | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -100,7 +100,7 @@ void Trinity::WorldObjectSearcher<Check>::Visit(CreatureMapType &m) | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -123,7 +123,7 @@ void Trinity::WorldObjectSearcher<Check>::Visit(CorpseMapType &m) | |
for (CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -146,7 +146,7 @@ void Trinity::WorldObjectSearcher<Check>::Visit(DynamicObjectMapType &m) | |
for (DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -169,7 +169,7 @@ void Trinity::WorldObjectSearcher<Check>::Visit(AreaTriggerMapType &m) | |
for (AreaTriggerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -188,7 +188,7 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(GameObjectMapType &m) | |
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -204,7 +204,7 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(PlayerMapType &m) | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -220,7 +220,7 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(CreatureMapType &m) | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -236,7 +236,7 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(CorpseMapType &m) | |
for (CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -252,7 +252,7 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(DynamicObjectMapType &m) | |
for (DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -268,7 +268,7 @@ void Trinity::WorldObjectLastSearcher<Check>::Visit(AreaTriggerMapType &m) | |
for (AreaTriggerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -353,7 +353,7 @@ void Trinity::GameObjectSearcher<Check>::Visit(GameObjectMapType &m) | |
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -369,7 +369,7 @@ void Trinity::GameObjectLastSearcher<Check>::Visit(GameObjectMapType &m) | |
{ | |
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -381,7 +381,7 @@ template<class Check> | |
void Trinity::GameObjectListSearcher<Check>::Visit(GameObjectMapType &m) | |
{ | |
for (GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
if (i_check(itr->GetSource())) | |
i_objects.push_back(itr->GetSource()); | |
} | |
@@ -397,7 +397,7 @@ void Trinity::UnitSearcher<Check>::Visit(CreatureMapType &m) | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -417,7 +417,7 @@ void Trinity::UnitSearcher<Check>::Visit(PlayerMapType &m) | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -433,7 +433,7 @@ void Trinity::UnitLastSearcher<Check>::Visit(CreatureMapType &m) | |
{ | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -446,7 +446,7 @@ void Trinity::UnitLastSearcher<Check>::Visit(PlayerMapType &m) | |
{ | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -458,7 +458,7 @@ template<class Check> | |
void Trinity::UnitListSearcher<Check>::Visit(PlayerMapType &m) | |
{ | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
if (i_check(itr->GetSource())) | |
i_objects.push_back(itr->GetSource()); | |
} | |
@@ -467,7 +467,7 @@ template<class Check> | |
void Trinity::UnitListSearcher<Check>::Visit(CreatureMapType &m) | |
{ | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
if (i_check(itr->GetSource())) | |
i_objects.push_back(itr->GetSource()); | |
} | |
@@ -483,7 +483,7 @@ void Trinity::CreatureSearcher<Check>::Visit(CreatureMapType &m) | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -499,7 +499,7 @@ void Trinity::CreatureLastSearcher<Check>::Visit(CreatureMapType &m) | |
{ | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -511,7 +511,7 @@ template<class Check> | |
void Trinity::CreatureListSearcher<Check>::Visit(CreatureMapType &m) | |
{ | |
for (CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
if (i_check(itr->GetSource())) | |
i_objects.push_back(itr->GetSource()); | |
} | |
@@ -520,7 +520,7 @@ template<class Check> | |
void Trinity::PlayerListSearcher<Check>::Visit(PlayerMapType &m) | |
{ | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
- if (itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (itr->GetSource()->IsInPhase(_searcher)) | |
if (i_check(itr->GetSource())) | |
i_objects.push_back(itr->GetSource()); | |
} | |
@@ -534,7 +534,7 @@ void Trinity::PlayerSearcher<Check>::Visit(PlayerMapType &m) | |
for (PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
@@ -550,7 +550,7 @@ void Trinity::PlayerLastSearcher<Check>::Visit(PlayerMapType& m) | |
{ | |
for (PlayerMapType::iterator itr = m.begin(); itr != m.end(); ++itr) | |
{ | |
- if (!itr->GetSource()->InSamePhase(i_phaseMask)) | |
+ if (!itr->GetSource()->IsInPhase(_searcher)) | |
continue; | |
if (i_check(itr->GetSource())) | |
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp | |
index dcaa272..7ef56ff 100644 | |
--- a/src/server/game/Handlers/GroupHandler.cpp | |
+++ b/src/server/game/Handlers/GroupHandler.cpp | |
@@ -32,6 +32,7 @@ | |
#include "World.h" | |
#include "WorldPacket.h" | |
#include "WorldSession.h" | |
+#include "SpellAuraEffects.h" | |
class Aura; | |
@@ -946,8 +947,7 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke | |
if (mask == GROUP_UPDATE_FLAG_NONE) | |
return; | |
- std::set<uint32> phases; | |
- player->GetPhaseMgr().GetActivePhases(phases); | |
+ std::set<uint32> const& phases = player->GetPhases(); | |
if (mask & GROUP_UPDATE_FLAG_POWER_TYPE) // if update power type, update current/max power also | |
mask |= (GROUP_UPDATE_FLAG_CUR_POWER | GROUP_UPDATE_FLAG_MAX_POWER); | |
@@ -1199,8 +1199,7 @@ void WorldSession::HandleRequestPartyMemberStatsOpcode(WorldPacket& recvData) | |
Pet* pet = player->GetPet(); | |
Powers powerType = player->getPowerType(); | |
- std::set<uint32> phases; | |
- player->GetPhaseMgr().GetActivePhases(phases); | |
+ std::set<uint32> const& phases = player->GetPhases(); | |
WorldPacket data(SMSG_PARTY_MEMBER_STATS_FULL, 4+2+2+2+1+2*6+8+1+8); | |
data << uint8(0); // only for SMSG_PARTY_MEMBER_STATS_FULL, probably arena/bg related | |
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp | |
index e57c748..85d7b66 100644 | |
--- a/src/server/game/Handlers/MiscHandler.cpp | |
+++ b/src/server/game/Handlers/MiscHandler.cpp | |
@@ -1750,7 +1750,7 @@ void WorldSession::HandleReadyForAccountDataTimes(WorldPacket& /*recvData*/) | |
SendAccountDataTimes(GLOBAL_CACHE_MASK); | |
} | |
-void WorldSession::SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps) | |
+void WorldSession::SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps, std::set<uint32> const& worldMapAreaSwaps) | |
{ | |
ObjectGuid guid = _player->GetGUID(); | |
@@ -1767,9 +1767,9 @@ void WorldSession::SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set< | |
data.WriteByteSeq(guid[7]); | |
data.WriteByteSeq(guid[4]); | |
- data << uint32(0); | |
- //for (uint8 i = 0; i < worldMapAreaCount; ++i) | |
- // data << uint16(0); // WorldMapArea.dbc id (controls map display) | |
+ data << uint32(worldMapAreaSwaps.size()); | |
+ for (auto mapSwap : worldMapAreaSwaps) | |
+ data << uint16(mapSwap); // WorldMapArea.dbc id (controls map display) | |
data.WriteByteSeq(guid[1]); | |
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp | |
index 1b6399f..a022066 100644 | |
--- a/src/server/game/Instances/InstanceScript.cpp | |
+++ b/src/server/game/Instances/InstanceScript.cpp | |
@@ -469,11 +469,9 @@ void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 credi | |
void InstanceScript::UpdatePhasing() | |
{ | |
- PhaseUpdateData phaseUdateData; | |
- phaseUdateData.AddConditionType(CONDITION_INSTANCE_INFO); | |
- | |
+ /* | |
Map::PlayerList const& players = instance->GetPlayers(); | |
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) | |
if (Player* player = itr->GetSource()) | |
- player->GetPhaseMgr().NotifyConditionChanged(phaseUdateData); | |
+ */ | |
} | |
diff --git a/src/server/game/Maps/PhaseMgr.cpp b/src/server/game/Maps/PhaseMgr.cpp | |
deleted file mode 100644 | |
index 13d3577..0000000 | |
--- a/src/server/game/Maps/PhaseMgr.cpp | |
+++ /dev/null | |
@@ -1,438 +0,0 @@ | |
-/* | |
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> | |
- * | |
- * This program is free software; you can redistribute it and/or modify it | |
- * under the terms of the GNU General Public License as published by the | |
- * Free Software Foundation; either version 2 of the License, or (at your | |
- * option) any later version. | |
- * | |
- * This program is distributed in the hope that it will be useful, but WITHOUT | |
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
- * more details. | |
- * | |
- * You should have received a copy of the GNU General Public License along | |
- * with this program. If not, see <http://www.gnu.org/licenses/>. | |
- */ | |
- | |
-#include "PhaseMgr.h" | |
-#include "Chat.h" | |
-#include "Group.h" | |
-#include "Language.h" | |
-#include "ObjectMgr.h" | |
-#include "Player.h" | |
- | |
-////////////////////////////////////////////////////////////////// | |
-// Updating | |
- | |
-PhaseMgr::PhaseMgr(Player* _player) : player(_player), phaseData(_player), _UpdateFlags(0) | |
-{ | |
- _PhaseDefinitionStore = sObjectMgr->GetPhaseDefinitionStore(); | |
- _SpellPhaseStore = sObjectMgr->GetSpellPhaseStore(); | |
-} | |
- | |
-void PhaseMgr::Update() | |
-{ | |
- if (IsUpdateInProgress()) | |
- return; | |
- | |
- if (_UpdateFlags & PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED) | |
- { | |
- phaseData.SendPhaseshiftToPlayer(); | |
- player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PHASE); | |
- } | |
- | |
- if (_UpdateFlags & PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED) | |
- phaseData.SendPhaseMaskToPlayer(); | |
- | |
- _UpdateFlags = 0; | |
-} | |
- | |
-void PhaseMgr::RemoveUpdateFlag(PhaseUpdateFlag updateFlag) | |
-{ | |
- _UpdateFlags &= ~updateFlag; | |
- | |
- if (updateFlag == PHASE_UPDATE_FLAG_ZONE_UPDATE) | |
- { | |
- // Update zone changes | |
- if (phaseData.HasActiveDefinitions()) | |
- { | |
- phaseData.ResetDefinitions(); | |
- _UpdateFlags |= (PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED | PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED); | |
- } | |
- | |
- if (_PhaseDefinitionStore->find(player->GetZoneId()) != _PhaseDefinitionStore->end()) | |
- Recalculate(); | |
- } | |
- | |
- Update(); | |
-} | |
- | |
-///////////////////////////////////////////////////////////////// | |
-// Notifier | |
- | |
-void PhaseMgr::NotifyConditionChanged(PhaseUpdateData const& updateData) | |
-{ | |
- if (NeedsPhaseUpdateWithData(updateData)) | |
- { | |
- Recalculate(); | |
- Update(); | |
- } | |
-} | |
- | |
-////////////////////////////////////////////////////////////////// | |
-// Phasing Definitions | |
- | |
-void PhaseMgr::Recalculate() | |
-{ | |
- if (phaseData.HasActiveDefinitions()) | |
- { | |
- phaseData.ResetDefinitions(); | |
- _UpdateFlags |= (PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED | PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED); | |
- } | |
- | |
- PhaseDefinitionStore::const_iterator itr = _PhaseDefinitionStore->find(player->GetZoneId()); | |
- if (itr != _PhaseDefinitionStore->end()) | |
- { | |
- for (PhaseDefinitionContainer::const_iterator phase = itr->second.begin(); phase != itr->second.end(); ++phase) | |
- { | |
- if (CheckDefinition(&(*phase))) | |
- { | |
- phaseData.AddPhaseDefinition(&(*phase)); | |
- | |
- if (phase->phasemask) | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED; | |
- | |
- if (phase->phaseId || phase->terrainswapmap) | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED; | |
- | |
- if (phase->IsLastDefinition()) | |
- break; | |
- } | |
- } | |
- } | |
-} | |
- | |
-inline bool PhaseMgr::CheckDefinition(PhaseDefinition const* phaseDefinition) | |
-{ | |
- ConditionList const* conditions = sConditionMgr->GetConditionsForPhaseDefinition(phaseDefinition->zoneId, phaseDefinition->entry); | |
- if (!conditions) | |
- return true; | |
- | |
- ConditionSourceInfo srcInfo(player); | |
- return sConditionMgr->IsObjectMeetToConditions(srcInfo, *conditions); | |
-} | |
- | |
-bool PhaseMgr::NeedsPhaseUpdateWithData(PhaseUpdateData const& updateData) const | |
-{ | |
- PhaseDefinitionStore::const_iterator itr = _PhaseDefinitionStore->find(player->GetZoneId()); | |
- if (itr != _PhaseDefinitionStore->end()) | |
- { | |
- for (PhaseDefinitionContainer::const_iterator phase = itr->second.begin(); phase != itr->second.end(); ++phase) | |
- { | |
- ConditionList const* conditionList = sConditionMgr->GetConditionsForPhaseDefinition(phase->zoneId, phase->entry); | |
- if (!conditionList) | |
- continue; | |
- | |
- for (ConditionList::const_iterator condition = conditionList->begin(); condition != conditionList->end(); ++condition) | |
- if (updateData.IsConditionRelated(*condition)) | |
- return true; | |
- } | |
- } | |
- return false; | |
-} | |
- | |
-////////////////////////////////////////////////////////////////// | |
-// Auras | |
- | |
-void PhaseMgr::RegisterPhasingAuraEffect(AuraEffect const* auraEffect) | |
-{ | |
- std::list<PhaseInfo> phases; | |
- | |
- if (auraEffect->GetAuraType() == SPELL_AURA_PHASE) | |
- { | |
- PhaseInfo phaseInfo; | |
- | |
- if (auraEffect->GetMiscValue()) | |
- { | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED; | |
- phaseInfo.phasemask = auraEffect->GetMiscValue(); | |
- } | |
- else | |
- { | |
- SpellPhaseStore::const_iterator itr = _SpellPhaseStore->find(auraEffect->GetId()); | |
- if (itr != _SpellPhaseStore->end()) | |
- { | |
- if (itr->second.phasemask) | |
- { | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED; | |
- phaseInfo.phasemask = itr->second.phasemask; | |
- } | |
- | |
- if (itr->second.terrainswapmap) | |
- phaseInfo.terrainswapmap = itr->second.terrainswapmap; | |
- } | |
- } | |
- | |
- phaseInfo.phaseId = auraEffect->GetMiscValueB(); | |
- | |
- if (phaseInfo.NeedsClientSideUpdate()) | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED; | |
- | |
- phases.push_back(phaseInfo); | |
- } | |
- else if (auraEffect->GetAuraType() == SPELL_AURA_PHASE_GROUP) | |
- { | |
- uint32 group = auraEffect->GetMiscValueB(); | |
- std::set<uint32> const& groupPhases = GetPhasesForGroup(group); | |
- for (auto itr = groupPhases.begin(); itr != groupPhases.end(); ++itr) | |
- { | |
- PhaseInfo phaseInfo; | |
- phaseInfo.phaseId = auraEffect->GetMiscValueB(); | |
- if (phaseInfo.NeedsClientSideUpdate()) | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED; | |
- phases.push_back(phaseInfo); | |
- } | |
- } | |
- | |
- for (auto itr = phases.begin(); itr != phases.end(); ++itr) | |
- phaseData.AddAuraInfo(auraEffect->GetId(), *itr); | |
- | |
- Update(); | |
-} | |
- | |
-void PhaseMgr::UnRegisterPhasingAuraEffect(AuraEffect const* auraEffect) | |
-{ | |
- _UpdateFlags |= phaseData.RemoveAuraInfo(auraEffect->GetId()); | |
- | |
- Update(); | |
-} | |
- | |
-////////////////////////////////////////////////////////////////// | |
-// Commands | |
- | |
-void PhaseMgr::SendDebugReportToPlayer(Player* const debugger) | |
-{ | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_REPORT_STATUS, player->GetName().c_str(), player->GetZoneId(), player->getLevel(), player->GetTeamId(), _UpdateFlags); | |
- | |
- PhaseDefinitionStore::const_iterator itr = _PhaseDefinitionStore->find(player->GetZoneId()); | |
- if (itr == _PhaseDefinitionStore->end()) | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_NO_DEFINITIONS, player->GetZoneId()); | |
- else | |
- { | |
- for (PhaseDefinitionContainer::const_iterator phase = itr->second.begin(); phase != itr->second.end(); ++phase) | |
- { | |
- if (CheckDefinition(&(*phase))) | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_SUCCESS, phase->entry, phase->IsNegatingPhasemask() ? "negated Phase" : "Phase", phase->phasemask); | |
- else | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_FAILED, phase->phasemask, phase->entry, phase->zoneId); | |
- | |
- if (phase->IsLastDefinition()) | |
- { | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_LAST_PHASE, phase->phasemask, phase->entry, phase->zoneId); | |
- break; | |
- } | |
- } | |
- } | |
- | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_LIST, phaseData._PhasemaskThroughDefinitions, phaseData._PhasemaskThroughAuras, phaseData._CustomPhasemask); | |
- | |
- ChatHandler(debugger->GetSession()).PSendSysMessage(LANG_PHASING_PHASEMASK, phaseData.GetPhaseMaskForSpawn(), player->GetPhaseMask()); | |
-} | |
- | |
-void PhaseMgr::SetCustomPhase(uint32 phaseMask) | |
-{ | |
- phaseData._CustomPhasemask = phaseMask; | |
- | |
- _UpdateFlags |= PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED; | |
- | |
- Update(); | |
-} | |
- | |
-////////////////////////////////////////////////////////////////// | |
-// Phase Data | |
- | |
-uint32 PhaseData::GetCurrentPhasemask() const | |
-{ | |
- if (player->IsGameMaster()) | |
- return uint32(PHASEMASK_ANYWHERE); | |
- | |
- if (_CustomPhasemask) | |
- return _CustomPhasemask; | |
- | |
- return GetPhaseMaskForSpawn(); | |
-} | |
- | |
-inline uint32 PhaseData::GetPhaseMaskForSpawn() const | |
-{ | |
- uint32 const phase = (_PhasemaskThroughDefinitions | _PhasemaskThroughAuras); | |
- return (phase ? phase : PHASEMASK_NORMAL); | |
-} | |
- | |
-void PhaseData::SendPhaseMaskToPlayer() | |
-{ | |
- // Server side update | |
- uint32 const phasemask = GetCurrentPhasemask(); | |
- if (player->GetPhaseMask() == phasemask) | |
- return; | |
- | |
- player->SetPhaseMask(phasemask, false); | |
- | |
- if (player->IsVisible()) | |
- player->UpdateObjectVisibility(); | |
-} | |
- | |
-void PhaseData::SendPhaseshiftToPlayer() | |
-{ | |
- // Client side update | |
- std::set<uint32> phaseIds; | |
- std::set<uint32> terrainswaps; | |
- | |
- for (PhaseInfoContainer::const_iterator itr = spellPhaseInfo.begin(); itr != spellPhaseInfo.end(); ++itr) | |
- { | |
- for (auto ph = itr->second.begin(); ph != itr->second.end(); ++ph) | |
- { | |
- if (ph->terrainswapmap) | |
- terrainswaps.insert(ph->terrainswapmap); | |
- | |
- if (ph->phaseId) | |
- phaseIds.insert(ph->phaseId); | |
- } | |
- } | |
- | |
- // Phase Definitions | |
- for (std::list<PhaseDefinition const*>::const_iterator itr = activePhaseDefinitions.begin(); itr != activePhaseDefinitions.end(); ++itr) | |
- { | |
- if ((*itr)->phaseId) | |
- phaseIds.insert((*itr)->phaseId); | |
- | |
- if ((*itr)->terrainswapmap) | |
- terrainswaps.insert((*itr)->terrainswapmap); | |
- } | |
- | |
- player->GetSession()->SendSetPhaseShift(phaseIds, terrainswaps); | |
-} | |
- | |
-void PhaseData::GetActivePhases(std::set<uint32>& phases) const | |
-{ | |
- for (PhaseInfoContainer::const_iterator itr = spellPhaseInfo.begin(); itr != spellPhaseInfo.end(); ++itr) | |
- for (auto phase = itr->second.begin(); phase != itr->second.end(); ++phase) | |
- if (phase->phaseId) | |
- phases.insert(phase->phaseId); | |
- | |
- // Phase Definitions | |
- for (std::list<PhaseDefinition const*>::const_iterator itr = activePhaseDefinitions.begin(); itr != activePhaseDefinitions.end(); ++itr) | |
- if ((*itr)->phaseId) | |
- phases.insert((*itr)->phaseId); | |
-} | |
- | |
-void PhaseData::AddPhaseDefinition(PhaseDefinition const* phaseDefinition) | |
-{ | |
- if (phaseDefinition->IsOverwritingExistingPhases()) | |
- { | |
- activePhaseDefinitions.clear(); | |
- _PhasemaskThroughDefinitions = phaseDefinition->phasemask; | |
- } | |
- else | |
- { | |
- if (phaseDefinition->IsNegatingPhasemask()) | |
- _PhasemaskThroughDefinitions &= ~phaseDefinition->phasemask; | |
- else | |
- _PhasemaskThroughDefinitions |= phaseDefinition->phasemask; | |
- } | |
- | |
- activePhaseDefinitions.push_back(phaseDefinition); | |
-} | |
- | |
-void PhaseData::AddAuraInfo(uint32 spellId, PhaseInfo const& phaseInfo) | |
-{ | |
- if (phaseInfo.phasemask) | |
- _PhasemaskThroughAuras |= phaseInfo.phasemask; | |
- | |
- spellPhaseInfo[spellId].push_back(phaseInfo); | |
-} | |
- | |
-uint32 PhaseData::RemoveAuraInfo(uint32 spellId) | |
-{ | |
- PhaseInfoContainer::const_iterator rAura = spellPhaseInfo.find(spellId); | |
- if (rAura != spellPhaseInfo.end()) | |
- { | |
- uint32 updateflag = 0; | |
- | |
- for (auto phase = rAura->second.begin(); phase != rAura->second.end(); ++phase) | |
- { | |
- if (phase->NeedsClientSideUpdate()) | |
- updateflag |= PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED; | |
- | |
- if (phase->NeedsServerSideUpdate()) | |
- { | |
- _PhasemaskThroughAuras = 0; | |
- updateflag |= PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED; | |
- } | |
- } | |
- | |
- if (updateflag & PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED) | |
- { | |
- spellPhaseInfo.erase(rAura); | |
- | |
- for (PhaseInfoContainer::const_iterator itr = spellPhaseInfo.begin(); itr != spellPhaseInfo.end(); ++itr) | |
- for (auto ph = itr->second.begin(); ph != itr->second.end(); ++ph) | |
- _PhasemaskThroughAuras |= ph->phasemask; | |
- } | |
- | |
- return updateflag; | |
- } | |
- | |
- return 0; | |
-} | |
- | |
-////////////////////////////////////////////////////////////////// | |
-// Phase Update Data | |
- | |
-void PhaseUpdateData::AddQuestUpdate(uint32 questId) | |
-{ | |
- AddConditionType(CONDITION_QUESTREWARDED); | |
- AddConditionType(CONDITION_QUESTTAKEN); | |
- AddConditionType(CONDITION_QUEST_COMPLETE); | |
- AddConditionType(CONDITION_QUEST_NONE); | |
- | |
- _questId = questId; | |
-} | |
- | |
-bool PhaseUpdateData::IsConditionRelated(Condition const* condition) const | |
-{ | |
- switch (condition->ConditionType) | |
- { | |
- case CONDITION_QUESTREWARDED: | |
- case CONDITION_QUESTTAKEN: | |
- case CONDITION_QUEST_COMPLETE: | |
- case CONDITION_QUEST_NONE: | |
- return condition->ConditionValue1 == _questId && ((1 << condition->ConditionType) & _conditionTypeFlags); | |
- default: | |
- return (1 << condition->ConditionType) & _conditionTypeFlags; | |
- } | |
-} | |
- | |
-bool PhaseMgr::IsConditionTypeSupported(ConditionTypes conditionType) | |
-{ | |
- switch (conditionType) | |
- { | |
- case CONDITION_QUESTREWARDED: | |
- case CONDITION_QUESTTAKEN: | |
- case CONDITION_QUEST_COMPLETE: | |
- case CONDITION_QUEST_NONE: | |
- case CONDITION_TEAM: | |
- case CONDITION_CLASS: | |
- case CONDITION_RACE: | |
- case CONDITION_INSTANCE_INFO: | |
- case CONDITION_LEVEL: | |
- return true; | |
- default: | |
- return false; | |
- } | |
-} | |
- | |
-void PhaseMgr::GetActivePhases(std::set<uint32>& phases) const | |
-{ | |
- phaseData.GetActivePhases(phases); | |
-} | |
diff --git a/src/server/game/Maps/PhaseMgr.h b/src/server/game/Maps/PhaseMgr.h | |
deleted file mode 100644 | |
index f5226e6..0000000 | |
--- a/src/server/game/Maps/PhaseMgr.h | |
+++ /dev/null | |
@@ -1,179 +0,0 @@ | |
-/* | |
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> | |
- * | |
- * This program is free software; you can redistribute it and/or modify it | |
- * under the terms of the GNU General Public License as published by the | |
- * Free Software Foundation; either version 2 of the License, or (at your | |
- * option) any later version. | |
- * | |
- * This program is distributed in the hope that it will be useful, but WITHOUT | |
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
- * more details. | |
- * | |
- * You should have received a copy of the GNU General Public License along | |
- * with this program. If not, see <http://www.gnu.org/licenses/>. | |
- */ | |
- | |
-#ifndef TRINITY_PHASEMGR_H | |
-#define TRINITY_PHASEMGR_H | |
- | |
-#include "SharedDefines.h" | |
-#include "SpellAuras.h" | |
-#include "SpellAuraEffects.h" | |
-#include "ConditionMgr.h" | |
- | |
-class ObjectMgr; | |
-class Player; | |
- | |
-// Phasing (visibility) | |
-enum PhasingFlags | |
-{ | |
- PHASE_FLAG_OVERWRITE_EXISTING = 0x01, // don't stack with existing phases, overwrites existing phases | |
- PHASE_FLAG_NO_MORE_PHASES = 0x02, // stop calculating phases after this phase was applied (no more phases will be applied) | |
- PHASE_FLAG_NEGATE_PHASE = 0x04 // negate instead to add the phasemask | |
-}; | |
- | |
-enum PhaseUpdateFlag | |
-{ | |
- PHASE_UPDATE_FLAG_ZONE_UPDATE = 0x01, | |
- PHASE_UPDATE_FLAG_AREA_UPDATE = 0x02, | |
- | |
- // Internal flags | |
- PHASE_UPDATE_FLAG_CLIENTSIDE_CHANGED = 0x08, | |
- PHASE_UPDATE_FLAG_SERVERSIDE_CHANGED = 0x10, | |
-}; | |
- | |
-struct PhaseDefinition | |
-{ | |
- uint32 zoneId; | |
- uint32 entry; | |
- uint32 phasemask; | |
- uint32 phaseId; | |
- uint32 terrainswapmap; | |
- uint8 flags; | |
- | |
- bool IsOverwritingExistingPhases() const { return flags & PHASE_FLAG_OVERWRITE_EXISTING; } | |
- bool IsLastDefinition() const { return flags & PHASE_FLAG_NO_MORE_PHASES; } | |
- bool IsNegatingPhasemask() const { return flags & PHASE_FLAG_NEGATE_PHASE; } | |
-}; | |
- | |
-typedef std::list<PhaseDefinition> PhaseDefinitionContainer; | |
-typedef std::unordered_map<uint32 /*zoneId*/, PhaseDefinitionContainer> PhaseDefinitionStore; | |
- | |
-struct SpellPhaseInfo | |
-{ | |
- uint32 spellId; | |
- uint32 phasemask; | |
- uint32 terrainswapmap; | |
-}; | |
- | |
-typedef std::unordered_map<uint32 /*spellId*/, SpellPhaseInfo> SpellPhaseStore; | |
- | |
-struct PhaseInfo | |
-{ | |
- PhaseInfo() : phasemask(0), terrainswapmap(0), phaseId(0) {} | |
- | |
- uint32 phasemask; | |
- uint32 terrainswapmap; | |
- uint32 phaseId; | |
- | |
- bool NeedsServerSideUpdate() const { return phasemask; } | |
- bool NeedsClientSideUpdate() const { return terrainswapmap || phaseId; } | |
-}; | |
- | |
-typedef std::unordered_map<uint32 /*spellId*/, std::list<PhaseInfo>> PhaseInfoContainer; | |
- | |
-struct PhaseData | |
-{ | |
- PhaseData(Player* _player) : _PhasemaskThroughDefinitions(0), _PhasemaskThroughAuras(0), _CustomPhasemask(0), player(_player) {} | |
- | |
- uint32 _PhasemaskThroughDefinitions; | |
- uint32 _PhasemaskThroughAuras; | |
- uint32 _CustomPhasemask; | |
- | |
- uint32 GetCurrentPhasemask() const; | |
- inline uint32 GetPhaseMaskForSpawn() const; | |
- | |
- void ResetDefinitions() { _PhasemaskThroughDefinitions = 0; activePhaseDefinitions.clear(); } | |
- void AddPhaseDefinition(PhaseDefinition const* phaseDefinition); | |
- bool HasActiveDefinitions() const { return !activePhaseDefinitions.empty(); } | |
- | |
- void AddAuraInfo(uint32 spellId, PhaseInfo const& phaseInfo); | |
- uint32 RemoveAuraInfo(uint32 spellId); | |
- | |
- void SendPhaseMaskToPlayer(); | |
- void SendPhaseshiftToPlayer(); | |
- | |
- void GetActivePhases(std::set<uint32>& phases) const; | |
- | |
-private: | |
- Player* player; | |
- std::list<PhaseDefinition const*> activePhaseDefinitions; | |
- PhaseInfoContainer spellPhaseInfo; | |
-}; | |
- | |
-struct PhaseUpdateData | |
-{ | |
- PhaseUpdateData(): _conditionTypeFlags(0), _questId(0) { } | |
- void AddConditionType(ConditionTypes const conditionType) { _conditionTypeFlags |= (1 << conditionType); } | |
- void AddQuestUpdate(uint32 const questId); | |
- | |
- bool IsConditionRelated(Condition const* condition) const; | |
- | |
-private: | |
- uint32 _conditionTypeFlags; | |
- uint32 _questId; | |
-}; | |
- | |
-class PhaseMgr | |
-{ | |
-public: | |
- PhaseMgr(Player* _player); | |
- ~PhaseMgr() {} | |
- | |
- uint32 GetCurrentPhasemask() { return phaseData.GetCurrentPhasemask(); }; | |
- inline uint32 GetPhaseMaskForSpawn() { return phaseData.GetCurrentPhasemask(); } | |
- | |
- // Phase definitions update handling | |
- void NotifyConditionChanged(PhaseUpdateData const& updateData); | |
- void NotifyStoresReloaded() { Recalculate(); Update(); } | |
- | |
- void Update(); | |
- | |
- // Aura phase effects | |
- void RegisterPhasingAuraEffect(AuraEffect const* auraEffect); | |
- void UnRegisterPhasingAuraEffect(AuraEffect const* auraEffect); | |
- | |
- // Update flags (delayed phasing) | |
- void AddUpdateFlag(PhaseUpdateFlag updateFlag) { _UpdateFlags |= updateFlag; } | |
- void RemoveUpdateFlag(PhaseUpdateFlag updateFlag); | |
- | |
- // Needed for modify phase command | |
- void SetCustomPhase(uint32 phaseMask); | |
- | |
- // Debug | |
- void SendDebugReportToPlayer(Player* const debugger); | |
- | |
- static bool IsConditionTypeSupported(ConditionTypes conditionType); | |
- | |
- void GetActivePhases(std::set<uint32>& phases) const; | |
- | |
-private: | |
- void Recalculate(); | |
- | |
- inline bool CheckDefinition(PhaseDefinition const* phaseDefinition); | |
- | |
- bool NeedsPhaseUpdateWithData(PhaseUpdateData const& updateData) const; | |
- | |
- inline bool IsUpdateInProgress() const { return (_UpdateFlags & PHASE_UPDATE_FLAG_ZONE_UPDATE) || (_UpdateFlags & PHASE_UPDATE_FLAG_AREA_UPDATE); } | |
- | |
- PhaseDefinitionStore const* _PhaseDefinitionStore; | |
- SpellPhaseStore const* _SpellPhaseStore; | |
- | |
- Player* player; | |
- PhaseData phaseData; | |
- uint8 _UpdateFlags; | |
-}; | |
- | |
-#endif | |
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h | |
index 3a3a273..3511c4b 100644 | |
--- a/src/server/game/Server/WorldSession.h | |
+++ b/src/server/game/Server/WorldSession.h | |
@@ -232,7 +232,7 @@ class WorldSession | |
void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName *declinedName); | |
void SendPartyResult(PartyOperation operation, std::string const& member, PartyResult res, uint32 val = 0); | |
void SendAreaTriggerMessage(const char* Text, ...) ATTR_PRINTF(2, 3); | |
- void SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps); | |
+ void SendSetPhaseShift(std::set<uint32> const& phaseIds, std::set<uint32> const& terrainswaps, std::set<uint32> const& worldMapAreaSwaps); | |
void SendQueryTimeResponse(); | |
void SendAuthResponse(uint8 code, bool queued, uint32 queuePos = 0); | |
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp | |
index 61a1ea4..8c80c76 100644 | |
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp | |
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp | |
@@ -1606,31 +1606,23 @@ void AuraEffect::HandlePhase(AuraApplication const* aurApp, uint8 mode, bool app | |
Unit* target = aurApp->GetTarget(); | |
- if (Player* player = target->ToPlayer()) | |
+ uint32 newPhase = 0; | |
+ Unit::AuraEffectList const& phases = target->GetAuraEffectsByType(SPELL_AURA_PHASE); | |
+ if (!phases.empty()) | |
+ for (Unit::AuraEffectList::const_iterator itr = phases.begin(); itr != phases.end(); ++itr) | |
+ newPhase |= (*itr)->GetMiscValue(); | |
+ | |
+ if (!newPhase) | |
{ | |
- if (apply) | |
- player->GetPhaseMgr().RegisterPhasingAuraEffect(this); | |
- else | |
- player->GetPhaseMgr().UnRegisterPhasingAuraEffect(this); | |
+ newPhase = PHASEMASK_NORMAL; | |
+ if (Creature* creature = target->ToCreature()) | |
+ if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow())) | |
+ newPhase = data->phaseMask; | |
} | |
- else | |
- { | |
- uint32 newPhase = 0; | |
- Unit::AuraEffectList const& phases = target->GetAuraEffectsByType(SPELL_AURA_PHASE); | |
- if (!phases.empty()) | |
- for (Unit::AuraEffectList::const_iterator itr = phases.begin(); itr != phases.end(); ++itr) | |
- newPhase |= (*itr)->GetMiscValue(); | |
- if (!newPhase) | |
- { | |
- newPhase = PHASEMASK_NORMAL; | |
- if (Creature* creature = target->ToCreature()) | |
- if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow())) | |
- newPhase = data->phaseMask; | |
- } | |
+ target->SetPhaseMask(newPhase, false); | |
- target->SetPhaseMask(newPhase, false); | |
- } | |
+ target->SetInPhase(GetMiscValueB(), false, apply); | |
// call functions which may have additional effects after chainging state of unit | |
// phase auras normally not expected at BG but anyway better check | |
@@ -1640,6 +1632,8 @@ void AuraEffect::HandlePhase(AuraApplication const* aurApp, uint8 mode, bool app | |
target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION); | |
} | |
+ if (Player* player = target->ToPlayer()) | |
+ player->UpdatePhasing(); | |
// need triggering visibility update base at phase update of not GM invisible (other GMs anyway see in any phases) | |
if (target->IsVisible()) | |
target->UpdateObjectVisibility(); | |
@@ -1652,13 +1646,12 @@ void AuraEffect::HandlePhaseGroup(AuraApplication const* aurApp, uint8 mode, boo | |
Unit* target = aurApp->GetTarget(); | |
- if (Player* player = target->ToPlayer()) | |
- { | |
- if (apply) | |
- player->GetPhaseMgr().RegisterPhasingAuraEffect(this); | |
- else | |
- player->GetPhaseMgr().UnRegisterPhasingAuraEffect(this); | |
- } | |
+ if (target->GetTypeId() != TYPEID_PLAYER) | |
+ return; | |
+ | |
+ std::set<uint32> const& phases = GetPhasesForGroup(GetMiscValueB()); | |
+ for (auto phase : phases) | |
+ target->SetInPhase(phase, false, apply); | |
// call functions which may have additional effects after chainging state of unit | |
// phase auras normally not expected at BG but anyway better check | |
@@ -1668,6 +1661,9 @@ void AuraEffect::HandlePhaseGroup(AuraApplication const* aurApp, uint8 mode, boo | |
target->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_IMMUNE_OR_LOST_SELECTION); | |
} | |
+ if (Player* player = target->ToPlayer()) | |
+ player->UpdatePhasing(); | |
+ | |
// need triggering visibility update base at phase update of not GM invisible (other GMs anyway see in any phases) | |
if (target->IsVisible()) | |
target->UpdateObjectVisibility(); | |
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp | |
index 8dfa017..ab05cd2 100644 | |
--- a/src/server/game/Spells/SpellEffects.cpp | |
+++ b/src/server/game/Spells/SpellEffects.cpp | |
@@ -3200,6 +3200,9 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex) | |
return; | |
} | |
+ for (auto phase : m_caster->GetPhases()) | |
+ pGameObj->SetInPhase(phase, false, true); | |
+ | |
int32 duration = m_spellInfo->GetDuration(); | |
pGameObj->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); | |
@@ -3221,6 +3224,9 @@ void Spell::EffectSummonObjectWild(SpellEffIndex effIndex) | |
if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, map, | |
m_caster->GetPhaseMask(), x, y, z, target->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) | |
{ | |
+ for (auto phase : m_caster->GetPhases()) | |
+ linkedGO->SetInPhase(phase, false, true); | |
+ | |
linkedGO->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); | |
linkedGO->SetSpellId(m_spellInfo->Id); | |
@@ -3872,6 +3878,9 @@ void Spell::EffectDuel(SpellEffIndex effIndex) | |
return; | |
} | |
+ for (auto phase : m_caster->GetPhases()) | |
+ pGameObj->SetInPhase(phase, false, true); | |
+ | |
pGameObj->SetUInt32Value(GAMEOBJECT_FACTION, m_caster->getFaction()); | |
pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()+1); | |
int32 duration = m_spellInfo->GetDuration(); | |
@@ -4228,6 +4237,9 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex) | |
return; | |
} | |
+ for (auto phase : m_caster->GetPhases()) | |
+ go->SetInPhase(phase, false, true); | |
+ | |
//pGameObj->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()); | |
int32 duration = m_spellInfo->GetDuration(); | |
go->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); | |
@@ -4857,6 +4869,9 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) | |
return; | |
} | |
+ for (auto phase : m_caster->GetPhases()) | |
+ pGameObj->SetInPhase(phase, false, true); | |
+ | |
int32 duration = m_spellInfo->GetDuration(); | |
switch (goinfo->type) | |
@@ -4919,6 +4934,9 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) | |
if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, cMap, | |
m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) | |
{ | |
+ for (auto phase : m_caster->GetPhases()) | |
+ linkedGO->SetInPhase(phase, false, true); | |
+ | |
linkedGO->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); | |
//linkedGO->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()); | |
linkedGO->SetSpellId(m_spellInfo->Id); | |
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp | |
index 7491920..03076b0 100644 | |
--- a/src/server/game/Spells/SpellInfo.cpp | |
+++ b/src/server/game/Spells/SpellInfo.cpp | |
@@ -17,6 +17,7 @@ | |
#include "SpellInfo.h" | |
#include "SpellAuraDefines.h" | |
+#include "SpellAuraEffects.h" | |
#include "SpellMgr.h" | |
#include "Spell.h" | |
#include "DBCStores.h" | |
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp | |
index a9507b1..4375ad0 100644 | |
--- a/src/server/game/World/World.cpp | |
+++ b/src/server/game/World/World.cpp | |
@@ -1457,7 +1457,7 @@ void World::SetInitialWorldSettings() | |
sSpellMgr->LoadSpellGroupStackRules(); | |
TC_LOG_INFO("server.loading", "Loading Spell Phase Dbc Info..."); | |
- sObjectMgr->LoadSpellPhaseInfo(); | |
+ sObjectMgr->LoadPhaseInfo(); | |
TC_LOG_INFO("server.loading", "Loading NPC Texts..."); | |
sObjectMgr->LoadGossipText(); | |
@@ -3284,10 +3284,7 @@ CharacterNameData const* World::GetCharacterNameData(uint32 guid) const | |
void World::UpdatePhaseDefinitions() | |
{ | |
- SessionMap::const_iterator itr; | |
- for (itr = m_sessions.begin(); itr != m_sessions.end(); ++itr) | |
- if (itr->second && itr->second->GetPlayer() && itr->second->GetPlayer()->IsInWorld()) | |
- itr->second->GetPlayer()->GetPhaseMgr().NotifyStoresReloaded(); | |
+ | |
} | |
void World::ReloadRBAC() | |
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp | |
index d0a005f..52886d6 100644 | |
--- a/src/server/scripts/Commands/cs_debug.cpp | |
+++ b/src/server/scripts/Commands/cs_debug.cpp | |
@@ -934,6 +934,9 @@ public: | |
return false; | |
} | |
+ for (auto phase : handler->GetSession()->GetPlayer()->GetPhases()) | |
+ v->SetInPhase(phase, false, true); | |
+ | |
map->AddToMap(v->ToCreature()); | |
return true; | |
@@ -962,13 +965,14 @@ public: | |
std::set<uint32> terrainswap; | |
std::set<uint32> phaseId; | |
+ std::set<uint32> worldMapSwap; | |
terrainswap.insert((uint32)atoi(t)); | |
if (p) | |
phaseId.insert((uint32)atoi(p)); | |
- handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap); | |
+ handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap, worldMapSwap); | |
return true; | |
} | |
@@ -1393,7 +1397,7 @@ public: | |
if (unit && unit->GetTypeId() == TYPEID_PLAYER) | |
player = unit->ToPlayer(); | |
- player->GetPhaseMgr().SendDebugReportToPlayer(handler->GetSession()->GetPlayer()); | |
+ | |
return true; | |
} | |
}; | |
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp | |
index e556854..37961b0 100644 | |
--- a/src/server/scripts/Commands/cs_gobject.cpp | |
+++ b/src/server/scripts/Commands/cs_gobject.cpp | |
@@ -152,12 +152,15 @@ public: | |
GameObject* object = new GameObject; | |
uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT); | |
- if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMgr().GetPhaseMaskForSpawn(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) | |
+ if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMask(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) | |
{ | |
delete object; | |
return false; | |
} | |
+ for (auto phase : player->GetPhases()) | |
+ object->SetInPhase(phase, false, true); | |
+ | |
if (spawntimeSecs) | |
{ | |
uint32 value = atoi((char*)spawntimeSecs); | |
@@ -165,7 +168,7 @@ public: | |
} | |
// fill the gameobject data and save to the db | |
- object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMask()); | |
// delete the old object and do a clean load from DB with a fresh new GameObject instance. | |
// this is required to avoid weird behavior and memory leaks | |
delete object; | |
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp | |
index d47ee20..83b799f 100644 | |
--- a/src/server/scripts/Commands/cs_modify.cpp | |
+++ b/src/server/scripts/Commands/cs_modify.cpp | |
@@ -1277,14 +1277,9 @@ public: | |
Unit* target = handler->getSelectedUnit(); | |
if (target) | |
- { | |
- if (target->GetTypeId() == TYPEID_PLAYER) | |
- target->ToPlayer()->GetPhaseMgr().SetCustomPhase(phasemask); | |
- else | |
- target->SetPhaseMask(phasemask, true); | |
- } | |
+ target->SetPhaseMask(phasemask, true); | |
else | |
- handler->GetSession()->GetPlayer()->GetPhaseMgr().SetCustomPhase(phasemask); | |
+ handler->GetSession()->GetPlayer()->SetPhaseMask(phasemask, true); | |
return true; | |
} | |
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp | |
index fb465aa..a46db80 100644 | |
--- a/src/server/scripts/Commands/cs_npc.cpp | |
+++ b/src/server/scripts/Commands/cs_npc.cpp | |
@@ -243,7 +243,7 @@ public: | |
uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT); | |
CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid); | |
data.id = id; | |
- data.phaseMask = chr->GetPhaseMgr().GetPhaseMaskForSpawn(); | |
+ data.phaseMask = chr->GetPhaseMask(); | |
data.posX = chr->GetTransOffsetX(); | |
data.posY = chr->GetTransOffsetY(); | |
data.posZ = chr->GetTransOffsetZ(); | |
@@ -251,20 +251,23 @@ public: | |
Creature* creature = trans->CreateNPCPassenger(guid, &data); | |
- creature->SaveToDB(trans->GetGOInfo()->moTransport.mapID, 1 << map->GetSpawnMode(), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ creature->SaveToDB(trans->GetGOInfo()->moTransport.mapID, 1 << map->GetSpawnMode(), chr->GetPhaseMask()); | |
sObjectMgr->AddCreatureToGrid(guid, &data); | |
return true; | |
} | |
Creature* creature = new Creature(); | |
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) | |
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) | |
{ | |
delete creature; | |
return false; | |
} | |
- creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ for (auto phase : chr->GetPhases()) | |
+ creature->SetInPhase(phase, false, true); | |
+ | |
+ creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); | |
uint32 db_guid = creature->GetDBTableGUIDLow(); | |
diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp | |
index 5306e0e..210c47a 100644 | |
--- a/src/server/scripts/Commands/cs_wp.cpp | |
+++ b/src/server/scripts/Commands/cs_wp.cpp | |
@@ -694,7 +694,7 @@ public: | |
} | |
// re-create | |
Creature* wpCreature2 = new Creature(); | |
- if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) | |
+ if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) | |
{ | |
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); | |
delete wpCreature2; | |
@@ -702,7 +702,10 @@ public: | |
return false; | |
} | |
- wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ for (auto phase : chr->GetPhases()) | |
+ wpCreature2->SetInPhase(phase, false, true); | |
+ | |
+ wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); | |
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); | |
/// @todo Should we first use "Create" then use "LoadFromDB"? | |
if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetDBTableGUIDLow(), map)) | |
@@ -918,13 +921,16 @@ public: | |
float o = chr->GetOrientation(); | |
Creature* wpCreature = new Creature(); | |
- if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) | |
+ if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) | |
{ | |
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); | |
delete wpCreature; | |
return false; | |
} | |
+ for (auto phase : chr->GetPhases()) | |
+ wpCreature->SetInPhase(phase, false, true); | |
+ | |
// Set "wpguid" column to the visual waypoint | |
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID); | |
@@ -934,7 +940,7 @@ public: | |
WorldDatabase.Execute(stmt); | |
- wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); | |
// To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); | |
if (!wpCreature->LoadCreatureFromDB(wpCreature->GetDBTableGUIDLow(), map)) | |
{ | |
@@ -982,14 +988,17 @@ public: | |
Map* map = chr->GetMap(); | |
Creature* creature = new Creature(); | |
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) | |
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) | |
{ | |
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); | |
delete creature; | |
return false; | |
} | |
- creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ for (auto phase : chr->GetPhases()) | |
+ creature->SetInPhase(phase, false, true); | |
+ | |
+ creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); | |
if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map)) | |
{ | |
handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); | |
@@ -1031,14 +1040,17 @@ public: | |
Map* map = chr->GetMap(); | |
Creature* creature = new Creature(); | |
- if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) | |
+ if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) | |
{ | |
handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); | |
delete creature; | |
return false; | |
} | |
- creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); | |
+ for (auto phase : chr->GetPhases()) | |
+ creature->SetInPhase(phase, false, true); | |
+ | |
+ creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); | |
if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map)) | |
{ | |
handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); | |
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | |
index 9404694..006ef46 100644 | |
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | |
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | |
@@ -380,7 +380,7 @@ class boss_halion : public CreatureScript | |
if (events.IsInPhase(PHASE_THREE)) | |
{ | |
// Don't consider copied damage. | |
- if (!me->InSamePhase(attacker)) | |
+ if (!me->IsInPhase(attacker)) | |
return; | |
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) | |
@@ -541,7 +541,7 @@ class boss_twilight_halion : public CreatureScript | |
if (events.IsInPhase(PHASE_THREE)) | |
{ | |
// Don't consider copied damage. | |
- if (!me->InSamePhase(attacker)) | |
+ if (!me->IsInPhase(attacker)) | |
return; | |
if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) | |
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp | |
index 8a1fb6a..4fa80c7 100644 | |
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp | |
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp | |
@@ -90,7 +90,6 @@ public: | |
delete go; | |
return; | |
} | |
- | |
instance->AddToMap(go); | |
} | |
diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | |
index a3ef9ce..b43904f 100644 | |
--- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | |
+++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | |
@@ -170,6 +170,9 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) | |
return true; | |
} | |
+ for (auto phase : player->GetPhases()) | |
+ go->SetInPhase(phase, false, true); | |
+ | |
go->SetRespawnTime(0); | |
if (!map->AddToMap(go)) | |
@@ -204,6 +207,9 @@ bool OutdoorPvPSI::HandleDropFlag(Player* player, uint32 spellId) | |
return true; | |
} | |
+ for (auto phase : player->GetPhases()) | |
+ go->SetInPhase(phase, false, true); | |
+ | |
go->SetRespawnTime(0); | |
if (!map->AddToMap(go)) |
I have inserted you script in ArkCore NG.. and transladed phasemask to phaseid (sql script from you) The npc are working correct.. but (on gilneas) the map is shown wrong. on phase_definition I have inserted the swap (map 654 >> 638).. on conditions I have not insertet conditions. and phase_info are empty..
can you pls explain how to fill missing data?
its a great work from you..
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
in line 720: PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseInfo.phaseId);
the sPhaseStore missing a s on end, shold named sPhaseStores