aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.cpp7
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvP.h3
-rw-r--r--src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp5
3 files changed, 11 insertions, 4 deletions
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
index bf3ff800cf9..319d6aeb938 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp
@@ -405,16 +405,17 @@ void OutdoorPvP::AddCapturePoint(OPvPCapturePoint* cp)
if (i != m_capturePoints.end())
{
TC_LOG_ERROR("outdoorpvp", "OutdoorPvP::AddCapturePoint: CapturePoint {} already exists!", cp->m_capturePointSpawnId);
- delete i->second;
+ if (i->second.get() == cp)
+ return;
}
- m_capturePoints[cp->m_capturePointSpawnId] = cp;
+ m_capturePoints[cp->m_capturePointSpawnId].reset(cp);
}
OPvPCapturePoint* OutdoorPvP::GetCapturePoint(ObjectGuid::LowType guid) const
{
OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(guid);
if (itr != m_capturePoints.end())
- return itr->second;
+ return itr->second.get();
return nullptr;
}
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.h b/src/server/game/OutdoorPvP/OutdoorPvP.h
index 2bbab71e058..d6cc931459a 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvP.h
+++ b/src/server/game/OutdoorPvP/OutdoorPvP.h
@@ -23,6 +23,7 @@
#include "SharedDefines.h"
#include "ZoneScript.h"
#include <map>
+#include <memory>
enum OutdoorPvPTypes
{
@@ -166,7 +167,7 @@ class TC_GAME_API OutdoorPvP : public ZoneScript
// dtor
virtual ~OutdoorPvP();
- typedef std::map<ObjectGuid::LowType/*spawnId*/, OPvPCapturePoint*> OPvPCapturePointMap;
+ typedef std::map<ObjectGuid::LowType/*spawnId*/, std::unique_ptr<OPvPCapturePoint>> OPvPCapturePointMap;
// called when a player triggers an areatrigger
virtual bool HandleAreaTrigger(Player* /*player*/, uint32 /*trigger*/, bool /*entered*/) { return false; }
diff --git a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
index 7337ab19ad8..d98f805342e 100644
--- a/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
+++ b/src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp
@@ -16,6 +16,7 @@
*/
#include "OutdoorPvPMgr.h"
+#include "Containers.h"
#include "DatabaseEnv.h"
#include "DB2Stores.h"
#include "DisableMgr.h"
@@ -119,6 +120,10 @@ void OutdoorPvPMgr::CreateOutdoorPvPForMap(Map* map)
void OutdoorPvPMgr::DestroyOutdoorPvPForMap(Map* map)
{
+ Trinity::Containers::EraseIf(m_OutdoorPvPMap, [map](OutdoorPvPMap::value_type const& pair)
+ {
+ return pair.first.first == map;
+ });
m_OutdoorPvPByMap.erase(map);
}