// 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);
            }
        }
    }