root/trunk/src/game/BattleGroundAB.h @ 102

Revision 102, 11.5 kB (checked in by yumileroy, 17 years ago)

[svn] Fixed copyright notices to comply with GPL.

Original author: w12x
Date: 2008-10-23 03:29:52-05:00

Line 
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
23class BattleGround;
24
25enum 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
63const uint32 BG_AB_OP_NODESTATES[5] =    {1767, 1782, 1772, 1792, 1787};
64
65const uint32 BG_AB_OP_NODEICONS[5]  =    {1842, 1846, 1845, 1844, 1843};
66
67/* Note: code uses that these IDs follow each other */
68enum 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
77enum 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 */
111enum 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
126enum BG_AB_Timers
127{
128    BG_AB_FLAG_CAPTURING_TIME           = 60000,
129};
130
131enum 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 */
138enum 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
154enum 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
165enum 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
176const 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
185const 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
191const uint32 BG_AB_TickIntervals[6] = {0, 12000, 9000, 6000, 3000, 1000};
192const 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
195const uint32 BG_AB_GraveyardIds[BG_AB_ALL_NODES_COUNT] = {895, 894, 893, 897, 896, 898, 899};
196
197// x, y, z, o
198const 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
207const 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
217struct BG_AB_BannerTimer
218{
219    uint32      timer;
220    uint8       type;
221    uint8       teamIndex;
222};
223
224class BattleGroundABScore : public BattleGroundScore
225{
226    public:
227        BattleGroundABScore(): BasesAssaulted(0), BasesDefended(0) {};
228        virtual ~BattleGroundABScore() {};
229        uint32 BasesAssaulted;
230        uint32 BasesDefended;
231};
232
233class 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
Note: See TracBrowser for help on using the browser.