1 | /* |
---|
2 | * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> |
---|
3 | * |
---|
4 | * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> |
---|
5 | * |
---|
6 | * This program is free software; you can redistribute it and/or modify |
---|
7 | * it under the terms of the GNU General Public License as published by |
---|
8 | * the Free Software Foundation; either version 2 of the License, or |
---|
9 | * (at your option) any later version. |
---|
10 | * |
---|
11 | * This program is distributed in the hope that it will be useful, |
---|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
14 | * GNU General Public License for more details. |
---|
15 | * |
---|
16 | * You should have received a copy of the GNU General Public License |
---|
17 | * along with this program; if not, write to the Free Software |
---|
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
---|
19 | */ |
---|
20 | #ifndef __BATTLEGROUNDAB_H |
---|
21 | #define __BATTLEGROUNDAB_H |
---|
22 | |
---|
23 | class BattleGround; |
---|
24 | |
---|
25 | enum BG_AB_WorldStates |
---|
26 | { |
---|
27 | BG_AB_OP_OCCUPIED_BASES_HORDE = 1778, |
---|
28 | BG_AB_OP_OCCUPIED_BASES_ALLY = 1779, |
---|
29 | BG_AB_OP_RESOURCES_ALLY = 1776, |
---|
30 | BG_AB_OP_RESOURCES_HORDE = 1777, |
---|
31 | BG_AB_OP_RESOURCES_MAX = 1780, |
---|
32 | BG_AB_OP_RESOURCES_WARNING = 1955 |
---|
33 | /* |
---|
34 | BG_AB_OP_STABLE_ICON = 1842, //Stable map icon (NONE) |
---|
35 | BG_AB_OP_STABLE_STATE_ALIENCE = 1767, //Stable map state (ALIENCE) |
---|
36 | BG_AB_OP_STABLE_STATE_HORDE = 1768, //Stable map state (HORDE) |
---|
37 | BG_AB_OP_STABLE_STATE_CON_ALI = 1769, //Stable map state (CON ALIENCE) |
---|
38 | BG_AB_OP_STABLE_STATE_CON_HOR = 1770, //Stable map state (CON HORDE) |
---|
39 | BG_AB_OP_FARM_ICON = 1845, //Farm map icon (NONE) |
---|
40 | BG_AB_OP_FARM_STATE_ALIENCE = 1772, //Farm state (ALIENCE) |
---|
41 | BG_AB_OP_FARM_STATE_HORDE = 1773, //Farm state (HORDE) |
---|
42 | BG_AB_OP_FARM_STATE_CON_ALI = 1774, //Farm state (CON ALIENCE) |
---|
43 | BG_AB_OP_FARM_STATE_CON_HOR = 1775, //Farm state (CON HORDE) |
---|
44 | |
---|
45 | BG_AB_OP_BLACKSMITH_ICON = 1846, //Blacksmith map icon (NONE) |
---|
46 | BG_AB_OP_BLACKSMITH_STATE_ALIENCE = 1782, //Blacksmith map state (ALIENCE) |
---|
47 | BG_AB_OP_BLACKSMITH_STATE_HORDE = 1783, //Blacksmith map state (HORDE) |
---|
48 | BG_AB_OP_BLACKSMITH_STATE_CON_ALI = 1784, //Blacksmith map state (CON ALIENCE) |
---|
49 | BG_AB_OP_BLACKSMITH_STATE_CON_HOR = 1785, //Blacksmith map state (CON HORDE) |
---|
50 | BG_AB_OP_LUMBERMILL_ICON = 1844, //Lumber Mill map icon (NONE) |
---|
51 | BG_AB_OP_LUMBERMILL_STATE_ALIENCE = 1792, //Lumber Mill map state (ALIENCE) |
---|
52 | BG_AB_OP_LUMBERMILL_STATE_HORDE = 1793, //Lumber Mill map state (HORDE) |
---|
53 | BG_AB_OP_LUMBERMILL_STATE_CON_ALI = 1794, //Lumber Mill map state (CON ALIENCE) |
---|
54 | BG_AB_OP_LUMBERMILL_STATE_CON_HOR = 1795, //Lumber Mill map state (CON HORDE) |
---|
55 | BG_AB_OP_GOLDMINE_ICON = 1843, //Gold Mine map icon (NONE) |
---|
56 | BG_AB_OP_GOLDMINE_STATE_ALIENCE = 1787, //Gold Mine map state (ALIENCE) |
---|
57 | BG_AB_OP_GOLDMINE_STATE_HORDE = 1788, //Gold Mine map state (HORDE) |
---|
58 | BG_AB_OP_GOLDMINE_STATE_CON_ALI = 1789, //Gold Mine map state (CON ALIENCE |
---|
59 | BG_AB_OP_GOLDMINE_STATE_CON_HOR = 1790, //Gold Mine map state (CON HORDE) |
---|
60 | */ |
---|
61 | }; |
---|
62 | |
---|
63 | const uint32 BG_AB_OP_NODESTATES[5] = {1767, 1782, 1772, 1792, 1787}; |
---|
64 | |
---|
65 | const uint32 BG_AB_OP_NODEICONS[5] = {1842, 1846, 1845, 1844, 1843}; |
---|
66 | |
---|
67 | /* Note: code uses that these IDs follow each other */ |
---|
68 | enum BG_AB_NodeObjectId |
---|
69 | { |
---|
70 | BG_AB_OBJECTID_NODE_BANNER_0 = 180087, // Stables banner |
---|
71 | BG_AB_OBJECTID_NODE_BANNER_1 = 180088, // Blacksmith banner |
---|
72 | BG_AB_OBJECTID_NODE_BANNER_2 = 180089, // Farm banner |
---|
73 | BG_AB_OBJECTID_NODE_BANNER_3 = 180090, // Lumber mill banner |
---|
74 | BG_AB_OBJECTID_NODE_BANNER_4 = 180091 // Gold mine banner |
---|
75 | }; |
---|
76 | |
---|
77 | enum BG_AB_ObjectType |
---|
78 | { |
---|
79 | // for all 5 node points 8*5=40 objects |
---|
80 | BG_AB_OBJECT_BANNER_NEUTRAL = 0, |
---|
81 | BG_AB_OBJECT_BANNER_CONT_A = 1, |
---|
82 | BG_AB_OBJECT_BANNER_CONT_H = 2, |
---|
83 | BG_AB_OBJECT_BANNER_ALLY = 3, |
---|
84 | BG_AB_OBJECT_BANNER_HORDE = 4, |
---|
85 | BG_AB_OBJECT_AURA_ALLY = 5, |
---|
86 | BG_AB_OBJECT_AURA_HORDE = 6, |
---|
87 | BG_AB_OBJECT_AURA_CONTESTED = 7, |
---|
88 | //gates |
---|
89 | BG_AB_OBJECT_GATE_A = 40, |
---|
90 | BG_AB_OBJECT_GATE_H = 41, |
---|
91 | //buffs |
---|
92 | BG_AB_OBJECT_SPEEDBUFF_STABLES = 42, |
---|
93 | BG_AB_OBJECT_REGENBUFF_STABLES = 43, |
---|
94 | BG_AB_OBJECT_BERSERKBUFF_STABLES = 44, |
---|
95 | BG_AB_OBJECT_SPEEDBUFF_BLACKSMITH = 45, |
---|
96 | BG_AB_OBJECT_REGENBUFF_BLACKSMITH = 46, |
---|
97 | BG_AB_OBJECT_BERSERKBUFF_BLACKSMITH = 47, |
---|
98 | BG_AB_OBJECT_SPEEDBUFF_FARM = 48, |
---|
99 | BG_AB_OBJECT_REGENBUFF_FARM = 49, |
---|
100 | BG_AB_OBJECT_BERSERKBUFF_FARM = 50, |
---|
101 | BG_AB_OBJECT_SPEEDBUFF_LUMBER_MILL = 51, |
---|
102 | BG_AB_OBJECT_REGENBUFF_LUMBER_MILL = 52, |
---|
103 | BG_AB_OBJECT_BERSERKBUFF_LUMBER_MILL = 53, |
---|
104 | BG_AB_OBJECT_SPEEDBUFF_GOLD_MINE = 54, |
---|
105 | BG_AB_OBJECT_REGENBUFF_GOLD_MINE = 55, |
---|
106 | BG_AB_OBJECT_BERSERKBUFF_GOLD_MINE = 56, |
---|
107 | BG_AB_OBJECT_MAX = 57, |
---|
108 | }; |
---|
109 | |
---|
110 | /* Object id templates from DB */ |
---|
111 | enum BG_AB_ObjectTypes |
---|
112 | { |
---|
113 | BG_AB_OBJECTID_BANNER_A = 180058, |
---|
114 | BG_AB_OBJECTID_BANNER_CONT_A = 180059, |
---|
115 | BG_AB_OBJECTID_BANNER_H = 180060, |
---|
116 | BG_AB_OBJECTID_BANNER_CONT_H = 180061, |
---|
117 | |
---|
118 | BG_AB_OBJECTID_AURA_A = 180100, |
---|
119 | BG_AB_OBJECTID_AURA_H = 180101, |
---|
120 | BG_AB_OBJECTID_AURA_C = 180102, |
---|
121 | |
---|
122 | BG_AB_OBJECTID_GATE_A = 180255, |
---|
123 | BG_AB_OBJECTID_GATE_H = 180256 |
---|
124 | }; |
---|
125 | |
---|
126 | enum BG_AB_Timers |
---|
127 | { |
---|
128 | BG_AB_FLAG_CAPTURING_TIME = 60000, |
---|
129 | }; |
---|
130 | |
---|
131 | enum BG_AB_Score |
---|
132 | { |
---|
133 | BG_AB_MAX_TEAM_SCORE = 2000, |
---|
134 | BG_AB_WARNING_SCORE = 1800 |
---|
135 | }; |
---|
136 | |
---|
137 | /* do NOT change the order, else wrong behaviour */ |
---|
138 | enum BG_AB_BattleGroundNodes |
---|
139 | { |
---|
140 | BG_AB_NODE_STABLES = 0, |
---|
141 | BG_AB_NODE_BLACKSMITH = 1, |
---|
142 | BG_AB_NODE_FARM = 2, |
---|
143 | BG_AB_NODE_LUMBER_MILL = 3, |
---|
144 | BG_AB_NODE_GOLD_MINE = 4, |
---|
145 | |
---|
146 | BG_AB_DYNAMIC_NODES_COUNT = 5, // dynamic nodes that can be captured |
---|
147 | |
---|
148 | BG_AB_SPIRIT_ALIANCE = 5, |
---|
149 | BG_AB_SPIRIT_HORDE = 6, |
---|
150 | |
---|
151 | BG_AB_ALL_NODES_COUNT = 7, // all nodes (dynamic and static) |
---|
152 | }; |
---|
153 | |
---|
154 | enum BG_AB_NodeStatus |
---|
155 | { |
---|
156 | BG_AB_NODE_TYPE_NEUTRAL = 0, |
---|
157 | BG_AB_NODE_TYPE_CONTESTED = 1, |
---|
158 | BG_AB_NODE_STATUS_ALLY_CONTESTED = 1, |
---|
159 | BG_AB_NODE_STATUS_HORDE_CONTESTED = 2, |
---|
160 | BG_AB_NODE_TYPE_OCCUPIED = 3, |
---|
161 | BG_AB_NODE_STATUS_ALLY_OCCUPIED = 3, |
---|
162 | BG_AB_NODE_STATUS_HORDE_OCCUPIED = 4 |
---|
163 | }; |
---|
164 | |
---|
165 | enum BG_AB_Sounds |
---|
166 | { |
---|
167 | SOUND_NODE_CLAIMED = 8192, |
---|
168 | SOUND_NODE_CAPTURED_ALLIANCE = 8173, |
---|
169 | SOUND_NODE_CAPTURED_HORDE = 8213, |
---|
170 | SOUND_NODE_ASSAULTED_ALLIANCE = 8174, |
---|
171 | SOUND_NODE_ASSAULTED_HORDE = 8212, |
---|
172 | SOUND_NEAR_VICTORY = 8456 |
---|
173 | }; |
---|
174 | |
---|
175 | // x, y, z, o |
---|
176 | const float BG_AB_NodePositions[BG_AB_DYNAMIC_NODES_COUNT][4] = { |
---|
177 | {1166.785f, 1200.132f, -56.70859f, 0.9075713f}, // stables |
---|
178 | {977.0156f, 1046.616f, -44.80923f, -2.600541f}, // blacksmith |
---|
179 | {806.1821f, 874.2723f, -55.99371f, -2.303835f}, // farm |
---|
180 | {856.1419f, 1148.902f, 11.18469f, -2.303835f}, // lumber mill |
---|
181 | {1146.923f, 848.1782f, -110.917f, -0.7330382f} // gold mine |
---|
182 | }; |
---|
183 | |
---|
184 | // x, y, z, o, rot0, rot1, rot2, rot3 |
---|
185 | const float BG_AB_DoorPositions[2][8] = { |
---|
186 | {1284.597f, 1281.167f, -15.97792f, 0.7068594f, 0.012957f, -0.060288f, 0.344959f, 0.93659f}, |
---|
187 | {708.0903f, 708.4479f, -17.8342f, -2.391099f, 0.050291f, 0.015127f, 0.929217f, -0.365784f} |
---|
188 | }; |
---|
189 | |
---|
190 | // Tick intervals and given points: case 0,1,2,3,4,5 captured nodes |
---|
191 | const uint32 BG_AB_TickIntervals[6] = {0, 12000, 9000, 6000, 3000, 1000}; |
---|
192 | const uint32 BG_AB_TickPoints[6] = {0, 10, 10, 10, 10, 30}; |
---|
193 | |
---|
194 | // WorldSafeLocs ids for 5 nodes, and for ally, and horde starting location |
---|
195 | const uint32 BG_AB_GraveyardIds[BG_AB_ALL_NODES_COUNT] = {895, 894, 893, 897, 896, 898, 899}; |
---|
196 | |
---|
197 | // x, y, z, o |
---|
198 | const float BG_AB_BuffPositions[BG_AB_DYNAMIC_NODES_COUNT][4] = { |
---|
199 | {1185.71f, 1185.24f, -56.36f, 2.56f}, // stables |
---|
200 | {990.75f, 1008.18f, -42.60f, 2.43f}, // blacksmith |
---|
201 | {817.66f, 843.34f, -56.54f, 3.01f}, // farm |
---|
202 | {807.46f, 1189.16f, 11.92f, 5.44f}, // lumber mill |
---|
203 | {1146.62f, 816.94f, -98.49f, 6.14f} // gold mine |
---|
204 | }; |
---|
205 | |
---|
206 | // x, y, z, o |
---|
207 | const float BG_AB_SpiritGuidePos[BG_AB_ALL_NODES_COUNT][4] = { |
---|
208 | {1200.03f, 1171.09f, -56.47f, 5.15f}, // stables |
---|
209 | {1017.43f, 960.61f, -42.95f, 4.88f}, // blacksmith |
---|
210 | {833.00f, 793.00f, -57.25f, 5.27f}, // farm |
---|
211 | {775.17f, 1206.40f, 15.79f, 1.90f}, // lumber mill |
---|
212 | {1207.48f, 787.00f, -83.36f, 5.51f}, // gold mine |
---|
213 | {1354.05f, 1275.48f, -11.30f, 4.77f}, // alliance starting base |
---|
214 | {714.61f, 646.15f, -10.87f, 4.34f} // horde starting base |
---|
215 | }; |
---|
216 | |
---|
217 | struct BG_AB_BannerTimer |
---|
218 | { |
---|
219 | uint32 timer; |
---|
220 | uint8 type; |
---|
221 | uint8 teamIndex; |
---|
222 | }; |
---|
223 | |
---|
224 | class BattleGroundABScore : public BattleGroundScore |
---|
225 | { |
---|
226 | public: |
---|
227 | BattleGroundABScore(): BasesAssaulted(0), BasesDefended(0) {}; |
---|
228 | virtual ~BattleGroundABScore() {}; |
---|
229 | uint32 BasesAssaulted; |
---|
230 | uint32 BasesDefended; |
---|
231 | }; |
---|
232 | |
---|
233 | class BattleGroundAB : public BattleGround |
---|
234 | { |
---|
235 | friend class BattleGroundMgr; |
---|
236 | |
---|
237 | public: |
---|
238 | BattleGroundAB(); |
---|
239 | ~BattleGroundAB(); |
---|
240 | |
---|
241 | void Update(time_t diff); |
---|
242 | void AddPlayer(Player *plr); |
---|
243 | void RemovePlayer(Player *plr,uint64 guid); |
---|
244 | void HandleAreaTrigger(Player *Source, uint32 Trigger); |
---|
245 | virtual bool SetupBattleGround(); |
---|
246 | virtual void ResetBGSubclass(); |
---|
247 | virtual WorldSafeLocsEntry const* GetClosestGraveYard(float x, float y, float z, uint32 team); |
---|
248 | |
---|
249 | /* Scorekeeping */ |
---|
250 | virtual void UpdatePlayerScore(Player *Source, uint32 type, uint32 value); |
---|
251 | |
---|
252 | virtual void FillInitialWorldStates(WorldPacket& data); |
---|
253 | |
---|
254 | /* Nodes occupying */ |
---|
255 | virtual void EventPlayerClickedOnFlag(Player *source, GameObject* target_obj); |
---|
256 | |
---|
257 | private: |
---|
258 | /* Gameobject spawning/despawning */ |
---|
259 | void _CreateBanner(uint8 node, uint8 type, uint8 teamIndex, bool delay); |
---|
260 | void _DelBanner(uint8 node, uint8 type, uint8 teamIndex); |
---|
261 | void _SendNodeUpdate(uint8 node); |
---|
262 | |
---|
263 | /* Creature spawning/despawning */ |
---|
264 | // TODO: working, scripted peons spawning |
---|
265 | void _NodeOccupied(uint8 node,Team team); |
---|
266 | void _NodeDeOccupied(uint8 node); |
---|
267 | |
---|
268 | const char* _GetNodeName(uint8 node); |
---|
269 | |
---|
270 | /* Nodes info: |
---|
271 | 0: neutral |
---|
272 | 1: ally contested |
---|
273 | 2: horde contested |
---|
274 | 3: ally occupied |
---|
275 | 4: horde occupied */ |
---|
276 | uint8 m_Nodes[BG_AB_DYNAMIC_NODES_COUNT]; |
---|
277 | uint8 m_prevNodes[BG_AB_DYNAMIC_NODES_COUNT]; |
---|
278 | BG_AB_BannerTimer m_BannerTimers[BG_AB_DYNAMIC_NODES_COUNT]; |
---|
279 | int32 m_NodeTimers[BG_AB_DYNAMIC_NODES_COUNT]; |
---|
280 | uint32 m_TeamScores[2]; |
---|
281 | uint32 m_lastTick[2]; |
---|
282 | uint32 m_HonorScoreTics[2]; |
---|
283 | uint32 m_ReputationScoreTics[2]; |
---|
284 | bool m_IsInformedNearVictory; |
---|
285 | }; |
---|
286 | #endif |
---|