From e528611141ca0923503933a0fe4d0f0720efaf91 Mon Sep 17 00:00:00 2001 From: megamage Date: Sun, 29 Mar 2009 11:58:19 -0600 Subject: *Fix a crash. --HG-- branch : trunk --- src/game/Map.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src/game/Map.cpp') diff --git a/src/game/Map.cpp b/src/game/Map.cpp index c00b774c68f..3511e7b5bca 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -1074,27 +1074,31 @@ bool Map::UnloadGrid(const uint32 &x, const uint32 &y, bool unloadAll) return false; DEBUG_LOG("Unloading grid[%u,%u] for map %u", x,y, i_id); + ObjectGridUnloader unloader(*grid); if(!unloadAll) { // Finish creature moves, remove and delete all creatures with delayed remove before moving to respawn grids // Must know real mob position before move - DoDelayedMovesAndRemoves(); + MoveAllCreaturesInMoveList(); // move creatures to respawn grids if this is diff.grid or to remove list unloader.MoveToRespawnN(); // Finish creature moves, remove and delete all creatures with delayed remove before unload - DoDelayedMovesAndRemoves(); + MoveAllCreaturesInMoveList(); } - else - RemoveAllObjectsInRemoveList(); - //assert(grid.NoWorldObjectInGrid()); + ObjectGridCleaner cleaner(*grid); + cleaner.CleanN(); + + RemoveAllObjectsInRemoveList(); + unloader.UnloadN(); - //assert(grid.NoWorldObjectInGrid()); - //assert(grid.NoGridObjectInGrid()); + + assert(i_objectsToRemove.empty()); + delete grid; setNGrid(NULL, x, y); } -- cgit v1.2.3