From 6f706879515b4e37a78994aaae6b0e36d00b5f32 Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Sun, 9 Oct 2005 12:07:25 +0000 Subject: Fixed map switch to crash the client. --- src/engine.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/engine.cpp') diff --git a/src/engine.cpp b/src/engine.cpp index b7155ebb..dda6896c 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -190,12 +190,38 @@ Map *Engine::getCurrentMap() void Engine::changeMap(const std::string &mapPath) { + // Clean up floor items + empty_floor_items(); + + // Remove the local player, so it is not deleted + if (player_node != NULL) + { + beings.remove(player_node); + } + + // Delete all beings (except the local player) + std::list::iterator i; + for (i = beings.begin(); i != beings.end(); i++) + { + delete (*i); + } + beings.clear(); + + // Attempt to load the new map Map *newMap = MapReader::readMap(mapPath); if (!newMap) { logger->error("Could not find map file"); } + // Re-add the local player node and transfer him to the newly loaded map + if (player_node != NULL) + { + beings.push_back(player_node); + player_node->setMap(newMap); + } + + // Start playing new music file when necessary std::string oldMusic = ""; if (mCurrentMap) { @@ -211,6 +237,8 @@ void Engine::changeMap(const std::string &mapPath) } mCurrentMap = newMap; + + // Notify the minimap about the map change minimap->setMap(mCurrentMap); } -- cgit v1.2.3-60-g2f50