From 03ea10a6b8df481fd1f0e34ca72004235e839e96 Mon Sep 17 00:00:00 2001 From: xfury Date: Wed, 20 Jan 2016 21:07:19 +0000 Subject: [PATCH] [Core] Fix crash during gm .saveall --- src/game/Object/ObjectAccessor.cpp | 13 +++++++++---- src/game/WorldHandlers/World.h | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/game/Object/ObjectAccessor.cpp b/src/game/Object/ObjectAccessor.cpp index 5553252f..92dc1837 100644 --- a/src/game/Object/ObjectAccessor.cpp +++ b/src/game/Object/ObjectAccessor.cpp @@ -105,10 +105,15 @@ Player* ObjectAccessor::FindPlayerByName(const char* name) void ObjectAccessor::SaveAllPlayers() { - HashMapHolder::ReadGuard g(HashMapHolder::GetLock()); - HashMapHolder::MapType& m = sObjectAccessor.GetPlayers(); - for (HashMapHolder::MapType::iterator itr = m.begin(); itr != m.end(); ++itr) - { itr->second->SaveToDB(); } + SessionMap const& smap = sWorld.GetAllSessions(); + SessionMap::const_iterator iter; + for (iter = smap.begin(); iter != smap.end(); ++iter){ + if (Player* player = iter->second->GetPlayer()){ + if (player->IsInWorld()){ + player->SaveToDB(); + } + } + } } void ObjectAccessor::KickPlayer(ObjectGuid guid) diff --git a/src/game/WorldHandlers/World.h b/src/game/WorldHandlers/World.h index fb949a9f..a36ffc94 100644 --- a/src/game/WorldHandlers/World.h +++ b/src/game/WorldHandlers/World.h @@ -412,6 +412,8 @@ enum RealmZone REALM_ZONE_CN9 = 29 // basic-Latin at create, any at login }; +typedef std::unordered_map SessionMap; + /// Storage class for commands issued for delayed execution struct CliCommandHolder {