aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Battlegrounds/BattlegroundMgr.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-03-13 18:51:29 +0100
committerShauren <shauren.trinity@gmail.com>2024-03-13 18:51:29 +0100
commit4779fa5048642b57a0f69de7ab56b9d563c1cbc4 (patch)
tree9bd8f8daccb5d3e7f8e98c3556db8f3c9b204460 /src/server/game/Battlegrounds/BattlegroundMgr.cpp
parent18200e1b88596dbead10d0b8ecbd10557db43323 (diff)
Core/Misc: Use our new unique_trackable_ptr for various classes exposed to scripts (not actually used anywhere currently)
Diffstat (limited to 'src/server/game/Battlegrounds/BattlegroundMgr.cpp')
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp37
1 files changed, 11 insertions, 26 deletions
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index b07012c59db..37311c718f2 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -84,22 +84,7 @@ BattlegroundMgr::~BattlegroundMgr()
void BattlegroundMgr::DeleteAllBattlegrounds()
{
- for (BattlegroundDataContainer::iterator itr1 = bgDataStore.begin(); itr1 != bgDataStore.end(); ++itr1)
- {
- BattlegroundData& data = itr1->second;
-
- while (!data.m_Battlegrounds.empty())
- delete data.m_Battlegrounds.begin()->second;
-
- data.m_Battlegrounds.clear();
- }
-
bgDataStore.clear();
-
- for (auto itr = m_BGFreeSlotQueue.begin(); itr != m_BGFreeSlotQueue.end(); ++itr)
- while (!itr->second.empty())
- delete itr->second.front();
-
m_BGFreeSlotQueue.clear();
}
@@ -122,18 +107,19 @@ void BattlegroundMgr::Update(uint32 diff)
for (BattlegroundContainer::iterator itr = itrDelete; itr != bgs.end();)
{
itrDelete = itr++;
- Battleground* bg = itrDelete->second;
+ Battleground* bg = itrDelete->second.get();
bg->Update(m_UpdateTimer);
if (bg->ToBeDeleted())
{
- itrDelete->second = nullptr;
- bgs.erase(itrDelete);
BattlegroundClientIdsContainer& clients = itr1->second.m_ClientBattlegroundIds[bg->GetBracketId()];
if (!clients.empty())
clients.erase(bg->GetClientInstanceID());
- delete bg;
+ // move out unique_ptr to delete after erasing
+ Trinity::unique_trackable_ptr<Battleground> bgPtr = std::move(itrDelete->second);
+
+ bgs.erase(itrDelete);
}
}
}
@@ -270,7 +256,7 @@ Battleground* BattlegroundMgr::GetBattleground(uint32 instanceId, BattlegroundTy
BattlegroundContainer const& bgs = it->second.m_Battlegrounds;
BattlegroundContainer::const_iterator itr = bgs.find(instanceId);
if (itr != bgs.end())
- return itr->second;
+ return itr->second.get();
}
return nullptr;
@@ -745,10 +731,9 @@ void BattlegroundMgr::RemoveFromBGFreeSlotQueue(uint32 mapId, uint32 instanceId)
void BattlegroundMgr::AddBattleground(Battleground* bg)
{
if (bg)
- bgDataStore[bg->GetTypeID()].m_Battlegrounds[bg->GetInstanceID()] = bg;
-}
-
-void BattlegroundMgr::RemoveBattleground(BattlegroundTypeId bgTypeId, uint32 instanceId)
-{
- bgDataStore[bgTypeId].m_Battlegrounds.erase(instanceId);
+ {
+ Trinity::unique_trackable_ptr<Battleground>& ptr = bgDataStore[bg->GetTypeID()].m_Battlegrounds[bg->GetInstanceID()];
+ ptr.reset(bg);
+ bg->SetWeakPtr(ptr);
+ }
}