aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorRat <none@none>2010-06-01 23:55:09 +0200
committerRat <none@none>2010-06-01 23:55:09 +0200
commitad753b3f677c6280d48391e4bc550eedc9ce7a6e (patch)
tree255cfefa5d78374811cec2a453ee2ee6c1534d8a /src/game
parentd53f91ff327ea4f73d7dd16e7246d50150c2458b (diff)
SOTA update
-proper warning text (under attack, destroyed, capture..) -proper icons on map for gate states -fixed second round starting --HG-- branch : trunk
Diffstat (limited to 'src/game')
-rw-r--r--src/game/BattleGround.cpp30
-rw-r--r--src/game/BattleGround.h14
-rw-r--r--src/game/BattleGroundSA.cpp157
-rw-r--r--src/game/BattleGroundSA.h37
-rw-r--r--src/game/GameObject.cpp15
-rw-r--r--src/game/Language.h24
6 files changed, 220 insertions, 57 deletions
diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp
index 389fdc25408..ad279da0628 100644
--- a/src/game/BattleGround.cpp
+++ b/src/game/BattleGround.cpp
@@ -416,7 +416,7 @@ void BattleGround::Update(uint32 diff)
StartingEventOpenDoors();
- SendMessageToAll(m_StartMessageIds[BG_STARTING_EVENT_FOURTH], CHAT_MSG_BG_SYSTEM_NEUTRAL);
+ SendWarningToAll(m_StartMessageIds[BG_STARTING_EVENT_FOURTH]);
SetStatus(STATUS_IN_PROGRESS);
SetStartDelayTime(m_StartDelayTimes[BG_STARTING_EVENT_FOURTH]);
@@ -1634,6 +1634,34 @@ void BattleGround::PSendMessageToAll(int32 entry, ChatMsg type, Player const* so
va_end(ap);
}
+void BattleGround::SendWarningToAll(int32 entry, ...)
+{
+ const char *format = objmgr.GetTrinityStringForDBCLocale(entry);
+ va_list ap;
+ char str [1024];
+ va_start(ap, entry);
+ vsnprintf(str,1024,format, ap);
+ va_end(ap);
+ std::string msg = (std::string)str;
+
+ WorldPacket data(SMSG_MESSAGECHAT, 200);
+
+ data << (uint8)CHAT_MSG_RAID_BOSS_EMOTE;
+ data << (uint32)LANG_UNIVERSAL;
+ data << (uint64)0;
+ data << (uint32)0; // 2.1.0
+ data << (uint32)1;
+ data << (uint8)0;
+ data << (uint64)0;
+ data << (uint32)(strlen(msg.c_str())+1);
+ data << msg.c_str();
+ data << (uint8)0;
+ for (BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
+ if (Player *plr = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)))
+ if (plr->GetSession())
+ plr->GetSession()->SendPacket(&data);
+}
+
void BattleGround::SendMessage2ToAll(int32 entry, ChatMsg type, Player const* source, int32 arg1, int32 arg2)
{
Trinity::BattleGround2ChatBuilder bg_builder(type, entry, source, arg1, arg2);
diff --git a/src/game/BattleGround.h b/src/game/BattleGround.h
index 38f4a0f443d..6f46b6f8f6d 100644
--- a/src/game/BattleGround.h
+++ b/src/game/BattleGround.h
@@ -258,6 +258,15 @@ enum BattleGroundStartingEventsIds
};
#define BG_STARTING_EVENT_COUNT 4
+enum BG_OBJECT_DMG_HIT_TYPE
+{
+ BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED = 0,
+ BG_OBJECT_DMG_HIT_TYPE_DAMAGED = 1,
+ BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED = 2,
+ BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED = 3,
+ BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED = 4
+};
+
enum GroupJoinBattlegroundResult
{
// positive values are indexes in BattlemasterList.dbc
@@ -330,6 +339,8 @@ class BattleGround
{
}
+ virtual void DestroyGate(Player* pl, GameObject* go, uint32 destroyedEvent) {}
+
/* achievement req. */
virtual bool IsAllNodesConrolledByTeam(uint32 /*team*/) const { return false; }
bool IsTeamScoreInRange(uint32 team, uint32 minScore, uint32 maxScore) const;
@@ -468,6 +479,7 @@ class BattleGround
void EndBattleGround(uint32 winner);
void BlockMovement(Player *plr);
+ void SendWarningToAll(int32 entry, ...);
void SendMessageToAll(int32 entry, ChatMsg type, Player const* source = NULL);
void PSendMessageToAll(int32 entry, ChatMsg type, Player const* source, ...);
@@ -512,7 +524,7 @@ class BattleGround
virtual void EventPlayerCapturedFlag(Player* /*player*/) {}
void EventPlayerLoggedIn(Player* player, uint64 plr_guid);
void EventPlayerLoggedOut(Player* player);
- virtual void EventPlayerDamagedGO(Player* /*player*/, GameObject* /*target_obj*/, uint32 /*eventId*/) {}
+ virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint8 hitType, uint32 destroyedEvent) {}
virtual void EventPlayerUsedGO(Player* /*player*/, GameObject* /*go*/){}
/* Death related */
diff --git a/src/game/BattleGroundSA.cpp b/src/game/BattleGroundSA.cpp
index fa8c08b6570..95137710adf 100644
--- a/src/game/BattleGroundSA.cpp
+++ b/src/game/BattleGroundSA.cpp
@@ -34,6 +34,10 @@ BattleGroundSA::BattleGroundSA()
m_BgObjects.resize(BG_SA_MAXOBJ);
m_BgCreatures.resize(BG_SA_MAXNPC + BG_SA_MAX_GY);
TimerEnabled = false;
+ UpdateWaitTimer = 0;
+ SignaledRoundTwo = false;
+ SignaledRoundTwoHalfMin = false;
+ InitSecondRound = false;
}
BattleGroundSA::~BattleGroundSA()
@@ -228,22 +232,60 @@ void BattleGroundSA::StartShips()
void BattleGroundSA::Update(uint32 diff)
{
+ if (InitSecondRound)
+ {
+ if (UpdateWaitTimer < diff)
+ {
+ if (!SignaledRoundTwo)
+ {
+ SignaledRoundTwo = true;
+ InitSecondRound = false;
+ SendMessageToAll(LANG_BG_SA_ROUND_TWO_ONE_MINUTE, CHAT_MSG_BG_SYSTEM_NEUTRAL);
+ ResetObjs();
+ }
+ }else
+ {
+ UpdateWaitTimer -= diff;
+ return;
+ }
+ }
BattleGround::Update(diff);
TotalTime += diff;
- if (status == BG_SA_WARMUP || status == BG_SA_SECOND_WARMUP)
+ if (status == BG_SA_WARMUP )
{
if (TotalTime >= BG_SA_WARMUPLENGTH)
{
TotalTime = 0;
ToggleTimer();
DemolisherStartState(false);
- status = (status == BG_SA_WARMUP) ? BG_SA_ROUND_ONE : BG_SA_ROUND_TWO;
+ status = BG_SA_ROUND_ONE;
}
if (TotalTime >= BG_SA_BOAT_START)
StartShips();
return;
}
+ else if (status == BG_SA_SECOND_WARMUP)
+ {
+ if (TotalTime >= 60000)
+ {
+ SendWarningToAll(LANG_BG_SA_HAS_BEGUN);
+ TotalTime = 0;
+ ToggleTimer();
+ DemolisherStartState(false);
+ status = BG_SA_ROUND_TWO;
+ }
+ if (TotalTime >= 30000)
+ {
+ if (!SignaledRoundTwoHalfMin)
+ {
+ SignaledRoundTwoHalfMin = true;
+ SendMessageToAll(LANG_BG_SA_ROUND_TWO_START_HALF_MINUTE, CHAT_MSG_BG_SYSTEM_NEUTRAL);
+ }
+ }
+ StartShips();
+ return;
+ }
else if (GetStatus() == STATUS_IN_PROGRESS)
{
if (status == BG_SA_ROUND_ONE)
@@ -425,30 +467,35 @@ void BattleGroundSA::TeleportPlayers()
}
}
-void BattleGroundSA::EventPlayerDamagedGO(Player* plr, GameObject* /*go*/, uint32 event)
+void BattleGroundSA::EventPlayerDamagedGO(Player* plr, GameObject* go, uint8 hitType, uint32 destroyedEvent)
{
- switch(event)
+ if (!go || !go->GetGOInfo())
+ return;
+
+ switch(hitType)
{
- case 19046: //Green gate destroyed
- DestroyGate(BG_SA_GREEN_GATE,plr);
- return;
- case 19045: //blue gate
- DestroyGate(BG_SA_BLUE_GATE,plr);
- return;
- case 19047: //red gate
- DestroyGate(BG_SA_RED_GATE,plr);
- return;
- case 19048: //purple gate
- DestroyGate(BG_SA_PURPLE_GATE,plr);
- return;
- case 19049: //yellow gate
- DestroyGate(BG_SA_YELLOW_GATE,plr);
- return;
- case 19837: //ancient gate
- DestroyGate(BG_SA_ANCIENT_GATE,plr);
- return;
- default:
- return;
+ case BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED://under attack
+ SendWarningToAll(LANG_BG_SA_IS_UNDER_ATTACK, go->GetGOInfo()->name);
+ break;
+ case BG_OBJECT_DMG_HIT_TYPE_DAMAGED:
+ break;
+ case BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED:
+ {
+ uint32 i = GetGateIDFromDestroyEventID(destroyedEvent);
+ GateStatus[i] = BG_SA_GATE_DAMAGED;
+ uint32 uws = GetWorldStateFromGateID(i);
+ if (uws)
+ UpdateWorldState(uws, GateStatus[i]);
+ break;
+ }
+ case BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED:
+ break;
+ case BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED://handled at DestroyGate()
+ if (destroyedEvent == 19837)
+ SendWarningToAll(LANG_BG_SA_CHAMBER_BREACHED);
+ else
+ SendWarningToAll(LANG_BG_SA_WAS_DESTROYED, go->GetGOInfo()->name);
+ break;
}
}
@@ -500,8 +547,9 @@ void BattleGroundSA::DemolisherStartState(bool start)
}
}
-void BattleGroundSA::DestroyGate(uint32 i, Player* pl)
+void BattleGroundSA::DestroyGate(Player* pl, GameObject* /*go*/, uint32 destroyedEvent)
{
+ uint32 i = GetGateIDFromDestroyEventID(destroyedEvent);
if (!GateStatus[i])
return;
@@ -510,36 +558,35 @@ void BattleGroundSA::DestroyGate(uint32 i, Player* pl)
if (g->GetGOValue()->building.health == 0)
{
GateStatus[i] = BG_SA_GATE_DESTROYED;
- uint32 uws = 0;
+ uint32 uws = GetWorldStateFromGateID(i);
+ if (uws)
+ UpdateWorldState(uws, GateStatus[i]);
+ bool rewardHonor = true;
switch(i)
{
- case 0:
- uws = BG_SA_GREEN_GATEWS;
- break;
- case 1:
- uws = BG_SA_YELLOW_GATEWS;
- break;
- case 2:
- uws = BG_SA_BLUE_GATEWS;
- break;
- case 3:
- uws = BG_SA_RED_GATEWS;
+ case BG_SA_GREEN_GATE:
+ if (GateStatus[BG_SA_BLUE_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
break;
- case 4:
- uws = BG_SA_PURPLE_GATEWS;
+ case BG_SA_BLUE_GATE:
+ if (GateStatus[BG_SA_GREEN_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
break;
- case 5:
- uws = BG_SA_ANCIENT_GATEWS;
+ case BG_SA_RED_GATE:
+ if (GateStatus[BG_SA_PURPLE_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
break;
- default:
- ASSERT(false);
+ case BG_SA_PURPLE_GATE:
+ if (GateStatus[BG_SA_RED_GATE] == BG_SA_GATE_DESTROYED)
+ rewardHonor = false;
break;
}
if (i < 5)
DelObject(i+9);
- UpdateWorldState(uws, GateStatus[i]);
UpdatePlayerScore(pl,SCORE_DESTROYED_WALL, 1);
+ if (rewardHonor)
+ UpdatePlayerScore(pl,SCORE_BONUS_HONOR,(GetBonusHonorFromKill(1)));
}
}
}
@@ -634,6 +681,10 @@ void BattleGroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player *Source)
UpdateWorldState(BG_SA_LEFT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE? 1:0));
UpdateWorldState(BG_SA_LEFT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE? 0:1));
+ if (Source->GetTeamId() == TEAM_ALLIANCE)
+ SendWarningToAll(LANG_BG_SA_A_GY_WEST);
+ else
+ SendWarningToAll(LANG_BG_SA_H_GY_WEST);
break;
case BG_SA_RIGHT_CAPTURABLE_GY:
flag = BG_SA_RIGHT_FLAG;
@@ -649,6 +700,10 @@ void BattleGroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player *Source)
UpdateWorldState(BG_SA_RIGHT_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE? 1:0));
UpdateWorldState(BG_SA_RIGHT_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE? 0:1));
+ if (Source->GetTeamId() == TEAM_ALLIANCE)
+ SendWarningToAll(LANG_BG_SA_A_GY_EAST);
+ else
+ SendWarningToAll(LANG_BG_SA_H_GY_EAST);
break;
case BG_SA_CENTRAL_CAPTURABLE_GY:
flag = BG_SA_CENTRAL_FLAG;
@@ -659,6 +714,10 @@ void BattleGroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player *Source)
UpdateWorldState(BG_SA_CENTER_GY_ALLIANCE, (GraveyardStatus[i] == TEAM_ALLIANCE? 1:0));
UpdateWorldState(BG_SA_CENTER_GY_HORDE, (GraveyardStatus[i] == TEAM_ALLIANCE? 0:1));
+ if (Source->GetTeamId() == TEAM_ALLIANCE)
+ SendWarningToAll(LANG_BG_SA_A_GY_SOUTH);
+ else
+ SendWarningToAll(LANG_BG_SA_H_GY_SOUTH);
break;
default:
ASSERT(0);
@@ -672,6 +731,10 @@ void BattleGroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
{
if (Source->GetTeamId() == attackers)
{
+ if (Source->GetTeamId() == ALLIANCE)
+ SendMessageToAll(LANG_BG_SA_ALLIANCE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL);
+ else SendMessageToAll(LANG_BG_SA_HORDE_CAPTURED_RELIC, CHAT_MSG_BG_SYSTEM_NEUTRAL);
+
if (status == BG_SA_ROUND_ONE)
{
RoundScores[0].winner = attackers;
@@ -680,7 +743,11 @@ void BattleGroundSA::EventPlayerUsedGO(Player* Source, GameObject* object)
status = BG_SA_SECOND_WARMUP;
TotalTime = 0;
ToggleTimer();
- ResetObjs();
+ SendWarningToAll(LANG_BG_SA_ROUND_ONE_END);
+ UpdateWaitTimer = 5000;
+ SignaledRoundTwo = false;
+ SignaledRoundTwoHalfMin = false;
+ InitSecondRound = true;
}
else if (status == BG_SA_ROUND_TWO)
{
diff --git a/src/game/BattleGroundSA.h b/src/game/BattleGroundSA.h
index fe636c52813..85f94c01a36 100644
--- a/src/game/BattleGroundSA.h
+++ b/src/game/BattleGroundSA.h
@@ -314,12 +314,39 @@ class BattleGroundSA : public BattleGround
virtual bool SetupBattleGround();
virtual void Reset();
virtual void FillInitialWorldStates(WorldPacket& data);
- virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint32 event);
+ virtual void EventPlayerDamagedGO(Player* plr, GameObject* go, uint8 hitType, uint32 destroyedEvent);
virtual void HandleKillUnit(Creature* unit, Player* killer);
virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
virtual void EventPlayerClickedOnFlag(Player *Source, GameObject* target_obj);
virtual void EventPlayerUsedGO(Player* Source, GameObject* object);
-
+ uint32 GetGateIDFromDestroyEventID(uint32 id)
+ {
+ uint32 i = 0;
+ switch(id)
+ {
+ case 19046: i = BG_SA_GREEN_GATE; break; //Green gate destroyed
+ case 19045: i = BG_SA_BLUE_GATE; break; //blue gate
+ case 19047: i = BG_SA_RED_GATE; break; //red gate
+ case 19048: i = BG_SA_PURPLE_GATE; break; //purple gate
+ case 19049: i = BG_SA_YELLOW_GATE; break; //yellow gate
+ case 19837: i = BG_SA_ANCIENT_GATE; break; //ancient gate
+ }
+ return i;
+ }
+ uint32 GetWorldStateFromGateID(uint32 id)
+ {
+ uint32 uws = 0;
+ switch(id)
+ {
+ case BG_SA_GREEN_GATE: uws = BG_SA_GREEN_GATEWS; break;
+ case BG_SA_YELLOW_GATE: uws = BG_SA_YELLOW_GATEWS; break;
+ case BG_SA_BLUE_GATE: uws = BG_SA_BLUE_GATEWS; break;
+ case BG_SA_RED_GATE: uws = BG_SA_RED_GATEWS; break;
+ case BG_SA_PURPLE_GATE: uws = BG_SA_PURPLE_GATEWS; break;
+ case BG_SA_ANCIENT_GATE: uws = BG_SA_ANCIENT_GATEWS; break;
+ }
+ return uws;
+ }
void EndBattleGround(uint32 winner);
void RemovePlayer(Player *plr,uint64 guid);
@@ -335,7 +362,7 @@ class BattleGroundSA : public BattleGround
void TeleportPlayers();
void OverrideGunFaction();
void DemolisherStartState(bool start);
- void DestroyGate(uint32 i, Player* pl);
+ void DestroyGate(Player* pl, GameObject* /*go*/, uint32 destroyedEvent);
void SendTime();
void CaptureGraveyard(BG_SA_Graveyards i, Player *Source);
void ToggleTimer();
@@ -348,5 +375,9 @@ class BattleGroundSA : public BattleGround
TeamId GraveyardStatus[BG_SA_MAX_GY];
BG_SA_RoundScore RoundScores[2];
bool TimerEnabled;
+ uint32 UpdateWaitTimer;//5secs before starting the 1min countdown for second round
+ bool SignaledRoundTwo;
+ bool SignaledRoundTwoHalfMin;
+ bool InitSecondRound;
};
#endif
diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
index 3aaac5afe31..6eb0b482d80 100644
--- a/src/game/GameObject.cpp
+++ b/src/game/GameObject.cpp
@@ -1598,6 +1598,7 @@ void GameObject::TakenDamage(uint32 damage, Unit *who)
if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED)) // from damaged to destroyed
{
+ uint8 hitType = BG_OBJECT_DMG_HIT_TYPE_HIGH_DAMAGED;
if (!m_goValue->building.health)
{
RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
@@ -1607,11 +1608,19 @@ void GameObject::TakenDamage(uint32 damage, Unit *who)
EventInform(m_goInfo->building.destroyedEvent);
if (pwho)
if (BattleGround* bg = pwho->GetBattleGround())
- bg->EventPlayerDamagedGO(pwho, this, m_goInfo->building.destroyedEvent);
+ bg->DestroyGate(pwho, this, m_goInfo->building.destroyedEvent);
+ hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_DESTROYED;
}
+ if (pwho)
+ if (BattleGround* bg = pwho->GetBattleGround())
+ bg->EventPlayerDamagedGO(pwho, this, hitType, m_goInfo->building.destroyedEvent);
}
else // from intact to damaged
{
+ uint8 hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_DAMAGED;
+ if (m_goValue->building.health + damage < m_goInfo->building.intactNumHits + m_goInfo->building.damagedNumHits)
+ hitType = BG_OBJECT_DMG_HIT_TYPE_DAMAGED;
+
if (m_goValue->building.health <= m_goInfo->building.damagedNumHits)
{
if (!m_goInfo->building.destroyedDisplayId)
@@ -1622,7 +1631,11 @@ void GameObject::TakenDamage(uint32 damage, Unit *who)
SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED);
SetUInt32Value(GAMEOBJECT_DISPLAYID, m_goInfo->building.damagedDisplayId);
EventInform(m_goInfo->building.damagedEvent);
+ hitType = BG_OBJECT_DMG_HIT_TYPE_JUST_HIGH_DAMAGED;
}
+ if (pwho)
+ if (BattleGround* bg = pwho->GetBattleGround())
+ bg->EventPlayerDamagedGO(pwho, this, hitType, m_goInfo->building.destroyedEvent);
}
SetGoAnimProgress(m_goValue->building.health*255/(m_goInfo->building.intactNumHits + m_goInfo->building.damagedNumHits));
}
diff --git a/src/game/Language.h b/src/game/Language.h
index d421344bd30..c0c8fc486f3 100644
--- a/src/game/Language.h
+++ b/src/game/Language.h
@@ -976,12 +976,24 @@ enum TrinityStrings
LANG_OPVP_ZM_GOSSIP_ALLIANCE = 10054,
LANG_OPVP_ZM_GOSSIP_HORDE = 10055,
- LANG_BG_SA_START_TWO_MINUTES = 10056,
- LANG_BG_SA_START_ONE_MINUTE = 10057,
- LANG_BG_SA_START_HALF_MINUTE = 10058,
- LANG_BG_SA_HAS_BEGUN = 10059,
- LANG_BG_SA_IS_UNDER_ATTACK = 10060,
- LANG_BG_SA_IS_DESTROYED = 10061,
+ LANG_BG_SA_START_TWO_MINUTES = 10056,
+ LANG_BG_SA_START_ONE_MINUTE = 10057,
+ LANG_BG_SA_START_HALF_MINUTE = 10058,
+ LANG_BG_SA_HAS_BEGUN = 10059,
+ LANG_BG_SA_IS_UNDER_ATTACK = 10060,//The %s is under attack!
+ LANG_BG_SA_WAS_DESTROYED = 10061,//The %s was destroyed!
+ LANG_BG_SA_ROUND_ONE_END = 10062,//Round 1 - finished!
+ LANG_BG_SA_ALLIANCE_CAPTURED_RELIC = 10063,//The Alliance captured the titan portal!
+ LANG_BG_SA_HORDE_CAPTURED_RELIC = 10064,//The Horde captured the titan portal!
+ LANG_BG_SA_ROUND_TWO_ONE_MINUTE = 10065,//Round 2 of the Battle for the Strand of the Ancients begins in 1 minute.
+ LANG_BG_SA_ROUND_TWO_START_HALF_MINUTE = 10066,//Round 2 begins in 30 seconds. Prepare yourselves!
+ LANG_BG_SA_CHAMBER_BREACHED = 10067,//The chamber has been breached! The titan relic is vulnerable!
+ LANG_BG_SA_A_GY_SOUTH = 10068,//The Alliance captured the South Graveyard!
+ LANG_BG_SA_A_GY_WEST = 10069,//The Alliance captured the West Graveyard!
+ LANG_BG_SA_A_GY_EAST = 10070,//The Alliance captured the East Graveyard!
+ LANG_BG_SA_H_GY_SOUTH = 10071,//The Horde captured the South Graveyard!
+ LANG_BG_SA_H_GY_WEST = 10072,//The Horde captured the West Graveyard!
+ LANG_BG_SA_H_GY_EAST = 10073,//The Horde captured the East Graveyard!
// Use for custom patches 11000-11999
LANG_AUTO_BROADCAST = 11000,