diff options
-rw-r--r-- | src/server/game/Battlefield/Battlefield.cpp | 37 | ||||
-rw-r--r-- | src/server/game/Battlefield/Battlefield.h | 4 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.h | 2 |
4 files changed, 31 insertions, 14 deletions
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index e72be15f68d..5e1e530dbdb 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -888,11 +888,18 @@ bool BfCapturePoint::HandlePlayerEnter(Player *player) return m_activePlayers[player->GetTeamId()].insert(player->GetGUID()).second; } -void BfCapturePoint::HandlePlayerLeave(Player *player) +GuidSet::iterator BfCapturePoint::HandlePlayerLeave(Player* plr) { if (m_capturePoint) - player->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldState1, 0); - m_activePlayers[player->GetTeamId()].erase(player->GetGUID()); + plr->SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldState1, 0); + + GuidSet::iterator current = m_activePlayers[plr->GetTeamId()].find(plr->GetGUID()); + + if (current == m_activePlayers[plr->GetTeamId()].end()) + return current; // return end() + + m_activePlayers[plr->GetTeamId()].erase(current++); + return current; } void BfCapturePoint::SendChangePhase() @@ -964,17 +971,27 @@ bool BfCapturePoint::Update(uint32 diff) float radius = m_capturePoint->GetGOInfo()->capturePoint.radius; for (uint8 team = 0; team < 2; ++team) - for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end(); ++itr) - if (Player* player = sObjectAccessor->FindPlayer(*itr)) - if (!m_capturePoint->IsWithinDistInMap(player, radius) || !player->IsOutdoorPvPActive()) - HandlePlayerLeave(player); + { + for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end();) + { + if (Player* plr = sObjectAccessor->FindPlayer(*itr)) + { + if (!m_capturePoint->IsWithinDistInMap(plr, radius) || !plr->IsOutdoorPvPActive()) + itr = HandlePlayerLeave(plr); + else + ++itr; + } + else + ++itr; + } + } - std::list < Player * >players; + std::list<Player*> players; Trinity::AnyPlayerInObjectRangeCheck checker(m_capturePoint, radius); - Trinity::PlayerListSearcher < Trinity::AnyPlayerInObjectRangeCheck > searcher(m_capturePoint, players, checker); + Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(m_capturePoint, players, checker); m_capturePoint->VisitNearbyWorldObject(radius, searcher); - for (std::list < Player * >::iterator itr = players.begin(); itr != players.end(); ++itr) + for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr) if ((*itr)->IsOutdoorPvPActive()) if (m_activePlayers[(*itr)->GetTeamId()].insert((*itr)->GetGUID()).second) HandlePlayerEnter(*itr); diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index e14a09e29ea..928e77c22b9 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -88,8 +88,8 @@ public: void SendObjectiveComplete(uint32 id, uint64 guid); // used when player is activated/inactivated in the area - virtual bool HandlePlayerEnter(Player * player); - virtual void HandlePlayerLeave(Player * player); + virtual bool HandlePlayerEnter(Player* player); + virtual GuidSet::iterator HandlePlayerLeave(Player* player); //virtual void HandlePlayerActivityChanged(Player * player); // checks if player is in range of a capture credit marker diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 6fcd48efd19..cb9a1ac795d 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -892,7 +892,7 @@ uint32 BattlefieldWG::GetData(uint32 data) return m_GraveYardList[GetSpiritGraveyardId(data)]->GetControlTeamId(); } - return 0; + return Battlefield::GetData(data); } // Method sending worldsate to player diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index 4ec448fe3e5..a7d1d185c8d 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -28,7 +28,7 @@ const uint32 VehNumWorldState[2] = { 3680, 3490 }; const uint32 MaxVehNumWorldState[2] = { 3681, 3491 }; const uint32 ClockWorldState[2] = { 3781, 4354 }; -const uint32 WintergraspFaction[3] = { 1732, 1735, 35 }; +const uint32 WintergraspFaction[3] = { 1, 116, 35 }; const float WintergraspStalkerPos[4] = { 0, 0, 0, 0 }; |