TrinityCore
BattlegroundWS.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __BATTLEGROUNDWS_H
19#define __BATTLEGROUNDWS_H
20
21#include "Battleground.h"
22#include "BattlegroundScore.h"
23#include "Timer.h"
24
26{
32};
33
35{
39
49};
50
52{
60};
61
63{
66 //BG_WS_SPELL_WARSONG_FLAG_PICKED = 61266,
69 //BG_WS_SPELL_SILVERWING_FLAG_PICKED = 61265,
72 BG_WS_SPELL_QUICK_CAP_TIMER = 183317, // serverside
73};
74
76{
79 BG_WS_FLAG_STATE_NEUTRAL = 1547, // unused
90};
91
92// save the day
93// alliance criteria: BG_WS_FLAG_STATE_HORDE == 1 && BG_WS_FLAG_STATE_NEUTRAL == 0 && WS(1664) > 0
94// horde criteria: BG_WS_FLAG_STATE_ALLIANCE == 1 && BG_WS_FLAG_STATE_NEUTRAL == 0 && WS(1664) > 0
95
97{
101
103{
104 // doors
106 BG_WS_OBJECT_PORTCULLIS_009 = 309705, // Doodad_7NE_Blackrook_Portcullis009
107 BG_WS_OBJECT_PORTCULLIS_002 = 309883, // Doodad_7NE_Blackrook_Portcullis002
111
112 // flags
116
118{
121
124};
125
127{
131
132static constexpr uint32 WS_EVENT_START_BATTLE = 35912;
133
134static constexpr Seconds FLAG_ASSAULT_TIMER = 30s;
136
138{
139 public:
140 /* Construction */
141 BattlegroundWS(BattlegroundTemplate const* battlegroundTemplate);
143
144 /* inherited from BattlegroundClass */
145 void StartingEventOpenDoors() override;
146
147 /* BG Flags */
148 FlagState GetFlagState(TeamId team) const;
149 ObjectGuid const& GetFlagCarrierGUID(TeamId team) const;
151
152 void HandleKillPlayer(Player* player, Player* killer) override;
153 bool SetupBattleground() override;
154 void Reset() override;
155 void EndBattleground(Team winner) override;
156 WorldSafeLocsEntry const* GetClosestGraveyard(Player* player) override;
158
159 void UpdateFlagState(uint32 team, FlagState value);
161 void UpdateTeamScore(TeamId team);
162
163 /* Scorekeeping */
167
168 Team GetPrematureWinner() override;
169
170 void OnGameObjectCreate(GameObject* gameObject) override;
171 void OnAreaTriggerCreate(AreaTrigger* areaTrigger) override;
172 void OnFlagStateChange(GameObject* flagInBase, FlagState oldValue, FlagState newValue, Player* player) override;
173
174 bool CanCaptureFlag(AreaTrigger* areatrigger, Player* player) override;
175 void OnCaptureFlag(AreaTrigger* areatrigger, Player* player) override;
176
177 protected:
178 void PostUpdateImpl(uint32 diff) override;
179 void DoForFlagKeepers(std::function<void(Player*)> action) const;
180
181 // Focused & Brutal Assault debuffs
182 void ResetAssaultDebuff();
185
186 private:
187 Team _lastFlagCaptureTeam; // Winner is based on this if score is equal
188
193
195 std::array<ObjectGuid, 2> _flags;
196
199 std::array<ObjectGuid, 2> _capturePointAreaTriggers;
200};
201#endif
BG_WS_ExploitTeleportLocations
@ WS_EXPLOIT_TELEPORT_LOCATION_HORDE
@ WS_EXPLOIT_TELEPORT_LOCATION_ALLIANCE
static constexpr uint32 WS_EVENT_START_BATTLE
BG_WS_SpellId
@ BG_WS_SPELL_WARSONG_FLAG
@ BG_WS_SPELL_BRUTAL_ASSAULT
@ BG_WS_SPELL_SILVERWING_FLAG_DROPPED
@ BG_WS_SPELL_FOCUSED_ASSAULT
@ BG_WS_SPELL_WARSONG_FLAG_DROPPED
@ BG_WS_SPELL_SILVERWING_FLAG
@ BG_WS_SPELL_QUICK_CAP_TIMER
BG_WS_Sound
@ BG_WS_SOUND_FLAG_PLACED
@ BG_WS_SOUND_FLAG_CAPTURED_HORDE
@ BG_WS_SOUND_FLAGS_RESPAWNED
@ BG_WS_SOUND_FLAG_CAPTURED_ALLIANCE
@ BG_WS_SOUND_HORDE_FLAG_PICKED_UP
@ BG_WS_SOUND_ALLIANCE_FLAG_PICKED_UP
@ BG_WS_SOUND_FLAG_RETURNED
static constexpr uint16 FLAG_BRUTAL_ASSAULT_STACK_COUNT
BG_WS_CarrierDebuffs
@ WS_SPELL_BRUTAL_ASSAULT
@ SPELL_CAPTURED_HORDE_COSMETIC_FX
@ SPELL_CAPTURED_ALLIANCE_COSMETIC_FX
@ WS_SPELL_FOCUSED_ASSAULT
BG_WS_BroadcastTexts
@ BG_WS_TEXT_START_HALF_MINUTE
@ BG_WS_TEXT_HORDE_FLAG_PICKED_UP
@ BG_WS_TEXT_ALLIANCE_FLAG_DROPPED
@ BG_WS_TEXT_ALLIANCE_FLAG_RETURNED
@ BG_WS_TEXT_ALLIANCE_FLAG_PICKED_UP
@ BG_WS_TEXT_CAPTURED_HORDE_FLAG
@ BG_WS_TEXT_BATTLE_HAS_BEGUN
@ BG_WS_TEXT_CAPTURED_ALLIANCE_FLAG
@ BG_WS_TEXT_HORDE_FLAG_DROPPED
@ BG_WS_TEXT_START_ONE_MINUTE
@ BG_WS_TEXT_HORDE_FLAG_RETURNED
@ BG_WS_TEXT_FLAGS_PLACED
static constexpr Seconds FLAG_ASSAULT_TIMER
BG_WS_ObjectEntry
@ BG_WS_OBJECT_HORDE_FLAG_IN_BASE
@ BG_WS_OBJECT_PORTCULLIS_002
@ BG_WS_OBJECT_HORDE_GATE_1
@ BG_WS_OBJECT_HORDE_GATE_2
@ BG_WS_OBJECT_COLLISION_PC_SIZE
@ BG_WS_OBJECT_ALLIANCE_FLAG_IN_BASE
@ BG_WS_OBJECT_PORTCULLIS_009
@ BG_WS_OBJECT_ALLIANCE_DOOR
BG_WS_TimerOrScore
@ BG_WS_FLAG_RESPAWN_TIME
@ BG_WS_SPELL_FORCE_TIME
@ BG_WS_FLAG_DROP_TIME
@ BG_WS_MAX_TEAM_SCORE
@ BG_WS_SPELL_BRUTAL_TIME
BG_WS_AreaTriggers
@ AT_CAPTURE_POINT_HORDE
@ AT_CAPTURE_POINT_ALLIANCE
BG_WS_WorldStates
@ BG_WS_STATE_TIMER
@ BG_WS_HORDE_FLAG_COUNT_PICKED_UP
@ BG_WS_FLAG_CAPTURES_MAX
@ BG_WS_ALLIANCE_FLAG_COUNT_PICKED_UP
@ BG_WS_FLAG_STATE_HORDE
@ BG_WS_FLAG_STATE_ALLIANCE
@ BG_WS_FLAG_CAPTURES_HORDE
@ BG_WS_FLAG_STATE_NEUTRAL
@ BG_WS_STATE_TIMER_ACTIVE
@ BG_WS_FLAG_CONTROL_HORDE
@ BG_WS_FLAG_CONTROL_ALLIANCE
@ BG_WS_FLAG_CAPTURES_MAX_NEW
@ BG_WS_FLAG_CAPTURES_ALLIANCE
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
FlagState
Definition: GameObject.h:46
std::set< ObjectGuid > GuidSet
Definition: ObjectGuid.h:393
TeamId
Team
TimeTracker _flagAssaultTimer
uint32 m_HonorWinKills
WorldSafeLocsEntry const * GetClosestGraveyard(Player *player) override
void EndBattleground(Team winner) override
void RemovePoint(Team team, uint32 Points=1)
uint32 m_ReputationCapture
void HandleKillPlayer(Player *player, Player *killer) override
uint32 m_HonorEndKills
std::array< ObjectGuid, 2 > _flags
void OnFlagStateChange(GameObject *flagInBase, FlagState oldValue, FlagState newValue, Player *player) override
BattlegroundWS(BattlegroundTemplate const *battlegroundTemplate)
FlagState GetFlagState(TeamId team) const
void Reset() override
void UpdateFlagState(uint32 team, FlagState value)
void HandleFlagRoomCapturePoint()
void SetLastFlagCapture(Team team)
void RemoveAssaultDebuffFromPlayer(Player *player)
std::array< ObjectGuid, 2 > _capturePointAreaTriggers
Team GetPrematureWinner() override
void UpdateTeamScore(TeamId team)
bool SetupBattleground() override
void OnGameObjectCreate(GameObject *gameObject) override
void OnAreaTriggerCreate(AreaTrigger *areaTrigger) override
void ApplyAssaultDebuffToPlayer(Player *player)
WorldSafeLocsEntry const * GetExploitTeleportLocation(Team team) override
void SetTeamPoint(Team team, uint32 Points=0)
ObjectGuid const & GetFlagCarrierGUID(TeamId team) const
void OnCaptureFlag(AreaTrigger *areatrigger, Player *player) override
void PostUpdateImpl(uint32 diff) override
Post-update hook.
void AddPoint(Team team, uint32 Points=1)
void DoForFlagKeepers(std::function< void(Player *)> action) const
uint16 _assaultStackCount
void StartingEventOpenDoors() override
bool CanCaptureFlag(AreaTrigger *areatrigger, Player *player) override
int32 m_TeamScores[PVP_TEAMS_COUNT]
Definition: Battleground.h:565
static TeamId GetTeamIndexByTeamId(Team team)
Definition: Battleground.h:392