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
23 #include "OutdoorPvP.h"
28 TOWER_ID_NORTHPASS
= 0,
29 TOWER_ID_CROWNGUARD
= 1,
30 TOWER_ID_EASTWALL
= 2,
31 TOWER_ID_PLAGUEWOOD
= 3,
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,
46 GRAVEYARD_ZONE_EASTERN_PLAGUE
= 139,
47 GRAVEYARD_ID_EASTERN_PLAGUE
= 927,
50 HONOR_REWARD_PLAGUELANDS
= 18,
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,
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,
69 NPC_LORDAERON_COMMANDER
= 17635,
70 NPC_LORDAERON_SOLDIER
= 17647,
73 NPC_LORDAERON_VETERAN
= 17995,
74 NPC_LORDAERON_FIGHTER
= 17996,
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,
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
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,
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
193 uint32 defenseMessage
;
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
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
;
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
;
260 ObjectGuid m_flightMaster
;
261 ObjectGuid m_lordaeronShrineAlliance
;
262 ObjectGuid m_lordaeronShrineHorde
;
266 GuidList m_towerBanners
[MAX_EP_TOWERS
];