From fcd789128c2fbbb683b7ed0b41b0d105dc5fcacf Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Wed, 29 Aug 2018 22:56:03 +0200 Subject: [PATCH] Core/Maps: merged a crash fix for spawn group activation * merged a change to recreate instance maps from orphaned saves --- src/server/game/Maps/Map.cpp | 2 +- src/server/game/Maps/MapInstanced.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index d351c1d6f39..63f75038f92 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3313,6 +3313,7 @@ bool Map::SpawnGroupSpawn(uint32 groupId, bool ignoreRespawn, bool force, std::v return false; } + SetSpawnGroupActive(groupId, true); // start processing respawns for the group for (auto& pair : sObjectMgr->GetSpawnDataForGroup(groupId)) { SpawnData const* data = pair.second; @@ -3363,7 +3364,6 @@ bool Map::SpawnGroupSpawn(uint32 groupId, bool ignoreRespawn, bool force, std::v return false; } } - SetSpawnGroupActive(groupId, true); // start processing respawns for the group return true; } diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index a766652feb7..0e8cbe28d63 100644 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -153,7 +153,9 @@ Map* MapInstanced::CreateInstanceForPlayer(uint32 mapId, Player* player, uint32 if (loginInstanceId) // if the player has a saved instance id on login, we either use this instance or relocate him out (return null) { map = FindInstanceMap(loginInstanceId); - return (map && map->GetId() == GetId()) ? map : nullptr; // is this check necessary? or does MapInstanced only find instances of itself? + if (!map && pSave && pSave->GetInstanceId() == loginInstanceId) + map = CreateInstance(loginInstanceId, pSave, pSave->GetDifficulty()); + return map; } InstanceGroupBind* groupBind = nullptr;