diff options
author | Shauren <shauren.trinity@gmail.com> | 2013-04-27 11:45:37 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2013-04-27 11:45:37 +0200 |
commit | 1ce50f84425147a98b2bd9897fdc79ff58cf4560 (patch) | |
tree | 7a6a4f130f213adfec67ca065966de52f6c81d20 /src | |
parent | e89ea9338a31bdeba31296202b15d6506774929a (diff) |
Core/OutdoorPvP: Fixed crash in capture point update when players leave the point
Closes #9722
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/OutdoorPvP/OutdoorPvP.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 93bf7edc7d5..684bc43ceaa 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -280,10 +280,17 @@ bool OPvPCapturePoint::Update(uint32 diff) float radius = (float)m_capturePoint->GetGOInfo()->capturePoint.radius; for (uint32 team = 0; team < 2; ++team) - for (PlayerSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) + { + for (PlayerSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end();) + { + uint64 playerGuid = *itr; + ++itr; + + if (Player* player = ObjectAccessor::FindPlayer(playerGuid)) if (!m_capturePoint->IsWithinDistInMap(player, radius) || !player->IsOutdoorPvPActive()) HandlePlayerLeave(player); + } + } std::list<Player*> players; Trinity::AnyPlayerInObjectRangeCheck checker(m_capturePoint, radius); |