diff options
Diffstat (limited to 'src/server/game/Guilds/GuildMgr.cpp')
-rw-r--r-- | src/server/game/Guilds/GuildMgr.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index f7d8dd86f6e..b7d32576147 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -17,8 +17,8 @@ #include "GuildMgr.h" #include "AchievementMgr.h" -#include "DatabaseEnv.h" #include "DB2Stores.h" +#include "DatabaseEnv.h" #include "Guild.h" #include "Log.h" #include "ObjectMgr.h" @@ -29,15 +29,13 @@ GuildMgr::GuildMgr() : NextGuildId(UI64LIT(1)) { } -GuildMgr::~GuildMgr() -{ - for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr) - delete itr->second; -} +GuildMgr::~GuildMgr() = default; void GuildMgr::AddGuild(Guild* guild) { - GuildStore[guild->GetId()] = guild; + Trinity::unique_trackable_ptr<Guild>& ptr = GuildStore[guild->GetId()]; + ptr.reset(guild); + guild->SetWeakPtr(ptr); } void GuildMgr::RemoveGuild(ObjectGuid::LowType guildId) @@ -66,7 +64,7 @@ Guild* GuildMgr::GetGuildById(ObjectGuid::LowType guildId) const { GuildContainer::const_iterator itr = GuildStore.find(guildId); if (itr != GuildStore.end()) - return itr->second; + return itr->second.get(); return nullptr; } @@ -84,9 +82,9 @@ Guild* GuildMgr::GetGuildByGuid(ObjectGuid guid) const Guild* GuildMgr::GetGuildByName(std::string_view guildName) const { - for (auto [id, guild] : GuildStore) + for (auto const& [id, guild] : GuildStore) if (StringEqualI(guild->GetName(), guildName)) - return guild; + return guild.get(); return nullptr; } @@ -109,7 +107,7 @@ Guild* GuildMgr::GetGuildByLeader(ObjectGuid guid) const { for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr) if (itr->second->GetLeaderGUID() == guid) - return itr->second; + return itr->second.get(); return nullptr; } @@ -483,10 +481,10 @@ void GuildMgr::LoadGuilds() for (GuildContainer::iterator itr = GuildStore.begin(); itr != GuildStore.end();) { - Guild* guild = itr->second; + Guild* guild = itr->second.get(); ++itr; - if (guild && !guild->Validate()) - delete guild; + if (guild) + guild->Validate(); } TC_LOG_INFO("server.loading", ">> Validated data of loaded guilds in {} ms", GetMSTimeDiffToNow(oldMSTime)); @@ -562,6 +560,6 @@ void GuildMgr::ResetTimes(bool week) CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_GUILD_MEMBER_WITHDRAW)); for (GuildContainer::const_iterator itr = GuildStore.begin(); itr != GuildStore.end(); ++itr) - if (Guild* guild = itr->second) + if (Guild* guild = itr->second.get()) guild->ResetTimes(week); } |