diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvP.cpp | 7 | ||||
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvP.h | 3 | ||||
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvPMgr.cpp | 5 |
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); } |