void ObjectGridUnloader::Visit(GridRefManager<T> &m) { while (!m.isEmpty()) { T *obj = m.getFirst()->getSource(); // if option set then object already saved at this moment if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY)) obj->SaveRespawnTime(); ///- object will get delinked from the manager when deleted delete obj; } }
void ObjectGridUnloader::Visit(GridRefManager<T> &m) { while (!m.isEmpty()) { T* obj = m.getFirst()->GetSource(); // if option set then object already saved at this moment if (!sWorld.getConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY)) obj->SaveRespawnTime(); //Some creatures may summon other temp summons in CleanupsBeforeDelete() //So we need this even after cleaner (maybe we can remove cleaner) obj->CleanupsBeforeDelete(); ///- object will get delinked from the manager when deleted delete obj; } }
void ObjectGridUnloader::Visit(GridRefManager<T> &m) { while (!m.isEmpty()) { T *obj = m.getFirst()->GetSource(); // if option set then object already saved at this moment if (!sWorld->getBoolConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY)) obj->SaveRespawnTime(); //Some creatures may summon other temp summons in CleanupsBeforeDelete() //So we need this even after cleaner (maybe we can remove cleaner) //Example: Flame Leviathan Turret 33139 is summoned when a creature is deleted /// @todo Check if that script has the correct logic. Do we really need to summons something before deleting? obj->CleanupsBeforeDelete(); ///- object will get delinked from the manager when deleted delete obj; } }
void ObjectGridUnloader::Visit(GridRefManager<T>& m) { // remove all cross-reference before deleting for (typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter) iter->getSource()->CleanupsBeforeDelete(); while (!m.isEmpty()) { T* obj = m.getFirst()->getSource(); // if option set then object already saved at this moment if (!sWorld.getConfig(CONFIG_BOOL_SAVE_RESPAWN_TIME_IMMEDIATELY)) obj->SaveRespawnTime(); ///- object must be out of world before delete obj->RemoveFromWorld(); ///- object will get delinked from the manager when deleted delete obj; } }