AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
deserter_commandscript Class Reference
Inheritance diagram for deserter_commandscript:
CommandScript ScriptObject

Public Member Functions

 deserter_commandscript ()
 
ChatCommandTable GetCommands () const override
 Returns the command structure for the system.
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
const std::string & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Public Member Functions

static bool HandleDeserterAdd (ChatHandler *handler, Optional< std::string > playerName, Optional< std::string > time, bool isInstance)
 Applies the Deserter Debuff to a player.
 
static bool HandleDeserterRemove (ChatHandler *handler, Optional< PlayerIdentifier > player, bool isInstance)
 Removes the Deserter Debuff from a player.
 
static bool HandleDeserterRemoveAll (ChatHandler *handler, bool isInstance, Optional< std::string > maxTime)
 Removes the Deserter Debuff from all players.
 
static bool HandleDeserterInstanceAdd (ChatHandler *handler, Optional< std::string > playerName, Optional< std::string > time)
 
static bool HandleDeserterBGAdd (ChatHandler *handler, Optional< std::string > playerName, Optional< std::string > time)
 
static bool HandleDeserterInstanceRemove (ChatHandler *handler, Optional< PlayerIdentifier > player)
 
static bool HandleDeserterBGRemove (ChatHandler *handler, Optional< PlayerIdentifier > player)
 
static bool HandleDeserterInstanceRemoveAll (ChatHandler *handler, Optional< std::string > maxTime)
 
static bool HandleDeserterBGRemoveAll (ChatHandler *handler, Optional< std::string > maxTime)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (const char *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (const char *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ deserter_commandscript()

deserter_commandscript::deserter_commandscript ( )
inline
44: CommandScript("deserter_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable deserter_commandscript::GetCommands ( ) const
inlineoverridevirtual

Returns the command structure for the system.

Implements CommandScript.

51 {
52 static ChatCommandTable deserterInstanceCommandTable =
53 {
57 };
58 static ChatCommandTable deserterBGCommandTable =
59 {
63 };
64
65 static ChatCommandTable deserterCommandTable =
66 {
67 { "instance", deserterInstanceCommandTable },
68 { "bg", deserterBGCommandTable }
69 };
70 static ChatCommandTable commandTable =
71 {
72 { "deserter", deserterCommandTable }
73 };
74 return commandTable;
75 }
static bool HandleDeserterBGAdd(ChatHandler *handler, Optional< std::string > playerName, Optional< std::string > time)
Definition cs_deserter.cpp:416
static bool HandleDeserterInstanceRemove(ChatHandler *handler, Optional< PlayerIdentifier > player)
Definition cs_deserter.cpp:422
static bool HandleDeserterBGRemoveAll(ChatHandler *handler, Optional< std::string > maxTime)
Definition cs_deserter.cpp:438
static bool HandleDeserterBGRemove(ChatHandler *handler, Optional< PlayerIdentifier > player)
Definition cs_deserter.cpp:428
static bool HandleDeserterInstanceAdd(ChatHandler *handler, Optional< std::string > playerName, Optional< std::string > time)
Definition cs_deserter.cpp:410
static bool HandleDeserterInstanceRemoveAll(ChatHandler *handler, Optional< std::string > maxTime)
Definition cs_deserter.cpp:433
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_DESERTER_BG_REMOVE
Definition RBAC.h:196
@ RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE
Definition RBAC.h:198
@ RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD
Definition RBAC.h:197
@ RBAC_PERM_COMMAND_DESERTER_BG_ADD
Definition RBAC.h:195

References HandleDeserterBGAdd(), HandleDeserterBGRemove(), HandleDeserterBGRemoveAll(), HandleDeserterInstanceAdd(), HandleDeserterInstanceRemove(), HandleDeserterInstanceRemoveAll(), rbac::RBAC_PERM_COMMAND_DESERTER_BG_ADD, rbac::RBAC_PERM_COMMAND_DESERTER_BG_REMOVE, rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_ADD, and rbac::RBAC_PERM_COMMAND_DESERTER_INSTANCE_REMOVE.

◆ HandleDeserterAdd()

static bool deserter_commandscript::HandleDeserterAdd ( ChatHandler handler,
Optional< std::string >  playerName,
Optional< std::string >  time,
bool  isInstance 
)
inlinestatic

Applies the Deserter Debuff to a player.

This function applies a Deserter Debuff of the given type (Instance or BG) to the selected player, with the provided duration in seconds.

Parameters
handlerThe ChatHandler, passed by the system.
playerNamePlayer by name. Optional, defaults to selected or self.
timeThe provided duration as TimeString. Optional, defaults to bg/instance default time.
isInstanceprovided by the relaying functions, so we don't have to write that much code :)
Returns
true if everything was correct, false if an error occured.

Example Usage:

.deserter instance add 1h30m (using player target or self)
-or-
.deserter bg add 1h30m (using player target or self)
-or-
.deserter bg add Tester 1h30m (using player of name 'Tester')
101 {
102 Player* target = handler->getSelectedPlayerOrSelf();
103 ObjectGuid guid;
104
105 if (playerName)
106 {
107 if (!normalizePlayerName(*playerName))
108 {
110 return false;
111 }
112
113 guid = sCharacterCache->GetCharacterGuidByName(*playerName);
114 if (guid)
115 {
116 target = ObjectAccessor::FindPlayerByName(*playerName);
117 }
118 else
119 {
120 if (time)
121 {
123 return false;
124 }
125
126 time = playerName;
127 playerName = "";
128 }
129 }
130
131 if (!playerName || playerName->empty())
132 {
133 if (!handler->GetSession())
134 {
135 return false;
136 }
137
138 playerName = target->GetName();
139 guid = target->GetGUID();
140 }
141
142 if (!time)
143 {
144 time = isInstance ? "30m" : "15m";
145 }
146
147 int32 duration = TimeStringToSecs(*time);
148
149 if (duration == 0)
150 {
151 duration = Acore::StringTo<int32>(*time).value_or(0);
152 }
153
154 if (duration == 0)
155 {
157 return false;
158 }
159
160 uint32 deserterSpell = isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER;
161
162 if (target)
163 {
164 Aura* aura = target->GetAura(deserterSpell);
165 if (aura && aura->GetDuration() >= duration * IN_MILLISECONDS)
166 {
167 handler->PSendSysMessage("Player {} already has a longer {} Deserter active.", handler->playerLink(*playerName), isInstance ? "Instance" : "Battleground");
168 return true;
169 }
170
171 aura = target->AddAura(deserterSpell, target);
172 if (!aura)
173 {
175 return false;
176 }
177 aura->SetDuration(duration * IN_MILLISECONDS);
178 }
179 else
180 {
181 int32 remainTime = 0;
182 if (QueryResult result = CharacterDatabase.Query("SELECT remainTime FROM character_aura WHERE guid = {} AND spell = {}", guid.GetCounter(), deserterSpell))
183 {
184 Field* fields = result->Fetch();
185 remainTime = fields[0].Get<int32>();
186
187 if (remainTime < 0 || remainTime >= duration * IN_MILLISECONDS)
188 {
189 handler->PSendSysMessage("Player {} already has a longer {} Deserter active.", handler->playerLink(*playerName), isInstance ? "Instance" : "Battleground");
190 return true;
191 }
192 CharacterDatabase.Query("DELETE FROM character_aura WHERE guid = {} AND spell = {}", guid.GetCounter(), deserterSpell);
193 }
194
195 uint8 index = 0;
197 stmt->SetData(index++, guid.GetCounter());
198 stmt->SetData(index++, guid.GetCounter());
199 stmt->SetData(index++, 0);
200 stmt->SetData(index++, deserterSpell);
201 stmt->SetData(index++, 1);
202 stmt->SetData(index++, 1);
203 stmt->SetData(index++, 1);
204 stmt->SetData(index++, 0);
205 stmt->SetData(index++, 0);
206 stmt->SetData(index++, 0);
207 stmt->SetData(index++, 0);
208 stmt->SetData(index++, 0);
209 stmt->SetData(index++, 0);
210 stmt->SetData(index++, isInstance ? 1800000 : 900000);
211 stmt->SetData(index++, duration * IN_MILLISECONDS);
212 stmt->SetData(index, 0);
213 CharacterDatabase.Execute(stmt);
214 }
215
216 if (isInstance)
217 {
218 if (ObjectGuid groupId = sCharacterCache->GetCharacterGroupGuidByGuid(guid))
219 if (Group* group = sGroupMgr->GetGroupByGUID(groupId.GetCounter()))
220 if (group->isLFGGroup())
221 Player::RemoveFromGroup(group, guid);
222 }
223 else if (target && target->GetMap()->IsBattleground())
224 target->LeaveBattleground();
225
226 handler->PSendSysMessage("{} of {} Deserter has been added to player {}.", secsToTimeString(duration), isInstance ? "Instance" : "Battleground", handler->playerLink(*playerName));
227 return true;
228 }
#define sCharacterCache
Definition CharacterCache.h:83
@ CHAR_INS_AURA
Definition CharacterDatabase.h:196
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::shared_ptr< ResultSet > QueryResult
Definition DatabaseEnvFwd.h:27
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
std::int32_t int32
Definition Define.h:103
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
#define sGroupMgr
Definition GroupMgr.h:51
@ LANG_PLAYER_NOT_FOUND
Definition Language.h:548
@ LANG_BAD_VALUE
Definition Language.h:151
bool normalizePlayerName(std::string &name)
Definition ObjectMgr.cpp:209
std::string secsToTimeString(uint64 timeInSecs, bool shortText)
Definition Util.cpp:73
uint32 TimeStringToSecs(const std::string &timestring)
Definition Util.cpp:163
Definition SpellAuras.h:87
int32 GetDuration() const
Definition SpellAuras.h:133
void SetDuration(int32 duration, bool withMods=false)
Definition SpellAuras.cpp:810
std::string playerLink(std::string const &name) const
Definition Chat.h:231
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
WorldSession * GetSession()
Definition Chat.h:242
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:224
Player * getSelectedPlayerOrSelf() const
Definition Chat.cpp:426
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Definition Group.h:169
bool IsBattleground() const
Definition Map.h:303
Definition ObjectGuid.h:118
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
Definition Player.h:1084
static void RemoveFromGroup(Group *group, ObjectGuid guid, RemoveMethod method=GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker=ObjectGuid::Empty, const char *reason=nullptr)
Definition Player.cpp:2328
void LeaveBattleground(Battleground *bg=nullptr)
Definition Player.cpp:11269
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:5859
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:15117
Map * GetMap() const
Definition Object.h:625
std::string const & GetName() const
Definition Object.h:528
@ LFG_SPELL_DUNGEON_DESERTER
Definition cs_deserter.cpp:37
@ BG_SPELL_DESERTER
Definition cs_deserter.cpp:38
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition ObjectAccessor.cpp:271

References Unit::AddAura(), BG_SPELL_DESERTER, CHAR_INS_AURA, CharacterDatabase, ObjectAccessor::FindPlayerByName(), Field::Get(), Unit::GetAura(), ObjectGuid::GetCounter(), Aura::GetDuration(), Object::GetGUID(), WorldObject::GetMap(), WorldObject::GetName(), ChatHandler::getSelectedPlayerOrSelf(), ChatHandler::GetSession(), IN_MILLISECONDS, Map::IsBattleground(), LANG_BAD_VALUE, LANG_PLAYER_NOT_FOUND, Player::LeaveBattleground(), LFG_SPELL_DUNGEON_DESERTER, normalizePlayerName(), ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), Player::RemoveFromGroup(), sCharacterCache, secsToTimeString(), ChatHandler::SendErrorMessage(), PreparedStatementBase::SetData(), Aura::SetDuration(), sGroupMgr, and TimeStringToSecs().

Referenced by HandleDeserterBGAdd(), and HandleDeserterInstanceAdd().

◆ HandleDeserterBGAdd()

static bool deserter_commandscript::HandleDeserterBGAdd ( ChatHandler handler,
Optional< std::string >  playerName,
Optional< std::string >  time 
)
inlinestatic
See also
HandleDeserterAdd()
417 {
418 return HandleDeserterAdd(handler, playerName, time, false);
419 }
static bool HandleDeserterAdd(ChatHandler *handler, Optional< std::string > playerName, Optional< std::string > time, bool isInstance)
Applies the Deserter Debuff to a player.
Definition cs_deserter.cpp:100

References HandleDeserterAdd().

Referenced by GetCommands().

◆ HandleDeserterBGRemove()

static bool deserter_commandscript::HandleDeserterBGRemove ( ChatHandler handler,
Optional< PlayerIdentifier player 
)
inlinestatic
See also
HandleDeserterRemove()
429 {
430 return HandleDeserterRemove(handler, player, false);
431 }
static bool HandleDeserterRemove(ChatHandler *handler, Optional< PlayerIdentifier > player, bool isInstance)
Removes the Deserter Debuff from a player.
Definition cs_deserter.cpp:252

References HandleDeserterRemove().

Referenced by GetCommands().

◆ HandleDeserterBGRemoveAll()

static bool deserter_commandscript::HandleDeserterBGRemoveAll ( ChatHandler handler,
Optional< std::string >  maxTime 
)
inlinestatic
439 {
440 return HandleDeserterRemoveAll(handler, false, maxTime);
441 }
static bool HandleDeserterRemoveAll(ChatHandler *handler, bool isInstance, Optional< std::string > maxTime)
Removes the Deserter Debuff from all players.
Definition cs_deserter.cpp:327

References HandleDeserterRemoveAll().

Referenced by GetCommands().

◆ HandleDeserterInstanceAdd()

static bool deserter_commandscript::HandleDeserterInstanceAdd ( ChatHandler handler,
Optional< std::string >  playerName,
Optional< std::string >  time 
)
inlinestatic
See also
HandleDeserterAdd()
411 {
412 return HandleDeserterAdd(handler, playerName, time, true);
413 }

References HandleDeserterAdd().

Referenced by GetCommands().

◆ HandleDeserterInstanceRemove()

static bool deserter_commandscript::HandleDeserterInstanceRemove ( ChatHandler handler,
Optional< PlayerIdentifier player 
)
inlinestatic
See also
HandleDeserterRemove()
423 {
424 return HandleDeserterRemove(handler, player, true);
425 }

References HandleDeserterRemove().

Referenced by GetCommands().

◆ HandleDeserterInstanceRemoveAll()

static bool deserter_commandscript::HandleDeserterInstanceRemoveAll ( ChatHandler handler,
Optional< std::string >  maxTime 
)
inlinestatic
434 {
435 return HandleDeserterRemoveAll(handler, true, maxTime);
436 }

References HandleDeserterRemoveAll().

Referenced by GetCommands().

◆ HandleDeserterRemove()

static bool deserter_commandscript::HandleDeserterRemove ( ChatHandler handler,
Optional< PlayerIdentifier player,
bool  isInstance 
)
inlinestatic

Removes the Deserter Debuff from a player.

This function removes a Deserter Debuff of the given type (Instance or BG) from the selected player.

Parameters
handlerThe ChatHandler, passed by the system.
playerThe target player, either by name, the target or self
isInstanceprovided by the relaying functions, so we don't have to write that much code :)
Returns
true if everything was correct, false if an error occured.

Example Usage:

.deserter instance remove (using player target or self)
-or-
.deserter bg remove (using player target or self)
-or-
.deserter bg remove Tester (using player of name 'Tester')
253 {
254 if (!player)
255 {
256 player = PlayerIdentifier::FromTargetOrSelf(handler);
257 }
258
259 if (!player)
260 {
262 return false;
263 }
264
265 Player* target = player->GetConnectedPlayer();
266 uint32 deserterSpell = isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER;
267 int32 duration = 0;
268
269 if (target)
270 {
271 if (Aura* aura = target->GetAura(deserterSpell))
272 {
273 duration = aura->GetDuration();
274 target->RemoveAura(deserterSpell);
275 }
276 }
277 else
278 {
279 if (QueryResult result = CharacterDatabase.Query("SELECT remainTime FROM character_aura WHERE guid = {} AND spell = {}", player->GetGUID().GetCounter(), deserterSpell))
280 {
281 Field* fields = result->Fetch();
282 duration = fields[0].Get<int32>();
283 CharacterDatabase.Execute("DELETE FROM character_aura WHERE guid = {} AND spell = {}", player->GetGUID().GetCounter(), deserterSpell);
284 }
285 }
286
287 if (duration == 0)
288 {
289 handler->SendErrorMessage("Player {} does not have {} Deserter.", handler->playerLink(player->GetName()), isInstance ? "Instance" : "Battleground");
290 return true;
291 }
292
293 if (duration < 0)
294 {
295 handler->SendErrorMessage("Permanent {} Deserter has been removed from player {} (GUID {}).", isInstance ? "Instance" : "Battleground", handler->playerLink(player->GetName()), player->GetGUID().ToString());
296 return true;
297 }
298
299 handler->PSendSysMessage("{} of {} Deserter has been removed from player {} (GUID {}).", secsToTimeString(duration / IN_MILLISECONDS), isInstance ? "Instance" : "Battleground", handler->playerLink(player->GetName()), player->GetGUID().ToString());
300 return true;
301 }
@ LANG_NO_CHAR_SELECTED
Definition Language.h:152
const std::string & GetName() const
Definition ScriptObject.h:53
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5038
std::string ToString(Type &&val, Params &&... params)
Definition StringConvert.h:250
static Optional< PlayerIdentifier > FromTargetOrSelf(ChatHandler *handler)
Definition ChatCommandTags.h:189

References BG_SPELL_DESERTER, CharacterDatabase, Acore::ChatCommands::PlayerIdentifier::FromTargetOrSelf(), Field::Get(), Unit::GetAura(), IN_MILLISECONDS, LANG_NO_CHAR_SELECTED, LFG_SPELL_DUNGEON_DESERTER, ChatHandler::playerLink(), ChatHandler::PSendSysMessage(), Unit::RemoveAura(), secsToTimeString(), and ChatHandler::SendErrorMessage().

Referenced by HandleDeserterBGRemove(), and HandleDeserterInstanceRemove().

◆ HandleDeserterRemoveAll()

static bool deserter_commandscript::HandleDeserterRemoveAll ( ChatHandler handler,
bool  isInstance,
Optional< std::string >  maxTime 
)
inlinestatic

Removes the Deserter Debuff from all players.

This function removes a Deserter Debuff of the given type (Instance or BG) from all players, online or offline.

Parameters
handlerThe ChatHandler, passed by the system.
isInstanceprovided by the relaying functions, so we don't have to write that much code :)
maxTimeOptional: The maximum remaining time of the Debuff on players to be removed. Any Player with a Deserter Debuff of this time or less will get their Debuff removed. Use -1 for any. Default: 15m for BG, 30m for Instance.
Returns
true if everything was correct, false if an error occured.

Example Usage:

.deserter bg remove all
-or-
.deserter bg remove all 30m
-or-
.deserter bg remove all -1
328 {
329 uint32 deserterSpell = isInstance ? LFG_SPELL_DUNGEON_DESERTER : BG_SPELL_DESERTER;
330 int32 remainTime = isInstance ? 1800 : 1800;
331 uint64 deserterCount = 0;
332 bool countOnline = true;
333
334 if (maxTime)
335 {
336 remainTime = TimeStringToSecs(*maxTime);
337 if (remainTime == 0)
338 {
339 remainTime = Acore::StringTo<int32>(*maxTime).value_or(0);
340 }
341 }
342
343 // Optimization. Do not execute any further functions or Queries if remainTime is 0.
344 if (remainTime == 0)
345 {
347 return false;
348 }
349
350 QueryResult result;
351 if (remainTime > 0)
352 {
353 result = CharacterDatabase.Query("SELECT COUNT(guid) FROM character_aura WHERE spell = {} AND remainTime <= {}", deserterSpell, remainTime * IN_MILLISECONDS);
354 }
355 else
356 {
357 result = CharacterDatabase.Query("SELECT COUNT(guid) FROM character_aura WHERE spell = {}", deserterSpell);
358 }
359
360 if (result)
361 {
362 deserterCount = (*result)[0].Get<uint64>();
363 }
364
365 // Optimization. Only execute these if there even is a result.
366 if (deserterCount > 0)
367 {
368 countOnline = false;
369 if (remainTime > 0)
370 {
371 CharacterDatabase.Execute("DELETE FROM character_aura WHERE spell = {} AND remainTime <= {}", deserterSpell, remainTime * IN_MILLISECONDS);
372 }
373 else
374 {
375 CharacterDatabase.Execute("DELETE FROM character_aura WHERE spell = {}", deserterSpell);
376 }
377 }
378
379 std::shared_lock<std::shared_mutex> lock(*HashMapHolder<Player>::GetLock());
381 for (HashMapHolder<Player>::MapType::const_iterator itr = onlinePlayerList.begin(); itr != onlinePlayerList.end(); ++itr)
382 {
383 Player* player = itr->second;
384 Aura* aura = player->GetAura(deserterSpell);
385 if (aura && (remainTime < 0 || aura->GetDuration() <= remainTime * IN_MILLISECONDS))
386 {
387 if (countOnline)
388 deserterCount++;
389 player->RemoveAura(deserterSpell);
390 }
391 }
392
393 std::string remainTimeStr = secsToTimeString(remainTime);
394 if (remainTime < 0)
395 {
396 remainTimeStr = "infinity";
397 }
398
399 if (deserterCount == 0)
400 {
401 handler->PSendSysMessage("No player on this realm has {} Deserter with a duration of {} or less.", isInstance ? "Instance" : "Battleground", remainTimeStr);
402 return true;
403 }
404
405 handler->PSendSysMessage("{} Deserter has been removed from {} player(s) with a duration of {} or less.", isInstance ? "Instance" : "Battleground", deserterCount, remainTimeStr);
406 return true;
407 }
std::uint64_t uint64
Definition Define.h:106
Definition ObjectAccessor.h:41
std::unordered_map< ObjectGuid, T * > MapType
Definition ObjectAccessor.h:47
HashMapHolder< Player >::MapType const & GetPlayers()
Definition ObjectAccessor.cpp:75

References BG_SPELL_DESERTER, CharacterDatabase, Unit::GetAura(), ObjectAccessor::GetPlayers(), IN_MILLISECONDS, LANG_BAD_VALUE, LFG_SPELL_DUNGEON_DESERTER, ChatHandler::PSendSysMessage(), Unit::RemoveAura(), secsToTimeString(), ChatHandler::SendErrorMessage(), and TimeStringToSecs().

Referenced by HandleDeserterBGRemoveAll(), and HandleDeserterInstanceRemoveAll().


The documentation for this class was generated from the following file: