Updated Copyright year to 2013
[getmangos.git] / src / game / BattleGround / BattleGroundEY.h
blob83886836e64e23811b9f318c7efb50f9fe2b1cf0
1 /*
2 * Copyright (C) 2005-2013 MaNGOS <http://getmangos.com/>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifndef __BATTLEGROUNDEY_H
20 #define __BATTLEGROUNDEY_H
22 #include "Language.h"
24 class BattleGround;
26 #define EY_FLAG_RESPAWN_TIME (10 * IN_MILLISECONDS) //10 seconds
27 #define EY_RESOURCES_UPDATE_TIME (2 * IN_MILLISECONDS) //2 seconds
29 enum EYWorldStates
31 WORLD_STATE_EY_RESOURCES_ALLIANCE = 2749,
32 WORLD_STATE_EY_RESOURCES_HORDE = 2750,
33 WORLD_STATE_EY_TOWER_COUNT_ALLIANCE = 2752,
34 WORLD_STATE_EY_TOWER_COUNT_HORDE = 2753,
36 WORLD_STATE_EY_BLOOD_ELF_TOWER_ALLIANCE = 2723,
37 WORLD_STATE_EY_BLOOD_ELF_TOWER_HORDE = 2724,
38 WORLD_STATE_EY_BLOOD_ELF_TOWER_NEUTRAL = 2722,
39 //WORLD_STATE_EY_BLOOD_ELF_TOWER_ALLIANCE_CONFLICT = 2735, // unused on retail
40 //WORLD_STATE_EY_BLOOD_ELF_TOWER_HORDE_CONFLICT = 2736, // unused on retail
42 WORLD_STATE_EY_FEL_REAVER_RUINS_ALLIANCE = 2726,
43 WORLD_STATE_EY_FEL_REAVER_RUINS_HORDE = 2727,
44 WORLD_STATE_EY_FEL_REAVER_RUINS_NEUTRAL = 2725,
45 //WORLD_STATE_EY_FEL_REAVER_RUINS_ALLIANCE_CONFLICT = 2739, // unused on retail
46 //WORLD_STATE_EY_FEL_REAVER_RUINS_HORDE_CONFLICT = 2740, // unused on retail
48 WORLD_STATE_EY_MAGE_TOWER_ALLIANCE = 2730,
49 WORLD_STATE_EY_MAGE_TOWER_HORDE = 2729,
50 WORLD_STATE_EY_MAGE_TOWER_NEUTRAL = 2728,
51 //WORLD_STATE_EY_MAGE_TOWER_ALLIANCE_CONFLICT = 2741, // unused on retail
52 //WORLD_STATE_EY_MAGE_TOWER_HORDE_CONFLICT = 2742, // unused on retail
54 WORLD_STATE_EY_DRAENEI_RUINS_ALLIANCE = 2732,
55 WORLD_STATE_EY_DRAENEI_RUINS_HORDE = 2733,
56 WORLD_STATE_EY_DRAENEI_RUINS_NEUTRAL = 2731,
57 //WORLD_STATE_EY_DRAENEI_RUINS_ALLIANCE_CONFLICT = 2738, // unused on retail
58 //WORLD_STATE_EY_DRAENEI_RUINS_HORDE_CONFLICT = 2737, // unused on retail
60 WORLD_STATE_EY_NETHERSTORM_FLAG_READY = 2757,
61 WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE = 2769,
62 WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE = 2770,
64 WORLD_STATE_EY_CAPTURE_POINT_SLIDER_DISPLAY = 2718
67 enum EYCapturePoints
69 GO_CAPTURE_POINT_BLOOD_ELF_TOWER = 184080,
70 GO_CAPTURE_POINT_FEL_REAVER_RUINS = 184081,
71 GO_CAPTURE_POINT_MAGE_TOWER = 184082,
72 GO_CAPTURE_POINT_DRAENEI_RUINS = 184083
75 enum EYEvents
77 //EVENT_BLOOD_ELF_TOWER_WIN_ALLIANCE = 12965,
78 //EVENT_BLOOD_ELF_TOWER_WIN_HORDE = 12964,
79 EVENT_BLOOD_ELF_TOWER_PROGRESS_ALLIANCE = 12905,
80 EVENT_BLOOD_ELF_TOWER_PROGRESS_HORDE = 12904,
81 EVENT_BLOOD_ELF_TOWER_NEUTRAL_ALLIANCE = 12957,
82 EVENT_BLOOD_ELF_TOWER_NEUTRAL_HORDE = 12956,
84 //EVENT_FEL_REAVER_RUINS_WIN_ALLIANCE = 12969,
85 //EVENT_FEL_REAVER_RUINS_WIN_HORDE = 12968,
86 EVENT_FEL_REAVER_RUINS_PROGRESS_ALLIANCE = 12911,
87 EVENT_FEL_REAVER_RUINS_PROGRESS_HORDE = 12910,
88 EVENT_FEL_REAVER_RUINS_NEUTRAL_ALLIANCE = 12960,
89 EVENT_FEL_REAVER_RUINS_NEUTRAL_HORDE = 12961,
91 //EVENT_MAGE_TOWER_WIN_ALLIANCE = 12971,
92 //EVENT_MAGE_TOWER_WIN_HORDE = 12970,
93 EVENT_MAGE_TOWER_PROGRESS_ALLIANCE = 12909,
94 EVENT_MAGE_TOWER_PROGRESS_HORDE = 12908,
95 EVENT_MAGE_TOWER_NEUTRAL_ALLIANCE = 12962,
96 EVENT_MAGE_TOWER_NEUTRAL_HORDE = 12963,
98 //EVENT_DRAENEI_RUINS_WIN_ALLIANCE = 12967,
99 //EVENT_DRAENEI_RUINS_WIN_HORDE = 12966,
100 EVENT_DRAENEI_RUINS_PROGRESS_ALLIANCE = 12907,
101 EVENT_DRAENEI_RUINS_PROGRESS_HORDE = 12906,
102 EVENT_DRAENEI_RUINS_NEUTRAL_ALLIANCE = 12958,
103 EVENT_DRAENEI_RUINS_NEUTRAL_HORDE = 12959
106 enum EYSounds
108 EY_SOUND_FLAG_PICKED_UP_ALLIANCE = 8212,
109 EY_SOUND_FLAG_CAPTURED_HORDE = 8213,
110 EY_SOUND_FLAG_PICKED_UP_HORDE = 8174,
111 EY_SOUND_FLAG_CAPTURED_ALLIANCE = 8173,
112 EY_SOUND_FLAG_RESET = 8192
115 enum EYSpells
117 EY_NETHERSTORM_FLAG_SPELL = 34976,
118 EY_PLAYER_DROPPED_FLAG_SPELL = 34991
121 enum EYPointsTrigger
123 AREATRIGGER_BLOOD_ELF_TOWER_POINT = 4476, // also 4512
124 AREATRIGGER_FEL_REAVER_RUINS_POINT = 4514, // also 4515
125 AREATRIGGER_MAGE_TOWER_POINT = 4516, // also 4517
126 AREATRIGGER_DRAENEI_RUINS_POINT = 4518, // also 4519
128 AREATRIGGER_BLOOD_ELF_TOWER_BUFF = 4568,
129 AREATRIGGER_FEL_REAVER_RUINS_BUFF = 4569,
130 //AREATRIGGER_FEL_REAVER_RUINS_BUFF_2 = 5866,
131 AREATRIGGER_MAGE_TOWER_BUFF = 4570,
132 AREATRIGGER_DRAENEI_RUINS_BUFF = 4571
134 //AREATRIGGER_EY_HORDE_START = 4530,
135 //AREATRIGGER_EY_ALLIANCE_START = 4531
138 enum EYGaveyards
140 GRAVEYARD_EY_MAIN_ALLIANCE = 1103,
141 GRAVEYARD_EY_MAIN_HORDE = 1104,
142 GRAVEYARD_FEL_REAVER_RUINS = 1105,
143 GRAVEYARD_BLOOD_ELF_TOWER = 1106,
144 GRAVEYARD_DRAENEI_RUINS = 1107,
145 GRAVEYARD_MAGE_TOWER = 1108
148 enum EYNodes
150 // TODO: Re-change order after we drop battleground_event and associated tables
151 NODE_BLOOD_ELF_TOWER = 1,
152 NODE_FEL_REAVER_RUINS = 0,
153 NODE_MAGE_TOWER = 3,
154 NODE_DRAENEI_RUINS = 2
157 #define EY_NODES_MAX 4
159 // node-events work like this: event1:nodeid, event2:state (0alliance,1horde,2neutral)
160 #define EY_NEUTRAL_TEAM 2
161 #define EY_EVENT_CAPTURE_FLAG 4 // event1=4, event2=nodeid or 4 for the default center spawn
162 #define EY_EVENT2_FLAG_CENTER 4 // maximum node is 3 so 4 for center is ok
163 // all other event2 are just nodeids, i won't define something here
165 enum EYBuffs
167 // buffs
168 EY_OBJECT_SPEEDBUFF_FEL_REAVER_RUINS = 1,
169 EY_OBJECT_REGENBUFF_FEL_REAVER_RUINS = 2,
170 EY_OBJECT_BERSERKBUFF_FEL_REAVER_RUINS = 3,
171 EY_OBJECT_SPEEDBUFF_BLOOD_ELF_TOWER = 4,
172 EY_OBJECT_REGENBUFF_BLOOD_ELF_TOWER = 5,
173 EY_OBJECT_BERSERKBUFF_BLOOD_ELF_TOWER = 6,
174 EY_OBJECT_SPEEDBUFF_DRAENEI_RUINS = 7,
175 EY_OBJECT_REGENBUFF_DRAENEI_RUINS = 8,
176 EY_OBJECT_BERSERKBUFF_DRAENEI_RUINS = 9,
177 EY_OBJECT_SPEEDBUFF_MAGE_TOWER = 10,
178 EY_OBJECT_REGENBUFF_MAGE_TOWER = 11,
179 EY_OBJECT_BERSERKBUFF_MAGE_TOWER = 12,
180 EY_OBJECT_MAX = 13
183 #define EY_NORMAL_HONOR_INTERVAL 260
184 #define EY_WEEKEND_HONOR_INTERVAL 160
185 #define EY_EVENT_START_BATTLE 13180
187 enum EYScore
189 EY_WARNING_NEAR_VICTORY_SCORE = 1400,
190 EY_MAX_TEAM_SCORE = 1600
193 enum EYFlagState
195 EY_FLAG_STATE_ON_BASE = 0,
196 EY_FLAG_STATE_WAIT_RESPAWN = 1,
197 EY_FLAG_STATE_ON_ALLIANCE_PLAYER = 2,
198 EY_FLAG_STATE_ON_HORDE_PLAYER = 3,
199 EY_FLAG_STATE_ON_GROUND = 4
202 static const uint8 eyTickPoints[EY_NODES_MAX] = {1, 2, 5, 10};
203 static const uint32 eyFlagPoints[EY_NODES_MAX] = {75, 85, 100, 500};
205 static const uint32 eyGraveyards[EY_NODES_MAX] = {GRAVEYARD_FEL_REAVER_RUINS, GRAVEYARD_BLOOD_ELF_TOWER, GRAVEYARD_DRAENEI_RUINS, GRAVEYARD_MAGE_TOWER};
206 static const uint32 eyTriggers[EY_NODES_MAX] = {AREATRIGGER_FEL_REAVER_RUINS_BUFF, AREATRIGGER_BLOOD_ELF_TOWER_BUFF, AREATRIGGER_DRAENEI_RUINS_BUFF, AREATRIGGER_MAGE_TOWER_BUFF};
208 struct EYTowerEvent
210 uint32 eventEntry;
211 Team team;
212 uint32 message;
213 uint32 worldState;
216 static const EYTowerEvent eyTowerEvents[EY_NODES_MAX][4] =
219 {EVENT_FEL_REAVER_RUINS_PROGRESS_ALLIANCE, ALLIANCE, LANG_BG_EY_HAS_TAKEN_A_B_TOWER, WORLD_STATE_EY_FEL_REAVER_RUINS_ALLIANCE},
220 {EVENT_FEL_REAVER_RUINS_PROGRESS_HORDE, HORDE, LANG_BG_EY_HAS_TAKEN_H_F_RUINS, WORLD_STATE_EY_FEL_REAVER_RUINS_HORDE},
221 {EVENT_FEL_REAVER_RUINS_NEUTRAL_HORDE, TEAM_NONE, LANG_BG_EY_HAS_LOST_A_F_RUINS, WORLD_STATE_EY_FEL_REAVER_RUINS_NEUTRAL},
222 {EVENT_FEL_REAVER_RUINS_NEUTRAL_ALLIANCE, TEAM_NONE, LANG_BG_EY_HAS_LOST_H_F_RUINS, WORLD_STATE_EY_FEL_REAVER_RUINS_NEUTRAL},
225 {EVENT_BLOOD_ELF_TOWER_PROGRESS_ALLIANCE, ALLIANCE, LANG_BG_EY_HAS_TAKEN_A_B_TOWER, WORLD_STATE_EY_BLOOD_ELF_TOWER_ALLIANCE},
226 {EVENT_BLOOD_ELF_TOWER_PROGRESS_HORDE, HORDE, LANG_BG_EY_HAS_TAKEN_H_B_TOWER, WORLD_STATE_EY_BLOOD_ELF_TOWER_HORDE},
227 {EVENT_BLOOD_ELF_TOWER_NEUTRAL_HORDE, TEAM_NONE, LANG_BG_EY_HAS_LOST_A_B_TOWER, WORLD_STATE_EY_BLOOD_ELF_TOWER_NEUTRAL},
228 {EVENT_BLOOD_ELF_TOWER_NEUTRAL_ALLIANCE, TEAM_NONE, LANG_BG_EY_HAS_LOST_H_B_TOWER, WORLD_STATE_EY_BLOOD_ELF_TOWER_NEUTRAL},
231 {EVENT_DRAENEI_RUINS_PROGRESS_ALLIANCE, ALLIANCE, LANG_BG_EY_HAS_TAKEN_A_D_RUINS, WORLD_STATE_EY_DRAENEI_RUINS_ALLIANCE},
232 {EVENT_DRAENEI_RUINS_PROGRESS_HORDE, HORDE, LANG_BG_EY_HAS_TAKEN_H_D_RUINS, WORLD_STATE_EY_DRAENEI_RUINS_HORDE},
233 {EVENT_DRAENEI_RUINS_NEUTRAL_HORDE, TEAM_NONE, LANG_BG_EY_HAS_LOST_A_D_RUINS, WORLD_STATE_EY_DRAENEI_RUINS_NEUTRAL},
234 {EVENT_DRAENEI_RUINS_NEUTRAL_ALLIANCE, TEAM_NONE, LANG_BG_EY_HAS_LOST_H_D_RUINS, WORLD_STATE_EY_DRAENEI_RUINS_NEUTRAL},
237 {EVENT_MAGE_TOWER_PROGRESS_ALLIANCE, ALLIANCE, LANG_BG_EY_HAS_TAKEN_A_M_TOWER, WORLD_STATE_EY_MAGE_TOWER_ALLIANCE},
238 {EVENT_MAGE_TOWER_PROGRESS_HORDE, HORDE, LANG_BG_EY_HAS_TAKEN_H_M_TOWER, WORLD_STATE_EY_MAGE_TOWER_HORDE},
239 {EVENT_MAGE_TOWER_NEUTRAL_HORDE, TEAM_NONE, LANG_BG_EY_HAS_LOST_A_M_TOWER, WORLD_STATE_EY_MAGE_TOWER_NEUTRAL},
240 {EVENT_MAGE_TOWER_NEUTRAL_ALLIANCE, TEAM_NONE, LANG_BG_EY_HAS_LOST_H_M_TOWER, WORLD_STATE_EY_MAGE_TOWER_NEUTRAL},
244 static const uint32 eyTowers[EY_NODES_MAX] = {GO_CAPTURE_POINT_FEL_REAVER_RUINS, GO_CAPTURE_POINT_BLOOD_ELF_TOWER, GO_CAPTURE_POINT_DRAENEI_RUINS, GO_CAPTURE_POINT_MAGE_TOWER};
246 class BattleGroundEYScore : public BattleGroundScore
248 public:
249 BattleGroundEYScore() : FlagCaptures(0) {};
250 virtual ~BattleGroundEYScore() {};
251 uint32 FlagCaptures;
254 class BattleGroundEY : public BattleGround
256 friend class BattleGroundMgr;
258 public:
259 BattleGroundEY();
260 ~BattleGroundEY();
261 void Update(uint32 diff) override;
263 /* inherited from BattlegroundClass */
264 virtual void AddPlayer(Player* plr) override;
265 virtual void StartingEventCloseDoors() override;
266 virtual void StartingEventOpenDoors() override;
268 /* BG Flags */
269 ObjectGuid const& GetFlagCarrierGuid() const { return m_flagCarrier; }
270 void SetFlagCarrier(ObjectGuid guid) { m_flagCarrier = guid; }
271 void ClearFlagCarrier() { m_flagCarrier.Clear(); }
272 bool IsFlagPickedUp() const { return !m_flagCarrier.IsEmpty(); }
273 uint8 GetFlagState() const { return m_flagState; }
274 void RespawnFlag();
275 void RespawnDroppedFlag();
277 void RemovePlayer(Player* plr, ObjectGuid guid) override;
278 bool HandleEvent(uint32 eventId, GameObject* go) override;
279 void HandleGameObjectCreate(GameObject* go) override;
280 void HandleAreaTrigger(Player* source, uint32 trigger) override;
281 void HandleKillPlayer(Player* player, Player* killer) override;
283 virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player) override;
284 virtual bool SetupBattleGround() override;
285 virtual void Reset() override;
286 void UpdateTeamScore(Team team);
287 void EndBattleGround(Team winner) override;
288 void UpdatePlayerScore(Player* source, uint32 type, uint32 value) override;
289 virtual void FillInitialWorldStates(WorldPacket& data, uint32& count) override;
290 void SetDroppedFlagGuid(ObjectGuid guid) { m_DroppedFlagGuid = guid;}
291 void ClearDroppedFlagGuid() { m_DroppedFlagGuid.Clear();}
292 ObjectGuid const& GetDroppedFlagGuid() const { return m_DroppedFlagGuid;}
294 /* Battleground Events */
295 virtual void EventPlayerClickedOnFlag(Player* source, GameObject* target_obj) override;
296 virtual void EventPlayerDroppedFlag(Player* source) override;
298 /* achievement req. */
299 bool IsAllNodesControlledByTeam(Team team) const override;
301 private:
302 // process capture events
303 void ProcessCaptureEvent(GameObject* go, uint32 towerId, Team team, uint32 newWorldState, uint32 message);
304 void EventPlayerCapturedFlag(Player* source, EYNodes node); // NOTE: virtual BattleGround::EventPlayerCapturedFlag has different parameters list
305 void UpdateResources();
307 /* Scorekeeping */
308 void AddPoints(Team team, uint32 points);
310 EYFlagState m_flagState;
311 ObjectGuid m_flagCarrier;
312 ObjectGuid m_DroppedFlagGuid;
314 uint8 m_towersAlliance;
315 uint8 m_towersHorde;
317 uint32 m_towerWorldState[EY_NODES_MAX];
319 Team m_towerOwner[EY_NODES_MAX];
320 ObjectGuid m_towers[EY_NODES_MAX];
322 uint32 m_honorTicks;
323 uint32 m_honorScoreTicks[BG_TEAMS_COUNT];
325 uint32 m_flagRespawnTimer;
326 uint32 m_resourceUpdateTimer;
328 #endif