aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp7
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h1
-rw-r--r--src/server/game/Entities/Object/Object.cpp6
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp18
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp57
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Spells/SpellEffects.cpp8
-rw-r--r--src/server/scripts/Commands/cs_gobject.cpp2
8 files changed, 17 insertions, 83 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 8cf12405969..9b931f0ba6a 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2068,13 +2068,6 @@ void GameObject::SetInPhase(uint32 id, bool update, bool apply)
EnableCollision(true);
}
-void GameObject::SetPhaseMask(uint32 newPhaseMask, bool update)
-{
- WorldObject::SetPhaseMask(newPhaseMask, update);
- if (m_model && m_model->isEnabled())
- EnableCollision(true);
-}
-
void GameObject::EnableCollision(bool enable)
{
if (!m_model)
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 2b24f29fe69..32ef5a44d6c 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -726,7 +726,6 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map
void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); }
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);
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 77c02a7ed62..ee5e6a0faab 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -2329,13 +2329,9 @@ 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)
@@ -2357,7 +2353,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
break;
}
- if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId))
+ if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, 0, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId))
{
delete summon;
return NULL;
diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp
index 05b7c25ecde..1e367149113 100644
--- a/src/server/game/Entities/Transport/Transport.cpp
+++ b/src/server/game/Entities/Transport/Transport.cpp
@@ -283,6 +283,15 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data)
return NULL;
}
+ if (data->phaseid)
+ creature->SetInPhase(data->phaseid, false, true);
+ else if (data->phaseGroup)
+ for (auto phase : GetPhasesForGroup(data->phaseGroup))
+ creature->SetInPhase(phase, false, true);
+ else
+ for (auto phase : GetPhases()) // Set the creature to the transport's phases
+ creature->SetInPhase(phase, false, true);
+
if (!map->AddToMap(creature))
{
delete creature;
@@ -387,15 +396,10 @@ 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())
+ else
phases = GetPhases(); // If there was no summoner, try to use the transport phases
TempSummon* summon = NULL;
@@ -422,7 +426,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu
pos.GetPosition(x, y, z, o);
CalculatePassengerPosition(x, y, z, &o);
- if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, x, y, z, o, nullptr, vehId))
+ if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, 0, entry, x, y, z, o, nullptr, vehId))
{
delete summon;
return NULL;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index c62765cbd07..7c042dad0c1 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -14576,63 +14576,6 @@ void Unit::SetInPhase(uint32 id, bool update, bool apply)
summon->SetInPhase(id, true, apply);
}
-void Unit::SetPhaseMask(uint32 newPhaseMask, bool update)
-{
- if (newPhaseMask == GetPhaseMask())
- return;
-
- if (IsInWorld())
- {
- RemoveNotOwnSingleTargetAuras(newPhaseMask); // we can lost access to caster or target
-
- // modify hostile references for new phasemask, some special cases deal with hostile references themselves
- 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->InSamePhase(newPhaseMask));
-
- 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->InSamePhase(newPhaseMask));
- }
- }
- }
-
- WorldObject::SetPhaseMask(newPhaseMask, update);
-
- if (!IsInWorld())
- return;
-
- for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
- if ((*itr)->GetTypeId() == TYPEID_UNIT)
- (*itr)->SetPhaseMask(newPhaseMask, true);
-
- for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i)
- if (m_SummonSlot[i])
- if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i]))
- summon->SetPhaseMask(newPhaseMask, true);
-}
-
void Unit::UpdateObjectVisibility(bool forced)
{
if (!forced)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 9c03809b428..970c5ee30fc 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1928,7 +1928,6 @@ class Unit : public WorldObject
void SetVisible(bool x);
// 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);
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index ab05cd235eb..d3257f29906 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -3868,7 +3868,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex)
Map* map = m_caster->GetMap();
if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), gameobject_id,
- map, m_caster->GetPhaseMask(),
+ map, 0,
m_caster->GetPositionX()+(unitTarget->GetPositionX()-m_caster->GetPositionX())/2,
m_caster->GetPositionY()+(unitTarget->GetPositionY()-m_caster->GetPositionY())/2,
m_caster->GetPositionZ(),
@@ -4231,7 +4231,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex)
Map* map = m_caster->GetMap();
if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), go_id, map,
- m_caster->GetPhaseMask(), x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY))
+ 0, x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY))
{
delete go;
return;
@@ -4863,7 +4863,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
GameObject* pGameObj = new GameObject;
if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), name_id, cMap,
- m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY))
+ 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY))
{
delete pGameObj;
return;
@@ -4932,7 +4932,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex)
{
GameObject* linkedGO = new GameObject;
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))
+ 0, 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);
diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp
index b2b4235c1a3..de23c33e591 100644
--- a/src/server/scripts/Commands/cs_gobject.cpp
+++ b/src/server/scripts/Commands/cs_gobject.cpp
@@ -152,7 +152,7 @@ public:
GameObject* object = new GameObject;
uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT);
- 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))
+ if (!object->Create(guidLow, objectInfo->entry, map, 0, x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY))
{
delete object;
return false;