Updated Copyright year to 2013
[getmangos.git] / src / game / OutdoorPvP / OutdoorPvPEP.h
blob648be83649be6b9bf66cda83e292e6da3a498c90
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 WORLD_PVP_EP
20 #define WORLD_PVP_EP
22 #include "Common.h"
23 #include "OutdoorPvP.h"
24 #include "Language.h"
26 enum
28 TOWER_ID_NORTHPASS = 0,
29 TOWER_ID_CROWNGUARD = 1,
30 TOWER_ID_EASTWALL = 2,
31 TOWER_ID_PLAGUEWOOD = 3,
32 MAX_EP_TOWERS = 4,
34 // spells
35 SPELL_ECHOES_OF_LORDAERON_ALLIANCE_1 = 11413,
36 SPELL_ECHOES_OF_LORDAERON_ALLIANCE_2 = 11414,
37 SPELL_ECHOES_OF_LORDAERON_ALLIANCE_3 = 11415,
38 SPELL_ECHOES_OF_LORDAERON_ALLIANCE_4 = 1386,
40 SPELL_ECHOES_OF_LORDAERON_HORDE_1 = 30880,
41 SPELL_ECHOES_OF_LORDAERON_HORDE_2 = 30683,
42 SPELL_ECHOES_OF_LORDAERON_HORDE_3 = 30682,
43 SPELL_ECHOES_OF_LORDAERON_HORDE_4 = 29520,
45 // graveyards
46 GRAVEYARD_ZONE_EASTERN_PLAGUE = 139,
47 GRAVEYARD_ID_EASTERN_PLAGUE = 927,
49 // misc
50 HONOR_REWARD_PLAGUELANDS = 18,
52 // npcs
53 NPC_SPECTRAL_FLIGHT_MASTER = 17209,
55 // flight master factions
56 FACTION_FLIGHT_MASTER_ALLIANCE = 774,
57 FACTION_FLIGHT_MASTER_HORDE = 775,
59 SPELL_SPIRIT_PARTICLES_BLUE = 17327,
60 SPELL_SPIRIT_PARTICLES_RED = 31309,
62 // quest
63 NPC_CROWNGUARD_TOWER_QUEST_DOODAD = 17689,
64 NPC_EASTWALL_TOWER_QUEST_DOODAD = 17690,
65 NPC_NORTHPASS_TOWER_QUEST_DOODAD = 17696,
66 NPC_PLAGUEWOOD_TOWER_QUEST_DOODAD = 17698,
68 // alliance
69 NPC_LORDAERON_COMMANDER = 17635,
70 NPC_LORDAERON_SOLDIER = 17647,
72 // horde
73 NPC_LORDAERON_VETERAN = 17995,
74 NPC_LORDAERON_FIGHTER = 17996,
76 // gameobjects
77 GO_LORDAERON_SHRINE_ALLIANCE = 181682,
78 GO_LORDAERON_SHRINE_HORDE = 181955,
79 GO_TOWER_FLAG = 182106,
81 // possible shrine auras - not used
82 //GO_ALLIANCE_BANNER_AURA = 180100,
83 //GO_HORDE_BANNER_AURA = 180101,
85 // capture points
86 GO_TOWER_BANNER_NORTHPASS = 181899,
87 GO_TOWER_BANNER_CROWNGUARD = 182096,
88 GO_TOWER_BANNER_EASTWALL = 182097,
89 GO_TOWER_BANNER_PLAGUEWOOD = 182098,
91 GO_TOWER_BANNER = 182106, // tower banners around
93 // events
94 //EVENT_NORTHPASS_WIN_ALLIANCE = 10568,
95 //EVENT_NORTHPASS_WIN_HORDE = 10556,
96 //EVENT_NORTHPASS_CONTEST_ALLIANCE = 10697,
97 //EVENT_NORTHPASS_CONTEST_HORDE = 10696,
98 EVENT_NORTHPASS_PROGRESS_ALLIANCE = 10699,
99 EVENT_NORTHPASS_PROGRESS_HORDE = 10698,
100 EVENT_NORTHPASS_NEUTRAL_ALLIANCE = 11151,
101 EVENT_NORTHPASS_NEUTRAL_HORDE = 11150,
103 //EVENT_CROWNGUARD_WIN_ALLIANCE = 10570,
104 //EVENT_CROWNGUARD_WIN_HORDE = 10566,
105 //EVENT_CROWNGUARD_CONTEST_ALLIANCE = 10703,
106 //EVENT_CROWNGUARD_CONTEST_HORDE = 10702,
107 EVENT_CROWNGUARD_PROGRESS_ALLIANCE = 10705,
108 EVENT_CROWNGUARD_PROGRESS_HORDE = 10704,
109 EVENT_CROWNGUARD_NEUTRAL_ALLIANCE = 11155,
110 EVENT_CROWNGUARD_NEUTRAL_HORDE = 11154,
112 //EVENT_EASTWALL_WIN_ALLIANCE = 10569,
113 //EVENT_EASTWALL_WIN_HORDE = 10565,
114 //EVENT_EASTWALL_CONTEST_ALLIANCE = 10689,
115 //EVENT_EASTWALL_CONTEST_HORDE = 10690,
116 EVENT_EASTWALL_PROGRESS_ALLIANCE = 10691,
117 EVENT_EASTWALL_PROGRESS_HORDE = 10692,
118 EVENT_EASTWALL_NEUTRAL_ALLIANCE = 11149,
119 EVENT_EASTWALL_NEUTRAL_HORDE = 11148,
121 //EVENT_PLAGUEWOOD_WIN_ALLIANCE = 10567,
122 //EVENT_PLAGUEWOOD_WIN_HORDE = 10564,
123 //EVENT_PLAGUEWOOD_CONTEST_ALLIANCE = 10687,
124 //EVENT_PLAGUEWOOD_CONTEST_HORDE = 10688,
125 EVENT_PLAGUEWOOD_PROGRESS_ALLIANCE = 10701,
126 EVENT_PLAGUEWOOD_PROGRESS_HORDE = 10700,
127 EVENT_PLAGUEWOOD_NEUTRAL_ALLIANCE = 11153,
128 EVENT_PLAGUEWOOD_NEUTRAL_HORDE = 11152,
130 // world states
131 WORLD_STATE_EP_TOWER_COUNT_ALLIANCE = 2327,
132 WORLD_STATE_EP_TOWER_COUNT_HORDE = 2328,
134 //WORLD_STATE_EP_PLAGUEWOOD_CONTEST_ALLIANCE = 2366,
135 //WORLD_STATE_EP_PLAGUEWOOD_CONTEST_HORDE = 2367,
136 //WORLD_STATE_EP_PLAGUEWOOD_PROGRESS_ALLIANCE = 2368,
137 //WORLD_STATE_EP_PLAGUEWOOD_PROGRESS_HORDE = 2369,
138 WORLD_STATE_EP_PLAGUEWOOD_ALLIANCE = 2370,
139 WORLD_STATE_EP_PLAGUEWOOD_HORDE = 2371,
140 WORLD_STATE_EP_PLAGUEWOOD_NEUTRAL = 2353,
142 //WORLD_STATE_EP_NORTHPASS_CONTEST_ALLIANCE = 2362,
143 //WORLD_STATE_EP_NORTHPASS_CONTEST_HORDE = 2363,
144 //WORLD_STATE_EP_NORTHPASS_PROGRESS_ALLIANCE = 2364,
145 //WORLD_STATE_EP_NORTHPASS_PROGRESS_HORDE = 2365,
146 WORLD_STATE_EP_NORTHPASS_ALLIANCE = 2372,
147 WORLD_STATE_EP_NORTHPASS_HORDE = 2373,
148 WORLD_STATE_EP_NORTHPASS_NEUTRAL = 2352,
150 //WORLD_STATE_EP_EASTWALL_CONTEST_ALLIANCE = 2359,
151 //WORLD_STATE_EP_EASTWALL_CONTEST_HORDE = 2360,
152 //WORLD_STATE_EP_EASTWALL_PROGRESS_ALLIANCE = 2357,
153 //WORLD_STATE_EP_EASTWALL_PROGRESS_HORDE = 2358,
154 WORLD_STATE_EP_EASTWALL_ALLIANCE = 2354,
155 WORLD_STATE_EP_EASTWALL_HORDE = 2356,
156 WORLD_STATE_EP_EASTWALL_NEUTRAL = 2361,
158 //WORLD_STATE_EP_CROWNGUARD_CONTEST_ALLIANCE = 2374,
159 //WORLD_STATE_EP_CROWNGUARD_CONTEST_HORDE = 2375,
160 //WORLD_STATE_EP_CROWNGUARD_PROGRESS_ALLIANCE = 2376,
161 //WORLD_STATE_EP_CROWNGUARD_PROGRESS_HORDE = 2377,
162 WORLD_STATE_EP_CROWNGUARD_ALLIANCE = 2378,
163 WORLD_STATE_EP_CROWNGUARD_HORDE = 2379,
164 WORLD_STATE_EP_CROWNGUARD_NEUTRAL = 2355
167 struct PlaguelandsTowerBuff
169 uint32 spellIdAlliance, spellIdHorde;
172 static const PlaguelandsTowerBuff plaguelandsTowerBuffs[MAX_EP_TOWERS] =
174 {SPELL_ECHOES_OF_LORDAERON_ALLIANCE_1, SPELL_ECHOES_OF_LORDAERON_HORDE_1},
175 {SPELL_ECHOES_OF_LORDAERON_ALLIANCE_2, SPELL_ECHOES_OF_LORDAERON_HORDE_2},
176 {SPELL_ECHOES_OF_LORDAERON_ALLIANCE_3, SPELL_ECHOES_OF_LORDAERON_HORDE_3},
177 {SPELL_ECHOES_OF_LORDAERON_ALLIANCE_4, SPELL_ECHOES_OF_LORDAERON_HORDE_4}
180 // capture points coordinates to sort the banners
181 static const float plaguelandsTowerLocations[MAX_EP_TOWERS][2] =
183 {3181.08f, -4379.36f}, // Northpass
184 {1860.85f, -3731.23f}, // Crownguard
185 {2574.51f, -4794.89f}, // Eastwall
186 {2962.71f, -3042.31f} // Plaguewood
189 struct PlaguelandsTowerEvent
191 uint32 eventEntry;
192 Team team;
193 uint32 defenseMessage;
194 uint32 worldState;
197 static const PlaguelandsTowerEvent plaguelandsTowerEvents[MAX_EP_TOWERS][4] =
200 {EVENT_NORTHPASS_PROGRESS_ALLIANCE, ALLIANCE, LANG_OPVP_EP_CAPTURE_NPT_A, WORLD_STATE_EP_NORTHPASS_ALLIANCE},
201 {EVENT_NORTHPASS_PROGRESS_HORDE, HORDE, LANG_OPVP_EP_CAPTURE_NPT_H, WORLD_STATE_EP_NORTHPASS_HORDE},
202 {EVENT_NORTHPASS_NEUTRAL_HORDE, TEAM_NONE, 0, WORLD_STATE_EP_NORTHPASS_NEUTRAL},
203 {EVENT_NORTHPASS_NEUTRAL_ALLIANCE, TEAM_NONE, 0, WORLD_STATE_EP_NORTHPASS_NEUTRAL},
206 {EVENT_CROWNGUARD_PROGRESS_ALLIANCE, ALLIANCE, LANG_OPVP_EP_CAPTURE_CGT_A, WORLD_STATE_EP_CROWNGUARD_ALLIANCE},
207 {EVENT_CROWNGUARD_PROGRESS_HORDE, HORDE, LANG_OPVP_EP_CAPTURE_CGT_H, WORLD_STATE_EP_CROWNGUARD_HORDE},
208 {EVENT_CROWNGUARD_NEUTRAL_HORDE, TEAM_NONE, 0, WORLD_STATE_EP_CROWNGUARD_NEUTRAL},
209 {EVENT_CROWNGUARD_NEUTRAL_ALLIANCE, TEAM_NONE, 0, WORLD_STATE_EP_CROWNGUARD_NEUTRAL},
212 {EVENT_EASTWALL_PROGRESS_ALLIANCE, ALLIANCE, LANG_OPVP_EP_CAPTURE_EWT_A, WORLD_STATE_EP_EASTWALL_ALLIANCE},
213 {EVENT_EASTWALL_PROGRESS_HORDE, HORDE, LANG_OPVP_EP_CAPTURE_EWT_H, WORLD_STATE_EP_EASTWALL_HORDE},
214 {EVENT_EASTWALL_NEUTRAL_HORDE, TEAM_NONE, 0, WORLD_STATE_EP_EASTWALL_NEUTRAL},
215 {EVENT_EASTWALL_NEUTRAL_ALLIANCE, TEAM_NONE, 0, WORLD_STATE_EP_EASTWALL_NEUTRAL},
218 {EVENT_PLAGUEWOOD_PROGRESS_ALLIANCE, ALLIANCE, LANG_OPVP_EP_CAPTURE_PWT_A, WORLD_STATE_EP_PLAGUEWOOD_ALLIANCE},
219 {EVENT_PLAGUEWOOD_PROGRESS_HORDE, HORDE, LANG_OPVP_EP_CAPTURE_PWT_H, WORLD_STATE_EP_PLAGUEWOOD_HORDE},
220 {EVENT_PLAGUEWOOD_NEUTRAL_HORDE, TEAM_NONE, 0, WORLD_STATE_EP_PLAGUEWOOD_NEUTRAL},
221 {EVENT_PLAGUEWOOD_NEUTRAL_ALLIANCE, TEAM_NONE, 0, WORLD_STATE_EP_PLAGUEWOOD_NEUTRAL},
225 static const uint32 plaguelandsBanners[MAX_EP_TOWERS] = {GO_TOWER_BANNER_NORTHPASS, GO_TOWER_BANNER_CROWNGUARD, GO_TOWER_BANNER_EASTWALL, GO_TOWER_BANNER_PLAGUEWOOD};
227 class OutdoorPvPEP : public OutdoorPvP
229 public:
230 OutdoorPvPEP();
232 void HandlePlayerEnterZone(Player* player, bool isMainZone) override;
233 void HandlePlayerLeaveZone(Player* player, bool isMainZone) override;
234 void FillInitialWorldStates(WorldPacket& data, uint32& count) override;
235 void SendRemoveWorldStates(Player* player) override;
237 bool HandleEvent(uint32 eventId, GameObject* go) override;
238 void HandleObjectiveComplete(uint32 eventId, std::list<Player*> players, Team team) override;
240 void HandleCreatureCreate(Creature* creature) override;
241 void HandleGameObjectCreate(GameObject* go) override;
242 bool HandleGameObjectUse(Player* player, GameObject* go) override;
244 private:
245 // process capture events
246 bool ProcessCaptureEvent(GameObject* go, uint32 towerId, Team team, uint32 newWorldState);
248 void InitBanner(GameObject* go, uint32 towerId);
250 // Plaguewood bonus - flight master
251 void UnsummonFlightMaster(const WorldObject* objRef);
252 // Eastwall bonus - soldiers
253 void UnsummonSoldiers(const WorldObject* objRef);
255 Team m_towerOwner[MAX_EP_TOWERS];
256 uint32 m_towerWorldState[MAX_EP_TOWERS];
257 uint8 m_towersAlliance;
258 uint8 m_towersHorde;
260 ObjectGuid m_flightMaster;
261 ObjectGuid m_lordaeronShrineAlliance;
262 ObjectGuid m_lordaeronShrineHorde;
264 GuidList m_soldiers;
266 GuidList m_towerBanners[MAX_EP_TOWERS];
269 #endif