diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-08-20 21:40:43 -0300 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-02-12 16:50:06 +0100 |
commit | 0925c350e765ce944186d4ba6e30dd6c3063abba (patch) | |
tree | a113bbc6fd2f4c33cce5fd20183be89bc5963326 /src/server/game/Battlefield/Battlefield.cpp | |
parent | 7616f22bfb44af507191b9652825c548d1ac9713 (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.cpp | 79 |
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; |