aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Battlefield/Battlefield.cpp
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-08-20 21:40:43 -0300
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-12 16:50:06 +0100
commit0925c350e765ce944186d4ba6e30dd6c3063abba (patch)
treea113bbc6fd2f4c33cce5fd20183be89bc5963326 /src/server/game/Battlefield/Battlefield.cpp
parent7616f22bfb44af507191b9652825c548d1ac9713 (diff)
Core/Battlefield: Cleanup of Wintergrasp script and battlefield system:
- Standards: Moved all statics to cpps where they belong. - Changed spawn position container from fixed size array to std::vector (not all positions were used in every case) - Removed unused parameter teamId from Battlefield::SpawnCreature - Removed workaround for GO rotation, added in a69cbeb9d5776025452009733f13ff3a631315e8 - Added rotation parameter to Battlefield:SpawnGameObject - Added sniffed rotation to existing script spawns. - Implemented Archavon's Log (Closes #16880) (cherry picked from commit 1deb7d2df178a98bc1b1cde2ca99301e7ee85ecb)
Diffstat (limited to 'src/server/game/Battlefield/Battlefield.cpp')
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp79
1 files changed, 36 insertions, 43 deletions
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index cd037f8002d..7bd6b24a926 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -41,7 +41,7 @@ Battlefield::Battlefield()
m_TypeId = 0;
m_BattleId = 0;
m_ZoneId = 0;
- m_Map = NULL;
+ m_Map = nullptr;
m_MapId = 0;
m_MaxPlayer = 0;
m_MinPlayer = 0;
@@ -81,7 +81,7 @@ void Battlefield::HandlePlayerEnterZone(Player* player, uint32 /*zone*/)
else // No more vacant places
{
/// @todo Send a packet to announce it to player
- m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(NULL) + 10;
+ m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(nullptr) + 10;
InvitePlayerToQueue(player);
}
}
@@ -160,14 +160,14 @@ bool Battlefield::Update(uint32 diff)
// Kick players who chose not to accept invitation to the battle
if (m_uiKickDontAcceptTimer <= diff)
{
- time_t now = time(NULL);
- for (int team = 0; team < 2; team++)
+ time_t now = time(nullptr);
+ for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (PlayerTimerMap::iterator itr = m_InvitedPlayers[team].begin(); itr != m_InvitedPlayers[team].end(); ++itr)
if (itr->second <= now)
KickPlayerFromBattlefield(itr->first);
InvitePlayersInZoneToWar();
- for (int team = 0; team < 2; team++)
+ for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (PlayerTimerMap::iterator itr = m_PlayersWillBeKick[team].begin(); itr != m_PlayersWillBeKick[team].end(); ++itr)
if (itr->second <= now)
KickPlayerFromBattlefield(itr->first);
@@ -198,7 +198,7 @@ bool Battlefield::Update(uint32 diff)
void Battlefield::InvitePlayersInZoneToQueue()
{
- 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)
if (Player* player = ObjectAccessor::FindPlayer(*itr))
InvitePlayerToQueue(player);
@@ -245,7 +245,7 @@ void Battlefield::InvitePlayersInZoneToWar()
if (m_PlayersInWar[player->GetTeamId()].size() + m_InvitedPlayers[player->GetTeamId()].size() < m_MaxPlayer)
InvitePlayerToWar(player);
else // Battlefield is full of players
- m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(NULL) + 10;
+ m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(nullptr) + 10;
}
}
}
@@ -269,7 +269,7 @@ void Battlefield::InvitePlayerToWar(Player* player)
if (player->getLevel() < m_MinLevel)
{
if (m_PlayersWillBeKick[player->GetTeamId()].count(player->GetGUID()) == 0)
- m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(NULL) + 10;
+ m_PlayersWillBeKick[player->GetTeamId()][player->GetGUID()] = time(nullptr) + 10;
return;
}
@@ -278,13 +278,13 @@ void Battlefield::InvitePlayerToWar(Player* player)
return;
m_PlayersWillBeKick[player->GetTeamId()].erase(player->GetGUID());
- m_InvitedPlayers[player->GetTeamId()][player->GetGUID()] = time(NULL) + m_TimeForAcceptInvite;
+ m_InvitedPlayers[player->GetTeamId()][player->GetGUID()] = time(nullptr) + m_TimeForAcceptInvite;
player->GetSession()->SendBfInvitePlayerToWar(GetQueueId(), m_ZoneId, m_TimeForAcceptInvite);
}
void Battlefield::InitStalker(uint32 entry, Position const& pos)
{
- if (Creature* creature = SpawnCreature(entry, pos, TEAM_NEUTRAL))
+ if (Creature* creature = SpawnCreature(entry, pos))
StalkerGuid = creature->GetGUID();
else
TC_LOG_ERROR("bg.battlefield", "Battlefield::InitStalker: Could not spawn Stalker (Creature entry %u), zone messages will be unavailable!", entry);
@@ -311,7 +311,7 @@ void Battlefield::StartBattle()
if (m_isActive)
return;
- for (int team = 0; team < BG_TEAMS_COUNT; team++)
+ for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
{
m_PlayersInWar[team].clear();
m_Groups[team].clear();
@@ -503,7 +503,7 @@ Group* Battlefield::GetFreeBfRaid(TeamId TeamId)
if (!group->IsFull())
return group;
- return NULL;
+ return nullptr;
}
Group* Battlefield::GetGroupPlayer(ObjectGuid guid, TeamId TeamId)
@@ -513,7 +513,7 @@ Group* Battlefield::GetGroupPlayer(ObjectGuid guid, TeamId TeamId)
if (group->IsMember(guid))
return group;
- return NULL;
+ return nullptr;
}
bool Battlefield::AddOrSetPlayerToCorrectBfGroup(Player* player)
@@ -565,12 +565,12 @@ BfGraveyard* Battlefield::GetGraveyardById(uint32 id) const
else
TC_LOG_ERROR("bg.battlefield", "Battlefield::GetGraveyardById Id:%u could not be found.", id);
- return NULL;
+ return nullptr;
}
WorldSafeLocsEntry const* Battlefield::GetClosestGraveYard(Player* player)
{
- BfGraveyard* closestGY = NULL;
+ BfGraveyard* closestGY = nullptr;
float maxdist = -1;
for (uint8 i = 0; i < m_GraveyardList.size(); i++)
{
@@ -591,7 +591,7 @@ WorldSafeLocsEntry const* Battlefield::GetClosestGraveYard(Player* player)
if (closestGY)
return sWorldSafeLocsStore.LookupEntry(closestGY->GetGraveyardId());
- return NULL;
+ return nullptr;
}
void Battlefield::AddPlayerToResurrectQueue(ObjectGuid npcGuid, ObjectGuid playerGuid)
@@ -640,8 +640,6 @@ BfGraveyard::BfGraveyard(Battlefield* battlefield)
m_Bf = battlefield;
m_GraveyardId = 0;
m_ControlTeam = TEAM_NEUTRAL;
- m_SpiritGuide[0].Clear();
- m_SpiritGuide[1].Clear();
}
void BfGraveyard::Initialize(TeamId startControl, uint32 graveyardId)
@@ -664,7 +662,7 @@ void BfGraveyard::SetSpirit(Creature* spirit, TeamId team)
float BfGraveyard::GetDistance(Player* player)
{
- const WorldSafeLocsEntry* safeLoc = sWorldSafeLocsStore.LookupEntry(m_GraveyardId);
+ WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(m_GraveyardId);
return player->GetDistance2d(safeLoc->Loc.X, safeLoc->Loc.Y);
}
@@ -733,7 +731,7 @@ void BfGraveyard::GiveControlTo(TeamId team)
void BfGraveyard::RelocateDeadPlayers()
{
- WorldSafeLocsEntry const* closestGrave = NULL;
+ WorldSafeLocsEntry const* closestGrave = nullptr;
for (GuidSet::const_iterator itr = m_ResurrectQueue.begin(); itr != m_ResurrectQueue.end(); ++itr)
{
Player* player = ObjectAccessor::FindPlayer(*itr);
@@ -753,14 +751,14 @@ void BfGraveyard::RelocateDeadPlayers()
bool BfGraveyard::HasNpc(ObjectGuid guid)
{
- if (!m_SpiritGuide[0] || !m_SpiritGuide[1])
+ if (!m_SpiritGuide[TEAM_ALLIANCE] || !m_SpiritGuide[TEAM_HORDE])
return false;
- if (!m_Bf->GetCreature(m_SpiritGuide[0]) ||
- !m_Bf->GetCreature(m_SpiritGuide[1]))
+ if (!m_Bf->GetCreature(m_SpiritGuide[TEAM_ALLIANCE]) ||
+ !m_Bf->GetCreature(m_SpiritGuide[TEAM_HORDE]))
return false;
- return (m_SpiritGuide[0] == guid || m_SpiritGuide[1] == guid);
+ return (m_SpiritGuide[TEAM_ALLIANCE] == guid || m_SpiritGuide[TEAM_HORDE] == guid);
}
// *******************************************************
@@ -769,12 +767,7 @@ bool BfGraveyard::HasNpc(ObjectGuid guid)
// ********************** Misc ***************************
// *******************************************************
-Creature* Battlefield::SpawnCreature(uint32 entry, Position const& pos, TeamId teamId)
-{
- return SpawnCreature(entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), teamId);
-}
-
-Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, float o, TeamId /*teamId*/)
+Creature* Battlefield::SpawnCreature(uint32 entry, Position const& pos)
{
//Get map object
Map* map = sMapMgr->CreateBaseMap(m_MapId);
@@ -791,6 +784,9 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl
return nullptr;
}
+ float x, y, z, o;
+ pos.GetPosition(x, y, z, o);
+
Creature* creature = new Creature();
if (!creature->Create(map->GenerateLowGuid<HighGuid::Creature>(), map, PHASEMASK_NORMAL, entry, x, y, z, o))
{
@@ -809,7 +805,7 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl
}
// Method for spawning gameobject on map
-GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z, float o)
+GameObject* Battlefield::SpawnGameObject(uint32 entry, Position const& pos, G3D::Quat const& rot)
{
// Get map object
Map* map = sMapMgr->CreateBaseMap(m_MapId);
@@ -826,12 +822,9 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z
return nullptr;
}
- // Calculate rotation
- G3D::Quat rot = G3D::Matrix3::fromEulerAnglesZYX(o, 0.f, 0.f);
-
// Create gameobject
GameObject* go = new GameObject;
- if (!go->Create(entry, map, PHASEMASK_NORMAL, Position(x, y, z, o), rot, 255, GO_STATE_READY))
+ if (!go->Create(entry, map, PHASEMASK_NORMAL, pos, rot, 255, GO_STATE_READY))
{
TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Could not create gameobject template %u! Battlefield has not been created!", entry);
delete go;
@@ -848,14 +841,14 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z
Creature* Battlefield::GetCreature(ObjectGuid guid)
{
if (!m_Map)
- return NULL;
+ return nullptr;
return m_Map->GetCreature(guid);
}
GameObject* Battlefield::GetGameObject(ObjectGuid guid)
{
if (!m_Map)
- return NULL;
+ return nullptr;
return m_Map->GetGameObject(guid);
}
@@ -972,7 +965,7 @@ bool BfCapturePoint::DelCapturePoint()
{
capturePoint->SetRespawnTime(0); // not save respawn time
capturePoint->Delete();
- capturePoint = NULL;
+ capturePoint = nullptr;
}
m_capturePointGUID.Clear();
}
@@ -989,7 +982,7 @@ bool BfCapturePoint::Update(uint32 diff)
{
float radius = capturePoint->GetGOInfo()->controlZone.radius;
- for (uint8 team = 0; team < 2; ++team)
+ for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
{
for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end();)
{
@@ -1017,7 +1010,7 @@ bool BfCapturePoint::Update(uint32 diff)
}
// get the difference of numbers
- float fact_diff = ((float) m_activePlayers[0].size() - (float) m_activePlayers[1].size()) * diff / BATTLEFIELD_OBJECTIVE_UPDATE_INTERVAL;
+ float fact_diff = ((float) m_activePlayers[TEAM_ALLIANCE].size() - (float) m_activePlayers[TEAM_HORDE].size()) * diff / BATTLEFIELD_OBJECTIVE_UPDATE_INTERVAL;
if (G3D::fuzzyEq(fact_diff, 0.0f))
return false;
@@ -1104,7 +1097,7 @@ bool BfCapturePoint::Update(uint32 diff)
void BfCapturePoint::SendUpdateWorldState(uint32 field, uint32 value)
{
- for (uint8 team = 0; team < 2; ++team)
+ for (uint8 team = 0; team < BG_TEAMS_COUNT; ++team)
for (GuidSet::iterator itr = m_activePlayers[team].begin(); itr != m_activePlayers[team].end(); ++itr) // send to all players present in the area
if (Player* player = ObjectAccessor::FindPlayer(*itr))
player->SendUpdateWorldState(field, value);
@@ -1116,10 +1109,10 @@ void BfCapturePoint::SendObjectiveComplete(uint32 id, ObjectGuid guid)
switch (m_State)
{
case BF_CAPTUREPOINT_OBJECTIVESTATE_ALLIANCE:
- team = 0;
+ team = TEAM_ALLIANCE;
break;
case BF_CAPTUREPOINT_OBJECTIVESTATE_HORDE:
- team = 1;
+ team = TEAM_HORDE;
break;
default:
return;