void Creature::Update( uint32 p_time ) { Unit::Update( p_time ); if(IsTotem() && isDead()) { RemoveFromWorld(false, true); delete this; return; } if(m_corpseEvent) { sEventMgr.RemoveEvents(this); if(this->proto==NULL) sEventMgr.AddEvent(this, &Creature::OnRemoveCorpse, EVENT_CREATURE_REMOVE_CORPSE, 1000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); else if (this->creature_info->Rank == ELITE_WORLDBOSS) sEventMgr.AddEvent(this, &Creature::OnRemoveCorpse, EVENT_CREATURE_REMOVE_CORPSE, TIME_CREATURE_REMOVE_BOSSCORPSE, 1,EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); else if ( this->creature_info->Rank == ELITE_RAREELITE || this->creature_info->Rank == ELITE_RARE) sEventMgr.AddEvent(this, &Creature::OnRemoveCorpse, EVENT_CREATURE_REMOVE_CORPSE, TIME_CREATURE_REMOVE_RARECORPSE, 1,EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); else sEventMgr.AddEvent(this, &Creature::OnRemoveCorpse, EVENT_CREATURE_REMOVE_CORPSE, TIME_CREATURE_REMOVE_CORPSE, 1,EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT); m_corpseEvent=false; } }
Creature::~Creature() { sEventMgr.RemoveEvents(this); if(IsTotem()) totemOwner->m_TotemSlots[totemSlot] = 0; if(m_custom_waypoint_map != 0) { for(WayPointMap::iterator itr = m_custom_waypoint_map->begin(); itr != m_custom_waypoint_map->end(); ++itr) delete (*itr); delete m_custom_waypoint_map; } if(m_respawnCell!=NULL) m_respawnCell->_respawnObjects.erase(this); }