AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
OutdoorPvPMgr Class Reference

#include "OutdoorPvPMgr.h"

Public Member Functions

void InitOutdoorPvP ()
 
void Die ()
 
void HandlePlayerEnterZone (Player *player, uint32 areaflag)
 
void HandlePlayerLeaveZone (Player *player, uint32 areaflag)
 
void HandlePlayerResurrects (Player *player, uint32 areaflag)
 
OutdoorPvPGetOutdoorPvPToZoneId (uint32 zoneid)
 
bool HandleCustomSpell (Player *player, uint32 spellId, GameObject *go)
 
bool HandleOpenGo (Player *player, GameObject *go)
 
ZoneScriptGetZoneScript (uint32 zoneId)
 
void AddZone (uint32 zoneid, OutdoorPvP *handle)
 
void Update (uint32 diff)
 
void HandleGossipOption (Player *player, Creature *creatured, uint32 gossipid)
 
bool CanTalkTo (Player *player, Creature *creature, GossipMenuItems const &gso)
 
void HandleDropFlag (Player *player, uint32 spellId)
 

Static Public Member Functions

static OutdoorPvPMgrinstance ()
 

Public Attributes

std::mutex _lock
 

Private Types

typedef std::vector< OutdoorPvP * > OutdoorPvPSet
 
typedef std::map< uint32, OutdoorPvP * > OutdoorPvPMap
 
typedef std::map< OutdoorPvPTypes, OutdoorPvPData * > OutdoorPvPDataMap
 

Private Member Functions

 OutdoorPvPMgr ()
 
 ~OutdoorPvPMgr ()
 

Private Attributes

OutdoorPvPSet m_OutdoorPvPSet
 
OutdoorPvPMap m_OutdoorPvPMap
 
OutdoorPvPDataMap m_OutdoorPvPDatas
 
uint32 m_UpdateTimer
 

Detailed Description

Member Typedef Documentation

◆ OutdoorPvPDataMap

◆ OutdoorPvPMap

typedef std::map<uint32 , OutdoorPvP*> OutdoorPvPMgr::OutdoorPvPMap
private

◆ OutdoorPvPSet

typedef std::vector<OutdoorPvP*> OutdoorPvPMgr::OutdoorPvPSet
private

Constructor & Destructor Documentation

◆ OutdoorPvPMgr()

OutdoorPvPMgr::OutdoorPvPMgr ( )
private
25{
26 m_UpdateTimer = 0;
27 //LOG_DEBUG("outdoorpvp", "Instantiating OutdoorPvPMgr");
28}
uint32 m_UpdateTimer
Definition: OutdoorPvPMgr.h:103

References m_UpdateTimer.

◆ ~OutdoorPvPMgr()

OutdoorPvPMgr::~OutdoorPvPMgr ( )
inlineprivate
42{};

Member Function Documentation

◆ AddZone()

void OutdoorPvPMgr::AddZone ( uint32  zoneid,
OutdoorPvP handle 
)
119{
120 m_OutdoorPvPMap[zoneid] = handle;
121}
OutdoorPvPMap m_OutdoorPvPMap
Definition: OutdoorPvPMgr.h:97

References m_OutdoorPvPMap.

◆ CanTalkTo()

bool OutdoorPvPMgr::CanTalkTo ( Player player,
Creature creature,
GossipMenuItems const &  gso 
)
218{
219 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
220 {
221 if ((*itr)->CanTalkTo(player, creature, gso))
222 return true;
223 }
224 return false;
225}
OutdoorPvPSet m_OutdoorPvPSet
Definition: OutdoorPvPMgr.h:93

References m_OutdoorPvPSet.

◆ Die()

void OutdoorPvPMgr::Die ( )
37{
38 //LOG_DEBUG("outdoorpvp", "Deleting OutdoorPvPMgr");
39 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
40 delete *itr;
41
42 for (OutdoorPvPDataMap::iterator itr = m_OutdoorPvPDatas.begin(); itr != m_OutdoorPvPDatas.end(); ++itr)
43 delete itr->second;
44}
OutdoorPvPDataMap m_OutdoorPvPDatas
Definition: OutdoorPvPMgr.h:100

References m_OutdoorPvPDatas, and m_OutdoorPvPSet.

◆ GetOutdoorPvPToZoneId()

OutdoorPvP * OutdoorPvPMgr::GetOutdoorPvPToZoneId ( uint32  zoneid)
155{
156 OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
157 if (itr == m_OutdoorPvPMap.end())
158 {
159 // no handle for this zone, return
160 return nullptr;
161 }
162 return itr->second;
163}

References m_OutdoorPvPMap.

◆ GetZoneScript()

ZoneScript * OutdoorPvPMgr::GetZoneScript ( uint32  zoneId)
188{
189 OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneId);
190 if (itr != m_OutdoorPvPMap.end())
191 return itr->second;
192 else
193 return nullptr;
194}

References m_OutdoorPvPMap.

◆ HandleCustomSpell()

bool OutdoorPvPMgr::HandleCustomSpell ( Player player,
uint32  spellId,
GameObject go 
)
177{
178 // pussywizard: no mutex because not affecting other players
179 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
180 {
181 if ((*itr)->HandleCustomSpell(player, spellId, go))
182 return true;
183 }
184 return false;
185}

References m_OutdoorPvPSet.

◆ HandleDropFlag()

void OutdoorPvPMgr::HandleDropFlag ( Player player,
uint32  spellId 
)
228{
229 // pussywizard: no mutex because not affecting other players
230 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
231 {
232 if ((*itr)->HandleDropFlag(player, spellId))
233 return;
234 }
235}

References m_OutdoorPvPSet.

◆ HandleGossipOption()

void OutdoorPvPMgr::HandleGossipOption ( Player player,
Creature creatured,
uint32  gossipid 
)
208{
209 std::lock_guard<std::mutex> guard(_lock); // pussywizard
210 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
211 {
212 if ((*itr)->HandleGossipOption(player, creature, gossipid))
213 return;
214 }
215}
std::mutex _lock
Definition: OutdoorPvPMgr.h:84

References _lock, and m_OutdoorPvPSet.

◆ HandleOpenGo()

bool OutdoorPvPMgr::HandleOpenGo ( Player player,
GameObject go 
)
197{
198 std::lock_guard<std::mutex> guard(_lock); // pussywizard
199 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
200 {
201 if ((*itr)->HandleOpenGo(player, go))
202 return true;
203 }
204 return false;
205}

References _lock, and m_OutdoorPvPSet.

◆ HandlePlayerEnterZone()

void OutdoorPvPMgr::HandlePlayerEnterZone ( Player player,
uint32  areaflag 
)
124{
125 OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
126 if (itr == m_OutdoorPvPMap.end())
127 return;
128
129 std::lock_guard<std::mutex> guard(_lock); // pussywizard
130
131 if (itr->second->HasPlayer(player))
132 return;
133
134 itr->second->HandlePlayerEnterZone(player, zoneid);
135 LOG_DEBUG("outdoorpvp", "Player {} entered outdoorpvp id {}", player->GetGUID().ToString(), itr->second->GetTypeId());
136}
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:171
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
std::string ToString() const
Definition: ObjectGuid.cpp:47

References _lock, Object::GetGUID(), LOG_DEBUG, m_OutdoorPvPMap, and ObjectGuid::ToString().

◆ HandlePlayerLeaveZone()

void OutdoorPvPMgr::HandlePlayerLeaveZone ( Player player,
uint32  areaflag 
)
139{
140 OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
141 if (itr == m_OutdoorPvPMap.end())
142 return;
143
144 std::lock_guard<std::mutex> guard(_lock); // pussywizard
145
146 // teleport: remove once in removefromworld, once in updatezone
147 if (!itr->second->HasPlayer(player))
148 return;
149
150 itr->second->HandlePlayerLeaveZone(player, zoneid);
151 LOG_DEBUG("outdoorpvp", "Player {} left outdoorpvp id {}", player->GetGUID().ToString(), itr->second->GetTypeId());
152}

References _lock, Object::GetGUID(), LOG_DEBUG, m_OutdoorPvPMap, and ObjectGuid::ToString().

◆ HandlePlayerResurrects()

void OutdoorPvPMgr::HandlePlayerResurrects ( Player player,
uint32  areaflag 
)
238{
239 OutdoorPvPMap::iterator itr = m_OutdoorPvPMap.find(zoneid);
240 if (itr == m_OutdoorPvPMap.end())
241 return;
242
243 // pussywizard: no mutex because not affecting other players
244
245 if (itr->second->HasPlayer(player))
246 itr->second->HandlePlayerResurrects(player, zoneid);
247}

References m_OutdoorPvPMap.

◆ InitOutdoorPvP()

void OutdoorPvPMgr::InitOutdoorPvP ( )
47{
48 uint32 oldMSTime = getMSTime();
49
50 // 0 1
51 QueryResult result = WorldDatabase.Query("SELECT TypeId, ScriptName FROM outdoorpvp_template");
52
53 if (!result)
54 {
55 LOG_WARN("server.loading", ">> Loaded 0 outdoor PvP definitions. DB table `outdoorpvp_template` is empty.");
56 LOG_INFO("server.loading", " ");
57 return;
58 }
59
60 uint32 count = 0;
61 uint32 typeId = 0;
62
63 do
64 {
65 Field* fields = result->Fetch();
66
67 typeId = fields[0].Get<uint8>();
68
70 continue;
71
72 if (typeId >= MAX_OUTDOORPVP_TYPES)
73 {
74 LOG_ERROR("sql.sql", "Invalid OutdoorPvPTypes value {} in outdoorpvp_template; skipped.", typeId);
75 continue;
76 }
77
78 OutdoorPvPData* data = new OutdoorPvPData();
79 OutdoorPvPTypes realTypeId = OutdoorPvPTypes(typeId);
80 data->TypeId = realTypeId;
81 data->ScriptId = sObjectMgr->GetScriptId(fields[1].Get<std::string>());
82 m_OutdoorPvPDatas[realTypeId] = data;
83
84 ++count;
85 } while (result->NextRow());
86
87 OutdoorPvP* pvp;
88 for (uint8 i = 1; i < MAX_OUTDOORPVP_TYPES; ++i)
89 {
90 OutdoorPvPDataMap::iterator iter = m_OutdoorPvPDatas.find(OutdoorPvPTypes(i));
91 if (iter == m_OutdoorPvPDatas.end())
92 {
93 LOG_ERROR("sql.sql", "Could not initialize OutdoorPvP object for type ID {}; no entry in database.", uint32(i));
94 continue;
95 }
96
97 pvp = sScriptMgr->CreateOutdoorPvP(iter->second);
98 if (!pvp)
99 {
100 LOG_ERROR("outdoorpvp", "Could not initialize OutdoorPvP object for type ID {}; got nullptr pointer from script.", uint32(i));
101 continue;
102 }
103
104 if (!pvp->SetupOutdoorPvP())
105 {
106 LOG_ERROR("outdoorpvp", "Could not initialize OutdoorPvP object for type ID {}; SetupOutdoorPvP failed.", uint32(i));
107 delete pvp;
108 continue;
109 }
110
111 m_OutdoorPvPSet.push_back(pvp);
112 }
113
114 LOG_INFO("server.loading", ">> Loaded {} outdoor PvP definitions in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
115 LOG_INFO("server.loading", " ");
116}
std::uint8_t uint8
Definition: Define.h:110
std::uint32_t uint32
Definition: Define.h:108
#define LOG_INFO(filterType__,...)
Definition: Log.h:167
#define LOG_ERROR(filterType__,...)
Definition: Log.h:159
#define LOG_WARN(filterType__,...)
Definition: Log.h:163
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition: Timer.h:131
uint32 getMSTime()
Definition: Timer.h:103
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
std::shared_ptr< ResultSet > QueryResult
Definition: DatabaseEnvFwd.h:28
@ DISABLE_TYPE_OUTDOORPVP
Definition: DisableMgr.h:34
#define sObjectMgr
Definition: ObjectMgr.h:1640
OutdoorPvPTypes
Definition: OutdoorPvP.h:28
#define MAX_OUTDOORPVP_TYPES
Definition: OutdoorPvP.h:38
#define sScriptMgr
Definition: ScriptMgr.h:2702
bool IsDisabledFor(DisableType type, uint32 entry, Unit const *unit, uint8 flags)
Definition: DisableMgr.cpp:306
Class used to access individual fields of database query result.
Definition: Field.h:99
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition: Field.h:113
Definition: OutdoorPvP.h:197
virtual bool SetupOutdoorPvP()
Definition: OutdoorPvP.h:226
Definition: OutdoorPvPMgr.h:32
uint32 ScriptId
Definition: OutdoorPvPMgr.h:34
OutdoorPvPTypes TypeId
Definition: OutdoorPvPMgr.h:33

References DISABLE_TYPE_OUTDOORPVP, Field::Get(), getMSTime(), GetMSTimeDiffToNow(), DisableMgr::IsDisabledFor(), LOG_ERROR, LOG_INFO, LOG_WARN, m_OutdoorPvPDatas, m_OutdoorPvPSet, MAX_OUTDOORPVP_TYPES, OutdoorPvPData::ScriptId, OutdoorPvP::SetupOutdoorPvP(), sObjectMgr, sScriptMgr, OutdoorPvPData::TypeId, and WorldDatabase.

◆ instance()

OutdoorPvPMgr * OutdoorPvPMgr::instance ( )
static
31{
33 return &instance;
34}
Definition: OutdoorPvPMgr.h:39
static OutdoorPvPMgr * instance()
Definition: OutdoorPvPMgr.cpp:30

References instance().

Referenced by instance().

◆ Update()

void OutdoorPvPMgr::Update ( uint32  diff)
166{
167 m_UpdateTimer += diff;
169 {
170 for (OutdoorPvPSet::iterator itr = m_OutdoorPvPSet.begin(); itr != m_OutdoorPvPSet.end(); ++itr)
171 (*itr)->Update(m_UpdateTimer);
172 m_UpdateTimer = 0;
173 }
174}
#define OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL
Definition: OutdoorPvPMgr.h:21

References m_OutdoorPvPSet, m_UpdateTimer, and OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL.

Member Data Documentation

◆ _lock

std::mutex OutdoorPvPMgr::_lock

◆ m_OutdoorPvPDatas

OutdoorPvPDataMap OutdoorPvPMgr::m_OutdoorPvPDatas
private

Referenced by Die(), and InitOutdoorPvP().

◆ m_OutdoorPvPMap

◆ m_OutdoorPvPSet

◆ m_UpdateTimer

uint32 OutdoorPvPMgr::m_UpdateTimer
private

Referenced by OutdoorPvPMgr(), and Update().