Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
OutdoorPvP.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef OUTDOOR_PVP_H_
7#define OUTDOOR_PVP_H_
8
9#include "SharedDefines.h"
10#include "Util.h"
11#include "WorldStateBuilder.h"
12#include "ZoneScript.h"
13
14class GameObject;
15
24
25#define MAX_OUTDOORPVP_TYPES 6
26
37
38#define OTHER_TEAM(a) (a == TEAM_ALLIANCE ? TEAM_HORDE : TEAM_ALLIANCE)
39
40// struct for go spawning
41struct go_type
42{
45 float x;
46 float y;
47 float z;
48 float o;
49 float rot0;
50 float rot1;
51 float rot2;
52 float rot3;
53};
54
55// struct for creature spawning
57{
61 float x;
62 float y;
63 float z;
64 float o;
65};
66
67// some class predefs
68class Player;
69class GameObject;
70class WorldPacket;
71class Creature;
72class Unit;
73struct GossipMenuItems;
74class OutdoorPvP;
75
76typedef std::set<uint64> PlayerSet;
77
79{
80public:
82
83 virtual ~OPvPCapturePoint() { }
84
85 virtual void FillInitialWorldStates(WorldStateBuilder& /*builder*/) { }
86
87 // send world state update to all players present
88 void SendUpdateWorldState(uint32 field, uint32 value);
89
90 // send kill notify to players in the controlling faction
91 void SendObjectiveComplete(uint32 id, uint64 guid);
92
93 // used when player is activated/inactivated in the area
94 virtual bool HandlePlayerEnter(Player* player);
95 virtual void HandlePlayerLeave(Player* player);
96
97 // checks if player is in range of a capture credit marker
98 bool IsInsideObjective(Player* player) const;
99
100 virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
101
102 virtual int32 HandleOpenGo(Player* player, uint64 guid);
103
104 // returns true if the state of the objective has changed, in this case, the OutdoorPvP must send a world state ui update.
105 virtual bool Update(uint32 diff);
106
107 virtual void ChangeState() = 0;
108
109 virtual void ChangeTeam(TeamId /*oldTeam*/) { }
110
111 virtual void SendChangePhase();
112
113 virtual bool HandleGossipOption(Player* player, uint64 guid, uint32 gossipid);
114
115 virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso);
116
117 virtual bool HandleDropFlag(Player* player, uint32 spellId);
118
119 virtual void DeleteSpawns();
120
122
124
125 void AddGO(uint32 type, uint32 guid, uint32 entry = 0);
126 void AddCre(uint32 type, uint32 guid, uint32 entry = 0);
127
128 bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o = 0,
129 float rotation0 = 0, float rotation1 = 0, float rotation2 = 0, float rotation3 = 0);
130
131protected:
132 bool AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o,
133 float rotation0, float rotation1, float rotation2, float rotation3);
134 bool AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay = 0);
135
136 bool DelCreature(uint32 type);
137 bool DelObject(uint32 type);
138
139 bool DelCapturePoint();
140
141protected:
142 // active players in the area of the objective, 0 - alliance, 1 - horde
144
145 // total shift needed to capture the objective
148
149 // maximum speed of capture
151
152 // the status of the objective
153 float m_value;
154
156
157 // objective states
160
161 // neutral value on capture bar
163
164 // pointer to the OutdoorPvP this objective belongs to
166
167 // map to store the various gameobjects and creatures spawned by the objective
168 // type, guid
169 std::map<uint32, uint64> m_Objects;
170 std::map<uint32, uint64> m_Creatures;
171 std::map<uint64, uint32> m_ObjectTypes;
172 std::map<uint64, uint32> m_CreatureTypes;
173};
174
175// base class for specific outdoor pvp handlers
176class OutdoorPvP : public ZoneScript
177{
178 friend class OutdoorPvPMgr;
179
180public:
181 // ctor
182 OutdoorPvP();
183
184 // dtor
185 virtual ~OutdoorPvP();
186
187 // deletes all gos/creatures spawned by the pvp
188 void DeleteSpawns();
189
190 typedef std::map<uint32/*lowguid*/, OPvPCapturePoint*> OPvPCapturePointMap;
191
192 virtual void FillInitialWorldStates(WorldStateBuilder& /*builder*/) { }
193
194 // called when a player triggers an areatrigger
195 virtual bool HandleAreaTrigger(Player* player, uint32 trigger);
196
197 // called on custom spell
198 virtual bool HandleCustomSpell(Player* player, uint32 spellId, GameObject* go);
199
200 // called on go use
201 virtual bool HandleOpenGo(Player* player, uint64 guid);
202
203 // setup stuff
204 virtual bool SetupOutdoorPvP() { return true; }
205
209
210 // send world state update to all players present
211 void SendUpdateWorldState(uint32 field, uint32 value);
212
213 // called by OutdoorPvPMgr, updates the objectives and if needed, sends new worldstateui information
214 virtual bool Update(uint32 diff);
215
216 // handle npc/player kill
217 virtual void HandleKill(Player* killer, Unit* killed);
218 virtual void HandleKillImpl(Player* /*killer*/, Unit* /*killed*/) { }
219
220 // checks if player is in range of a capture credit marker
221 bool IsInsideObjective(Player* player) const;
222
223 // awards rewards for player kill
224 virtual void AwardKillBonus(Player* /*player*/) { }
225
226 uint32 GetTypeId() const { return m_TypeId; }
227
228 virtual bool HandleDropFlag(Player* player, uint32 spellId);
229
230 virtual bool HandleGossipOption(Player* player, uint64 guid, uint32 gossipid);
231
232 virtual bool CanTalkTo(Player* player, Creature* c, GossipMenuItems const& gso);
233
234 void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2 = 0);
235
236protected:
237 // the map of the objectives belonging to this outdoorpvp
239
241
243
245
246 // world state stuff
247 virtual void SendRemoveWorldStates(Player* /*player*/) { }
248
249 void BroadcastPacket(WorldPacket& data) const;
250
251 virtual void HandlePlayerEnterZone(Player* player, uint32 zone);
252 virtual void HandlePlayerLeaveZone(Player* player, uint32 zone);
253
254 virtual void HandlePlayerResurrects(Player* player, uint32 zone);
255
260
262 {
263 OutdoorPvP::OPvPCapturePointMap::const_iterator itr = m_capturePoints.find(lowguid);
264 if (itr != m_capturePoints.end())
265 return itr->second;
266 return NULL;
267 }
268
269 void RegisterZone(uint32 zoneid);
270
271 bool HasPlayer(Player const* player) const;
272
273 void TeamCastSpell(TeamId team, int32 spellId);
274};
275
276#endif /*OUTDOOR_PVP_H_*/
std::int32_t int32
Definition Define.h:73
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
std::set< uint64 > PlayerSet
Definition OutdoorPvP.h:76
OutdoorPvPTypes
Definition OutdoorPvP.h:17
@ OUTDOOR_PVP_SI
Definition OutdoorPvP.h:22
@ OUTDOOR_PVP_TF
Definition OutdoorPvP.h:20
@ OUTDOOR_PVP_ZM
Definition OutdoorPvP.h:21
@ OUTDOOR_PVP_NA
Definition OutdoorPvP.h:19
@ OUTDOOR_PVP_HP
Definition OutdoorPvP.h:18
ObjectiveStates
Definition OutdoorPvP.h:28
@ OBJECTIVESTATE_HORDE
Definition OutdoorPvP.h:31
@ OBJECTIVESTATE_NEUTRAL_HORDE_CHALLENGE
Definition OutdoorPvP.h:33
@ OBJECTIVESTATE_ALLIANCE
Definition OutdoorPvP.h:30
@ OBJECTIVESTATE_NEUTRAL_ALLIANCE_CHALLENGE
Definition OutdoorPvP.h:32
@ OBJECTIVESTATE_HORDE_ALLIANCE_CHALLENGE
Definition OutdoorPvP.h:35
@ OBJECTIVESTATE_NEUTRAL
Definition OutdoorPvP.h:29
@ OBJECTIVESTATE_ALLIANCE_HORDE_CHALLENGE
Definition OutdoorPvP.h:34
TeamId
OPvPCapturePoint(OutdoorPvP *pvp)
bool AddObject(uint32 type, uint32 entry, uint32 map, float x, float y, float z, float o, float rotation0, float rotation1, float rotation2, float rotation3)
std::map< uint32, uint64 > m_Creatures
Definition OutdoorPvP.h:170
std::map< uint32, uint64 > m_Objects
Definition OutdoorPvP.h:169
std::map< uint64, uint32 > m_ObjectTypes
Definition OutdoorPvP.h:171
bool AddCreature(uint32 type, uint32 entry, uint32 teamval, uint32 map, float x, float y, float z, float o, uint32 spawntimedelay=0)
virtual int32 HandleOpenGo(Player *player, uint64 guid)
void AddCre(uint32 type, uint32 guid, uint32 entry=0)
virtual void ChangeState()=0
virtual bool HandleCustomSpell(Player *player, uint32 spellId, GameObject *go)
bool SetCapturePointData(uint32 entry, uint32 map, float x, float y, float z, float o=0, float rotation0=0, float rotation1=0, float rotation2=0, float rotation3=0)
ObjectiveStates m_OldState
Definition OutdoorPvP.h:158
virtual void FillInitialWorldStates(WorldStateBuilder &)
Definition OutdoorPvP.h:85
OutdoorPvP * m_PvP
Definition OutdoorPvP.h:165
virtual bool Update(uint32 diff)
ObjectiveStates m_State
Definition OutdoorPvP.h:159
virtual void DeleteSpawns()
uint32 m_neutralValuePct
Definition OutdoorPvP.h:162
PlayerSet m_activePlayers[2]
Definition OutdoorPvP.h:143
virtual bool CanTalkTo(Player *player, Creature *c, GossipMenuItems const &gso)
virtual ~OPvPCapturePoint()
Definition OutdoorPvP.h:83
void SendUpdateWorldState(uint32 field, uint32 value)
virtual void HandlePlayerLeave(Player *player)
GameObject * m_capturePoint
Definition OutdoorPvP.h:123
virtual bool HandleGossipOption(Player *player, uint64 guid, uint32 gossipid)
virtual bool HandleDropFlag(Player *player, uint32 spellId)
void SendObjectiveComplete(uint32 id, uint64 guid)
virtual bool HandlePlayerEnter(Player *player)
virtual void ChangeTeam(TeamId)
Definition OutdoorPvP.h:109
bool DelCreature(uint32 type)
std::map< uint64, uint32 > m_CreatureTypes
Definition OutdoorPvP.h:172
void AddGO(uint32 type, uint32 guid, uint32 entry=0)
bool DelObject(uint32 type)
bool IsInsideObjective(Player *player) const
virtual void SendChangePhase()
uint32 m_capturePointGUID
Definition OutdoorPvP.h:121
virtual void HandlePlayerEnterZone(Player *player, uint32 zone)
void OnGameObjectCreate(GameObject *go)
OPvPCapturePointMap m_capturePoints
Definition OutdoorPvP.h:238
bool HasPlayer(Player const *player) const
virtual bool HandleAreaTrigger(Player *player, uint32 trigger)
uint32 m_TypeId
Definition OutdoorPvP.h:242
virtual ~OutdoorPvP()
virtual bool Update(uint32 diff)
virtual void FillInitialWorldStates(WorldStateBuilder &)
Definition OutdoorPvP.h:192
friend class OutdoorPvPMgr
Definition OutdoorPvP.h:178
void TeamApplyBuff(TeamId team, uint32 spellId, uint32 spellId2=0)
void OnCreatureCreate(Creature *)
Definition OutdoorPvP.h:208
virtual bool HandleGossipOption(Player *player, uint64 guid, uint32 gossipid)
void DeleteSpawns()
void RegisterZone(uint32 zoneid)
virtual void SendRemoveWorldStates(Player *)
Definition OutdoorPvP.h:247
virtual bool HandleOpenGo(Player *player, uint64 guid)
void OnGameObjectRemove(GameObject *go)
virtual bool HandleCustomSpell(Player *player, uint32 spellId, GameObject *go)
virtual void HandlePlayerLeaveZone(Player *player, uint32 zone)
OPvPCapturePoint * GetCapturePoint(uint32 lowguid) const
Definition OutdoorPvP.h:261
virtual bool SetupOutdoorPvP()
Definition OutdoorPvP.h:204
void TeamCastSpell(TeamId team, int32 spellId)
virtual void HandlePlayerResurrects(Player *player, uint32 zone)
void SendUpdateWorldState(uint32 field, uint32 value)
PlayerSet m_players[2]
Definition OutdoorPvP.h:240
virtual bool CanTalkTo(Player *player, Creature *c, GossipMenuItems const &gso)
std::map< uint32, OPvPCapturePoint * > OPvPCapturePointMap
Definition OutdoorPvP.h:190
virtual void AwardKillBonus(Player *)
Definition OutdoorPvP.h:224
bool IsInsideObjective(Player *player) const
virtual void HandleKillImpl(Player *, Unit *)
Definition OutdoorPvP.h:218
void BroadcastPacket(WorldPacket &data) const
bool m_sendUpdate
Definition OutdoorPvP.h:244
virtual void HandleKill(Player *killer, Unit *killed)
virtual bool HandleDropFlag(Player *player, uint32 spellId)
void AddCapturePoint(OPvPCapturePoint *cp)
Definition OutdoorPvP.h:256
uint32 GetTypeId() const
Definition OutdoorPvP.h:226
Definition Unit.h:1367
uint32 teamval
Definition OutdoorPvP.h:59
float x
Definition OutdoorPvP.h:45
uint32 map
Definition OutdoorPvP.h:44
uint32 entry
Definition OutdoorPvP.h:43
float o
Definition OutdoorPvP.h:48
float z
Definition OutdoorPvP.h:47
float rot3
Definition OutdoorPvP.h:52
float rot0
Definition OutdoorPvP.h:49
float rot1
Definition OutdoorPvP.h:50
float y
Definition OutdoorPvP.h:46
float rot2
Definition OutdoorPvP.h:51