diff options
author | Shauren <shauren.trinity@gmail.com> | 2015-05-14 00:04:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2015-05-14 00:04:49 +0200 |
commit | ee1c1b97be4492ecabe8b15ea6323fc37e4eaa8c (patch) | |
tree | 8c1b930dd58096c5da8187d5abc3824806293121 /src/server/game/Events/GameEventMgr.cpp | |
parent | 5c5cb3e555da279b45ccff19b5ab4fc2656c75e2 (diff) |
Core/Maps: Fixed invalid iterator usage
Closes #14687
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index ba247dbd19e..0d6b971ec15 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1266,8 +1266,12 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr](Map* map) { auto creatureBounds = map->GetCreatureBySpawnIdStore().equal_range(*itr); - for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr) - itr->second->AddObjectToRemoveList(); + for (auto itr2 = creatureBounds.first; itr2 != creatureBounds.second;) + { + Creature* creature = itr2->second; + ++itr2; + creature->AddObjectToRemoveList(); + } }); } } @@ -1292,11 +1296,16 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) sMapMgr->DoForAllMapsWithMapId(data->mapid, [&itr](Map* map) { auto gameobjectBounds = map->GetGameObjectBySpawnIdStore().equal_range(*itr); - for (auto itr = gameobjectBounds.first; itr != gameobjectBounds.second; ++itr) - itr->second->AddObjectToRemoveList(); + for (auto itr2 = gameobjectBounds.first; itr2 != gameobjectBounds.second;) + { + GameObject* go = itr2->second; + ++itr2; + go->AddObjectToRemoveList(); + } }); } } + if (internal_event_id < 0 || internal_event_id >= int32(mGameEventPoolIds.size())) { TC_LOG_ERROR("gameevent", "GameEventMgr::GameEventUnspawn attempt access to out of range mGameEventPoolIds element %u (size: %zu)", internal_event_id, mGameEventPoolIds.size()); |