diff options
author | megamage <none@none> | 2009-03-29 11:58:19 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-29 11:58:19 -0600 |
commit | e528611141ca0923503933a0fe4d0f0720efaf91 (patch) | |
tree | c6a3232a199cc203e09fabea0ffdc7bb5a715060 /src/game/ObjectGridLoader.cpp | |
parent | 3733af4d6ae2615a09c421b5a6a47c4085575f91 (diff) |
*Fix a crash.
--HG--
branch : trunk
Diffstat (limited to 'src/game/ObjectGridLoader.cpp')
-rw-r--r-- | src/game/ObjectGridLoader.cpp | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/src/game/ObjectGridLoader.cpp b/src/game/ObjectGridLoader.cpp index 7c3c88756af..d6b2a765690 100644 --- a/src/game/ObjectGridLoader.cpp +++ b/src/game/ObjectGridLoader.cpp @@ -293,33 +293,11 @@ ObjectGridUnloader::Visit(GridRefManager<T> &m) // if option set then object already saved at this moment if(!sWorld.getConfig(CONFIG_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; } } -template<> -void -ObjectGridUnloader::Visit(CreatureMapType &m) -{ - // remove all cross-reference before deleting - for(CreatureMapType::iterator iter=m.begin(); iter != m.end(); ++iter) - iter->getSource()->CleanupsBeforeDelete(); - - while(!m.isEmpty()) - { - Creature *obj = m.getFirst()->getSource(); - // if option set then object already saved at this moment - if(!sWorld.getConfig(CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY)) - obj->SaveRespawnTime(); - ///- object will get delinked from the manager when deleted - obj->CleanupsBeforeDelete(); - delete obj; - } -} - void ObjectGridStoper::Stop(GridType &grid) { @@ -339,6 +317,29 @@ ObjectGridStoper::Visit(CreatureMapType &m) } } -template void ObjectGridUnloader::Visit(GameObjectMapType &); -template void ObjectGridUnloader::Visit(DynamicObjectMapType &); +void +ObjectGridCleaner::Stop(GridType &grid) +{ + TypeContainerVisitor<ObjectGridCleaner, GridTypeMapContainer > stoper(*this); + grid.Visit(stoper); +} + +void +ObjectGridCleaner::Visit(CreatureMapType &m) +{ + for(CreatureMapType::iterator iter=m.begin(); iter != m.end(); ++iter) + iter->getSource()->CleanupsBeforeDelete(); +} + +template<class T> +void +ObjectGridCleaner::Visit(GridRefManager<T> &m) +{ + for(GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter) + iter->getSource()->RemoveFromWorld(); +} +/*template void ObjectGridUnloader::Visit(GameObjectMapType &); +template void ObjectGridUnloader::Visit(DynamicObjectMapType &); +template void ObjectGridCleaner::Visit(GameObjectMapType &); +template void ObjectGridCleaner::Visit(DynamicObjectMapType &);*/ |