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

#include "CombatManager.h"

Public Member Functions

 CombatManager (Unit *owner)
 
 ~CombatManager ()
 
void Update (uint32 tdiff)
 
UnitGetOwner () const
 
EvadeState GetEvadeState () const
 
void SetEvadeState (EvadeState state)
 
bool IsEvadingHome () const
 
bool IsInEvadeMode () const
 
bool IsEvadeRegen () const
 
void StartEvadeTimer ()
 
void ContinueEvadeRegen ()
 
void StopEvade ()
 
bool HasCombat () const
 
bool HasPvECombat () const
 
bool HasPvECombatWithPlayers () const
 
std::unordered_map< ObjectGuid, CombatReference * > const & GetPvECombatRefs () const
 
bool HasPvPCombat () const
 
std::unordered_map< ObjectGuid, PvPCombatReference * > const & GetPvPCombatRefs () const
 
UnitGetAnyTarget () const
 
bool SetInCombatWith (Unit *who, bool addSecondUnitSuppressed=false)
 
bool IsInCombatWith (ObjectGuid const &who) const
 
bool IsInCombatWith (Unit const *who) const
 
void InheritCombatStatesFrom (Unit const *who)
 
void EndCombatBeyondRange (float range, bool includingPvP=false)
 
void SuppressPvPCombat ()
 
void EndAllPvECombat ()
 
void RevalidateCombat ()
 
void EndAllPvPCombat ()
 
void EndAllCombat ()
 
 CombatManager (CombatManager const &)=delete
 
CombatManageroperator= (CombatManager const &)=delete
 

Static Public Member Functions

static bool CanBeginCombat (Unit const *a, Unit const *b)
 

Static Public Attributes

static constexpr uint32 EVADE_TIMER_DURATION = 10 * IN_MILLISECONDS
 
static constexpr uint32 EVADE_REGEN_DELAY = 5 * IN_MILLISECONDS
 

Private Member Functions

void PutReference (ObjectGuid const &guid, CombatReference *ref)
 
void PurgeReference (ObjectGuid const &guid, bool pvp)
 
bool UpdateOwnerCombatState () const
 

Static Private Member Functions

static void NotifyAICombat (Unit *me, Unit *other)
 

Private Attributes

Unit *const _owner
 
EvadeState _evadeState
 
uint32 _evadeTimer
 
std::unordered_map< ObjectGuid, CombatReference * > _pveRefs
 
std::unordered_map< ObjectGuid, PvPCombatReference * > _pvpRefs
 

Friends

struct CombatReference
 
struct PvPCombatReference
 

Detailed Description

Constructor & Destructor Documentation

◆ CombatManager() [1/2]

CombatManager::CombatManager ( Unit owner)
inline
@ EVADE_STATE_NONE
Definition CombatManager.h:30
Unit *const _owner
Definition CombatManager.h:157
EvadeState _evadeState
Definition CombatManager.h:158
uint32 _evadeTimer
Definition CombatManager.h:159

◆ ~CombatManager()

CombatManager::~CombatManager ( )
143{
144 ASSERT(_pveRefs.empty(), "CombatManager::~CombatManager - %s: we still have %zu PvE combat references, one of them is with %s", _owner->GetGUID().ToString().c_str(), _pveRefs.size(), _pveRefs.begin()->first.ToString().c_str());
145 ASSERT(_pvpRefs.empty(), "CombatManager::~CombatManager - %s: we still have %zu PvP combat references, one of them is with %s", _owner->GetGUID().ToString().c_str(), _pvpRefs.size(), _pvpRefs.begin()->first.ToString().c_str());
146}
#define ASSERT
Definition Errors.h:68
std::unordered_map< ObjectGuid, PvPCombatReference * > _pvpRefs
Definition CombatManager.h:161
std::unordered_map< ObjectGuid, CombatReference * > _pveRefs
Definition CombatManager.h:160
std::string ToString() const
Definition ObjectGuid.cpp:47
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114

References _owner, _pveRefs, _pvpRefs, ASSERT, Object::GetGUID(), and ObjectGuid::ToString().

◆ CombatManager() [2/2]

CombatManager::CombatManager ( CombatManager const &  )
delete

Member Function Documentation

◆ CanBeginCombat()

bool CombatManager::CanBeginCombat ( Unit const *  a,
Unit const *  b 
)
static
37{
38 // Checks combat validity before initial reference creation.
39 // For the combat to be valid...
40 // ...the two units need to be different
41 if (a == b)
42 return false;
43 // ...the two units need to be in the world
44 if (!a->IsInWorld() || !b->IsInWorld())
45 return false;
46 // ...the two units need to both be alive
47 if (!a->IsAlive() || !b->IsAlive())
48 return false;
49 // ...the two units need to be on the same map
50 if (a->GetMap() != b->GetMap())
51 return false;
52 // ...the two units need to be in the same phase
53 if (!a->InSamePhase(b))
54 return false;
55 if (a->HasUnitState(UNIT_STATE_EVADE) || b->HasUnitState(UNIT_STATE_EVADE))
56 return false;
57 if (a->HasUnitState(UNIT_STATE_IN_FLIGHT) || b->HasUnitState(UNIT_STATE_IN_FLIGHT))
58 return false;
59 // ... both units must be allowed to enter combat
60 if (a->IsCombatDisallowed() || b->IsCombatDisallowed())
61 return false;
62 // ...not friendly, unless one side is hostile (asymmetric aggressor wins)
63 if ((a->IsFriendlyTo(b) || b->IsFriendlyTo(a)) && !a->IsHostileTo(b) && !b->IsHostileTo(a))
64 return false;
67 // ...neither of the two units must be (owned by) a player with .gm on
68 if ((playerA && playerA->IsGameMaster()) || (playerB && playerB->IsGameMaster()))
69 return false;
70 return true;
71}
@ UNIT_STATE_EVADE
Definition UnitDefines.h:194
@ UNIT_STATE_IN_FLIGHT
Definition UnitDefines.h:181
Definition Player.h:1084
bool IsGameMaster() const
Definition Player.h:1174
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:7733

References Unit::GetCharmerOrOwnerPlayerOrPlayerItself(), WorldObject::GetMap(), Unit::HasUnitState(), WorldObject::InSamePhase(), Unit::IsAlive(), Unit::IsCombatDisallowed(), Unit::IsFriendlyTo(), Player::IsGameMaster(), Unit::IsHostileTo(), Object::IsInWorld(), UNIT_STATE_EVADE, and UNIT_STATE_IN_FLIGHT.

Referenced by RevalidateCombat(), and SetInCombatWith().

◆ ContinueEvadeRegen()

void CombatManager::ContinueEvadeRegen ( )
inline
static constexpr uint32 EVADE_REGEN_DELAY
Definition CombatManager.h:109

Referenced by UnitAI::EvadeTimerExpired().

◆ EndAllCombat()

void CombatManager::EndAllCombat ( )
inline
void EndAllPvPCombat()
Definition CombatManager.cpp:373
void EndAllPvECombat()
Definition CombatManager.cpp:335

Referenced by TestCreature::CleanupCombatState(), and Unit::ClearInCombat().

◆ EndAllPvECombat()

void CombatManager::EndAllPvECombat ( )
336{
337 // cannot have threat without combat
340 while (!_pveRefs.empty())
341 _pveRefs.begin()->second->EndCombat();
342}
void RemoveMeFromThreatLists()
Definition ThreatManager.cpp:789
void ClearAllThreat()
Definition ThreatManager.cpp:575
ThreatManager & GetThreatMgr()
Definition Unit.h:951

References _owner, _pveRefs, ThreatManager::ClearAllThreat(), Unit::GetThreatMgr(), and ThreatManager::RemoveMeFromThreatLists().

Referenced by Unit::CombatStop().

◆ EndAllPvPCombat()

void CombatManager::EndAllPvPCombat ( )
374{
375 while (!_pvpRefs.empty())
376 _pvpRefs.begin()->second->EndCombat();
377}

References _pvpRefs.

◆ EndCombatBeyondRange()

void CombatManager::EndCombatBeyondRange ( float  range,
bool  includingPvP = false 
)
295{
296 auto it = _pveRefs.begin(), end = _pveRefs.end();
297 while (it != end)
298 {
299 CombatReference* const ref = it->second;
300 if (!ref->first->IsWithinDistInMap(ref->second, range))
301 {
302 it = _pveRefs.erase(it), end = _pveRefs.end(); // erase manually here to avoid iterator invalidation
303 ref->EndCombat();
304 }
305 else
306 ++it;
307 }
308
309 if (!includingPvP)
310 return;
311
312 auto it2 = _pvpRefs.begin(), end2 = _pvpRefs.end();
313 while (it2 != end2)
314 {
315 CombatReference* const ref = it2->second;
316 if (!ref->first->IsWithinDistInMap(ref->second, range))
317 {
318 it2 = _pvpRefs.erase(it2), end2 = _pvpRefs.end(); // erase manually here to avoid iterator invalidation
319 ref->EndCombat();
320 }
321 else
322 ++it2;
323 }
324}
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1377
Definition CombatManager.h:60
Unit *const second
Definition CombatManager.h:62
Unit *const first
Definition CombatManager.h:61
void EndCombat()
Definition CombatManager.cpp:73

References _pveRefs, _pvpRefs, CombatReference::EndCombat(), CombatReference::first, WorldObject::IsWithinDistInMap(), and CombatReference::second.

Referenced by Player::Update().

◆ GetAnyTarget()

Unit * CombatManager::GetAnyTarget ( ) const
204{
205 for (auto const& pair : _pveRefs)
206 if (!pair.second->IsSuppressedFor(_owner))
207 return pair.second->GetOther(_owner);
208 for (auto const& pair : _pvpRefs)
209 if (!pair.second->IsSuppressedFor(_owner))
210 return pair.second->GetOther(_owner);
211 return nullptr;
212}

References _owner, _pveRefs, and _pvpRefs.

Referenced by Creature::CallForHelp(), and UpdateOwnerCombatState().

◆ GetEvadeState()

EvadeState CombatManager::GetEvadeState ( ) const
inline
118{ return _evadeState; }

◆ GetOwner()

Unit * CombatManager::GetOwner ( ) const
inline
115{ return _owner; }

◆ GetPvECombatRefs()

◆ GetPvPCombatRefs()

◆ HasCombat()

bool CombatManager::HasCombat ( ) const
inline
127{ return HasPvECombat() || HasPvPCombat(); }
bool HasPvECombat() const
Definition CombatManager.cpp:178
bool HasPvPCombat() const
Definition CombatManager.cpp:195

Referenced by debug_commandscript::HandleDebugCombatListCommand(), debug_commandscript::HandleDebugHostileRefListCommand(), and UpdateOwnerCombatState().

◆ HasPvECombat()

bool CombatManager::HasPvECombat ( ) const
179{
180 for (auto const& [guid, ref] : _pveRefs)
181 if (!ref->IsSuppressedFor(_owner))
182 return true;
183 return false;
184}

References _owner, and _pveRefs.

◆ HasPvECombatWithPlayers()

bool CombatManager::HasPvECombatWithPlayers ( ) const
187{
188 for (std::pair<ObjectGuid const, CombatReference*> const& reference : _pveRefs)
189 if (!reference.second->IsSuppressedFor(_owner) && reference.second->GetOther(_owner)->IsPlayer())
190 return true;
191
192 return false;
193}

References _owner, and _pveRefs.

◆ HasPvPCombat()

bool CombatManager::HasPvPCombat ( ) const
196{
197 for (auto const& pair : _pvpRefs)
198 if (!pair.second->IsSuppressedFor(_owner))
199 return true;
200 return false;
201}

References _owner, and _pvpRefs.

◆ InheritCombatStatesFrom()

void CombatManager::InheritCombatStatesFrom ( Unit const *  who)
271{
272 CombatManager const& mgr = who->GetCombatManager();
273 for (auto& ref : mgr._pveRefs)
274 {
275 if (!IsInCombatWith(ref.first))
276 {
277 Unit* target = ref.second->GetOther(who);
280 continue;
281 SetInCombatWith(target);
282 }
283 }
284 for (auto& ref : mgr._pvpRefs)
285 {
286 Unit* target = ref.second->GetOther(who);
289 continue;
290 SetInCombatWith(target);
291 }
292}
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition UnitDefines.h:260
Definition CombatManager.h:104
bool SetInCombatWith(Unit *who, bool addSecondUnitSuppressed=false)
Definition CombatManager.cpp:214
bool IsInCombatWith(ObjectGuid const &who) const
Definition CombatManager.cpp:260
Definition Unit.h:664
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:747
bool IsImmuneToNPC() const
Definition Unit.h:929
bool IsImmuneToPC() const
Definition Unit.h:927

References _owner, _pveRefs, _pvpRefs, Unit::GetCombatManager(), Unit::HasUnitFlag(), Unit::IsImmuneToNPC(), Unit::IsImmuneToPC(), IsInCombatWith(), SetInCombatWith(), and UNIT_FLAG_PLAYER_CONTROLLED.

Referenced by Spell::DoSpellHitOnUnit().

◆ IsEvadeRegen()

bool CombatManager::IsEvadeRegen ( ) const
inline

◆ IsEvadingHome()

bool CombatManager::IsEvadingHome ( ) const
inline
120{ return _evadeState == EVADE_STATE_HOME; }
@ EVADE_STATE_HOME
Definition CombatManager.h:32

References EVADE_STATE_HOME.

◆ IsInCombatWith() [1/2]

bool CombatManager::IsInCombatWith ( ObjectGuid const &  who) const

◆ IsInCombatWith() [2/2]

bool CombatManager::IsInCombatWith ( Unit const *  who) const
266{
267 return IsInCombatWith(who->GetGUID());
268}

References Object::GetGUID(), and IsInCombatWith().

◆ IsInEvadeMode()

bool CombatManager::IsInEvadeMode ( ) const
inline
121{ return _evadeTimer > 0 || _evadeState != EVADE_STATE_NONE; }

References EVADE_STATE_NONE.

◆ NotifyAICombat()

void CombatManager::NotifyAICombat ( Unit me,
Unit other 
)
staticprivate
380{
381 if (UnitAI* ai = me->GetAI())
382 ai->JustEnteredCombat(other);
383}
Definition UnitAI.h:198
UnitAI * GetAI()
Definition Unit.h:693

References Unit::GetAI().

Referenced by CombatReference::Refresh(), and SetInCombatWith().

◆ operator=()

CombatManager & CombatManager::operator= ( CombatManager const &  )
delete

◆ PurgeReference()

void CombatManager::PurgeReference ( ObjectGuid const &  guid,
bool  pvp 
)
private
402{
403 if (pvp)
404 _pvpRefs.erase(guid);
405 else
406 _pveRefs.erase(guid);
407}

References _pveRefs, and _pvpRefs.

Referenced by CombatReference::EndCombat().

◆ PutReference()

void CombatManager::PutReference ( ObjectGuid const &  guid,
CombatReference ref 
)
private
386{
387 if (ref->_isPvP)
388 {
389 auto& inMap = _pvpRefs[guid];
390 ASSERT(!inMap, "Duplicate combat state at %p being inserted for %s vs %s - memory leak!", (void*)ref, _owner->GetGUID().ToString().c_str(), guid.ToString().c_str());
391 inMap = static_cast<PvPCombatReference*>(ref);
392 }
393 else
394 {
395 auto& inMap = _pveRefs[guid];
396 ASSERT(!inMap, "Duplicate combat state at %p being inserted for %s vs %s - memory leak!", (void*)ref, _owner->GetGUID().ToString().c_str(), guid.ToString().c_str());
397 inMap = ref;
398 }
399}
bool const _isPvP
Definition CombatManager.h:63
Definition CombatManager.h:89

References CombatReference::_isPvP, _owner, _pveRefs, _pvpRefs, ASSERT, Object::GetGUID(), and ObjectGuid::ToString().

Referenced by SetInCombatWith().

◆ RevalidateCombat()

void CombatManager::RevalidateCombat ( )
345{
346 auto it = _pveRefs.begin(), end = _pveRefs.end();
347 while (it != end)
348 {
349 CombatReference* const ref = it->second;
351 {
352 it = _pveRefs.erase(it), end = _pveRefs.end(); // erase manually here to avoid iterator invalidation
353 ref->EndCombat();
354 }
355 else
356 ++it;
357 }
358
359 auto it2 = _pvpRefs.begin(), end2 = _pvpRefs.end();
360 while (it2 != end2)
361 {
362 CombatReference* const ref = it2->second;
364 {
365 it2 = _pvpRefs.erase(it2), end2 = _pvpRefs.end(); // erase manually here to avoid iterator invalidation
366 ref->EndCombat();
367 }
368 else
369 ++it2;
370 }
371}
static bool CanBeginCombat(Unit const *a, Unit const *b)
Definition CombatManager.cpp:36
Unit * GetOther(Unit const *me) const
Definition CombatManager.h:64

References _owner, _pveRefs, _pvpRefs, CanBeginCombat(), CombatReference::EndCombat(), CombatReference::GetOther(), and CombatReference::second.

Referenced by Unit::RemoveCharmedBy().

◆ SetEvadeState()

void CombatManager::SetEvadeState ( EvadeState  state)
443{
444 if (_evadeState == state)
445 return;
446
447 if (state == EVADE_STATE_NONE)
448 _evadeTimer = 0;
449
450 _evadeState = state;
451
452 // Propagate evade state to controlled units (pets, guardians, etc.)
454 {
455 for (Unit* controlled : _owner->m_Controlled)
456 controlled->GetCombatManager().SetEvadeState(state);
457 }
458}
void SetEvadeState(EvadeState state)
Definition CombatManager.cpp:442

References _evadeState, _evadeTimer, _owner, EVADE_STATE_NONE, Unit::HasUnitFlag(), Unit::m_Controlled, and UNIT_FLAG_PLAYER_CONTROLLED.

Referenced by HomeMovementGenerator< Creature >::DoFinalize(), HomeMovementGenerator< Creature >::DoInitialize(), and StopEvade().

◆ SetInCombatWith()

bool CombatManager::SetInCombatWith ( Unit who,
bool  addSecondUnitSuppressed = false 
)
215{
216 // Are we already in combat? If yes, refresh pvp combat
218 {
219 existingPvpRef->RefreshTimer();
220 existingPvpRef->Refresh();
221 return true;
222 }
224 {
225 existingPveRef->Refresh();
226 return true;
227 }
228
229 // Otherwise, check validity...
231 return false;
232
233 // ...then create new reference
234 CombatReference* ref;
236 ref = new PvPCombatReference(_owner, who);
237 else
238 ref = new CombatReference(_owner, who);
239
240 if (addSecondUnitSuppressed)
241 ref->Suppress(who);
242
243 // ...and insert it into both managers
244 PutReference(who->GetGUID(), ref);
246
247 // now, sequencing is important - first we update the combat state, which will set both units in combat and do non-AI combat start stuff
248 bool const needSelfAI = UpdateOwnerCombatState();
249 bool const needOtherAI = who->GetCombatManager().UpdateOwnerCombatState();
250
251 // then, we finally notify the AI (if necessary) and let it safely do whatever it feels like
252 if (needSelfAI)
254 if (needOtherAI)
256
257 return IsInCombatWith(who);
258}
void PutReference(ObjectGuid const &guid, CombatReference *ref)
Definition CombatManager.cpp:385
friend struct CombatReference
Definition CombatManager.h:163
static void NotifyAICombat(Unit *me, Unit *other)
Definition CombatManager.cpp:379
bool UpdateOwnerCombatState() const
Definition CombatManager.cpp:409
friend struct PvPCombatReference
Definition CombatManager.h:164
bool IsControlledByPlayer() const
Definition Unit.h:1307
CombatManager & GetCombatManager()
Definition Unit.h:953
auto MapGetValuePtr(M &map, typename M::key_type const &key) -> decltype(AddressOrSelf(map.find(key) ->second))
Definition Containers.h:216
void Suppress(Unit *who)
Definition CombatManager.h:80

References _owner, _pveRefs, _pvpRefs, CanBeginCombat(), CombatReference, Unit::GetCombatManager(), Object::GetGUID(), Unit::IsControlledByPlayer(), IsInCombatWith(), Acore::Containers::MapGetValuePtr(), NotifyAICombat(), PutReference(), PvPCombatReference, CombatReference::Suppress(), and UpdateOwnerCombatState().

Referenced by ThreatManager::AddThreat(), InheritCombatStatesFrom(), and Unit::SetInCombatWith().

◆ StartEvadeTimer()

void CombatManager::StartEvadeTimer ( )
inline
static constexpr uint32 EVADE_TIMER_DURATION
Definition CombatManager.h:108

Referenced by Creature::SetCannotReachTarget().

◆ StopEvade()

void CombatManager::StopEvade ( )

◆ SuppressPvPCombat()

void CombatManager::SuppressPvPCombat ( )
327{
328 for (auto const& pair : _pvpRefs)
329 pair.second->Suppress(_owner);
331 if (UnitAI* ownerAI = _owner->GetAI())
332 ownerAI->JustExitedCombat();
333}

References _owner, _pvpRefs, Unit::GetAI(), and UpdateOwnerCombatState().

Referenced by Unit::CombatStop().

◆ Update()

void CombatManager::Update ( uint32  tdiff)
149{
150 // Update evade timer
151 if (_evadeTimer)
152 {
153 if (_evadeTimer <= tdiff)
154 {
155 _evadeTimer = 0;
156 // Timer expired - trigger evade check via AI
157 if (UnitAI* ai = _owner->GetAI())
158 ai->EvadeTimerExpired();
159 }
160 else
161 _evadeTimer -= tdiff;
162 }
163
164 auto it = _pvpRefs.begin(), end = _pvpRefs.end();
165 while (it != end)
166 {
167 PvPCombatReference* const ref = it->second;
168 if (ref->first == _owner && !ref->Update(tdiff)) // only update if we're the first unit involved (otherwise double decrement)
169 {
170 it = _pvpRefs.erase(it), end = _pvpRefs.end(); // remove it from our refs first to prevent invalidation
171 ref->EndCombat(); // this will remove it from the other side
172 }
173 else
174 ++it;
175 }
176}
bool Update(uint32 tdiff)
Definition CombatManager.cpp:129

References _evadeTimer, _owner, _pvpRefs, CombatReference::EndCombat(), CombatReference::first, Unit::GetAI(), CombatReference::second, and PvPCombatReference::Update().

Referenced by Unit::Update().

◆ UpdateOwnerCombatState()

bool CombatManager::UpdateOwnerCombatState ( ) const
private
410{
411 bool const combatState = HasCombat();
412 if (combatState == _owner->IsInCombat())
413 return false;
414
415 if (combatState)
416 {
419 if (!_owner->IsCreature())
421
422 if (Player* player = _owner->ToPlayer())
423 sScriptMgr->OnPlayerEnterCombat(player, GetAnyTarget());
424 }
425 else
426 {
429 if (!_owner->IsCreature())
431
432 if (Player* player = _owner->ToPlayer())
433 sScriptMgr->OnPlayerLeaveCombat(player);
434 }
435
436 if (Unit* master = _owner->GetCharmerOrOwner())
437 master->UpdatePetCombatState();
438
439 return true;
440}
#define sScriptMgr
Definition ScriptMgr.h:740
@ UNIT_FLAG_IN_COMBAT
Definition UnitDefines.h:276
bool HasCombat() const
Definition CombatManager.h:127
Unit * GetAnyTarget() const
Definition CombatManager.cpp:203
Player * ToPlayer()
Definition Object.h:202
bool IsCreature() const
Definition Object.h:205
virtual void AtExitCombat()
Definition Unit.cpp:7584
virtual void AtDisengage()
Definition Unit.h:966
Unit * GetCharmerOrOwner() const
Definition Unit.h:1286
virtual void AtEnterCombat()
Definition Unit.h:961
virtual void AtEngage(Unit *target)
Definition Unit.cpp:7589
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:748
bool IsInCombat() const
Definition Unit.h:935
void RemoveUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:749

References _owner, Unit::AtDisengage(), Unit::AtEngage(), Unit::AtEnterCombat(), Unit::AtExitCombat(), GetAnyTarget(), Unit::GetCharmerOrOwner(), HasCombat(), Object::IsCreature(), Unit::IsInCombat(), Unit::RemoveUnitFlag(), Unit::SetUnitFlag(), sScriptMgr, Object::ToPlayer(), and UNIT_FLAG_IN_COMBAT.

Referenced by CombatReference::EndCombat(), CombatReference::Refresh(), SetInCombatWith(), CombatReference::SuppressFor(), and SuppressPvPCombat().

Friends And Related Symbol Documentation

◆ CombatReference

friend struct CombatReference
friend

Referenced by SetInCombatWith().

◆ PvPCombatReference

friend struct PvPCombatReference
friend

Referenced by SetInCombatWith().

Member Data Documentation

◆ _evadeState

EvadeState CombatManager::_evadeState
private

Referenced by SetEvadeState().

◆ _evadeTimer

uint32 CombatManager::_evadeTimer
private

Referenced by SetEvadeState(), StopEvade(), and Update().

◆ _owner

◆ _pveRefs

◆ _pvpRefs

◆ EVADE_REGEN_DELAY

constexpr uint32 CombatManager::EVADE_REGEN_DELAY = 5 * IN_MILLISECONDS
staticconstexpr

◆ EVADE_TIMER_DURATION

constexpr uint32 CombatManager::EVADE_TIMER_DURATION = 10 * IN_MILLISECONDS
staticconstexpr

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