diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-06-08 14:52:52 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2012-06-08 14:52:52 +0200 |
commit | 32aa983fe23ffc49ae0cf5322bae9f31beab5d47 (patch) | |
tree | 7891c5622f0d3aa14c26655e3dfe21cf5a5b7bb7 /src | |
parent | 1c0fc0a1eea8dc5ae1581b67b94473e669375902 (diff) |
Core/Maps: Fixed possible crash when resetting instances
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Instances/InstanceSaveMgr.cpp | 5 | ||||
-rwxr-xr-x | src/server/game/Maps/Map.cpp | 14 | ||||
-rwxr-xr-x | src/server/game/Maps/Map.h | 2 |
3 files changed, 16 insertions, 5 deletions
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp index 2e0d1e47c92..59bb86cb68e 100755 --- a/src/server/game/Instances/InstanceSaveMgr.cpp +++ b/src/server/game/Instances/InstanceSaveMgr.cpp @@ -543,7 +543,10 @@ void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId) if (iMap && iMap->IsDungeon()) ((InstanceMap*)iMap)->Reset(INSTANCE_RESET_RESPAWN_DELAY); - iMap->DeleteRespawnTimes(); + if (iMap) + iMap->DeleteRespawnTimes(); + else + Map::DeleteRespawnTimesInDB(mapid, instanceId); // Free up the instance id and allow it to be reused sMapMgr->FreeInstanceId(instanceId); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 6f19fdcbc0a..82659e32016 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2880,14 +2880,19 @@ void Map::DeleteRespawnTimes() _creatureRespawnTimes.clear(); _goRespawnTimes.clear(); + DeleteRespawnTimesInDB(GetId(), GetInstanceId()); +} + +void Map::DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId) +{ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CREATURE_RESPAWN_BY_INSTANCE); - stmt->setUInt16(0, GetId()); - stmt->setUInt32(1, GetInstanceId()); + stmt->setUInt16(0, mapId); + stmt->setUInt32(1, instanceId); CharacterDatabase.Execute(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GO_RESPAWN_BY_INSTANCE); - stmt->setUInt16(0, GetId()); - stmt->setUInt32(1, GetInstanceId()); + stmt->setUInt16(0, mapId); + stmt->setUInt32(1, instanceId); CharacterDatabase.Execute(stmt); } @@ -2906,3 +2911,4 @@ time_t Map::GetLinkedRespawnTime(uint64 guid) const return time_t(0); } + diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 94a64126da1..214f50e6d3c 100755 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -473,6 +473,8 @@ class Map : public GridRefManager<NGridType> void LoadRespawnTimes(); void DeleteRespawnTimes(); + static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId); + private: void LoadMapAndVMap(int gx, int gy); void LoadVMap(int gx, int gy); |