aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Valle Herrera <subv2112@gmail.com>2014-06-24 08:13:16 -0500
committerSebastian Valle Herrera <subv2112@gmail.com>2014-06-24 08:13:16 -0500
commit7f0d283599a81c9272a5b29ed5d745c22e0b226e (patch)
tree5f42c82f6526129c4b51f5f4e5ecbb985cb8748e
parent34b4be59027ce713e83b874749ea7d332b69377b (diff)
parentc22d51f4683048a43fbffbe079bae1907d5b9019 (diff)
Merge pull request #12332 from Rochet2/unitphase
Core/Phasing: Fix pet dismiss on phase with update
-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)