TrinityCore
OutdoorPvP.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 OUTDOOR_PVP_H_
19#define OUTDOOR_PVP_H_
20
21#include "Position.h"
22#include "QuaternionData.h"
23#include "SharedDefines.h"
24#include "ZoneScript.h"
25#include <map>
26#include <memory>
27
29{
35
37};
38
40{
48};
49
50#define OTHER_TEAM(a) (a == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE)
51
52// struct for go spawning
53struct go_type
54{
59};
60
61// struct for creature spawning
63{
67};
68
69class Creature;
70class GameObject;
71class Map;
72class OutdoorPvP;
73class Player;
74class Unit;
75class WorldPacket;
76struct GossipMenuItems;
77
79{
80 public:
81
83
84 virtual ~OPvPCapturePoint() { }
85
86 OPvPCapturePoint(OPvPCapturePoint const& right) = delete;
90
91 virtual void Update([[maybe_unused]] uint32 diff) { }
92
93 virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
94
95 virtual int32 HandleOpenGo(Player* player, GameObject* go);
96
97 virtual void ChangeState() = 0;
98
99 virtual void ChangeTeam(TeamId /*oldTeam*/) { }
100
101 virtual bool HandleDropFlag(Player* /*player*/, uint32 /*spellId*/) { return false; }
102
103 protected:
104
106
107 // objective states
110
111 // pointer to the OutdoorPvP this objective belongs to
113};
114
116{
117public:
118 explicit OutdoorPvPControlZoneHandler(OutdoorPvP* pvp) : _pvp(pvp) { }
119 virtual ~OutdoorPvPControlZoneHandler() = default;
120
121 OutdoorPvP* GetOutdoorPvP() const { return _pvp; }
122private:
124};
125
126// base class for specific outdoor pvp handlers
128{
129 friend class OutdoorPvPMgr;
130
131 public:
132
133 // ctor
134 explicit OutdoorPvP(Map* map);
135 OutdoorPvP(OutdoorPvP const& right) = delete;
136 OutdoorPvP(OutdoorPvP&& right) = delete;
137 OutdoorPvP& operator=(OutdoorPvP const& right) = delete;
138 OutdoorPvP& operator=(OutdoorPvP&& right) = delete;
139
140 // dtor
141 virtual ~OutdoorPvP();
142
143 typedef std::map<ObjectGuid::LowType/*spawnId*/, std::unique_ptr<OPvPCapturePoint>> OPvPCapturePointMap;
144 typedef std::unordered_map<uint32 /*control zone entry*/, std::unique_ptr<OutdoorPvPControlZoneHandler>> ControlZoneHandlerMap;
145
146 // called when a player triggers an areatrigger
147 virtual bool HandleAreaTrigger(Player* /*player*/, uint32 /*trigger*/, bool /*entered*/) { return false; }
148
149 // called on custom spell
150 virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
151
152 // called on go use
153 virtual bool HandleOpenGo(Player* player, GameObject* go);
154
155 // setup stuff
156 virtual bool SetupOutdoorPvP() {return true;}
157
158 void OnCreatureCreate(Creature*) override { }
159
160 // send world state update to all players present
161 int32 GetWorldState(int32 worldStateId) const;
162 void SetWorldState(int32 worldStateId, int32 value);
163
164 // called by OutdoorPvPMgr
165 virtual void Update(uint32 diff);
166
167 // handle npc/player kill
168 virtual void HandleKill(Player* killer, Unit* killed);
169 virtual void HandleKillImpl(Player* /*killer*/, Unit* /*killed*/) { }
170
171 // awards rewards for player kill
172 virtual void AwardKillBonus(Player* /*player*/) { }
173
174 uint32 GetTypeId() const {return m_TypeId;}
175
176 virtual bool HandleDropFlag(Player* player, uint32 spellId);
177
178 void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0);
179
181 {
182 switch (team)
183 {
184 case ALLIANCE:
185 return TEAM_ALLIANCE;
186 case HORDE:
187 return TEAM_HORDE;
188 default:
189 return TEAM_NEUTRAL;
190 }
191 }
192
193 void SendDefenseMessage(uint32 zoneId, uint32 id);
194
195 Map* GetMap() const { return m_map; }
196
197 void ProcessEvent([[maybe_unused]] WorldObject* target, [[maybe_unused]] uint32 eventId, [[maybe_unused]] WorldObject* invoker) override;
198
199 protected:
200
201 // the map of the objectives belonging to this outdoorpvp
203
205
206 GuidSet m_players[2];
207
209
210 // world state stuff
211 virtual void SendRemoveWorldStates(Player* /*player*/) { }
212
213 void BroadcastPacket(WorldPacket const* data) const;
214
215 virtual void HandlePlayerEnterZone(Player* player, uint32 zone);
216 virtual void HandlePlayerLeaveZone(Player* player, uint32 zone);
217
218 virtual void HandlePlayerResurrects(Player* player, uint32 zone);
219
220 void RegisterZone(uint32 zoneid);
221
222 bool HasPlayer(Player const* player) const;
223
224 void TeamCastSpell(TeamId team, int32 spellId);
225
226 template<class Worker>
227 void BroadcastWorker(Worker& _worker, uint32 zoneId);
228
230};
231
232#endif /*OUTDOOR_PVP_H_*/
#define TC_GAME_API
Definition: Define.h:123
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
std::set< ObjectGuid > GuidSet
Definition: ObjectGuid.h:393
OutdoorPvPTypes
Definition: OutdoorPvP.h:29
@ OUTDOOR_PVP_SI
Definition: OutdoorPvP.h:34
@ MAX_OUTDOORPVP_TYPES
Definition: OutdoorPvP.h:36
@ OUTDOOR_PVP_TF
Definition: OutdoorPvP.h:32
@ OUTDOOR_PVP_ZM
Definition: OutdoorPvP.h:33
@ OUTDOOR_PVP_NA
Definition: OutdoorPvP.h:31
@ OUTDOOR_PVP_HP
Definition: OutdoorPvP.h:30
ObjectiveStates
Definition: OutdoorPvP.h:40
@ OBJECTIVESTATE_HORDE
Definition: OutdoorPvP.h:43
@ OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE
Definition: OutdoorPvP.h:45
@ OBJECTIVESTATE_ALLIANCE
Definition: OutdoorPvP.h:42
@ OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE
Definition: OutdoorPvP.h:44
@ OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE
Definition: OutdoorPvP.h:47
@ OBJECTIVESTATE_NEUTRAL
Definition: OutdoorPvP.h:41
@ OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE
Definition: OutdoorPvP.h:46
TeamId
@ TEAM_NEUTRAL
@ TEAM_ALLIANCE
@ TEAM_HORDE
@ ALLIANCE
@ HORDE
Definition: Map.h:189
OPvPCapturePoint(OPvPCapturePoint &&right)=delete
virtual void ChangeState()=0
virtual void Update(uint32 diff)
Definition: OutdoorPvP.h:91
ObjectiveStates m_OldState
Definition: OutdoorPvP.h:108
OutdoorPvP * m_PvP
Definition: OutdoorPvP.h:112
OPvPCapturePoint & operator=(OPvPCapturePoint &&right)=delete
ObjectiveStates m_State
Definition: OutdoorPvP.h:109
OPvPCapturePoint(OPvPCapturePoint const &right)=delete
virtual ~OPvPCapturePoint()
Definition: OutdoorPvP.h:84
virtual bool HandleDropFlag(Player *, uint32)
Definition: OutdoorPvP.h:101
virtual void ChangeTeam(TeamId)
Definition: OutdoorPvP.h:99
OPvPCapturePoint & operator=(OPvPCapturePoint const &right)=delete
uint64 LowType
Definition: ObjectGuid.h:278
OutdoorPvP * GetOutdoorPvP() const
Definition: OutdoorPvP.h:121
OutdoorPvPControlZoneHandler(OutdoorPvP *pvp)
Definition: OutdoorPvP.h:118
virtual ~OutdoorPvPControlZoneHandler()=default
bool HandleCustomSpell(Player *player, uint32 spellId, GameObject *go)
void HandlePlayerLeaveZone(Player *player, uint32 areaflag)
bool HandleOpenGo(Player *player, GameObject *go)
void HandleDropFlag(Player *player, uint32 spellId)
void HandlePlayerEnterZone(Player *player, uint32 areaflag)
void HandlePlayerResurrects(Player *player, uint32 areaflag)
OutdoorPvP & operator=(OutdoorPvP const &right)=delete
void OnCreatureCreate(Creature *) override
Definition: OutdoorPvP.h:158
OPvPCapturePointMap m_capturePoints
Definition: OutdoorPvP.h:202
OutdoorPvP(OutdoorPvP &&right)=delete
uint32 m_TypeId
Definition: OutdoorPvP.h:208
virtual ~OutdoorPvP()
OutdoorPvP & operator=(OutdoorPvP &&right)=delete
virtual void SendRemoveWorldStates(Player *)
Definition: OutdoorPvP.h:211
static TeamId GetTeamIdByTeam(uint32 team)
Definition: OutdoorPvP.h:180
std::map< ObjectGuid::LowType, std::unique_ptr< OPvPCapturePoint > > OPvPCapturePointMap
Definition: OutdoorPvP.h:143
std::unordered_map< uint32, std::unique_ptr< OutdoorPvPControlZoneHandler > > ControlZoneHandlerMap
Definition: OutdoorPvP.h:144
virtual bool SetupOutdoorPvP()
Definition: OutdoorPvP.h:156
Map * GetMap() const
Definition: OutdoorPvP.h:195
virtual bool HandleAreaTrigger(Player *, uint32, bool)
Definition: OutdoorPvP.h:147
ControlZoneHandlerMap ControlZoneHandlers
Definition: OutdoorPvP.h:204
virtual void AwardKillBonus(Player *)
Definition: OutdoorPvP.h:172
virtual void HandleKillImpl(Player *, Unit *)
Definition: OutdoorPvP.h:169
OutdoorPvP(OutdoorPvP const &right)=delete
uint32 GetTypeId() const
Definition: OutdoorPvP.h:174
Map * m_map
Definition: OutdoorPvP.h:229
Definition: Unit.h:627
void Update(VignetteData &vignette, WorldObject const *owner)
Definition: Vignette.cpp:90
uint32 entry
Definition: OutdoorPvP.h:64
Position pos
Definition: OutdoorPvP.h:66
uint32 map
Definition: OutdoorPvP.h:65
uint32 map
Definition: OutdoorPvP.h:56
uint32 entry
Definition: OutdoorPvP.h:55
Position pos
Definition: OutdoorPvP.h:57
QuaternionData rot
Definition: OutdoorPvP.h:58