aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 492197db64e..5e12022312d 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -16378,19 +16378,25 @@ void Unit::SetPhaseMask(uint32 newPhaseMask, bool update)
}
}
- WorldObject::SetPhaseMask(newPhaseMask, update);
+ // Phase player, dont update
+ WorldObject::SetPhaseMask(newPhaseMask, false);
- if (!IsInWorld())
- return;
+ // Phase pets and summons
+ if (IsInWorld())
+ {
+ for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr)
+ if ((*itr)->GetTypeId() == TYPEID_UNIT)
+ (*itr)->SetPhaseMask(newPhaseMask, true);
- 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);
+ }
- 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);
+ // Update visibility after phasing pets and summons so they wont despawn
+ if (update)
+ UpdateObjectVisibility();
}
void Unit::UpdateObjectVisibility(bool forced)