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_MILISECONDS)
26 #define BG_WS_FLAG_DROP_TIME (10*IN_MILISECONDS)
30 BG_WS_SOUND_FLAG_CAPTURED_ALLIANCE
= 8173,
31 BG_WS_SOUND_FLAG_CAPTURED_HORDE
= 8213,
32 BG_WS_SOUND_FLAG_PLACED
= 8232,
33 BG_WS_SOUND_FLAG_RETURNED
= 8192,
34 BG_WS_SOUND_HORDE_FLAG_PICKED_UP
= 8212,
35 BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP
= 8174,
36 BG_WS_SOUND_FLAGS_RESPAWNED
= 8232
41 BG_WS_SPELL_WARSONG_FLAG
= 23333,
42 BG_WS_SPELL_WARSONG_FLAG_DROPPED
= 23334,
43 BG_WS_SPELL_SILVERWING_FLAG
= 23335,
44 BG_WS_SPELL_SILVERWING_FLAG_DROPPED
= 23336
47 enum BG_WS_WorldStates
49 BG_WS_FLAG_UNK_ALLIANCE
= 1545,
50 BG_WS_FLAG_UNK_HORDE
= 1546,
52 BG_WS_FLAG_CAPTURES_ALLIANCE
= 1581,
53 BG_WS_FLAG_CAPTURES_HORDE
= 1582,
54 BG_WS_FLAG_CAPTURES_MAX
= 1601,
55 BG_WS_FLAG_STATE_HORDE
= 2338,
56 BG_WS_FLAG_STATE_ALLIANCE
= 2339
61 BG_WS_FLAG_STATE_ON_BASE
= 0,
62 BG_WS_FLAG_STATE_WAIT_RESPAWN
= 1,
63 BG_WS_FLAG_STATE_ON_PLAYER
= 2,
64 BG_WS_FLAG_STATE_ON_GROUND
= 3
69 WS_GRAVEYARD_FLAGROOM_ALLIANCE
= 769,
70 WS_GRAVEYARD_FLAGROOM_HORDE
= 770,
71 WS_GRAVEYARD_MAIN_ALLIANCE
= 771,
72 WS_GRAVEYARD_MAIN_HORDE
= 772
75 class BattleGroundWGScore
: public BattleGroundScore
78 BattleGroundWGScore() : FlagCaptures(0), FlagReturns(0) {};
79 virtual ~BattleGroundWGScore() {};
89 // spiritguides will spawn (same moment, like WS_EVENT_DOOR_OPEN)
90 WS_EVENT_SPIRITGUIDES_SPAWN
= 2
93 class BattleGroundWS
: public BattleGround
95 friend class BattleGroundMgr
;
101 void Update(uint32 diff
);
103 /* inherited from BattlegroundClass */
104 virtual void AddPlayer(Player
*plr
);
105 virtual void StartingEventCloseDoors();
106 virtual void StartingEventOpenDoors();
109 uint64
GetAllianceFlagPickerGUID() const { return m_FlagKeepers
[BG_TEAM_ALLIANCE
]; }
110 uint64
GetHordeFlagPickerGUID() const { return m_FlagKeepers
[BG_TEAM_HORDE
]; }
111 void SetAllianceFlagPicker(uint64 guid
) { m_FlagKeepers
[BG_TEAM_ALLIANCE
] = guid
; }
112 void SetHordeFlagPicker(uint64 guid
) { m_FlagKeepers
[BG_TEAM_HORDE
] = guid
; }
113 bool IsAllianceFlagPickedup() const { return m_FlagKeepers
[BG_TEAM_ALLIANCE
] != 0; }
114 bool IsHordeFlagPickedup() const { return m_FlagKeepers
[BG_TEAM_HORDE
] != 0; }
115 void RespawnFlag(uint32 Team
, bool captured
);
116 void RespawnFlagAfterDrop(uint32 Team
);
117 uint8
GetFlagState(uint32 team
) { return m_FlagState
[GetTeamIndexByTeamId(team
)]; }
119 /* Battleground Events */
120 virtual void EventPlayerDroppedFlag(Player
*Source
);
121 virtual void EventPlayerClickedOnFlag(Player
*Source
, GameObject
* target_obj
);
122 virtual void EventPlayerCapturedFlag(Player
*Source
);
124 void RemovePlayer(Player
*plr
, uint64 guid
);
125 void HandleAreaTrigger(Player
*Source
, uint32 Trigger
);
126 void HandleKillPlayer(Player
*player
, Player
*killer
);
127 bool SetupBattleGround();
128 virtual void Reset();
129 void EndBattleGround(uint32 winner
);
130 virtual WorldSafeLocsEntry
const* GetClosestGraveYard(Player
* player
);
132 void UpdateFlagState(uint32 team
, uint32 value
);
133 void UpdateTeamScore(uint32 team
);
134 void UpdatePlayerScore(Player
*Source
, uint32 type
, uint32 value
);
135 void SetDroppedFlagGUID(uint64 guid
, uint32 TeamID
) { m_DroppedFlagGUID
[GetTeamIndexByTeamId(TeamID
)] = guid
;}
136 uint64
GetDroppedFlagGUID(uint32 TeamID
) { return m_DroppedFlagGUID
[GetTeamIndexByTeamId(TeamID
)];}
137 virtual void FillInitialWorldStates(WorldPacket
& data
);
140 uint32
GetTeamScore(uint32 TeamID
) const { return m_TeamScores
[GetTeamIndexByTeamId(TeamID
)]; }
141 void AddPoint(uint32 TeamID
, uint32 Points
= 1) { m_TeamScores
[GetTeamIndexByTeamId(TeamID
)] += Points
; }
142 void SetTeamPoint(uint32 TeamID
, uint32 Points
= 0) { m_TeamScores
[GetTeamIndexByTeamId(TeamID
)] = Points
; }
143 void RemovePoint(uint32 TeamID
, uint32 Points
= 1) { m_TeamScores
[GetTeamIndexByTeamId(TeamID
)] -= Points
; }
145 uint64 m_FlagKeepers
[BG_TEAMS_COUNT
];
147 uint64 m_DroppedFlagGUID
[BG_TEAMS_COUNT
];
148 uint8 m_FlagState
[BG_TEAMS_COUNT
];
149 int32 m_FlagsTimer
[BG_TEAMS_COUNT
];
150 int32 m_FlagsDropTimer
[BG_TEAMS_COUNT
];
152 uint32 m_ReputationCapture
;
153 uint32 m_HonorWinKills
;
154 uint32 m_HonorEndKills
;