diff options
author | joschiwald <joschiwald.trinity@gmail.com> | 2014-09-20 00:26:58 +0200 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2014-09-20 00:26:58 +0200 |
commit | bf37dbfb2ac4bcc4334ca530254b118f0d971bad (patch) | |
tree | 027c91ce58af8fc0c3ce0d15c07cfd87bf0f9ad4 | |
parent | 83f82b4a040430d13c6e2ec24730e556f6d8feb9 (diff) |
Core/Battlefield/WG: fixed warnings
Ref #13169
Closes #12714
-rw-r--r-- | sql/updates/world/2014_09_19_07_world_creature_text.sql | 82 | ||||
-rw-r--r-- | src/server/game/Battlefield/Battlefield.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Battlefield/Battlefield.h | 9 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.cpp | 608 | ||||
-rw-r--r-- | src/server/game/Battlefield/Zones/BattlefieldWG.h | 340 |
5 files changed, 535 insertions, 511 deletions
diff --git a/sql/updates/world/2014_09_19_07_world_creature_text.sql b/sql/updates/world/2014_09_19_07_world_creature_text.sql new file mode 100644 index 00000000000..dee16809e31 --- /dev/null +++ b/sql/updates/world/2014_09_19_07_world_creature_text.sql @@ -0,0 +1,82 @@ +DELETE FROM `trinity_string` WHERE `entry` BETWEEN 12050 AND 12072; +DELETE FROM `creature_text` WHERE `entry`=15214 AND (`groupid`=0 OR `groupid` BETWEEN 27 AND 38); +INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(15214, 27, 0, 'The Battle for Lake Wintergrasp is about to begin!', 41, 0, 100, 0, 0, 0, 30960, 2, 'Invisible Stalker'), +(15214, 28, 0, 'Let the battle begin!', 41, 0, 100, 0, 0, 0, 30961, 2, 'Invisible Stalker'), + +(15214, 29, 0, 'The Alliance has defended Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8455, 31403, 2, 'Invisible Stalker'), +(15214, 30, 0, 'The Alliance has captured Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8455, 27817, 2, 'Invisible Stalker'), + +(15214, 31, 0, 'The Horde has defended Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8454, 31405, 2, 'Invisible Stalker'), +(15214, 32, 0, 'The Horde has captured Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8454, 27816, 2, 'Invisible Stalker'), + +(15214, 33, 0, 'The north-eastern keep tower has been damaged!', 41, 0, 100, 0, 0, 0, 31235, 2, 'Invisible Stalker'), +(15214, 34, 0, 'The north-eastern keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, 31236, 2, 'Invisible Stalker'), + +(15214, 35, 0, 'The south-western keep tower has been damaged!', 41, 0, 100, 0, 0, 0, 31233, 2, 'Invisible Stalker'), +(15214, 36, 0, 'The south-western keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, 31238, 2, 'Invisible Stalker'), + +(15214, 37, 0, 'You have reached Rank 1: Corporal', 42, 0, 100, 0, 0, 0, 30650, 0, 'Invisible Stalker - Player'), +(15214, 38, 0, 'You have reached Rank 2: First Lieutenant', 42, 0, 100, 0, 0, 0, 30651, 0, 'Invisible Stalker - Player'); + + +/* +(15214, x, x, 'The Battle for Lake Wintergrasp is about to begin!', 41, 0, 100, 0, 0, 0, '30960', 'Invisible Stalker'), +(15214, x, x, 'Let the battle begin!', 41, 0, 100, 0, 0, 0, '30961', 'Invisible Stalker'), + +(15214, x, x, 'The Eastspark siege workshop has been attacked by the Alliance!', 41, 0, 100, 0, 0, 0, '34408', 'Invisible Stalker'), +(15214, x, x, 'The Eastspark siege workshop has been captured by the Alliance!', 41, 0, 100, 0, 0, 0, '34404', 'Invisible Stalker'), +(15214, x, x, 'The Eastspark siege workshop has been attacked by the Horde!', 41, 0, 100, 0, 0, 0, '34409', 'Invisible Stalker'), +(15214, x, x, 'The Eastspark siege workshop has been captured by the Horde!', 41, 0, 100, 0, 0, 0, '34406', 'Invisible Stalker'), + +(15214, x, x, 'The Westspark siege workshop has been attacked by the Alliance!', 41, 0, 100, 0, 0, 0, '34410', 'Invisible Stalker'), +(15214, x, x, 'The Westspark siege workshop has been captured by the Alliance!', 41, 0, 100, 0, 0, 0, '34405', 'Invisible Stalker'), +(15214, x, x, 'The Westspark siege workshop has been attacked by the Horde!', 41, 0, 100, 0, 0, 0, '34411', 'Invisible Stalker'), +(15214, x, x, 'The Westspark siege workshop has been captured by the Horde!', 41, 0, 100, 0, 0, 0, '34407', 'Invisible Stalker'), + +(15214, x, x, 'The Sunken Ring siege workshop has been attacked by the Alliance!', 41, 0, 100, 0, 0, 0, '33059', 'Invisible Stalker'), +(15214, x, x, 'The Sunken Ring siege workshop has been captured by the Alliance!', 41, 0, 100, 0, 0, 0, '30938', 'Invisible Stalker'), +(15214, x, x, 'The Sunken Ring siege workshop has been attacked by the Horde!', 41, 0, 100, 0, 0, 0, '33060', 'Invisible Stalker'), +(15214, x, x, 'The Sunken Ring siege workshop has been captured by the Horde!', 41, 0, 100, 0, 0, 0, '30940', 'Invisible Stalker'), + +(15214, x, x, 'The Broken Temple siege workshop has been attacked by the Alliance!', 41, 0, 100, 0, 0, 0, '33061', 'Invisible Stalker'), +(15214, x, x, 'The Broken Temple siege workshop has been captured by the Alliance!', 41, 0, 100, 0, 0, 0, '30939', 'Invisible Stalker'), +(15214, x, x, 'The Broken Temple siege workshop has been attacked by the Horde!', 41, 0, 100, 0, 0, 0, '33062', 'Invisible Stalker'), +(15214, x, x, 'The Broken Temple siege workshop has been captured by the Horde!', 41, 0, 100, 0, 0, 0, '30941', 'Invisible Stalker'), + + + +(15214, x, x, 'The eastern tower has been damaged!', 41, 0, 100, 0, 0, 0, '31246', 'Invisible Stalker'), +(15214, x, x, 'The eastern tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31251', 'Invisible Stalker'), + +(15214, x, x, 'The southern tower has been damaged!', 41, 0, 100, 0, 0, 0, '31247', 'Invisible Stalker'), +(15214, x, x, 'The southern tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31250', 'Invisible Stalker'), + + +(15214, x, x, 'The western tower has been damaged!', 41, 0, 100, 0, 0, 0, '31248', 'Invisible Stalker'), +(15214, x, x, 'The western tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31249', 'Invisible Stalker'), + + + +(15214, x, x, 'The north-western keep tower has been damaged!', 41, 0, 100, 0, 0, 0, '31232', 'Invisible Stalker'), +(15214, x, x, 'The north-western keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31239', 'Invisible Stalker'), + +(15214, x, x, 'The south-western keep tower has been damaged!', 41, 0, 100, 0, 0, 0, '31233', 'Invisible Stalker'), +(15214, x, x, 'The south-western keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31238', 'Invisible Stalker'), + +(15214, x, x, 'The north-eastern keep tower has been damaged!', 41, 0, 100, 0, 0, 0, '31235', 'Invisible Stalker'), +(15214, x, x, 'The north-eastern keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31236', 'Invisible Stalker'), + +(15214, x, x, 'The south-eastern keep tower has been damaged!', 41, 0, 100, 0, 0, 0, '31234', 'Invisible Stalker'), +(15214, x, x, 'The south-eastern keep tower has been destroyed!', 41, 0, 100, 0, 0, 0, '31237', 'Invisible Stalker'), + + +(15214, x, x, 'The Alliance has defended Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8455, '31403', 'Invisible Stalker'), +(15214, x, x, 'The Alliance has captured Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8455, '27817', 'Invisible Stalker'), + +(15214, x, x, 'The Horde has defended Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8454, '31405', 'Invisible Stalker'), +(15214, x, x, 'The Horde has captured Wintergrasp Fortress!', 41, 0, 100, 0, 0, 8454, '27816', 'Invisible Stalker'), + +(0, x, x, 'You have reached Rank 1: Corporal', 42, 0, 100, 0, 0, 0, '30650', 'Cherber to 0'), +(0, x, x, 'You have reached Rank 2: First Lieutenant', 42, 0, 100, 0, 0, 0, '30651', 'Cherber to 0'), +*/ diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 3d725284cc1..76b6e66b219 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -322,8 +322,6 @@ void Battlefield::StartBattle() InvitePlayersInZoneToWar(); InvitePlayersInQueueToWar(); - DoPlaySoundToAll(BF_START); - OnBattleStart(); } @@ -339,11 +337,6 @@ void Battlefield::EndBattle(bool endByTimer) if (!endByTimer) SetDefenderTeam(GetAttackerTeam()); - if (GetDefenderTeam() == TEAM_ALLIANCE) - DoPlaySoundToAll(BF_ALLIANCE_WINS); - else - DoPlaySoundToAll(BF_HORDE_WINS); - OnBattleEnd(endByTimer); // Reset battlefield timer diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 9e706f3650b..9255121cf49 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -44,9 +44,9 @@ enum BattlefieldObjectiveStates enum BattlefieldSounds { - BF_HORDE_WINS = 8454, - BF_ALLIANCE_WINS = 8455, - BF_START = 3439 + BF_SOUND_HORDE_WINS = 8454, + BF_SOUND_ALLIANCE_WINS = 8455, + BF_SOUND_START = 3439 }; enum BattlefieldTimers @@ -97,9 +97,10 @@ class BfCapturePoint bool SetCapturePointData(GameObject* capturePoint); GameObject* GetCapturePointGo(); - uint32 GetCapturePointEntry(){ return m_capturePointEntry; } + uint32 GetCapturePointEntry() const { return m_capturePointEntry; } TeamId GetTeamId() { return m_team; } + protected: bool DelCapturePoint(); diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index 360d2d68bc3..09862f19ae2 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -21,6 +21,7 @@ #include "BattlefieldWG.h" #include "AchievementMgr.h" +#include "CreatureTextMgr.h" #include "Battleground.h" #include "MapManager.h" #include "ObjectMgr.h" @@ -32,11 +33,11 @@ BattlefieldWG::~BattlefieldWG() { - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - delete *itr; + for (WintergraspWorkshop* workshop : Workshops) + delete workshop; - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) - delete *itr; + for (BfWGGameObjectBuilding* building : BuildingsInZone) + delete building; } bool BattlefieldWG::SetupBattlefield() @@ -112,14 +113,14 @@ bool BattlefieldWG::SetupBattlefield() // Spawn workshop creatures and gameobjects for (uint8 i = 0; i < WG_MAX_WORKSHOP; i++) { - WGWorkshop* workshop = new WGWorkshop(this, i); + WintergraspWorkshop* workshop = new WintergraspWorkshop(this, i); if (i < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) workshop->GiveControlTo(GetAttackerTeam(), true); else workshop->GiveControlTo(GetDefenderTeam(), true); // Note: Capture point is added once the gameobject is created. - WorkshopsList.insert(workshop); + Workshops.insert(workshop); } // Spawn NPCs in the defender's keep, both Horde and Alliance @@ -169,8 +170,8 @@ bool BattlefieldWG::SetupBattlefield() { if (GameObject* go = SpawnGameObject(WGGameObjectBuilding[i].entry, WGGameObjectBuilding[i].x, WGGameObjectBuilding[i].y, WGGameObjectBuilding[i].z, WGGameObjectBuilding[i].o)) { - BfWGGameObjectBuilding* b = new BfWGGameObjectBuilding(this); - b->Init(go, WGGameObjectBuilding[i].type, WGGameObjectBuilding[i].WorldState, WGGameObjectBuilding[i].nameId); + BfWGGameObjectBuilding* b = new BfWGGameObjectBuilding(this, WGGameObjectBuilding[i].type, WGGameObjectBuilding[i].WorldState); + b->Init(go); if (!IsEnabled() && go->GetEntry() == GO_WINTERGRASP_VAULT_GATE) go->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED); BuildingsInZone.insert(b); @@ -233,13 +234,10 @@ void BattlefieldWG::OnBattleStart() } // Rebuild all wall - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) + for (BfWGGameObjectBuilding* building : BuildingsInZone) { - if (*itr) - { - (*itr)->Rebuild(); - (*itr)->UpdateTurretAttack(false); - } + building->Rebuild(); + building->UpdateTurretAttack(false); } SetData(BATTLEFIELD_WG_DATA_BROKEN_TOWER_ATT, 0); @@ -248,9 +246,8 @@ void BattlefieldWG::OnBattleStart() SetData(BATTLEFIELD_WG_DATA_DAMAGED_TOWER_DEF, 0); // Update graveyard (in no war time all graveyard is to deffender, in war time, depend of base) - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - if (*itr) - (*itr)->UpdateGraveyardAndWorkshop(); + 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) @@ -268,7 +265,7 @@ void BattlefieldWG::OnBattleStart() // Initialize vehicle counter UpdateCounterVehicle(true); // Send start warning to all players - SendWarning(BATTLEFIELD_WG_TEXT_START); + SendWarning(BATTLEFIELD_WG_TEXT_START_BATTLE); } void BattlefieldWG::UpdateCounterVehicle(bool init) @@ -281,15 +278,12 @@ void BattlefieldWG::UpdateCounterVehicle(bool init) SetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, 0); SetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, 0); - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) + for (WintergraspWorkshop* workshop : Workshops) { - if (WGWorkshop* workshop = (*itr)) - { - if (workshop->teamControl == TEAM_ALLIANCE) - UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, 4); - else if (workshop->teamControl == TEAM_HORDE) - UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, 4); - } + if (workshop->GetTeamControl() == TEAM_ALLIANCE) + UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A, 4); + else if (workshop->GetTeamControl() == TEAM_HORDE) + UpdateData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H, 4); } UpdateVehicleCountWG(); @@ -354,10 +348,11 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) portal->SetFaction(WintergraspFaction[GetDefenderTeam()]); // Saving data - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) - (*itr)->Save(); - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - (*itr)->Save(); + for (BfWGGameObjectBuilding* building : BuildingsInZone) + building->Save(); + + for (WintergraspWorkshop* workshop : Workshops) + workshop->Save(); for (GuidSet::const_iterator itr = m_PlayersInWar[GetDefenderTeam()].begin(); itr != m_PlayersInWar[GetDefenderTeam()].end(); ++itr) { @@ -409,9 +404,9 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) } if (!endByTimer) // win alli/horde - SendWarning((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_WIN_KEEP : BATTLEFIELD_WG_TEXT_WIN_KEEP + 1); + SendWarning(GetDefenderTeam() == TEAM_ALLIANCE ? BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_ALLIANCE : BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_HORDE); else // defend alli/horde - SendWarning((GetDefenderTeam() == TEAM_ALLIANCE) ? BATTLEFIELD_WG_TEXT_DEFEND_KEEP : BATTLEFIELD_WG_TEXT_DEFEND_KEEP + 1); + SendWarning(GetDefenderTeam() == TEAM_ALLIANCE ? BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_ALLIANCE : BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_HORDE); } // ******************************************************* @@ -442,7 +437,7 @@ void BattlefieldWG::DoCompleteOrIncrementAchievement(uint32 achievement, Player* void BattlefieldWG::OnStartGrouping() { - SendWarning(BATTLEFIELD_WG_TEXT_WILL_START); + SendWarning(BATTLEFIELD_WG_TEXT_START_GROUPING); } uint8 BattlefieldWG::GetSpiritGraveyardId(uint32 areaId) const @@ -497,13 +492,13 @@ void BattlefieldWG::OnCreatureCreate(Creature* creature) case NPC_WINTERGRASP_CATAPULT: case NPC_WINTERGRASP_DEMOLISHER: { - if (!creature->ToTempSummon() || !creature->ToTempSummon()->GetSummonerGUID() || !sObjectAccessor->FindPlayer(creature->ToTempSummon()->GetSummonerGUID())) + if (!creature->ToTempSummon() || !creature->ToTempSummon()->GetSummonerGUID() || !ObjectAccessor::FindPlayer(creature->ToTempSummon()->GetSummonerGUID())) { creature->DespawnOrUnsummon(); return; } - Player* creator = sObjectAccessor->FindPlayer(creature->ToTempSummon()->GetSummonerGUID()); + Player* creator = ObjectAccessor::FindPlayer(creature->ToTempSummon()->GetSummonerGUID()); TeamId team = creator->GetTeamId(); if (team == TEAM_HORDE) @@ -599,19 +594,16 @@ void BattlefieldWG::OnGameObjectCreate(GameObject* go) return; } - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) + for (WintergraspWorkshop* workshop : Workshops) { - if (WGWorkshop* workshop = (*itr)) + if (workshop->GetId() == workshopId) { - if (workshop->workshopId == workshopId) - { - WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, GetAttackerTeam()); + WintergraspCapturePoint* capturePoint = new WintergraspCapturePoint(this, GetAttackerTeam()); - capturePoint->SetCapturePointData(go); - capturePoint->LinkToWorkshop(workshop); - AddCapturePoint(capturePoint); - break; - } + capturePoint->SetCapturePointData(go); + capturePoint->LinkToWorkshop(workshop); + AddCapturePoint(capturePoint); + break; } } } @@ -689,7 +681,8 @@ void BattlefieldWG::PromotePlayer(Player* killer) { killer->RemoveAura(SPELL_RECRUIT); killer->CastSpell(killer, SPELL_CORPORAL, true); - SendWarning(BATTLEFIELD_WG_TEXT_FIRSTRANK, killer); + if (Creature* stalker = GetCreature(StalkerGuid)) + sCreatureTextMgr->SendChat(stalker, BATTLEFIELD_WG_TEXT_RANK_CORPORAL, killer, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, killer); } else killer->CastSpell(killer, SPELL_RECRUIT, true); @@ -700,7 +693,8 @@ void BattlefieldWG::PromotePlayer(Player* killer) { killer->RemoveAura(SPELL_CORPORAL); killer->CastSpell(killer, SPELL_LIEUTENANT, true); - SendWarning(BATTLEFIELD_WG_TEXT_SECONDRANK, killer); + if (Creature* stalker = GetCreature(StalkerGuid)) + sCreatureTextMgr->SendChat(stalker, BATTLEFIELD_WG_TEXT_RANK_FIRST_LIEUTENANT, killer, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, killer); } else killer->CastSpell(killer, SPELL_CORPORAL, true); @@ -828,22 +822,21 @@ void BattlefieldWG::FillInitialWorldStates(WorldPacket& data) data << uint32(BATTLEFIELD_WG_WORLD_STATE_VEHICLE_A) << uint32(GetData(BATTLEFIELD_WG_DATA_VEHICLE_A)); data << uint32(BATTLEFIELD_WG_WORLD_STATE_MAX_VEHICLE_A) << GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A); - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) - data << (*itr)->m_WorldState << (*itr)->m_State; + for (BfWGGameObjectBuilding* building : BuildingsInZone) + building->FillInitialWorldStates(data); - for (Workshop::const_iterator itr = WorkshopsList.begin(); itr != WorkshopsList.end(); ++itr) - if (*itr) - data << WorkshopsData[(*itr)->workshopId].worldstate << (*itr)->state; + for (WintergraspWorkshop* workshop : Workshops) + workshop->FillInitialWorldStates(data); } void BattlefieldWG::SendInitWorldStatesTo(Player* player) { - WorldPacket data(SMSG_INIT_WORLD_STATES, (4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (WorkshopsList.size() * 8))); + WorldPacket data(SMSG_INIT_WORLD_STATES, 4 + 4 + 4 + 2 + (BuildingsInZone.size() * 8) + (Workshops.size() * 8)); data << uint32(m_MapId); data << uint32(m_ZoneId); - data << uint32(0); - data << uint16(10 + BuildingsInZone.size() + WorkshopsList.size()); // Number of fields + data << uint32(0); // AreaId + data << uint16(10 + BuildingsInZone.size() + Workshops.size()); // Number of fields FillInitialWorldStates(data); @@ -931,18 +924,16 @@ void BattlefieldWG::ProcessEvent(WorldObject* obj, uint32 eventId) } // if destroy or damage event, search the wall/tower and update worldstate/send warning message - for (GameObjectBuilding::const_iterator itr = BuildingsInZone.begin(); itr != BuildingsInZone.end(); ++itr) + for (BfWGGameObjectBuilding* building : BuildingsInZone) { - if (GameObject* build = GetGameObject((*itr)->m_BuildGUID)) + if (go->GetGUID() == building->GetGUID()) { - if (go->GetEntry() == build->GetEntry()) + if (GameObject* buildingGo = GetGameObject(building->GetGUID())) { - if (build->GetGOInfo()->building.damagedEvent == eventId) - (*itr)->Damaged(); - - if (build->GetGOInfo()->building.destroyedEvent == eventId) - (*itr)->Destroyed(); - + if (buildingGo->GetGOInfo()->building.damagedEvent == eventId) + building->Damaged(); + else if (buildingGo->GetGOInfo()->building.destroyedEvent == eventId) + building->Destroyed(); break; } } @@ -1046,13 +1037,13 @@ WintergraspCapturePoint::WintergraspCapturePoint(BattlefieldWG* battlefield, Tea { m_Bf = battlefield; m_team = teamInControl; - m_Workshop = NULL; + m_Workshop = nullptr; } void WintergraspCapturePoint::ChangeTeam(TeamId /*oldTeam*/) { ASSERT(m_Workshop); - m_Workshop->GiveControlTo(m_team, false); + m_Workshop->GiveControlTo(m_team); } BfGraveyardWG::BfGraveyardWG(BattlefieldWG* battlefield) : BfGraveyard(battlefield) @@ -1061,35 +1052,36 @@ BfGraveyardWG::BfGraveyardWG(BattlefieldWG* battlefield) : BfGraveyard(battlefie m_GossipTextId = 0; } -BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg) +BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGameObjectBuildingType type, uint32 worldState) { - m_WG = wg; - m_Team = 0; - m_Type = 0; - m_WorldState = 0; - m_State = 0; - m_NameId = 0; + ASSERT(wg); + + _wg = wg; + _teamControl = TEAM_NEUTRAL; + _type = type; + _worldState = worldState; + _state = BATTLEFIELD_WG_OBJECTSTATE_NONE; } void BfWGGameObjectBuilding::Rebuild() { - switch (m_Type) + switch (_type) { case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER: case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST: case BATTLEFIELD_WG_OBJECTTYPE_DOOR: case BATTLEFIELD_WG_OBJECTTYPE_WALL: - m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's + _teamControl = _wg->GetDefenderTeam(); // Objects that are part of the keep should be the defender's break; case BATTLEFIELD_WG_OBJECTTYPE_TOWER: - m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's + _teamControl = _wg->GetAttackerTeam(); // The towers in the south should be the attacker's break; default: - m_Team = TEAM_NEUTRAL; + _teamControl = TEAM_NEUTRAL; break; } - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) + if (GameObject* build = _wg->GetGameObject(_buildGUID)) { // Rebuild gameobject if (build->IsDestructibleBuilding()) @@ -1100,105 +1092,96 @@ void BfWGGameObjectBuilding::Rebuild() go->SetGoState(GO_STATE_READY); // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (m_Team * 3); - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT - (_teamControl * 3)); + _wg->SendUpdateWorldState(_worldState, _state); } UpdateCreatureAndGo(); - build->SetFaction(WintergraspFaction[m_Team]); + build->SetFaction(WintergraspFaction[_teamControl]); } } void BfWGGameObjectBuilding::Damaged() { // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (m_Team * 3); - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DAMAGE - (_teamControl * 3)); + _wg->SendUpdateWorldState(_worldState, _state); // Send warning message - if (m_NameId) // tower damage + name - m_WG->SendWarning(m_NameId); + if (_staticTowerInfo) + _wg->SendWarning(_staticTowerInfo->TextIds.Damaged); - for (ObjectGuid guid : m_CreatureTopList[m_WG->GetAttackerTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : m_CreatureTopList[_wg->GetAttackerTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); for (ObjectGuid guid : m_TurretTopList) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); - if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER) - m_WG->UpdateDamagedTowerCount(m_WG->GetDefenderTeam()); - else if (m_Type == BATTLEFIELD_WG_OBJECTTYPE_TOWER) - m_WG->UpdateDamagedTowerCount(m_WG->GetAttackerTeam()); + if (_type == BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER) + _wg->UpdateDamagedTowerCount(_wg->GetDefenderTeam()); + else if (_type == BATTLEFIELD_WG_OBJECTTYPE_TOWER) + _wg->UpdateDamagedTowerCount(_wg->GetAttackerTeam()); } void BfWGGameObjectBuilding::Destroyed() { // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (m_Team * 3); - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = WintergraspGameObjectState(BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY - (_teamControl * 3)); + _wg->SendUpdateWorldState(_worldState, _state); // Warn players - if (m_NameId) - m_WG->SendWarning(m_NameId); + if (_staticTowerInfo) + _wg->SendWarning(_staticTowerInfo->TextIds.Destroyed); - switch (m_Type) + switch (_type) { // Inform the global wintergrasp script of the destruction of this object case BATTLEFIELD_WG_OBJECTTYPE_TOWER: case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER: - m_WG->UpdatedDestroyedTowerCount(TeamId(m_Team)); + _wg->UpdatedDestroyedTowerCount(_teamControl); break; case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST: - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) + if (GameObject* build = _wg->GetGameObject(_buildGUID)) if (GameObject* go = build->FindNearestGameObject(GO_WINTERGRASP_KEEP_COLLISION_WALL, 50.0f)) go->SetGoState(GO_STATE_ACTIVE); - m_WG->SetRelicInteractible(true); - if (m_WG->GetRelic()) - m_WG->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + _wg->SetRelicInteractible(true); + if (_wg->GetRelic()) + _wg->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); else - TC_LOG_ERROR("misc", "BattlefieldWG: Relic not found."); + TC_LOG_ERROR("bg.battlefield.wg", "Titan Relic not found."); break; } - m_WG->BrokenWallOrTower(TeamId(m_Team)); + _wg->BrokenWallOrTower(_teamControl); } -void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameId) +void BfWGGameObjectBuilding::Init(GameObject* go) { if (!go) return; // GameObject associated to object - m_BuildGUID = go->GetGUID(); + _buildGUID = go->GetGUID(); - // Type of building (WALL/TOWER/DOOR) - m_Type = type; - - // WorldState for client (icon on map) - m_WorldState = worldstate; - - // NameId for Warning text - m_NameId = nameId; - - switch (m_Type) + switch (_type) { case BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER: case BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST: case BATTLEFIELD_WG_OBJECTTYPE_DOOR: case BATTLEFIELD_WG_OBJECTTYPE_WALL: - m_Team = m_WG->GetDefenderTeam(); // Objects that are part of the keep should be the defender's + _teamControl = _wg->GetDefenderTeam(); // Objects that are part of the keep should be the defender's break; case BATTLEFIELD_WG_OBJECTTYPE_TOWER: - m_Team = m_WG->GetAttackerTeam(); // The towers in the south should be the attacker's + _teamControl = _wg->GetAttackerTeam(); // The towers in the south should be the attacker's break; default: - m_Team = TEAM_NEUTRAL; + _teamControl = TEAM_NEUTRAL; break; } - m_State = sWorld->getWorldState(m_WorldState); - switch (m_State) + _state = WintergraspGameObjectState(sWorld->getWorldState(_worldState)); + switch (_state) { case BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT: case BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT: @@ -1218,25 +1201,25 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate switch (go->GetEntry()) { case GO_WINTERGRASP_FORTRESS_TOWER_1: - towerId = 0; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_NW; break; case GO_WINTERGRASP_FORTRESS_TOWER_2: - towerId = 1; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_SW; break; case GO_WINTERGRASP_FORTRESS_TOWER_3: - towerId = 2; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_SE; break; case GO_WINTERGRASP_FORTRESS_TOWER_4: - towerId = 3; + towerId = BATTLEFIELD_WG_TOWER_FORTRESS_NE; break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: - towerId = 4; + towerId = BATTLEFIELD_WG_TOWER_SHADOWSIGHT; break; case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: - towerId = 5; + towerId = BATTLEFIELD_WG_TOWER_WINTER_S_EDGE; break; case GO_WINTERGRASP_FLAMEWATCH_TOWER: - towerId = 6; + towerId = BATTLEFIELD_WG_TOWER_FLAMEWATCH; break; } @@ -1246,9 +1229,9 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < AttackTowers[towerId - 4].nbObject; i++) { WintergraspObjectPositionData const& gobData = AttackTowers[towerId - 4].GameObject[i]; - if (GameObject* goHorde = m_WG->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o)) + if (GameObject* goHorde = _wg->SpawnGameObject(gobData.entryHorde, gobData.x, gobData.y, gobData.z, gobData.o)) m_GameObjectList[TEAM_HORDE].insert(goHorde->GetGUID()); - if (GameObject* goAlliance = m_WG->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o)) + if (GameObject* goAlliance = _wg->SpawnGameObject(gobData.entryAlliance, gobData.x, gobData.y, gobData.z, gobData.o)) m_GameObjectList[TEAM_ALLIANCE].insert(goAlliance->GetGUID()); } @@ -1256,9 +1239,9 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < AttackTowers[towerId - 4].nbCreatureBottom; i++) { WintergraspObjectPositionData const& creatureData = AttackTowers[towerId - 4].CreatureBottom[i]; - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) m_CreatureBottomList[TEAM_HORDE].insert(creature->GetGUID()); - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) m_CreatureBottomList[TEAM_ALLIANCE].insert(creature->GetGUID()); } @@ -1266,20 +1249,23 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < AttackTowers[towerId - 4].nbCreatureTop; i++) { WintergraspObjectPositionData const& creatureData = AttackTowers[towerId - 4].CreatureTop[i]; - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryHorde, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_HORDE)) m_CreatureTopList[TEAM_HORDE].insert(creature->GetGUID()); - if (Creature* creature = m_WG->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) + if (Creature* creature = _wg->SpawnCreature(creatureData.entryAlliance, creatureData.x, creatureData.y, creatureData.z, creatureData.o, TEAM_ALLIANCE)) m_CreatureTopList[TEAM_ALLIANCE].insert(creature->GetGUID()); } } if (towerId >= 0) { + ASSERT(towerId < WG_MAX_TOWER); + _staticTowerInfo = &TowerData[towerId]; + // Spawn Turret bottom for (uint8 i = 0; i < TowerCannon[towerId].nbTowerCannonBottom; i++) { Position const& turretPos = TowerCannon[towerId].TowerCannonBottom[i]; - if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE)) + if (Creature* turret = _wg->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, turretPos, TEAM_ALLIANCE)) { m_TowerCannonBottomList.insert(turret->GetGUID()); switch (go->GetEntry()) @@ -1288,15 +1274,15 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); break; } - m_WG->HideNpc(turret); + _wg->HideNpc(turret); } } @@ -1304,7 +1290,7 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate for (uint8 i = 0; i < TowerCannon[towerId].nbTurretTop; i++) { Position const& towerCannonPos = TowerCannon[towerId].TurretTop[i]; - if (Creature* turret = m_WG->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0))) + if (Creature* turret = _wg->SpawnCreature(NPC_WINTERGRASP_TOWER_CANNON, towerCannonPos, TeamId(0))) { m_TurretTopList.insert(turret->GetGUID()); switch (go->GetEntry()) @@ -1313,15 +1299,15 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate case GO_WINTERGRASP_FORTRESS_TOWER_2: case GO_WINTERGRASP_FORTRESS_TOWER_3: case GO_WINTERGRASP_FORTRESS_TOWER_4: - turret->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); break; case GO_WINTERGRASP_SHADOWSIGHT_TOWER: case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: case GO_WINTERGRASP_FLAMEWATCH_TOWER: - turret->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); + turret->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); break; } - m_WG->HideNpc(turret); + _wg->HideNpc(turret); } } UpdateCreatureAndGo(); @@ -1330,61 +1316,58 @@ void BfWGGameObjectBuilding::Init(GameObject* go, uint32 type, uint32 worldstate void BfWGGameObjectBuilding::UpdateCreatureAndGo() { - for (ObjectGuid guid : m_CreatureTopList[m_WG->GetDefenderTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : m_CreatureTopList[_wg->GetDefenderTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); - for (ObjectGuid guid : m_CreatureTopList[m_WG->GetAttackerTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, true); + for (ObjectGuid guid : m_CreatureTopList[_wg->GetAttackerTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, true); - for (ObjectGuid guid : m_CreatureBottomList[m_WG->GetDefenderTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : m_CreatureBottomList[_wg->GetDefenderTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); - for (ObjectGuid guid : m_CreatureBottomList[m_WG->GetAttackerTeam()]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, true); + for (ObjectGuid guid : m_CreatureBottomList[_wg->GetAttackerTeam()]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, true); - for (ObjectGuid guid : m_GameObjectList[m_WG->GetDefenderTeam()]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_ONE_DAY); + for (ObjectGuid guid : m_GameObjectList[_wg->GetDefenderTeam()]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_ONE_DAY); - for (ObjectGuid guid : m_GameObjectList[m_WG->GetAttackerTeam()]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); + for (ObjectGuid guid : m_GameObjectList[_wg->GetAttackerTeam()]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_IMMEDIATELY); } void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) { for (ObjectGuid guid : m_TowerCannonBottomList) { - if (Creature* creature = m_WG->GetCreature(guid)) + if (Creature* creature = _wg->GetCreature(guid)) { - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) - { - if (disable) - m_WG->HideNpc(creature); - else - m_WG->ShowNpc(creature, true); + if (disable) + _wg->HideNpc(creature); + else + _wg->ShowNpc(creature, true); - switch (build->GetEntry()) + switch (_buildGUID.GetEntry()) + { + case GO_WINTERGRASP_FORTRESS_TOWER_1: + case GO_WINTERGRASP_FORTRESS_TOWER_2: + case GO_WINTERGRASP_FORTRESS_TOWER_3: + case GO_WINTERGRASP_FORTRESS_TOWER_4: { - case GO_WINTERGRASP_FORTRESS_TOWER_1: - case GO_WINTERGRASP_FORTRESS_TOWER_2: - case GO_WINTERGRASP_FORTRESS_TOWER_3: - case GO_WINTERGRASP_FORTRESS_TOWER_4: - { - creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); - break; - } - case GO_WINTERGRASP_SHADOWSIGHT_TOWER: - case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: - case GO_WINTERGRASP_FLAMEWATCH_TOWER: - { - creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); - break; - } + creature->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); + break; + } + case GO_WINTERGRASP_SHADOWSIGHT_TOWER: + case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: + case GO_WINTERGRASP_FLAMEWATCH_TOWER: + { + creature->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); + break; } } } @@ -1392,238 +1375,179 @@ void BfWGGameObjectBuilding::UpdateTurretAttack(bool disable) for (ObjectGuid guid : m_TurretTopList) { - if (Creature* creature = m_WG->GetCreature(guid)) + if (Creature* creature = _wg->GetCreature(guid)) { - if (GameObject* build = m_WG->GetGameObject(m_BuildGUID)) - { - if (disable) - m_WG->HideNpc(creature); - else - m_WG->ShowNpc(creature, true); + if (disable) + _wg->HideNpc(creature); + else + _wg->ShowNpc(creature, true); - switch (build->GetEntry()) + switch (_buildGUID.GetEntry()) + { + case GO_WINTERGRASP_FORTRESS_TOWER_1: + case GO_WINTERGRASP_FORTRESS_TOWER_2: + case GO_WINTERGRASP_FORTRESS_TOWER_3: + case GO_WINTERGRASP_FORTRESS_TOWER_4: { - case GO_WINTERGRASP_FORTRESS_TOWER_1: - case GO_WINTERGRASP_FORTRESS_TOWER_2: - case GO_WINTERGRASP_FORTRESS_TOWER_3: - case GO_WINTERGRASP_FORTRESS_TOWER_4: - { - creature->setFaction(WintergraspFaction[m_WG->GetDefenderTeam()]); - break; - } - case GO_WINTERGRASP_SHADOWSIGHT_TOWER: - case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: - case GO_WINTERGRASP_FLAMEWATCH_TOWER: - { - creature->setFaction(WintergraspFaction[m_WG->GetAttackerTeam()]); - break; - } + creature->setFaction(WintergraspFaction[_wg->GetDefenderTeam()]); + break; + } + case GO_WINTERGRASP_SHADOWSIGHT_TOWER: + case GO_WINTERGRASP_WINTER_S_EDGE_TOWER: + case GO_WINTERGRASP_FLAMEWATCH_TOWER: + { + creature->setFaction(WintergraspFaction[_wg->GetAttackerTeam()]); + break; } } } } } -void BfWGGameObjectBuilding::Save() +void BfWGGameObjectBuilding::FillInitialWorldStates(WorldPacket& data) { - sWorld->setWorldState(m_WorldState, m_State); + data << uint32(_worldState) << uint32(_state); } -WGWorkshop::WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId) -{ - ASSERT(_bf || _workshopId < WG_MAX_WORKSHOP); - - bf = _bf; - workshopId = _workshopId; - teamControl = BATTLEFIELD_WG_TEAM_NEUTRAL; - state = BATTLEFIELD_WG_OBJECTSTATE_NONE; -} - -void WGWorkshop::GiveControlTo(uint8 team, bool init) -{ - switch (team) - { - case BATTLEFIELD_WG_TEAM_NEUTRAL: - { - // Send warning message to all player to inform a faction attack to a workshop - // alliance / horde attacking a workshop - bf->SendWarning(teamControl ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1); - break; - } - case BATTLEFIELD_WG_TEAM_ALLIANCE: - case BATTLEFIELD_WG_TEAM_HORDE: - { - // Updating worldstate - state = team == BATTLEFIELD_WG_TEAM_ALLIANCE ? BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT : BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; - bf->SendUpdateWorldState(WorkshopsData[workshopId].worldstate, state); - - // Warning message - if (!init) // workshop taken - alliance - bf->SendWarning(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? WorkshopsData[workshopId].text : WorkshopsData[workshopId].text + 1); - - // Found associate graveyard and update it - if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - if (bf->GetGraveyardById(workshopId)) - bf->GetGraveyardById(workshopId)->GiveControlTo(team == BATTLEFIELD_WG_TEAM_ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE); - - teamControl = team; - break; - } - } - - if (!init) - bf->UpdateCounterVehicle(false); -} - -void WGWorkshop::UpdateGraveyardAndWorkshop() +void BfWGGameObjectBuilding::Save() { - if (workshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - bf->GetGraveyardById(workshopId)->GiveControlTo(TeamId(teamControl)); - else - GiveControlTo(bf->GetDefenderTeam(), true); + sWorld->setWorldState(_worldState, _state); } -void WGWorkshop::Save() +WintergraspWorkshop::WintergraspWorkshop(BattlefieldWG* wg, uint8 type) { - sWorld->setWorldState(WorkshopsData[workshopId].worldstate, state); -} + ASSERT(wg && type < WG_MAX_WORKSHOP); -WintergraspWorkshopData::WintergraspWorkshopData(BattlefieldWG* wg) -{ - m_WG = wg; - m_Type = 0; - m_State = 0; - m_WorldState = 0; - m_TeamControl = 0; - m_NameId = 0; + _wg = wg; + _state = BATTLEFIELD_WG_OBJECTSTATE_NONE; + _teamControl = TEAM_NEUTRAL; + _staticInfo = &WorkshopData[type]; } -void WintergraspWorkshopData::AddCreature(WintergraspObjectPositionData const& obj) +void WintergraspWorkshop::AddCreature(WintergraspObjectPositionData const& obj) { - if (Creature* creature = m_WG->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE)) - m_CreatureOnPoint[TEAM_HORDE].insert(creature->GetGUID()); + if (Creature* creature = _wg->SpawnCreature(obj.entryHorde, obj.x, obj.y, obj.z, obj.o, TEAM_HORDE)) + _creatureOnPoint[TEAM_HORDE].insert(creature->GetGUID()); - if (Creature* creature = m_WG->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE)) - m_CreatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID()); + if (Creature* creature = _wg->SpawnCreature(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o, TEAM_ALLIANCE)) + _creatureOnPoint[TEAM_ALLIANCE].insert(creature->GetGUID()); } -void WintergraspWorkshopData::AddGameObject(WintergraspObjectPositionData const& obj) +void WintergraspWorkshop::AddGameObject(WintergraspObjectPositionData const& obj) { - if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o)) - m_GameObjectOnPoint[TEAM_HORDE].insert(gameobject->GetGUID()); - if (GameObject* gameobject = m_WG->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o)) - m_GameObjectOnPoint[TEAM_ALLIANCE].insert(gameobject->GetGUID()); + if (GameObject* go = _wg->SpawnGameObject(obj.entryHorde, obj.x, obj.y, obj.z, obj.o)) + _gameObjectOnPoint[TEAM_HORDE].insert(go->GetGUID()); + if (GameObject* go = _wg->SpawnGameObject(obj.entryAlliance, obj.x, obj.y, obj.z, obj.o)) + _gameObjectOnPoint[TEAM_ALLIANCE].insert(go->GetGUID()); } -void WintergraspWorkshopData::Init(uint32 worldstate, uint32 type, uint32 nameId) +void WintergraspWorkshop::GiveControlTo(TeamId teamId, bool init /*= false*/) { - m_WorldState = worldstate; - m_Type = type; - m_NameId = nameId; -} - -void WintergraspWorkshopData::GiveControlTo(uint8 team, bool init) -{ - switch (team) + switch (teamId) { - case BATTLEFIELD_WG_TEAM_NEUTRAL: + case TEAM_NEUTRAL: { // Send warning message to all player for inform a faction attack a workshop // alliance / horde attacking workshop - m_WG->SendWarning(m_TeamControl ? m_NameId : m_NameId + 1); + _wg->SendWarning(_teamControl == TEAM_ALLIANCE ? _staticInfo->TextIds.HordeAttack : _staticInfo->TextIds.AllianceAttack); break; } - case BATTLEFIELD_WG_TEAM_ALLIANCE: + case TEAM_ALLIANCE: { // Show Alliance creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_ALLIANCE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, creature->GetEntry() != 30499); + for (ObjectGuid guid : _creatureOnPoint[TEAM_ALLIANCE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, creature->GetEntry() != 30499); // Hide Horde creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_HORDE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : _creatureOnPoint[TEAM_HORDE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); // Show Alliance gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_ALLIANCE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_ALLIANCE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_IMMEDIATELY); // Hide Horde gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_HORDE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_ONE_DAY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_HORDE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_ONE_DAY); // Updating worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_INTACT; + _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); // Warning message - if (!init) // workshop taken - alliance - m_WG->SendWarning(m_NameId); + if (!init) + _wg->SendWarning(_staticInfo->TextIds.AllianceCapture); // workshop taken - alliance // Found associate graveyard and update it - if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - if (m_WG->GetGraveyardById(m_Type)) - m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_ALLIANCE); + if (_staticInfo->WorkshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) + if (BfGraveyard* gy = _wg->GetGraveyardById(_staticInfo->WorkshopId)) + gy->GiveControlTo(TEAM_ALLIANCE); - m_TeamControl = team; + _teamControl = teamId; break; } - case BATTLEFIELD_WG_TEAM_HORDE: + case TEAM_HORDE: { // Show Horde creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_HORDE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->ShowNpc(creature, creature->GetEntry() != 30400); + for (ObjectGuid guid : _creatureOnPoint[TEAM_HORDE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->ShowNpc(creature, creature->GetEntry() != 30400); // Hide Alliance creature - for (ObjectGuid guid : m_CreatureOnPoint[TEAM_ALLIANCE]) - if (Creature* creature = m_WG->GetCreature(guid)) - m_WG->HideNpc(creature); + for (ObjectGuid guid : _creatureOnPoint[TEAM_ALLIANCE]) + if (Creature* creature = _wg->GetCreature(guid)) + _wg->HideNpc(creature); // Hide Alliance gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_ALLIANCE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_ONE_DAY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_ALLIANCE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_ONE_DAY); // Show Horde gameobject - for (ObjectGuid guid : m_GameObjectOnPoint[TEAM_HORDE]) - if (GameObject* object = m_WG->GetGameObject(guid)) - object->SetRespawnTime(RESPAWN_IMMEDIATELY); + for (ObjectGuid guid : _gameObjectOnPoint[TEAM_HORDE]) + if (GameObject* go = _wg->GetGameObject(guid)) + go->SetRespawnTime(RESPAWN_IMMEDIATELY); // Update worldstate - m_State = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; - m_WG->SendUpdateWorldState(m_WorldState, m_State); + _state = BATTLEFIELD_WG_OBJECTSTATE_HORDE_INTACT; + _wg->SendUpdateWorldState(_staticInfo->WorldStateId, _state); // Warning message - if (!init) // workshop taken - horde - m_WG->SendWarning(m_NameId + 1); + if (!init) + _wg->SendWarning(_staticInfo->TextIds.HordeCapture); // workshop taken - horde // Update graveyard control - if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - if (m_WG->GetGraveyardById(m_Type)) - m_WG->GetGraveyardById(m_Type)->GiveControlTo(TEAM_HORDE); + if (_staticInfo->WorkshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) + if (BfGraveyard* gy = _wg->GetGraveyardById(_staticInfo->WorkshopId)) + gy->GiveControlTo(TEAM_HORDE); - m_TeamControl = team; + _teamControl = teamId; break; } } if (!init) - m_WG->UpdateCounterVehicle(false); + _wg->UpdateCounterVehicle(false); } -void WintergraspWorkshopData::UpdateGraveyardAndWorkshop() +void WintergraspWorkshop::UpdateGraveyardAndWorkshop() { - if (m_Type < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) - m_WG->GetGraveyardById(m_Type)->GiveControlTo(TeamId(m_TeamControl)); + if (_staticInfo->WorkshopId < BATTLEFIELD_WG_WORKSHOP_KEEP_WEST) + _wg->GetGraveyardById(_staticInfo->WorkshopId)->GiveControlTo(_teamControl); else - GiveControlTo(m_WG->GetDefenderTeam(), true); + GiveControlTo(_wg->GetDefenderTeam(), true); +} + +void WintergraspWorkshop::FillInitialWorldStates(WorldPacket& data) +{ + data << uint32(_staticInfo->WorldStateId) << uint32(_state); } -void WintergraspWorkshopData::Save() +void WintergraspWorkshop::Save() { - sWorld->setWorldState(m_WorldState, m_State); + sWorld->setWorldState(_staticInfo->WorldStateId, _state); } diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.h b/src/server/game/Battlefield/Zones/BattlefieldWG.h index f5fa9b24377..95a9902f898 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.h +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.h @@ -25,11 +25,11 @@ class BattlefieldWG; class WintergraspCapturePoint; struct BfWGGameObjectBuilding; -struct WGWorkshop; +struct WintergraspWorkshop; typedef std::set<GameObject*> GameObjectSet; -typedef std::set<BfWGGameObjectBuilding*> GameObjectBuilding; -typedef std::set<WGWorkshop*> Workshop; +typedef std::set<BfWGGameObjectBuilding*> GameObjectBuildingSet; +typedef std::set<WintergraspWorkshop*> WorkshopSet; typedef std::set<Group*> GroupSet; //typedef std::set<WintergraspCapturePoint *> CapturePointSet; unused ? @@ -222,7 +222,7 @@ struct BfWGCoordGY float o; uint32 gyid; uint8 type; - int32 textid; // for gossip menu + uint32 textid; // for gossip menu TeamId startcontrol; }; @@ -253,13 +253,13 @@ class WintergraspCapturePoint : public BfCapturePoint public: WintergraspCapturePoint(BattlefieldWG* battlefield, TeamId teamInControl); - void LinkToWorkshop(WGWorkshop* workshop) { m_Workshop = workshop; } + void LinkToWorkshop(WintergraspWorkshop* workshop) { m_Workshop = workshop; } void ChangeTeam(TeamId oldteam) override; TeamId GetTeam() const { return m_team; } protected: - WGWorkshop* m_Workshop; + WintergraspWorkshop* m_Workshop; }; /* ######################### * @@ -415,11 +415,11 @@ class BattlefieldWG : public Battlefield protected: bool m_isRelicInteractible; - Workshop WorkshopsList; + WorkshopSet Workshops; GuidSet DefenderPortalList; GuidSet m_KeepGameObject[BG_TEAMS_COUNT]; - GameObjectBuilding BuildingsInZone; + GameObjectBuildingSet BuildingsInZone; GuidSet m_vehicles[BG_TEAMS_COUNT]; GuidSet CanonList; @@ -446,6 +446,7 @@ uint8 const WG_MAX_OUTSIDE_NPC = 14; uint8 const WG_OUTSIDE_ALLIANCE_NPC = 7; uint8 const WG_MAX_TELEPORTER = 12; uint8 const WG_MAX_WORKSHOP = 6; +uint8 const WG_MAX_TOWER = 7; enum WintergraspGameObjectBuildingType { @@ -471,6 +472,17 @@ enum WintergraspGameObjectState BATTLEFIELD_WG_OBJECTSTATE_ALLIANCE_DESTROY }; +enum WintergraspTowerIds +{ + BATTLEFIELD_WG_TOWER_FORTRESS_NW, + BATTLEFIELD_WG_TOWER_FORTRESS_SW, + BATTLEFIELD_WG_TOWER_FORTRESS_SE, + BATTLEFIELD_WG_TOWER_FORTRESS_NE, + BATTLEFIELD_WG_TOWER_SHADOWSIGHT, + BATTLEFIELD_WG_TOWER_WINTER_S_EDGE, + BATTLEFIELD_WG_TOWER_FLAMEWATCH +}; + enum WintergraspWorkshopIds { BATTLEFIELD_WG_WORKSHOP_NE, @@ -498,32 +510,50 @@ enum WintergraspTeamControl BATTLEFIELD_WG_TEAM_NEUTRAL }; -/// @todo: Can this be handled with creature_text or SmartAI ? enum WintergraspText { - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE = 12055, - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW = 12052, - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE = 12053, - BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW = 12054, - BATTLEFIELD_WG_TEXT_WORKSHOP_ATTACK = 12051, - BATTLEFIELD_WG_TEXT_WORKSHOP_TAKEN = 12050, - BATTLEFIELD_WG_TEXT_ALLIANCE = 12057, - BATTLEFIELD_WG_TEXT_HORDE = 12056, - BATTLEFIELD_WG_TEXT_WILL_START = 12058, - BATTLEFIELD_WG_TEXT_START = 12067, - BATTLEFIELD_WG_TEXT_FIRSTRANK = 12059, - BATTLEFIELD_WG_TEXT_SECONDRANK = 12060, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NE = 12062, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NW = 12064, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SE = 12061, - BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SW = 12063, - BATTLEFIELD_WG_TEXT_TOWER_DAMAGE = 12065, - BATTLEFIELD_WG_TEXT_TOWER_DESTROY = 12066, - BATTLEFIELD_WG_TEXT_TOWER_NAME_S = 12069, - BATTLEFIELD_WG_TEXT_TOWER_NAME_E = 12070, - BATTLEFIELD_WG_TEXT_TOWER_NAME_W = 12071, - BATTLEFIELD_WG_TEXT_DEFEND_KEEP = 12068, - BATTLEFIELD_WG_TEXT_WIN_KEEP = 12072 + // Invisible Stalker + BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DAMAGE = 1, + BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DESTROY = 2, + BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DAMAGE = 3, + BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DESTROY = 4, + BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DAMAGE = 5, + BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DESTROY = 6, + BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DAMAGE = 7, + BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DESTROY = 8, + BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DAMAGE = 9, + BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DESTROY = 10, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_ALLIANCE = 11, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_ALLIANCE = 12, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_HORDE = 13, + BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_HORDE = 14, + BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_ALLIANCE = 15, + BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_ALLIANCE = 16, + BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_HORDE = 17, + BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_HORDE = 18, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_ALLIANCE = 19, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_ALLIANCE = 20, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_HORDE = 21, + BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_HORDE = 22, + BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_ALLIANCE = 23, + BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_ALLIANCE = 24, + BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_HORDE = 25, + BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_HORDE = 26, + + BATTLEFIELD_WG_TEXT_START_GROUPING = 27, + BATTLEFIELD_WG_TEXT_START_BATTLE = 28, + BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_ALLIANCE = 29, + BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_ALLIANCE = 30, + BATTLEFIELD_WG_TEXT_FORTRESS_DEFEND_HORDE = 31, + BATTLEFIELD_WG_TEXT_FORTRESS_CAPTURE_HORDE = 32, + + BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DAMAGE = 33, + BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DESTROY = 34, + BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DAMAGE = 35, + BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DESTROY = 36, + + BATTLEFIELD_WG_TEXT_RANK_CORPORAL = 37, + BATTLEFIELD_WG_TEXT_RANK_FIRST_LIEUTENANT = 38 }; enum WintergraspGameObject @@ -550,16 +580,6 @@ enum WintergraspGameObject GO_WINTERGRASP_KEEP_COLLISION_WALL = 194323 }; -struct WintergraspObjectPositionData -{ - float x; - float y; - float z; - float o; - uint32 entryHorde; - uint32 entryAlliance; -}; - // ***************************************************** // ************ Destructible (Wall, Tower..) *********** // ***************************************************** @@ -572,72 +592,90 @@ struct WintergraspBuildingSpawnData float y; float z; float o; - uint32 type; - uint32 nameId; + WintergraspGameObjectBuildingType type; }; -struct WintergraspRebuildableBuildingData +struct WintergraspObjectPositionData { - ObjectGuid Guid; - uint32 entry; - uint32 WorldState; float x; float y; float z; float o; - uint32 type; - uint32 nameId; + uint32 entryHorde; + uint32 entryAlliance; }; -const WintergraspBuildingSpawnData WGGameObjectBuilding[WG_MAX_OBJ] = +WintergraspBuildingSpawnData const WGGameObjectBuilding[WG_MAX_OBJ] = { // Wall (Not spawned in db) - // Entry WS X Y Z O type NameID - { 190219, 3749, 5371.46f, 3047.47f, 407.571f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190220, 3750, 5331.26f, 3047.1f, 407.923f, 0.052359f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191795, 3764, 5385.84f, 2909.49f, 409.713f, 0.00872f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191796, 3772, 5384.45f, 2771.84f, 410.27f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191799, 3762, 5371.44f, 2630.61f, 408.816f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191800, 3766, 5301.84f, 2909.09f, 409.866f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191801, 3770, 5301.06f, 2771.41f, 409.901f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191802, 3751, 5280.2f, 2995.58f, 408.825f, 1.61443f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191803, 3752, 5279.14f, 2956.02f, 408.604f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191804, 3767, 5278.69f, 2882.51f, 409.539f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191806, 3769, 5279.5f, 2798.94f, 409.998f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191807, 3759, 5279.94f, 2724.77f, 409.945f, 1.56207f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191808, 3760, 5279.6f, 2683.79f, 409.849f, 1.55334f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191809, 3761, 5330.96f, 2630.78f, 409.283f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190369, 3753, 5256.08f, 2933.96f, 409.357f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190370, 3758, 5257.46f, 2747.33f, 409.743f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190371, 3754, 5214.96f, 2934.09f, 409.19f, -0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190372, 3757, 5215.82f, 2747.57f, 409.188f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190374, 3755, 5162.27f, 2883.04f, 410.256f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 190376, 3756, 5163.72f, 2799.84f, 409.227f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, + // Entry WS X Y Z O Type + { 190219, 3749, 5371.46f, 3047.47f, 407.571f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190220, 3750, 5331.26f, 3047.1f, 407.923f, 0.052359f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191795, 3764, 5385.84f, 2909.49f, 409.713f, 0.00872f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191796, 3772, 5384.45f, 2771.84f, 410.27f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191799, 3762, 5371.44f, 2630.61f, 408.816f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191800, 3766, 5301.84f, 2909.09f, 409.866f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191801, 3770, 5301.06f, 2771.41f, 409.901f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191802, 3751, 5280.2f, 2995.58f, 408.825f, 1.61443f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191803, 3752, 5279.14f, 2956.02f, 408.604f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191804, 3767, 5278.69f, 2882.51f, 409.539f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191806, 3769, 5279.5f, 2798.94f, 409.998f, 1.5708f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191807, 3759, 5279.94f, 2724.77f, 409.945f, 1.56207f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191808, 3760, 5279.6f, 2683.79f, 409.849f, 1.55334f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191809, 3761, 5330.96f, 2630.78f, 409.283f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190369, 3753, 5256.08f, 2933.96f, 409.357f, 3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190370, 3758, 5257.46f, 2747.33f, 409.743f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190371, 3754, 5214.96f, 2934.09f, 409.19f, -0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190372, 3757, 5215.82f, 2747.57f, 409.188f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190374, 3755, 5162.27f, 2883.04f, 410.256f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 190376, 3756, 5163.72f, 2799.84f, 409.227f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, // Tower of keep (Not spawned in db) - { 190221, 3711, 5281.15f, 3044.59f, 407.843f, 3.11539f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NW }, - { 190373, 3713, 5163.76f, 2932.23f, 409.19f, 3.12412f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SW }, - { 190377, 3714, 5166.4f, 2748.37f, 409.188f, -1.5708f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_SE }, - { 190378, 3712, 5281.19f, 2632.48f, 409.099f, -1.58825f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER, BATTLEFIELD_WG_TEXT_KEEPTOWER_NAME_NE }, + { 190221, 3711, 5281.15f, 3044.59f, 407.843f, 3.11539f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // NW + { 190373, 3713, 5163.76f, 2932.23f, 409.19f, 3.12412f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // SW + { 190377, 3714, 5166.4f, 2748.37f, 409.188f, -1.5708f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // SE + { 190378, 3712, 5281.19f, 2632.48f, 409.099f, -1.58825f, BATTLEFIELD_WG_OBJECTTYPE_KEEP_TOWER }, // NE // Wall (with passage) (Not spawned in db) - { 191797, 3765, 5343.29f, 2908.86f, 409.576f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191798, 3771, 5342.72f, 2771.39f, 409.625f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, - { 191805, 3768, 5279.13f, 2840.8f, 409.783f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL, 0 }, + { 191797, 3765, 5343.29f, 2908.86f, 409.576f, 0.008724f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191798, 3771, 5342.72f, 2771.39f, 409.625f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, + { 191805, 3768, 5279.13f, 2840.8f, 409.783f, 1.57952f, BATTLEFIELD_WG_OBJECTTYPE_WALL }, // South tower (Not spawned in db) - { 190356, 3704, 4557.17f, 3623.94f, 395.883f, 1.67552f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_W }, - { 190357, 3705, 4398.17f, 2822.5f, 405.627f, -3.12412f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_S }, - { 190358, 3706, 4459.1f, 1944.33f, 434.991f, -2.00276f, BATTLEFIELD_WG_OBJECTTYPE_TOWER, BATTLEFIELD_WG_TEXT_TOWER_NAME_E }, + { 190356, 3704, 4557.17f, 3623.94f, 395.883f, 1.67552f, BATTLEFIELD_WG_OBJECTTYPE_TOWER }, // W + { 190357, 3705, 4398.17f, 2822.5f, 405.627f, -3.12412f, BATTLEFIELD_WG_OBJECTTYPE_TOWER }, // S + { 190358, 3706, 4459.1f, 1944.33f, 434.991f, -2.00276f, BATTLEFIELD_WG_OBJECTTYPE_TOWER }, // E // Door of forteress (Not spawned in db) - { GO_WINTERGRASP_FORTRESS_GATE, 3763, 5162.99f, 2841.23f, 410.162f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_DOOR, 0 }, + { GO_WINTERGRASP_FORTRESS_GATE, 3763, 5162.99f, 2841.23f, 410.162f, -3.13286f, BATTLEFIELD_WG_OBJECTTYPE_DOOR }, // Last door (Not spawned in db) - { GO_WINTERGRASP_VAULT_GATE, 3773, 5397.11f, 2841.54f, 425.899f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST, 0 }, + { GO_WINTERGRASP_VAULT_GATE, 3773, 5397.11f, 2841.54f, 425.899f, 3.14159f, BATTLEFIELD_WG_OBJECTTYPE_DOOR_LAST }, }; -const Position WGTurret[WG_MAX_TURRET] = +struct StaticWintergraspTowerInfo +{ + uint8 TowerId; + + struct + { + uint8 Damaged; + uint8 Destroyed; + } TextIds; +}; + +StaticWintergraspTowerInfo const TowerData[WG_MAX_TOWER] = +{ + { BATTLEFIELD_WG_TOWER_FORTRESS_NW, BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_NW_KEEPTOWER_DESTROY }, + { BATTLEFIELD_WG_TOWER_FORTRESS_SW, BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_SW_KEEPTOWER_DESTROY }, + { BATTLEFIELD_WG_TOWER_FORTRESS_SE, BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_SE_KEEPTOWER_DESTROY }, + { BATTLEFIELD_WG_TOWER_FORTRESS_NE, BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DAMAGE, BATTLEFIELD_WG_TEXT_NE_KEEPTOWER_DESTROY }, + { BATTLEFIELD_WG_TOWER_SHADOWSIGHT, BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DAMAGE, BATTLEFIELD_WG_TEXT_WESTERN_TOWER_DESTROY }, + { BATTLEFIELD_WG_TOWER_WINTER_S_EDGE, BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DAMAGE, BATTLEFIELD_WG_TEXT_SOUTHERN_TOWER_DESTROY }, + { BATTLEFIELD_WG_TOWER_FLAMEWATCH, BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DAMAGE, BATTLEFIELD_WG_TEXT_EASTERN_TOWER_DESTROY } +}; + +Position const WGTurret[WG_MAX_TURRET] = { { 5391.19f, 3060.8f, 419.616f, 1.69557f }, { 5266.75f, 2976.5f, 421.067f, 3.20354f }, @@ -657,7 +695,7 @@ const Position WGTurret[WG_MAX_TURRET] = }; // Here there is all npc keeper spawn point -const WintergraspObjectPositionData WGKeepNPC[WG_MAX_KEEP_NPC] = +WintergraspObjectPositionData const WGKeepNPC[WG_MAX_KEEP_NPC] = { // X Y Z O horde alliance // North East @@ -735,7 +773,7 @@ struct WintergraspTeleporterData float o; }; -const WintergraspTeleporterData WGPortalDefenderData[WG_MAX_TELEPORTER] = +WintergraspTeleporterData const WGPortalDefenderData[WG_MAX_TELEPORTER] = { // Player teleporter { 190763, 5153.41f, 2901.35f, 409.191f, -0.069f }, @@ -1030,67 +1068,70 @@ const WintergraspTowerCannonData TowerCannon[WG_MAX_TOWER_CANNON] = // *****************WorkShop Data & Element***************** // ********************************************************* -struct WGWorkshopData +struct StaticWintergraspWorkshopInfo { - uint8 id; - uint32 worldstate; - uint32 text; + uint8 WorkshopId; + uint32 WorldStateId; + + struct + { + uint8 AllianceCapture; + uint8 AllianceAttack; + uint8 HordeCapture; + uint8 HordeAttack; + } TextIds; }; -const WGWorkshopData WorkshopsData[WG_MAX_WORKSHOP] = +StaticWintergraspWorkshopInfo const WorkshopData[WG_MAX_WORKSHOP] = { - // NE - {BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NE}, - // NW - {BATTLEFIELD_WG_WORKSHOP_NW, WORLDSTATE_WORKSHOP_NW, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_NW}, - // SE - {BATTLEFIELD_WG_WORKSHOP_SE, WORLDSTATE_WORKSHOP_SE, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SE}, - // SW - {BATTLEFIELD_WG_WORKSHOP_SW, WORLDSTATE_WORKSHOP_SW, BATTLEFIELD_WG_TEXT_WORKSHOP_NAME_SW}, - // KEEP WEST - It can't be taken, so it doesn't have a textid - {BATTLEFIELD_WG_WORKSHOP_KEEP_WEST, WORLDSTATE_WORKSHOP_K_W, 0}, - // KEEP EAST - It can't be taken, so it doesn't have a textid - {BATTLEFIELD_WG_WORKSHOP_KEEP_EAST, WORLDSTATE_WORKSHOP_K_E, 0} + { BATTLEFIELD_WG_WORKSHOP_NE, WORLDSTATE_WORKSHOP_NE, { BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_SUNKEN_RING_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_SUNKEN_RING_ATTACK_HORDE } }, + { BATTLEFIELD_WG_WORKSHOP_NW, WORLDSTATE_WORKSHOP_NW, { BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_BROKEN_TEMPLE_ATTACK_HORDE } }, + { BATTLEFIELD_WG_WORKSHOP_SE, WORLDSTATE_WORKSHOP_SE, { BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_EASTSPARK_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_EASTSPARK_ATTACK_HORDE } }, + { BATTLEFIELD_WG_WORKSHOP_SW, WORLDSTATE_WORKSHOP_SW, { BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_ALLIANCE, BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_ALLIANCE, BATTLEFIELD_WG_TEXT_WESTSPARK_CAPTURE_HORDE, BATTLEFIELD_WG_TEXT_WESTSPARK_ATTACK_HORDE } }, + // KEEP WORKSHOPS - It can't be taken, so it doesn't have a textids + { BATTLEFIELD_WG_WORKSHOP_KEEP_WEST, WORLDSTATE_WORKSHOP_K_W, { 0, 0, 0, 0 } }, + { BATTLEFIELD_WG_WORKSHOP_KEEP_EAST, WORLDSTATE_WORKSHOP_K_E, { 0, 0, 0, 0 } } }; // ******************************************************************** // * Structs using for Building, Graveyard, Workshop * // ******************************************************************** + // Structure for different buildings that can be destroyed during battle struct BfWGGameObjectBuilding { - BfWGGameObjectBuilding(BattlefieldWG* wg); - - // the team that controls this point - uint8 m_Team; - +private: // WG object - BattlefieldWG* m_WG; + BattlefieldWG* _wg; // Linked gameobject - ObjectGuid m_BuildGUID; + ObjectGuid _buildGUID; - // eWGGameObjectBuildingType - uint32 m_Type; + // the team that controls this point + TeamId _teamControl; - // WorldState - uint32 m_WorldState; + WintergraspGameObjectBuildingType _type; + uint32 _worldState; - // eWGGameObjectState - uint32 m_State; + WintergraspGameObjectState _state; - // Name id for warning text - uint32 m_NameId; + StaticWintergraspTowerInfo const* _staticTowerInfo; // GameObject associations - GuidSet m_GameObjectList[2]; + GuidSet m_GameObjectList[BG_TEAMS_COUNT]; // Creature associations - GuidSet m_CreatureBottomList[2]; - GuidSet m_CreatureTopList[2]; + GuidSet m_CreatureBottomList[BG_TEAMS_COUNT]; + GuidSet m_CreatureTopList[BG_TEAMS_COUNT]; GuidSet m_TowerCannonBottomList; GuidSet m_TurretTopList; +public: + BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGameObjectBuildingType type, uint32 worldState); + void Init(GameObject* go); + + ObjectGuid const& GetGUID() const { return _buildGUID; } + void Rebuild(); // Called when associated gameobject is damaged @@ -1099,49 +1140,33 @@ struct BfWGGameObjectBuilding // Called when associated gameobject is destroyed void Destroyed(); - void Init(GameObject* go, uint32 type, uint32 worldstate, uint32 nameId); - void UpdateCreatureAndGo(); void UpdateTurretAttack(bool disable); + void FillInitialWorldStates(WorldPacket& data); + void Save(); }; -struct WGWorkshop +// Structure for the 6 workshop +struct WintergraspWorkshop { - // pointer to the battlefield that the workshop belongs to - BattlefieldWG* bf; - // id of the workshop, useful to retrieve data of the WorkshopsData array - uint8 workshopId; - // team that controls the node - uint8 teamControl; - // for worldstate - uint32 state; - - WGWorkshop(BattlefieldWG* _bf, uint8 _workshopId); +private: + BattlefieldWG* _wg; // Pointer to wintergrasp + 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 - void GiveControlTo(uint8 team, bool init /*for first call in setup*/); + StaticWintergraspWorkshopInfo const* _staticInfo; - void UpdateGraveyardAndWorkshop(); +public: + WintergraspWorkshop(BattlefieldWG* wg, uint8 type); - void Save(); -}; - -// Structure for the 6 workshop -struct WintergraspWorkshopData -{ - BattlefieldWG* m_WG; // Pointer to wintergrasp - ObjectGuid m_BuildGUID; - uint32 m_Type; - uint32 m_State; // For worldstate - uint32 m_WorldState; - uint32 m_TeamControl; // Team witch control the workshop - GuidSet m_CreatureOnPoint[2]; // Contain all Creature associate to this point - GuidSet m_GameObjectOnPoint[2]; // Contain all Gameobject associate to this point - uint32 m_NameId; // Id of trinity_string witch contain name of this node, using for alert message - - WintergraspWorkshopData(BattlefieldWG* wg); + uint8 GetId() const { return _staticInfo->WorkshopId; } + TeamId GetTeamControl() const { return _teamControl; } // Spawning associate creature and store them void AddCreature(WintergraspObjectPositionData const& obj); @@ -1149,14 +1174,13 @@ struct WintergraspWorkshopData // Spawning Associate gameobject and store them void AddGameObject(WintergraspObjectPositionData const& obj); - // Init method, setup variable - void Init(uint32 worldstate, uint32 type, uint32 nameId); - // Called on change faction in CapturePoint class - void GiveControlTo(uint8 team, bool init /*for first call in setup*/); + void GiveControlTo(TeamId teamId, bool init = false); void UpdateGraveyardAndWorkshop(); + void FillInitialWorldStates(WorldPacket& data); + void Save(); }; |