1 | #ifndef OUTDOOR_PVP_NA_ |
---|
2 | #define OUTDOOR_PVP_NA_ |
---|
3 | |
---|
4 | // TODO: "sometimes" set to neutral |
---|
5 | |
---|
6 | #include "OutdoorPvP.h" |
---|
7 | |
---|
8 | // kill credit for pks |
---|
9 | const uint32 NA_CREDIT_MARKER = 24867; |
---|
10 | |
---|
11 | const uint32 NA_KILL_TOKEN_ALLIANCE = 33005; |
---|
12 | const uint32 NA_KILL_TOKEN_HORDE = 33004; |
---|
13 | |
---|
14 | const uint32 NA_CAPTURE_BUFF = 33795; // strength of the halaani |
---|
15 | |
---|
16 | const uint32 NA_GUARDS_MAX = 15; |
---|
17 | |
---|
18 | const uint32 NA_BUFF_ZONE = 3518; |
---|
19 | |
---|
20 | const uint32 NA_HALAA_GRAVEYARD = 993; |
---|
21 | |
---|
22 | const uint32 NA_HALAA_GRAVEYARD_ZONE = 3518; // need to add zone id, not area id |
---|
23 | |
---|
24 | const uint32 NA_RESPAWN_TIME = 3600000; // one hour to capture after defeating all guards |
---|
25 | |
---|
26 | const uint32 NA_GUARD_CHECK_TIME = 500; // every half second |
---|
27 | |
---|
28 | enum OutdoorPvPNAWorldStates{ |
---|
29 | NA_UI_HORDE_GUARDS_SHOW = 2503, |
---|
30 | NA_UI_ALLIANCE_GUARDS_SHOW = 2502, |
---|
31 | NA_UI_GUARDS_MAX = 2493, |
---|
32 | NA_UI_GUARDS_LEFT = 2491, |
---|
33 | |
---|
34 | NA_UI_TOWER_SLIDER_DISPLAY = 2495, |
---|
35 | NA_UI_TOWER_SLIDER_POS = 2494, |
---|
36 | NA_UI_TOWER_SLIDER_N = 2497, |
---|
37 | |
---|
38 | NA_MAP_WYVERN_NORTH_NEU_H = 2762, |
---|
39 | NA_MAP_WYVERN_NORTH_NEU_A = 2662, |
---|
40 | NA_MAP_WYVERN_NORTH_H = 2663, |
---|
41 | NA_MAP_WYVERN_NORTH_A = 2664, |
---|
42 | |
---|
43 | NA_MAP_WYVERN_SOUTH_NEU_H = 2760, |
---|
44 | NA_MAP_WYVERN_SOUTH_NEU_A = 2670, |
---|
45 | NA_MAP_WYVERN_SOUTH_H = 2668, |
---|
46 | NA_MAP_WYVERN_SOUTH_A = 2669, |
---|
47 | |
---|
48 | NA_MAP_WYVERN_WEST_NEU_H = 2761, |
---|
49 | NA_MAP_WYVERN_WEST_NEU_A = 2667, |
---|
50 | NA_MAP_WYVERN_WEST_H = 2665, |
---|
51 | NA_MAP_WYVERN_WEST_A = 2666, |
---|
52 | |
---|
53 | NA_MAP_WYVERN_EAST_NEU_H = 2763, |
---|
54 | NA_MAP_WYVERN_EAST_NEU_A = 2659, |
---|
55 | NA_MAP_WYVERN_EAST_H = 2660, |
---|
56 | NA_MAP_WYVERN_EAST_A = 2661, |
---|
57 | |
---|
58 | NA_MAP_HALAA_NEUTRAL = 2671, |
---|
59 | NA_MAP_HALAA_NEU_A = 2676, |
---|
60 | NA_MAP_HALAA_NEU_H = 2677, |
---|
61 | NA_MAP_HALAA_HORDE = 2672, |
---|
62 | NA_MAP_HALAA_ALLIANCE = 2673 |
---|
63 | }; |
---|
64 | |
---|
65 | const uint32 FLIGHT_NODES_NUM = 4; |
---|
66 | |
---|
67 | // used to access the elements of Horde/AllyControlGOs |
---|
68 | enum ControlGOTypes{ |
---|
69 | NA_ROOST_S = 0, |
---|
70 | NA_ROOST_W = 1, |
---|
71 | NA_ROOST_N = 2, |
---|
72 | NA_ROOST_E = 3, |
---|
73 | |
---|
74 | NA_BOMB_WAGON_S = 4, |
---|
75 | NA_BOMB_WAGON_W = 5, |
---|
76 | NA_BOMB_WAGON_N = 6, |
---|
77 | NA_BOMB_WAGON_E = 7, |
---|
78 | |
---|
79 | NA_DESTROYED_ROOST_S = 8, |
---|
80 | NA_DESTROYED_ROOST_W = 9, |
---|
81 | NA_DESTROYED_ROOST_N = 10, |
---|
82 | NA_DESTROYED_ROOST_E = 11, |
---|
83 | |
---|
84 | NA_CONTROL_GO_NUM = 12 |
---|
85 | }; |
---|
86 | |
---|
87 | const uint32 FlightPathStartNodes[FLIGHT_NODES_NUM] = {103,105,107,109}; |
---|
88 | const uint32 FlightPathEndNodes[FLIGHT_NODES_NUM] = {104,106,108,110}; |
---|
89 | |
---|
90 | enum FlightSpellsNA{ |
---|
91 | NA_SPELL_FLY_SOUTH = 32059, |
---|
92 | NA_SPELL_FLY_WEST = 32068, |
---|
93 | NA_SPELL_FLY_NORTH = 32075, |
---|
94 | NA_SPELL_FLY_EAST = 32081 |
---|
95 | }; |
---|
96 | |
---|
97 | // spawned when the alliance is attacking, horde is in control |
---|
98 | const go_type HordeControlGOs[NA_CONTROL_GO_NUM] = { |
---|
99 | {182267,530,-1815.8,8036.51,-26.2354,-2.89725,0,0,0.992546,-0.121869}, //ALLY_ROOST_SOUTH |
---|
100 | {182280,530,-1507.95,8132.1,-19.5585,-1.3439,0,0,0.622515,-0.782608}, //ALLY_ROOST_WEST |
---|
101 | {182281,530,-1384.52,7779.33,-11.1663,-0.575959,0,0,0.284015,-0.95882}, //ALLY_ROOST_NORTH |
---|
102 | {182282,530,-1650.11,7732.56,-15.4505,-2.80998,0,0,0.986286,-0.165048}, //ALLY_ROOST_EAST |
---|
103 | |
---|
104 | {182222,530,-1825.4022,8039.2602,-26.08,-2.89725,0,0,0.992546,-0.121869}, //HORDE_BOMB_WAGON_SOUTH |
---|
105 | {182272,530,-1515.37,8136.91,-20.42,-1.3439,0,0,0.622515,-0.782608}, //HORDE_BOMB_WAGON_WEST |
---|
106 | {182273,530,-1377.95,7773.44,-10.31,-0.575959,0,0,0.284015,-0.95882}, //HORDE_BOMB_WAGON_NORTH |
---|
107 | {182274,530,-1659.87,7733.15,-15.75,-2.80998,0,0,0.986286,-0.165048}, //HORDE_BOMB_WAGON_EAST |
---|
108 | |
---|
109 | {182266,530,-1815.8,8036.51,-26.2354,-2.89725,0,0,0.992546,-0.121869}, //DESTROYED_ALLY_ROOST_SOUTH |
---|
110 | {182275,530,-1507.95,8132.1,-19.5585,-1.3439,0,0,0.622515,-0.782608}, //DESTROYED_ALLY_ROOST_WEST |
---|
111 | {182276,530,-1384.52,7779.33,-11.1663,-0.575959,0,0,0.284015,-0.95882}, //DESTROYED_ALLY_ROOST_NORTH |
---|
112 | {182277,530,-1650.11,7732.56,-15.4505,-2.80998,0,0,0.986286,-0.165048} //DESTROYED_ALLY_ROOST_EAST |
---|
113 | }; |
---|
114 | |
---|
115 | // spawned when the horde is attacking, alliance is in control |
---|
116 | const go_type AllianceControlGOs[NA_CONTROL_GO_NUM] = { |
---|
117 | {182301,530,-1815.8,8036.51,-26.2354,-2.89725,0,0,0.992546,-0.121869}, //HORDE_ROOST_SOUTH |
---|
118 | {182302,530,-1507.95,8132.1,-19.5585,-1.3439,0,0,0.622515,-0.782608}, //HORDE_ROOST_WEST |
---|
119 | {182303,530,-1384.52,7779.33,-11.1663,-0.575959,0,0,0.284015,-0.95882}, //HORDE_ROOST_NORTH |
---|
120 | {182304,530,-1650.11,7732.56,-15.4505,-2.80998,0,0,0.986286,-0.165048}, //HORDE_ROOST_EAST |
---|
121 | |
---|
122 | {182305,530,-1825.4022,8039.2602,-26.08,-2.89725,0,0,0.992546,-0.121869}, //ALLY_BOMB_WAGON_SOUTH |
---|
123 | {182306,530,-1515.37,8136.91,-20.42,-1.3439,0,0,0.622515,-0.782608}, //ALLY_BOMB_WAGON_WEST |
---|
124 | {182307,530,-1377.95,7773.44,-10.31,-0.575959,0,0,0.284015,-0.95882}, //ALLY_BOMB_WAGON_NORTH |
---|
125 | {182308,530,-1659.87,7733.15,-15.75,-2.80998,0,0,0.986286,-0.165048}, //ALLY_BOMB_WAGON_EAST |
---|
126 | |
---|
127 | {182297,530,-1815.8,8036.51,-26.2354,-2.89725,0,0,0.992546,-0.121869}, //DESTROYED_HORDE_ROOST_SOUTH |
---|
128 | {182298,530,-1507.95,8132.1,-19.5585,-1.3439,0,0,0.622515,-0.782608}, //DESTROYED_HORDE_ROOST_WEST |
---|
129 | {182299,530,-1384.52,7779.33,-11.1663,-0.575959,0,0,0.284015,-0.95882}, //DESTROYED_HORDE_ROOST_NORTH |
---|
130 | {182300,530,-1650.11,7732.56,-15.4505,-2.80998,0,0,0.986286,-0.165048} //DESTROYED_HORDE_ROOST_EAST |
---|
131 | }; |
---|
132 | |
---|
133 | enum ControlNPCTypes{ |
---|
134 | NA_NPC_RESEARCHER = 0, |
---|
135 | NA_NPC_QUARTERMASTER, |
---|
136 | NA_NPC_BLADE_MERCHANT, |
---|
137 | NA_NPC_FOOD_MERCHANT, |
---|
138 | NA_NPC_AMMO, |
---|
139 | |
---|
140 | NA_NPC_GUARD_01, |
---|
141 | NA_NPC_GUARD_02, |
---|
142 | NA_NPC_GUARD_03, |
---|
143 | NA_NPC_GUARD_04, |
---|
144 | NA_NPC_GUARD_05, |
---|
145 | NA_NPC_GUARD_06, |
---|
146 | NA_NPC_GUARD_07, |
---|
147 | NA_NPC_GUARD_08, |
---|
148 | NA_NPC_GUARD_09, |
---|
149 | NA_NPC_GUARD_10, |
---|
150 | NA_NPC_GUARD_11, |
---|
151 | NA_NPC_GUARD_12, |
---|
152 | NA_NPC_GUARD_13, |
---|
153 | NA_NPC_GUARD_14, |
---|
154 | NA_NPC_GUARD_15, |
---|
155 | |
---|
156 | NA_CONTROL_NPC_NUM |
---|
157 | }; |
---|
158 | |
---|
159 | const creature_type HordeControlNPCs[NA_CONTROL_NPC_NUM] = { |
---|
160 | {18816,67,530,-1523.92,7951.76,-17.6942,3.51172}, |
---|
161 | {18821,67,530,-1527.75,7952.46,-17.6948,3.99317}, |
---|
162 | {21474,67,530,-1520.14,7927.11,-20.2527,3.39389}, |
---|
163 | {21484,67,530,-1524.84,7930.34,-20.182,3.6405}, |
---|
164 | {21483,67,530,-1570.01,7993.8,-22.4505,5.02655}, |
---|
165 | {18192,67,530,-1654.06,8000.46,-26.59,3.37}, |
---|
166 | {18192,67,530,-1487.18,7899.1,-19.53,0.954}, |
---|
167 | {18192,67,530,-1480.88,7908.79,-19.19,4.485}, |
---|
168 | {18192,67,530,-1540.56,7995.44,-20.45,0.947}, |
---|
169 | {18192,67,530,-1546.95,8000.85,-20.72,6.035}, |
---|
170 | {18192,67,530,-1595.31,7860.53,-21.51,3.747}, |
---|
171 | {18192,67,530,-1642.31,7995.59,-25.8,3.317}, |
---|
172 | {18192,67,530,-1545.46,7995.35,-20.63,1.094}, |
---|
173 | {18192,67,530,-1487.58,7907.99,-19.27,5.567}, |
---|
174 | {18192,67,530,-1651.54,7988.56,-26.5289,2.98451}, |
---|
175 | {18192,67,530,-1602.46,7866.43,-22.1177,4.74729}, |
---|
176 | {18192,67,530,-1591.22,7875.29,-22.3536,4.34587}, |
---|
177 | {18192,67,530,-1550.6,7944.45,-21.63,3.559}, |
---|
178 | {18192,67,530,-1545.57,7935.83,-21.13,3.448}, |
---|
179 | {18192,67,530,-1550.86,7937.56,-21.7,3.801} |
---|
180 | }; |
---|
181 | |
---|
182 | const creature_type AllianceControlNPCs[NA_CONTROL_NPC_NUM] = { |
---|
183 | {18817,469,530,-1591.18,8020.39,-22.2042,4.59022}, |
---|
184 | {18822,469,530,-1588.0,8019.0,-22.2042,4.06662}, |
---|
185 | {21485,469,530,-1521.93,7927.37,-20.2299,3.24631}, |
---|
186 | {21487,469,530,-1540.33,7971.95,-20.7186,3.07178}, |
---|
187 | {21488,469,530,-1570.01,7993.8,-22.4505,5.02655}, |
---|
188 | {18256,469,530,-1654.06,8000.46,-26.59,3.37}, |
---|
189 | {18256,469,530,-1487.18,7899.1,-19.53,0.954}, |
---|
190 | {18256,469,530,-1480.88,7908.79,-19.19,4.485}, |
---|
191 | {18256,469,530,-1540.56,7995.44,-20.45,0.947}, |
---|
192 | {18256,469,530,-1546.95,8000.85,-20.72,6.035}, |
---|
193 | {18256,469,530,-1595.31,7860.53,-21.51,3.747}, |
---|
194 | {18256,469,530,-1642.31,7995.59,-25.8,3.317}, |
---|
195 | {18256,469,530,-1545.46,7995.35,-20.63,1.094}, |
---|
196 | {18256,469,530,-1487.58,7907.99,-19.27,5.567}, |
---|
197 | {18256,469,530,-1651.54,7988.56,-26.5289,2.98451}, |
---|
198 | {18256,469,530,-1602.46,7866.43,-22.1177,4.74729}, |
---|
199 | {18256,469,530,-1591.22,7875.29,-22.3536,4.34587}, |
---|
200 | {18256,469,530,-1603.75,8000.36,-24.18,4.516}, |
---|
201 | {18256,469,530,-1585.73,7994.68,-23.29,4.439}, |
---|
202 | {18256,469,530,-1595.5,7991.27,-23.53,4.738} |
---|
203 | }; |
---|
204 | |
---|
205 | enum WyvernStates{ |
---|
206 | WYVERN_NEU_HORDE = 1, |
---|
207 | WYVERN_NEU_ALLIANCE = 2, |
---|
208 | WYVERN_HORDE = 4, |
---|
209 | WYVERN_ALLIANCE = 8 |
---|
210 | }; |
---|
211 | |
---|
212 | enum HalaaStates{ |
---|
213 | HALAA_N = 1, |
---|
214 | HALAA_N_A = 2, |
---|
215 | HALAA_A = 4, |
---|
216 | HALAA_N_H = 8, |
---|
217 | HALAA_H = 16 |
---|
218 | }; |
---|
219 | |
---|
220 | class Unit; |
---|
221 | class Creature; |
---|
222 | class OutdoorPvPNA; |
---|
223 | class OutdoorPvPObjectiveNA : public OutdoorPvPObjective |
---|
224 | { |
---|
225 | friend class OutdoorPvPNA; |
---|
226 | public: |
---|
227 | OutdoorPvPObjectiveNA(OutdoorPvP * pvp); |
---|
228 | bool Update(uint32 diff); |
---|
229 | void FillInitialWorldStates(WorldPacket & data); |
---|
230 | // used when player is activated/inactivated in the area |
---|
231 | bool HandlePlayerEnter(Player * plr); |
---|
232 | void HandlePlayerLeave(Player * plr); |
---|
233 | bool HandleCustomSpell(Player *plr, uint32 spellId, GameObject * go); |
---|
234 | int32 HandleOpenGo(Player *plr, uint64 guid); |
---|
235 | uint32 GetAliveGuardsCount(); |
---|
236 | protected: |
---|
237 | // called when a faction takes control |
---|
238 | void FactionTakeOver(uint32 team); |
---|
239 | |
---|
240 | void DeSpawnNPCs(); |
---|
241 | void DeSpawnGOs(); |
---|
242 | void SpawnNPCsForTeam(uint32 team); |
---|
243 | void SpawnGOsForTeam(uint32 team); |
---|
244 | |
---|
245 | void UpdateWyvernRoostWorldState(uint32 roost); |
---|
246 | void UpdateHalaaWorldState(); |
---|
247 | |
---|
248 | bool HandleCapturePointEvent(Player * plr, uint32 eventId); |
---|
249 | private: |
---|
250 | bool m_capturable; |
---|
251 | uint32 m_GuardsAlive; |
---|
252 | uint32 m_ControllingFaction; |
---|
253 | uint32 m_WyvernStateNorth; |
---|
254 | uint32 m_WyvernStateSouth; |
---|
255 | uint32 m_WyvernStateEast; |
---|
256 | uint32 m_WyvernStateWest; |
---|
257 | uint32 m_HalaaState; |
---|
258 | uint32 m_RespawnTimer; |
---|
259 | uint32 m_GuardCheckTimer; |
---|
260 | }; |
---|
261 | |
---|
262 | class OutdoorPvPNA : public OutdoorPvP |
---|
263 | { |
---|
264 | friend class OutdoorPvPObjectiveNA; |
---|
265 | public: |
---|
266 | OutdoorPvPNA(); |
---|
267 | bool SetupOutdoorPvP(); |
---|
268 | void HandlePlayerEnterZone(Player *plr, uint32 zone); |
---|
269 | void HandlePlayerLeaveZone(Player *plr, uint32 zone); |
---|
270 | bool Update(uint32 diff); |
---|
271 | void FillInitialWorldStates(WorldPacket &data); |
---|
272 | void SendRemoveWorldStates(Player * plr); |
---|
273 | void HandleKillImpl(Player * plr, Unit * killed); |
---|
274 | void BuffTeam(uint32 team); |
---|
275 | private: |
---|
276 | OutdoorPvPObjectiveNA * m_obj; |
---|
277 | }; |
---|
278 | |
---|
279 | #endif |
---|