aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp24
-rw-r--r--src/server/game/Battlefield/Battlefield.h8
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldTB.cpp22
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp164
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.h45
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;