diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-09-05 00:41:17 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-26 15:30:13 +0100 |
commit | 4957a17cb14ed189235ab0767c082fa3f8af3f52 (patch) | |
tree | 95fa02f5f976c9cf7dd217b842bd0731e1cbc54b /src | |
parent | 4d061e0b49d194d3f88f8acdd3875ad4dab6bd43 (diff) |
Core/Battlefield: container optimization
(cherry picked from commit 932d31598d697bd6cdb4f83ec70018e789984948)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlefield/Battlefield.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Battlefield/Battlefield.h | 8 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldTB.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 164 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.h | 45 |
5 files changed, 110 insertions, 153 deletions
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 7bd6b24a926..152b73e4cee 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -199,7 +199,7 @@ bool Battlefield::Update(uint32 diff) void Battlefield::InvitePlayersInZoneToQueue() { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) InvitePlayerToQueue(player); } @@ -217,7 +217,7 @@ void Battlefield::InvitePlayersInQueueToWar() { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) { - for (GuidSet::const_iterator itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr) + for (auto itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { @@ -236,7 +236,8 @@ void Battlefield::InvitePlayersInQueueToWar() void Battlefield::InvitePlayersInZoneToWar() { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + { + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { @@ -248,6 +249,7 @@ void Battlefield::InvitePlayersInZoneToWar() m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(nullptr) + 10; } } + } } void Battlefield::InvitePlayerToWar(Player* player) @@ -293,7 +295,7 @@ void Battlefield::InitStalker(uint32 entry, Position const& pos) void Battlefield::KickAfkPlayers() { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) if (player->isAFK()) KickPlayerFromBattlefield(*itr); @@ -394,13 +396,13 @@ void Battlefield::TeamCastSpell(TeamId team, int32 spellId) { if (spellId > 0) { - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->CastSpell(player, uint32(spellId), true); } else { - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->RemoveAuraFromStack(uint32(-spellId)); } @@ -409,7 +411,7 @@ void Battlefield::TeamCastSpell(TeamId team, int32 spellId) void Battlefield::BroadcastPacketToZone(WorldPacket const* data) const { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->SendDirectMessage(data); } @@ -417,7 +419,7 @@ void Battlefield::BroadcastPacketToZone(WorldPacket const* data) const void Battlefield::BroadcastPacketToQueue(WorldPacket const* data) const { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr) + for (auto itr = m_PlayersInQueue[team].begin(); itr != m_PlayersInQueue[team].end(); ++itr) if (Player* player = ObjectAccessor::FindConnectedPlayer(*itr)) player->SendDirectMessage(data); } @@ -425,7 +427,7 @@ void Battlefield::BroadcastPacketToQueue(WorldPacket const* data) const void Battlefield::BroadcastPacketToWar(WorldPacket const* data) const { for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->SendDirectMessage(data); } @@ -498,7 +500,7 @@ void Battlefield::ShowNpc(Creature* creature, bool aggressive) // **************************************************** Group* Battlefield::GetFreeBfRaid(TeamId TeamId) { - for (GuidSet::const_iterator itr = m_Groups[TeamId].begin(); itr != m_Groups[TeamId].end(); ++itr) + for (auto itr = m_Groups[TeamId].begin(); itr != m_Groups[TeamId].end(); ++itr) if (Group* group = sGroupMgr->GetGroupByGUID(*itr)) if (!group->IsFull()) return group; @@ -508,7 +510,7 @@ Group* Battlefield::GetFreeBfRaid(TeamId TeamId) Group* Battlefield::GetGroupPlayer(ObjectGuid guid, TeamId TeamId) { - for (GuidSet::const_iterator itr = m_Groups[TeamId].begin(); itr != m_Groups[TeamId].end(); ++itr) + for (auto itr = m_Groups[TeamId].begin(); itr != m_Groups[TeamId].end(); ++itr) if (Group* group = sGroupMgr->GetGroupByGUID(*itr)) if (group->IsMember(guid)) return group; diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 5b22ba1b9f9..bce330b7eff 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -364,9 +364,9 @@ class TC_GAME_API Battlefield : public ZoneScript BfCapturePointMap m_capturePoints; // Players info maps - GuidSet m_players[BG_TEAMS_COUNT]; // Players in zone - GuidSet m_PlayersInQueue[BG_TEAMS_COUNT]; // Players in the queue - GuidSet m_PlayersInWar[BG_TEAMS_COUNT]; // Players in WG combat + GuidUnorderedSet m_players[BG_TEAMS_COUNT]; // Players in zone + GuidUnorderedSet m_PlayersInQueue[BG_TEAMS_COUNT]; // Players in the queue + GuidUnorderedSet m_PlayersInWar[BG_TEAMS_COUNT]; // Players in WG combat PlayerTimerMap m_InvitedPlayers[BG_TEAMS_COUNT]; PlayerTimerMap m_PlayersWillBeKick[BG_TEAMS_COUNT]; @@ -395,7 +395,7 @@ class TC_GAME_API Battlefield : public ZoneScript uint32 m_StartGroupingTimer; // Timer for invite players in area 15 minute before start battle bool m_StartGrouping; // bool for know if all players in area has been invited - GuidSet m_Groups[BG_TEAMS_COUNT]; // Contain different raid group + GuidUnorderedSet m_Groups[BG_TEAMS_COUNT]; // Contain different raid group std::vector<uint64> m_Data64; std::vector<uint32> m_Data32; diff --git a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp b/src/server/game/Battlefield/Zones/BattlefieldTB.cpp index 1f7b966ff39..88a13344ace 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldTB.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldTB.cpp @@ -379,9 +379,9 @@ void BattlefieldTB::SendInitWorldStatesToAll() sWorld->setWorldState(TB_WS_TIME_NEXT_BATTLE_SHOW, uint32(!IsWarTime() ? 1 : 0)); // Tol Barad - for (uint8 team = 0; team < 2; team++) - for (GuidSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) + for (uint8 team = 0; team < BG_TEAMS_COUNT; team++) + for (ObjectGuid const& guid : m_players[team]) + if (Player* player = ObjectAccessor::FindPlayer(guid)) SendInitWorldStatesTo(player); // Tol Barad Peninsula @@ -400,8 +400,8 @@ void BattlefieldTB::OnStartGrouping() // Teleport players out of questing area for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) + for (ObjectGuid const& guid : m_players[team]) + if (Player* player = ObjectAccessor::FindPlayer(guid)) if (player->GetAreaId() == TBQuestAreas[m_iCellblockRandom].entry) player->CastSpell(player, TBQuestAreas[m_iCellblockRandom].teleportSpell, true); @@ -441,8 +441,8 @@ void BattlefieldTB::OnBattleEnd(bool endByTimer) for (uint8 team = 0; team < 2; ++team) { - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) + for (ObjectGuid const& guid : m_PlayersInWar[team]) + if (Player* player = ObjectAccessor::FindPlayer(guid)) RemoveAurasFromPlayer(player); m_PlayersInWar[team].clear(); @@ -754,8 +754,8 @@ void BattlefieldTB::TowerDestroyed(TBTowerId tbTowerId) SendUpdateWorldState(uint32(TBTowers[tbTowerId].wsDestroyed), int32(1)); // Attack bonus buff - for (GuidSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) + for (ObjectGuid const& guid : m_PlayersInWar[GetAttackerTeam()]) + if (Player* player = ObjectAccessor::FindPlayer(guid)) player->CastCustomSpell(SPELL_TOWER_ATTACK_BONUS, SPELLVALUE_AURA_STACK, GetData(BATTLEFIELD_TB_DATA_TOWERS_DESTROYED), player, TRIGGERED_FULL_MASK); // Honor reward @@ -785,8 +785,8 @@ void BattlefieldTB::HandleKill(Player* killer, Unit* victim) return; TeamId killerTeam = killer->GetTeamId(); - for (GuidSet::const_iterator itr = m_PlayersInWar[killerTeam].begin(); itr != m_PlayersInWar[killerTeam].end(); ++itr) - if (Player* player = ObjectAccessor::FindPlayer(*itr)) + for (ObjectGuid const& guid : m_PlayersInWar[killerTeam]) + if (Player* player = ObjectAccessor::FindPlayer(guid)) if (player->GetDistance2d(killer) < 40.0f) PromotePlayer(player); } diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index f426fd93936..b9b0c7e5ff5 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -545,6 +545,7 @@ bool BattlefieldWG::SetupBattlefield() } + Workshops.resize(WG_MAX_WORKSHOP); // Spawn workshop creatures and gameobjects for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++) { @@ -555,7 +556,7 @@ bool BattlefieldWG::SetupBattlefield() workshop->GiveControlTo(GetDefenderTeam(), true); // Note: Capture point is added once the gameobject is created. - Workshops.insert(workshop); + Workshops[i] = workshop; } // Spawn NPCs in the defender's keep, both Horde and Alliance @@ -563,30 +564,30 @@ bool BattlefieldWG::SetupBattlefield() { // Horde npc if (Creature* creature = SpawnCreature(WGKeepNPC[i].HordeEntry, WGKeepNPC[i].Pos)) - KeepCreature[TEAM_HORDE].insert(creature->GetGUID()); + KeepCreature[TEAM_HORDE].push_back(creature->GetGUID()); // Alliance npc if (Creature* creature = SpawnCreature(WGKeepNPC[i].AllianceEntry, WGKeepNPC[i].Pos)) - KeepCreature[TEAM_ALLIANCE].insert(creature->GetGUID()); + KeepCreature[TEAM_ALLIANCE].push_back(creature->GetGUID()); } // Hide NPCs from the Attacker's team in the keep - for (GuidSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) + for (auto itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) HideNpc(creature); // Spawn Horde NPCs outside the keep for (uint8 i = 0; i < WG_OUTSIDE_ALLIANCE_NPC; ++i) if (Creature* creature = SpawnCreature(WGOutsideNPC[i].HordeEntry, WGOutsideNPC[i].Pos)) - OutsideCreature[TEAM_HORDE].insert(creature->GetGUID()); + OutsideCreature[TEAM_HORDE].push_back(creature->GetGUID()); // Spawn Alliance NPCs outside the keep for (uint8 i = WG_OUTSIDE_ALLIANCE_NPC; i < WG_MAX_OUTSIDE_NPC; ++i) if (Creature* creature = SpawnCreature(WGOutsideNPC[i].AllianceEntry, WGOutsideNPC[i].Pos)) - OutsideCreature[TEAM_ALLIANCE].insert(creature->GetGUID()); + OutsideCreature[TEAM_ALLIANCE].push_back(creature->GetGUID()); // Hide units outside the keep that are defenders - for (GuidSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) + for (auto itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) HideNpc(creature); @@ -596,11 +597,12 @@ bool BattlefieldWG::SetupBattlefield() Position towerCannonPos = WGTurret[i].GetPosition(); if (Creature* creature = SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos)) { - CanonList.insert(creature->GetGUID()); + CanonList.push_back(creature->GetGUID()); HideNpc(creature); } } + BuildingsInZone.resize(WG_MAX_OBJ); // Spawn all gameobjects for (uint8 i = 0; i < WG_MAX_OBJ; i++) { @@ -610,7 +612,8 @@ bool BattlefieldWG::SetupBattlefield() b->Init(go); if (!IsEnabled() && go->GetEntry() == GO_WINTERGRASP_VAULT_GATE) go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED); - BuildingsInZone.insert(b); + + BuildingsInZone[i] = b; } } @@ -620,13 +623,13 @@ bool BattlefieldWG::SetupBattlefield() WintergraspGameObjectData const& teleporter = WGPortalDefenderData[i]; if (GameObject* go = SpawnGameObject(teleporter.AllianceEntry, teleporter.Pos, teleporter.Rot)) { - DefenderPortalList[TEAM_ALLIANCE].insert(go->GetGUID()); + DefenderPortalList[TEAM_ALLIANCE].push_back(go->GetGUID()); go->SetRespawnTime(GetDefenderTeam() == TEAM_ALLIANCE ? RESPAWN_IMMEDIATELY : RESPAWN_ONE_DAY); } if (GameObject* go = SpawnGameObject(teleporter.HordeEntry, teleporter.Pos, teleporter.Rot)) { - DefenderPortalList[TEAM_HORDE].insert(go->GetGUID()); + DefenderPortalList[TEAM_HORDE].push_back(go->GetGUID()); go->SetRespawnTime(GetDefenderTeam() == TEAM_HORDE ? RESPAWN_IMMEDIATELY : RESPAWN_ONE_DAY); } } @@ -671,7 +674,7 @@ void BattlefieldWG::OnBattleStart() // Update tower visibility and update faction - for (GuidSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr) + for (auto itr = CanonList.begin(); itr != CanonList.end(); ++itr) { if (Creature* creature = GetCreature(*itr)) { @@ -696,8 +699,9 @@ void BattlefieldWG::OnBattleStart() for (WintergraspWorkshop* workshop : Workshops) workshop->UpdateGraveyardAndWorkshop(); - for (uint8 team = 0; team < 2; ++team) - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) + { + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { // Kick player in orb room, TODO: offline player ? if (Player* player = ObjectAccessor::FindPlayer(*itr)) @@ -709,6 +713,8 @@ void BattlefieldWG::OnBattleStart() SendInitWorldStatesTo(player); } } + } + // Initialize vehicle counter UpdateCounterVehicle(true); // Send start warning to all players @@ -752,7 +758,7 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) UpdateData(GetDefenderTeam() == TEAM_HORDE ? BATTLEFIELD_WG_DATA_WON_H : BATTLEFIELD_WG_DATA_WON_A, 1); // Remove turret - for (GuidSet::const_iterator itr = CanonList.begin(); itr != CanonList.end(); ++itr) + for (auto itr = CanonList.begin(); itr != CanonList.end(); ++itr) { if (Creature* creature = GetCreature(*itr)) { @@ -765,20 +771,20 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) if (!endByTimer) // One player triggered the relic { // Change all npc in keep - for (GuidSet::const_iterator itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) + for (auto itr = KeepCreature[GetAttackerTeam()].begin(); itr != KeepCreature[GetAttackerTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) HideNpc(creature); - for (GuidSet::const_iterator itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr) + for (auto itr = KeepCreature[GetDefenderTeam()].begin(); itr != KeepCreature[GetDefenderTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) ShowNpc(creature, true); // Change all npc out of keep - for (GuidSet::const_iterator itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) + for (auto itr = OutsideCreature[GetDefenderTeam()].begin(); itr != OutsideCreature[GetDefenderTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) HideNpc(creature); - for (GuidSet::const_iterator itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr) + for (auto itr = OutsideCreature[GetAttackerTeam()].begin(); itr != OutsideCreature[GetAttackerTeam()].end(); ++itr) if (Creature* creature = GetCreature(*itr)) ShowNpc(creature, true); } @@ -788,20 +794,12 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) if (BfGraveyard* graveyard = GetGraveyardById(i)) graveyard->GiveControlTo(GetDefenderTeam()); - for (GuidSet::const_iterator itr = m_KeepGameObject[GetDefenderTeam()].begin(); itr != m_KeepGameObject[GetDefenderTeam()].end(); ++itr) - if (GameObject* object = GetGameObject(*itr)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); - - for (GuidSet::const_iterator itr = m_KeepGameObject[GetAttackerTeam()].begin(); itr != m_KeepGameObject[GetAttackerTeam()].end(); ++itr) - if (GameObject* object = GetGameObject(*itr)) - object->SetRespawnTime(RESPAWN_ONE_DAY); - // Update portals - for (GuidSet::const_iterator itr = DefenderPortalList[GetDefenderTeam()].begin(); itr != DefenderPortalList[GetDefenderTeam()].end(); ++itr) + for (auto itr = DefenderPortalList[GetDefenderTeam()].begin(); itr != DefenderPortalList[GetDefenderTeam()].end(); ++itr) if (GameObject* portal = GetGameObject(*itr)) portal->SetRespawnTime(RESPAWN_IMMEDIATELY); - for (GuidSet::const_iterator itr = DefenderPortalList[GetAttackerTeam()].begin(); itr != DefenderPortalList[GetAttackerTeam()].end(); ++itr) + for (auto itr = DefenderPortalList[GetAttackerTeam()].begin(); itr != DefenderPortalList[GetAttackerTeam()].end(); ++itr) if (GameObject* portal = GetGameObject(*itr)) portal->SetRespawnTime(RESPAWN_ONE_DAY); @@ -812,7 +810,7 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) for (WintergraspWorkshop* workshop : Workshops) workshop->Save(); - for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) + for (auto itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { @@ -826,19 +824,19 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) } } - for (GuidSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) + for (auto itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->CastSpell(player, SPELL_DEFEAT_REWARD, true); - for (uint8 team = 0; team < 2; ++team) + for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) { - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) RemoveAurasFromPlayer(player); m_PlayersInWar[team].clear(); - for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) + for (auto itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Creature* creature = GetCreature(*itr)) if (creature->IsVehicle()) creature->DespawnOrUnsummon(); @@ -848,9 +846,9 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) if (!endByTimer) { - for (uint8 team = 0; team < 2; ++team) + for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) { - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { @@ -1077,14 +1075,14 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim) if (victim->GetTypeId() == TYPEID_PLAYER) { - for (GuidSet::const_iterator itr = m_PlayersInWar[killerTeam].begin(); itr != m_PlayersInWar[killerTeam].end(); ++itr) + for (auto itr = m_PlayersInWar[killerTeam].begin(); itr != m_PlayersInWar[killerTeam].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) if (player->GetDistance2d(killer) < 40) PromotePlayer(player); return; } - for (GuidSet::const_iterator itr = KeepCreature[GetOtherTeam(killerTeam)].begin(); + for (auto itr = KeepCreature[GetOtherTeam(killerTeam)].begin(); itr != KeepCreature[GetOtherTeam(killerTeam)].end(); ++itr) { if (Creature* creature = GetCreature(*itr)) @@ -1092,7 +1090,7 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim) if (victim->GetEntry() == creature->GetEntry() && !again) { again = true; - for (GuidSet::const_iterator iter = m_PlayersInWar[killerTeam].begin(); iter != m_PlayersInWar[killerTeam].end(); ++iter) + for (auto iter = m_PlayersInWar[killerTeam].begin(); iter != m_PlayersInWar[killerTeam].end(); ++iter) if (Player* player = ObjectAccessor::FindPlayer(*iter)) if (player->GetDistance2d(killer) < 40.0f) PromotePlayer(player); @@ -1104,18 +1102,21 @@ void BattlefieldWG::HandleKill(Player* killer, Unit* victim) bool BattlefieldWG::FindAndRemoveVehicleFromList(Unit* vehicle) { - for (uint32 itr = 0; itr < 2; ++itr) + for (uint32 team = 0; team < BG_TEAMS_COUNT; ++team) { - if (m_vehicles[itr].find(vehicle->GetGUID()) != m_vehicles[itr].end()) + auto itr = m_vehicles[team].find(vehicle->GetGUID()); + if (itr != m_vehicles[team].end()) { - m_vehicles[itr].erase(vehicle->GetGUID()); - if (itr == TEAM_HORDE) + m_vehicles[team].erase(itr); + + if (team == TEAM_HORDE) UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_H, -1); else UpdateData(BATTLEFIELD_WG_DATA_VEHICLE_A, -1); return true; } } + return false; } @@ -1302,8 +1303,8 @@ void BattlefieldWG::SendInitWorldStatesTo(Player* player) void BattlefieldWG::SendInitWorldStatesToAll() { - for (uint8 team = 0; team < 2; team++) - for (GuidSet::iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team) + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) SendInitWorldStatesTo(player); } @@ -1340,17 +1341,19 @@ void BattlefieldWG::UpdatedDestroyedTowerCount(TeamId team) UpdateData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, 1); // Remove buff stack on attackers - for (GuidSet::const_iterator itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) + for (auto itr = m_PlayersInWar[GetAttackerTeam()].begin(); itr != m_PlayersInWar[GetAttackerTeam()].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->RemoveAuraFromStack(SPELL_TOWER_CONTROL); // Add buff stack to defenders - for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) + for (auto itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) + { if (Player* player = ObjectAccessor::FindPlayer(*itr)) { player->CastSpell(player, SPELL_TOWER_CONTROL, true); DoCompleteOrIncrementAchievement(ACHIEVEMENTS_WG_TOWER_DESTROY, player); } + } // If all three south towers are destroyed (ie. all attack towers), remove ten minutes from battle time if (GetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT) == 3) @@ -1450,12 +1453,12 @@ void BattlefieldWG::UpdateTenacity() // Remove old buff if (team != TEAM_NEUTRAL) { - for (GuidSet::const_iterator itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) + for (auto itr = m_players[team].begin(); itr != m_players[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) if (player->getLevel() >= m_MinLevel) player->RemoveAurasDueToSpell(SPELL_TENACITY); - for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) + for (auto itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Creature* creature = GetCreature(*itr)) creature->RemoveAurasDueToSpell(SPELL_TENACITY_VEHICLE); } @@ -1478,20 +1481,21 @@ void BattlefieldWG::UpdateTenacity() if (newStack < 5) buff_honor = 0; - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->SetAuraStack(SPELL_TENACITY, player, newStack); - for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) + for (auto itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Creature* creature = GetCreature(*itr)) creature->SetAuraStack(SPELL_TENACITY_VEHICLE, creature, newStack); if (buff_honor != 0) { - for (GuidSet::const_iterator itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) + for (auto itr = m_PlayersInWar[team].begin(); itr != m_PlayersInWar[team].end(); ++itr) if (Player* player = ObjectAccessor::FindPlayer(*itr)) player->CastSpell(player, buff_honor, true); - for (GuidSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) + + for (auto itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Creature* creature = GetCreature(*itr)) creature->CastSpell(creature, buff_honor, true); } @@ -1696,26 +1700,26 @@ void BfWGGameObjectBuilding::Init(GameObject* go) break; } - if (towerId > 3) // Attacker towers + if (towerId >= BATTLEFIELD_WG_TOWER_SHADOWSIGHT) // Attacker towers { // Spawn associate gameobjects for (WintergraspGameObjectData const& gobData : AttackTowers[towerId - 4].GameObject) { if (GameObject* goHorde = _wg->SpawnGameObject(gobData.HordeEntry, gobData.Pos, gobData.Rot)) - m_GameObjectList[TEAM_HORDE].insert(goHorde->GetGUID()); + m_GameObjectList[TEAM_HORDE].push_back(goHorde->GetGUID()); if (GameObject* goAlliance = _wg->SpawnGameObject(gobData.AllianceEntry, gobData.Pos, gobData.Rot)) - m_GameObjectList[TEAM_ALLIANCE].insert(goAlliance->GetGUID()); + m_GameObjectList[TEAM_ALLIANCE].push_back(goAlliance->GetGUID()); } // Spawn associate npc bottom for (WintergraspObjectPositionData const& creatureData : AttackTowers[towerId - 4].CreatureBottom) { if (Creature* creature = _wg->SpawnCreature(creatureData.HordeEntry, creatureData.Pos)) - m_CreatureBottomList[TEAM_HORDE].insert(creature->GetGUID()); + m_CreatureBottomList[TEAM_HORDE].push_back(creature->GetGUID()); if (Creature* creature = _wg->SpawnCreature(creatureData.AllianceEntry, creatureData.Pos)) - m_CreatureBottomList[TEAM_ALLIANCE].insert(creature->GetGUID()); + m_CreatureBottomList[TEAM_ALLIANCE].push_back(creature->GetGUID()); } } @@ -1729,7 +1733,7 @@ void BfWGGameObjectBuilding::Init(GameObject* go) { if (Creature* turret = _wg->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos)) { - m_TowerCannonBottomList.insert(turret->GetGUID()); + m_TowerCannonBottomList.push_back(turret->GetGUID()); switch (go->GetEntry()) { case GO_WINTERGRASP_FORTRESS_TOWER_1: @@ -1754,7 +1758,7 @@ void BfWGGameObjectBuilding::Init(GameObject* go) { if (Creature* turret = _wg->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos)) { - m_TurretTopList.insert(turret->GetGUID()); + m_TurretTopList.push_back(turret->GetGUID()); switch (go->GetEntry()) { case GO_WINTERGRASP_FORTRESS_TOWER_1: @@ -1904,26 +1908,6 @@ void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) } case TEAM_ALLIANCE: { - // Show Alliance creature - for (ObjectGuid guid : _creatureOnPoint[TEAM_ALLIANCE]) - if (Creature* creature = _wg->GetCreature(guid)) - _wg->ShowNpc(creature, creature->GetEntry() != 30499); - - // Hide Horde creature - for (ObjectGuid guid : _creatureOnPoint[TEAM_HORDE]) - if (Creature* creature = _wg->GetCreature(guid)) - _wg->HideNpc(creature); - - // Show Alliance gameobject - for (ObjectGuid guid : _gameObjectOnPoint[TEAM_ALLIANCE]) - if (GameObject* go = _wg->GetGameObject(guid)) - go->SetRespawnTime(RESPAWN_IMMEDIATELY); - - // Hide Horde gameobject - for (ObjectGuid guid : _gameObjectOnPoint[TEAM_HORDE]) - if (GameObject* go = _wg->GetGameObject(guid)) - go->SetRespawnTime(RESPAWN_ONE_DAY); - // Updating worldstate _state = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); @@ -1942,26 +1926,6 @@ void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) } case TEAM_HORDE: { - // Show Horde creature - for (ObjectGuid guid : _creatureOnPoint[TEAM_HORDE]) - if (Creature* creature = _wg->GetCreature(guid)) - _wg->ShowNpc(creature, creature->GetEntry() != 30400); - - // Hide Alliance creature - for (ObjectGuid guid : _creatureOnPoint[TEAM_ALLIANCE]) - if (Creature* creature = _wg->GetCreature(guid)) - _wg->HideNpc(creature); - - // Hide Alliance gameobject - for (ObjectGuid guid : _gameObjectOnPoint[TEAM_ALLIANCE]) - if (GameObject* go = _wg->GetGameObject(guid)) - go->SetRespawnTime(RESPAWN_ONE_DAY); - - // Show Horde gameobject - for (ObjectGuid guid : _gameObjectOnPoint[TEAM_HORDE]) - if (GameObject* go = _wg->GetGameObject(guid)) - go->SetRespawnTime(RESPAWN_IMMEDIATELY); - // Update worldstate _state = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index fc5de2bba38..aa9b94df11a 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -30,11 +30,8 @@ struct StaticWintergraspTowerInfo; struct StaticWintergraspWorkshopInfo; struct WintergraspObjectPositionData; -typedef std::set<GameObject*> GameObjectSet; -typedef std::set<BfWGGameObjectBuilding*> GameObjectBuildingSet; -typedef std::set<WintergraspWorkshop*> WorkshopSet; -typedef std::set<Group*> GroupSet; -//typedef std::set<WintergraspCapturePoint *> CapturePointSet; unused ? +typedef std::vector<BfWGGameObjectBuilding*> GameObjectBuildingVect; +typedef std::vector<WintergraspWorkshop*> WorkshopVect; // used in Player.cpp extern uint32 const ClockWorldState[]; @@ -42,12 +39,6 @@ extern uint32 const ClockWorldState[]; // used in zone_wintergrasp.cpp TC_GAME_API extern uint32 const WintergraspFaction[]; -enum WintergrastData -{ - BATTLEFIELD_WG_ZONEID = 4197, // Wintergrasp - BATTLEFIELD_WG_MAPID = 571 // Northrend -}; - enum WintergraspSpells { // Wartime auras @@ -106,7 +97,10 @@ enum WintergraspData BATTLEFIELD_WG_DATA_DEF_A, BATTLEFIELD_WG_DATA_WON_H, BATTLEFIELD_WG_DATA_DEF_H, - BATTLEFIELD_WG_DATA_MAX + BATTLEFIELD_WG_DATA_MAX, + + BATTLEFIELD_WG_ZONEID = 4197, // Wintergrasp + BATTLEFIELD_WG_MAPID = 571 // Northrend }; enum WintergraspAchievements @@ -402,16 +396,15 @@ class TC_GAME_API BattlefieldWG : public Battlefield protected: bool m_isRelicInteractible; - WorkshopSet Workshops; + WorkshopVect Workshops; - GuidSet DefenderPortalList[BG_TEAMS_COUNT]; - GuidSet m_KeepGameObject[BG_TEAMS_COUNT]; - GameObjectBuildingSet BuildingsInZone; + GuidVector DefenderPortalList[BG_TEAMS_COUNT]; + GameObjectBuildingVect BuildingsInZone; - GuidSet m_vehicles[BG_TEAMS_COUNT]; - GuidSet CanonList; - GuidSet KeepCreature[BG_TEAMS_COUNT]; - GuidSet OutsideCreature[BG_TEAMS_COUNT]; + GuidUnorderedSet m_vehicles[BG_TEAMS_COUNT]; + GuidVector CanonList; + GuidVector KeepCreature[BG_TEAMS_COUNT]; + GuidVector OutsideCreature[BG_TEAMS_COUNT]; uint32 m_tenacityStack; uint32 m_saveTimer; @@ -576,13 +569,13 @@ private: StaticWintergraspTowerInfo const* _staticTowerInfo; // GameObject associations - GuidSet m_GameObjectList[BG_TEAMS_COUNT]; + GuidVector m_GameObjectList[BG_TEAMS_COUNT]; // Creature associations - GuidSet m_CreatureBottomList[BG_TEAMS_COUNT]; - GuidSet m_CreatureTopList[BG_TEAMS_COUNT]; - GuidSet m_TowerCannonBottomList; - GuidSet m_TurretTopList; + GuidVector m_CreatureBottomList[BG_TEAMS_COUNT]; + GuidVector m_CreatureTopList[BG_TEAMS_COUNT]; + GuidVector m_TowerCannonBottomList; + GuidVector m_TurretTopList; public: BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGameObjectBuildingType type, uint32 worldState); @@ -615,8 +608,6 @@ private: ObjectGuid _buildGUID; WintergraspGameObjectState _state; // For worldstate TeamId _teamControl; // Team witch control the workshop - GuidSet _creatureOnPoint[BG_TEAMS_COUNT]; // Contain all Creature associate to this point - GuidSet _gameObjectOnPoint[BG_TEAMS_COUNT]; // Contain all Gameobject associate to this point StaticWintergraspWorkshopInfo const* _staticInfo; |