// Note: this should be done by creature linkin in core void DoDespawnAdds() { for (GUIDVector::const_iterator itr = m_vAddGuids.begin(); itr != m_vAddGuids.end(); ++itr) { if (Creature* pTemp = m_creature->GetMap()->GetCreature(*itr)) pTemp->ForcedDespawn(); } m_vAddGuids.clear(); for (GUIDVector::const_iterator itr = m_vAssassinGuids.begin(); itr != m_vAssassinGuids.end(); ++itr) { if (Creature* pTemp = m_creature->GetMap()->GetCreature(*itr)) pTemp->ForcedDespawn(); } m_vAssassinGuids.clear(); }
void Cleanup(Creature *infernal, InfernalPoint *point) { for(GUIDVector::iterator itr = m_vInfernalGuids.begin(); itr!= m_vInfernalGuids.end(); ++itr) if (*itr == infernal->GetObjectGuid()) { m_vInfernalGuids.erase(itr); break; } m_positions.push_back(point); }
// players can't cast "fly" spells unless in map 530. Has to be done a while after they get knocked into the air... void CastGravityLapseFly() { GUIDVector vGuids; m_creature->FillGuidsListFromThreatList(vGuids.getSource()); for (GUIDVector::const_iterator i = vGuids.begin();i != vGuids.end(); ++i) { Unit* pUnit = m_creature->GetMap()->GetUnit(*i); // Also needs an exception in spell system. if (pUnit && pUnit->GetTypeId() == TYPEID_PLAYER) pUnit->CastSpell(pUnit, SPELL_GRAVITY_LAPSE_FLY, true, 0, 0, m_creature->GetObjectGuid()); } }
void TeleportPlayersToSelf() { DoCastSpellIfCan(m_creature, SPELL_TELEPORT_CENTER, CAST_TRIGGERED); GUIDVector vGuids; m_creature->FillGuidsListFromThreatList(vGuids.getSource()); for (GUIDVector::const_iterator i = vGuids.begin();i != vGuids.end(); ++i) { Unit* pUnit = m_creature->GetMap()->GetUnit(*i); if (pUnit && pUnit->GetTypeId() == TYPEID_PLAYER) pUnit->CastSpell(pUnit, SPELL_TELEPORT_CENTER, true); } }
void InfernalCleanup() { // Infernal Cleanup for(GUIDVector::const_iterator itr = m_vInfernalGuids.begin(); itr!= m_vInfernalGuids.end(); ++itr) { Creature *pInfernal = m_creature->GetMap()->GetCreature(*itr); if (pInfernal && pInfernal->isAlive()) { pInfernal->SetVisibility(VISIBILITY_OFF); pInfernal->SetDeathState(JUST_DIED); } } m_vInfernalGuids.clear(); }
void RemoveGravityLapse() { GUIDVector vGuids; m_creature->FillGuidsListFromThreatList(vGuids.getSource()); for (GUIDVector::const_iterator i = vGuids.begin();i != vGuids.end(); ++i) { Unit* pUnit = m_creature->GetMap()->GetUnit(*i); if (pUnit && pUnit->GetTypeId() == TYPEID_PLAYER) { pUnit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_FLY); pUnit->RemoveAurasDueToSpell(SPELL_GRAVITY_LAPSE_DOT); } } }