aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_09_19_07_world_creature_text.sql82
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp7
-rw-r--r--src/server/game/Battlefield/Battlefield.h9
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp608
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.h340
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();
};