Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
OutdoorPvPMgr.cpp
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
#include "
DisableMgr.h
"
7
#include "
ObjectMgr.h
"
8
#include "
OutdoorPvPMgr.h
"
9
#include "
Player.h
"
10
#include "
ScriptMgr.h
"
11
12
void
OutdoorPvPMgr::Die
()
13
{
14
//SF_LOG_DEBUG("outdoorpvp", "Deleting OutdoorPvPMgr");
15
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
16
delete
* itr;
17
18
for
(OutdoorPvPDataMap::iterator itr =
m_OutdoorPvPDatas
.begin(); itr !=
m_OutdoorPvPDatas
.end(); ++itr)
19
delete
itr->second;
20
}
21
22
void
OutdoorPvPMgr::InitOutdoorPvP
()
23
{
24
uint32
oldMSTime =
getMSTime
();
25
26
// 0 1
27
QueryResult
result =
WorldDatabase
.Query(
"SELECT TypeId, ScriptName FROM outdoorpvp_template"
);
28
29
if
(!result)
30
{
31
SF_LOG_ERROR
(
"server.loading"
,
">> Loaded 0 outdoor PvP definitions. DB table `outdoorpvp_template` is empty."
);
32
return
;
33
}
34
35
uint32
count = 0;
36
uint32
typeId = 0;
37
38
do
39
{
40
Field
* fields = result->Fetch();
41
42
typeId = fields[0].
GetUInt8
();
43
44
if
(
DisableMgr::IsDisabledFor
(
DISABLE_TYPE_OUTDOORPVP
, typeId, NULL))
45
continue
;
46
47
if
(typeId >=
MAX_OUTDOORPVP_TYPES
)
48
{
49
SF_LOG_ERROR
(
"sql.sql"
,
"Invalid OutdoorPvPTypes value %u in outdoorpvp_template; skipped."
, typeId);
50
continue
;
51
}
52
53
OutdoorPvPData
* data =
new
OutdoorPvPData
();
54
OutdoorPvPTypes
realTypeId =
OutdoorPvPTypes
(typeId);
55
data->
TypeId
= realTypeId;
56
data->
ScriptId
=
sObjectMgr
->GetScriptId(fields[1].GetCString());
57
m_OutdoorPvPDatas
[realTypeId] = data;
58
59
++count;
60
}
while
(result->NextRow());
61
62
OutdoorPvP
* pvp;
63
for
(
uint8
i = 1; i <
MAX_OUTDOORPVP_TYPES
; ++i)
64
{
65
OutdoorPvPDataMap::iterator iter =
m_OutdoorPvPDatas
.find(
OutdoorPvPTypes
(i));
66
if
(iter ==
m_OutdoorPvPDatas
.end())
67
{
68
SF_LOG_ERROR
(
"sql.sql"
,
"Could not initialize OutdoorPvP object for type ID %u; no entry in database."
,
uint32
(i));
69
continue
;
70
}
71
72
pvp =
sScriptMgr
->CreateOutdoorPvP(iter->second);
73
if
(!pvp)
74
{
75
SF_LOG_ERROR
(
"outdoorpvp"
,
"Could not initialize OutdoorPvP object for type ID %u; got NULL pointer from script."
,
uint32
(i));
76
continue
;
77
}
78
79
if
(!pvp->
SetupOutdoorPvP
())
80
{
81
SF_LOG_ERROR
(
"outdoorpvp"
,
"Could not initialize OutdoorPvP object for type ID %u; SetupOutdoorPvP failed."
,
uint32
(i));
82
delete
pvp;
83
continue
;
84
}
85
86
m_OutdoorPvPSet
.push_back(pvp);
87
}
88
89
SF_LOG_INFO
(
"server.loading"
,
">> Loaded %u outdoor PvP definitions in %u ms"
, count,
GetMSTimeDiffToNow
(oldMSTime));
90
}
91
92
void
OutdoorPvPMgr::AddZone
(
uint32
zoneid,
OutdoorPvP
* handle)
93
{
94
m_OutdoorPvPMap
[zoneid] = handle;
95
}
96
97
void
OutdoorPvPMgr::HandlePlayerEnterZone
(
Player
* player,
uint32
zoneid)
98
{
99
OutdoorPvPMap::iterator itr =
m_OutdoorPvPMap
.find(zoneid);
100
if
(itr ==
m_OutdoorPvPMap
.end())
101
return
;
102
103
if
(itr->second->HasPlayer(player))
104
return
;
105
106
itr->second->HandlePlayerEnterZone(player, zoneid);
107
SF_LOG_DEBUG
(
"outdoorpvp"
,
"Player %u entered outdoorpvp id %u"
, player->
GetGUIDLow
(), itr->second->GetTypeId());
108
}
109
110
void
OutdoorPvPMgr::HandlePlayerLeaveZone
(
Player
* player,
uint32
zoneid)
111
{
112
OutdoorPvPMap::iterator itr =
m_OutdoorPvPMap
.find(zoneid);
113
if
(itr ==
m_OutdoorPvPMap
.end())
114
return
;
115
116
// teleport: remove once in removefromworld, once in updatezone
117
if
(!itr->second->HasPlayer(player))
118
return
;
119
120
itr->second->HandlePlayerLeaveZone(player, zoneid);
121
SF_LOG_DEBUG
(
"outdoorpvp"
,
"Player %u left outdoorpvp id %u"
, player->
GetGUIDLow
(), itr->second->GetTypeId());
122
}
123
124
OutdoorPvP
*
OutdoorPvPMgr::GetOutdoorPvPToZoneId
(
uint32
zoneid)
125
{
126
OutdoorPvPMap::iterator itr =
m_OutdoorPvPMap
.find(zoneid);
127
if
(itr ==
m_OutdoorPvPMap
.end())
128
{
129
// no handle for this zone, return
130
return
NULL;
131
}
132
return
itr->second;
133
}
134
135
void
OutdoorPvPMgr::Update
(
uint32
diff)
136
{
137
m_UpdateTimer
+= diff;
138
if
(
m_UpdateTimer
>
OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL
)
139
{
140
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
141
(*itr)->Update(
m_UpdateTimer
);
142
m_UpdateTimer
= 0;
143
}
144
}
145
146
bool
OutdoorPvPMgr::HandleCustomSpell
(
Player
* player,
uint32
spellId,
GameObject
* go)
147
{
148
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
149
{
150
if
((*itr)->HandleCustomSpell(player, spellId, go))
151
return
true
;
152
}
153
return
false
;
154
}
155
156
ZoneScript
*
OutdoorPvPMgr::GetZoneScript
(
uint32
zoneId)
157
{
158
OutdoorPvPMap::iterator itr =
m_OutdoorPvPMap
.find(zoneId);
159
if
(itr !=
m_OutdoorPvPMap
.end())
160
return
itr->second;
161
else
162
return
NULL;
163
}
164
165
bool
OutdoorPvPMgr::HandleOpenGo
(
Player
* player,
uint64
guid)
166
{
167
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
168
{
169
if
((*itr)->HandleOpenGo(player, guid))
170
return
true
;
171
}
172
return
false
;
173
}
174
175
void
OutdoorPvPMgr::HandleGossipOption
(
Player
* player,
uint64
guid,
uint32
gossipid)
176
{
177
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
178
{
179
if
((*itr)->HandleGossipOption(player, guid, gossipid))
180
return
;
181
}
182
}
183
184
bool
OutdoorPvPMgr::CanTalkTo
(
Player
* player,
Creature
* creature,
GossipMenuItems
const
& gso)
185
{
186
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
187
{
188
if
((*itr)->CanTalkTo(player, creature, gso))
189
return
true
;
190
}
191
return
false
;
192
}
193
194
void
OutdoorPvPMgr::HandleDropFlag
(
Player
* player,
uint32
spellId)
195
{
196
for
(OutdoorPvPSet::iterator itr =
m_OutdoorPvPSet
.begin(); itr !=
m_OutdoorPvPSet
.end(); ++itr)
197
{
198
if
((*itr)->HandleDropFlag(player, spellId))
199
return
;
200
}
201
}
202
203
void
OutdoorPvPMgr::HandlePlayerResurrects
(
Player
* player,
uint32
zoneid)
204
{
205
OutdoorPvPMap::iterator itr =
m_OutdoorPvPMap
.find(zoneid);
206
if
(itr ==
m_OutdoorPvPMap
.end())
207
return
;
208
209
if
(itr->second->HasPlayer(player))
210
itr->second->HandlePlayerResurrects(player, zoneid);
211
}
uint8
std::uint8_t uint8
Definition
Define.h:79
uint32
std::uint32_t uint32
Definition
Define.h:77
uint64
std::uint64_t uint64
Definition
Define.h:76
DisableMgr.h
DISABLE_TYPE_OUTDOORPVP
@ DISABLE_TYPE_OUTDOORPVP
Definition
DisableMgr.h:20
SF_LOG_DEBUG
#define SF_LOG_DEBUG(filterType__,...)
Definition
Log.h:134
SF_LOG_ERROR
#define SF_LOG_ERROR(filterType__,...)
Definition
Log.h:143
SF_LOG_INFO
#define SF_LOG_INFO(filterType__,...)
Definition
Log.h:137
ObjectMgr.h
sObjectMgr
#define sObjectMgr
Definition
ObjectMgr.h:1617
OutdoorPvPTypes
OutdoorPvPTypes
Definition
OutdoorPvP.h:17
MAX_OUTDOORPVP_TYPES
#define MAX_OUTDOORPVP_TYPES
Definition
OutdoorPvP.h:25
OutdoorPvPMgr.h
OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL
#define OUTDOORPVP_OBJECTIVE_UPDATE_INTERVAL
Definition
OutdoorPvPMgr.h:9
Player.h
QueryResult
Skyfire::AutoPtr< ResultSet, Skyfire::Mutex > QueryResult
Definition
QueryResult.h:48
ScriptMgr.h
sScriptMgr
#define sScriptMgr
Definition
ScriptMgr.h:764
GetMSTimeDiffToNow
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition
Timer.h:22
getMSTime
uint32 getMSTime()
Definition
Timer.h:12
Creature
Definition
Creature.h:427
Field
Definition
Field.h:16
Field::GetUInt8
uint8 GetUInt8() const
Definition
Field.h:26
GameObject
Definition
GameObject.h:629
Object::GetGUIDLow
uint32 GetGUIDLow() const
Definition
Object.h:120
OutdoorPvP
Definition
OutdoorPvP.h:177
OutdoorPvP::SetupOutdoorPvP
virtual bool SetupOutdoorPvP()
Definition
OutdoorPvP.h:204
OutdoorPvPMgr::HandleCustomSpell
bool HandleCustomSpell(Player *player, uint32 spellId, GameObject *go)
Definition
OutdoorPvPMgr.cpp:146
OutdoorPvPMgr::HandleGossipOption
void HandleGossipOption(Player *player, uint64 guid, uint32 gossipid)
Definition
OutdoorPvPMgr.cpp:175
OutdoorPvPMgr::m_OutdoorPvPMap
OutdoorPvPMap m_OutdoorPvPMap
Definition
OutdoorPvPMgr.h:83
OutdoorPvPMgr::GetZoneScript
ZoneScript * GetZoneScript(uint32 zoneId)
Definition
OutdoorPvPMgr.cpp:156
OutdoorPvPMgr::HandleOpenGo
bool HandleOpenGo(Player *player, uint64 guid)
Definition
OutdoorPvPMgr.cpp:165
OutdoorPvPMgr::AddZone
void AddZone(uint32 zoneid, OutdoorPvP *handle)
Definition
OutdoorPvPMgr.cpp:92
OutdoorPvPMgr::HandlePlayerLeaveZone
void HandlePlayerLeaveZone(Player *player, uint32 areaflag)
Definition
OutdoorPvPMgr.cpp:110
OutdoorPvPMgr::Die
void Die()
Definition
OutdoorPvPMgr.cpp:12
OutdoorPvPMgr::m_OutdoorPvPSet
OutdoorPvPSet m_OutdoorPvPSet
Definition
OutdoorPvPMgr.h:79
OutdoorPvPMgr::CanTalkTo
bool CanTalkTo(Player *player, Creature *creature, GossipMenuItems const &gso)
Definition
OutdoorPvPMgr.cpp:184
OutdoorPvPMgr::Update
void Update(uint32 diff)
Definition
OutdoorPvPMgr.cpp:135
OutdoorPvPMgr::HandleDropFlag
void HandleDropFlag(Player *player, uint32 spellId)
Definition
OutdoorPvPMgr.cpp:194
OutdoorPvPMgr::GetOutdoorPvPToZoneId
OutdoorPvP * GetOutdoorPvPToZoneId(uint32 zoneid)
Definition
OutdoorPvPMgr.cpp:124
OutdoorPvPMgr::InitOutdoorPvP
void InitOutdoorPvP()
Definition
OutdoorPvPMgr.cpp:22
OutdoorPvPMgr::HandlePlayerEnterZone
void HandlePlayerEnterZone(Player *player, uint32 areaflag)
Definition
OutdoorPvPMgr.cpp:97
OutdoorPvPMgr::m_UpdateTimer
uint32 m_UpdateTimer
Definition
OutdoorPvPMgr.h:89
OutdoorPvPMgr::HandlePlayerResurrects
void HandlePlayerResurrects(Player *player, uint32 areaflag)
Definition
OutdoorPvPMgr.cpp:203
OutdoorPvPMgr::m_OutdoorPvPDatas
OutdoorPvPDataMap m_OutdoorPvPDatas
Definition
OutdoorPvPMgr.h:86
Player
Definition
Player.h:1289
ZoneScript
Definition
ZoneScript.h:15
WorldDatabase
WorldDatabaseWorkerPool WorldDatabase
Accessor to the world database.
Definition
Main.cpp:40
DisableMgr::IsDisabledFor
bool IsDisabledFor(DisableType type, uint32 entry, Unit const *unit, uint8 flags)
Definition
DisableMgr.cpp:292
GossipMenuItems
Definition
ObjectMgr.h:527
OutdoorPvPData
Definition
OutdoorPvPMgr.h:21
OutdoorPvPData::ScriptId
uint32 ScriptId
Definition
OutdoorPvPMgr.h:23
OutdoorPvPData::TypeId
OutdoorPvPTypes TypeId
Definition
OutdoorPvPMgr.h:22
src
server
game
OutdoorPvP
OutdoorPvPMgr.cpp
Generated on
for Project SkyFire Core by
1.17.0