[9922] Rename BG_WS_UNK1 -> BG_WS_TIME_ENABLED
[getmangos.git] / src / game / BattleGroundWS.h
blob7fe71e060da367bf7d8df7fff9e3dc0e51b933d6
1 /*
2 * Copyright (C) 2005-2010 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 __BATTLEGROUNDWS_H
20 #define __BATTLEGROUNDWS_H
22 #include "BattleGround.h"
24 #define BG_WS_MAX_TEAM_SCORE 3
25 #define BG_WS_FLAG_RESPAWN_TIME (23*IN_MILLISECONDS)
26 #define BG_WS_FLAG_DROP_TIME (10*IN_MILLISECONDS)
27 #define BG_WS_TIME_LIMIT (25*MINUTE*IN_MILLISECONDS)
29 enum BG_WS_Sound
31 BG_WS_SOUND_FLAG_CAPTURED_ALLIANCE = 8173,
32 BG_WS_SOUND_FLAG_CAPTURED_HORDE = 8213,
33 BG_WS_SOUND_FLAG_PLACED = 8232,
34 BG_WS_SOUND_FLAG_RETURNED = 8192,
35 BG_WS_SOUND_HORDE_FLAG_PICKED_UP = 8212,
36 BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP = 8174,
37 BG_WS_SOUND_FLAGS_RESPAWNED = 8232
40 enum BG_WS_SpellId
42 BG_WS_SPELL_WARSONG_FLAG = 23333,
43 BG_WS_SPELL_WARSONG_FLAG_DROPPED = 23334,
44 BG_WS_SPELL_SILVERWING_FLAG = 23335,
45 BG_WS_SPELL_SILVERWING_FLAG_DROPPED = 23336
48 enum BG_WS_WorldStates
50 BG_WS_FLAG_UNK_ALLIANCE = 1545,
51 BG_WS_FLAG_UNK_HORDE = 1546,
52 // FLAG_UNK = 1547,
53 BG_WS_FLAG_CAPTURES_ALLIANCE = 1581,
54 BG_WS_FLAG_CAPTURES_HORDE = 1582,
55 BG_WS_FLAG_CAPTURES_MAX = 1601,
56 BG_WS_FLAG_STATE_HORDE = 2338,
57 BG_WS_FLAG_STATE_ALLIANCE = 2339,
58 BG_WS_TIME_ENABLED = 4247,
59 BG_WS_TIME_REMAINING = 4248
62 enum BG_WS_FlagState
64 BG_WS_FLAG_STATE_ON_BASE = 0,
65 BG_WS_FLAG_STATE_WAIT_RESPAWN = 1,
66 BG_WS_FLAG_STATE_ON_PLAYER = 2,
67 BG_WS_FLAG_STATE_ON_GROUND = 3
70 enum BG_WS_Graveyards
72 WS_GRAVEYARD_FLAGROOM_ALLIANCE = 769,
73 WS_GRAVEYARD_FLAGROOM_HORDE = 770,
74 WS_GRAVEYARD_MAIN_ALLIANCE = 771,
75 WS_GRAVEYARD_MAIN_HORDE = 772
78 class BattleGroundWGScore : public BattleGroundScore
80 public:
81 BattleGroundWGScore() : FlagCaptures(0), FlagReturns(0) {};
82 virtual ~BattleGroundWGScore() {};
83 uint32 FlagCaptures;
84 uint32 FlagReturns;
88 enum BG_WS_Events
90 WS_EVENT_FLAG_A = 0,
91 WS_EVENT_FLAG_H = 1,
92 // spiritguides will spawn (same moment, like WS_EVENT_DOOR_OPEN)
93 WS_EVENT_SPIRITGUIDES_SPAWN = 2
96 class BattleGroundWS : public BattleGround
98 friend class BattleGroundMgr;
100 public:
101 /* Construction */
102 BattleGroundWS();
103 ~BattleGroundWS();
104 void Update(uint32 diff);
106 /* inherited from BattlegroundClass */
107 virtual void AddPlayer(Player *plr);
108 virtual void StartingEventCloseDoors();
109 virtual void StartingEventOpenDoors();
111 /* BG Flags */
112 uint64 GetAllianceFlagPickerGUID() const { return m_FlagKeepers[BG_TEAM_ALLIANCE]; }
113 uint64 GetHordeFlagPickerGUID() const { return m_FlagKeepers[BG_TEAM_HORDE]; }
114 void SetAllianceFlagPicker(uint64 guid) { m_FlagKeepers[BG_TEAM_ALLIANCE] = guid; }
115 void SetHordeFlagPicker(uint64 guid) { m_FlagKeepers[BG_TEAM_HORDE] = guid; }
116 bool IsAllianceFlagPickedup() const { return m_FlagKeepers[BG_TEAM_ALLIANCE] != 0; }
117 bool IsHordeFlagPickedup() const { return m_FlagKeepers[BG_TEAM_HORDE] != 0; }
118 void RespawnFlag(uint32 Team, bool captured);
119 void RespawnFlagAfterDrop(uint32 Team);
120 uint8 GetFlagState(uint32 team) { return m_FlagState[GetTeamIndexByTeamId(team)]; }
122 /* Battleground Events */
123 virtual void EventPlayerDroppedFlag(Player *Source);
124 virtual void EventPlayerClickedOnFlag(Player *Source, GameObject* target_obj);
125 virtual void EventPlayerCapturedFlag(Player *Source);
127 void RemovePlayer(Player *plr, uint64 guid);
128 void HandleAreaTrigger(Player *Source, uint32 Trigger);
129 void HandleKillPlayer(Player *player, Player *killer);
130 bool SetupBattleGround();
131 virtual void Reset();
132 void EndBattleGround(uint32 winner);
133 virtual WorldSafeLocsEntry const* GetClosestGraveYard(Player* player);
134 uint32 GetRemainingTimeInMinutes() { return m_EndTimer ? (m_EndTimer-1) / (MINUTE * IN_MILLISECONDS) + 1 : 0; }
136 void UpdateFlagState(uint32 team, uint32 value);
137 void UpdateTeamScore(uint32 team);
138 void UpdatePlayerScore(Player *Source, uint32 type, uint32 value);
139 void SetDroppedFlagGUID(uint64 guid, uint32 TeamID) { m_DroppedFlagGUID[GetTeamIndexByTeamId(TeamID)] = guid;}
140 uint64 GetDroppedFlagGUID(uint32 TeamID) { return m_DroppedFlagGUID[GetTeamIndexByTeamId(TeamID)];}
141 virtual void FillInitialWorldStates(WorldPacket& data, uint32& count);
143 /* Scorekeeping */
144 uint32 GetTeamScore(uint32 TeamID) const { return m_TeamScores[GetTeamIndexByTeamId(TeamID)]; }
145 void AddPoint(uint32 TeamID, uint32 Points = 1) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] += Points; }
146 void SetTeamPoint(uint32 TeamID, uint32 Points = 0) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] = Points; }
147 void RemovePoint(uint32 TeamID, uint32 Points = 1) { m_TeamScores[GetTeamIndexByTeamId(TeamID)] -= Points; }
148 private:
149 uint64 m_FlagKeepers[BG_TEAMS_COUNT];
151 uint64 m_DroppedFlagGUID[BG_TEAMS_COUNT];
152 uint8 m_FlagState[BG_TEAMS_COUNT];
153 int32 m_FlagsTimer[BG_TEAMS_COUNT];
154 int32 m_FlagsDropTimer[BG_TEAMS_COUNT];
156 uint32 m_ReputationCapture;
157 uint32 m_HonorWinKills;
158 uint32 m_HonorEndKills;
159 uint32 m_EndTimer;
160 uint32 m_LastCapturedFlagTeam;
162 #endif