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 ( )
142{
143 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());
144 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());
145}
#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 if (a->IsFriendlyTo(b) || b->IsFriendlyTo(a))
63 return false;
66 // ...neither of the two units must be (owned by) a player with .gm on
67 if ((playerA && playerA->IsGameMaster()) || (playerB && playerB->IsGameMaster()))
68 return false;
69 return true;
70}
@ 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:7635

References Unit::GetCharmerOrOwnerPlayerOrPlayerItself(), WorldObject::GetMap(), Unit::HasUnitState(), WorldObject::InSamePhase(), Unit::IsAlive(), Unit::IsCombatDisallowed(), Unit::IsFriendlyTo(), Player::IsGameMaster(), 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:372
void EndAllPvECombat()
Definition CombatManager.cpp:334

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

◆ EndAllPvECombat()

void CombatManager::EndAllPvECombat ( )
335{
336 // cannot have threat without combat
339 while (!_pveRefs.empty())
340 _pveRefs.begin()->second->EndCombat();
341}
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 ( )
373{
374 while (!_pvpRefs.empty())
375 _pvpRefs.begin()->second->EndCombat();
376}

References _pvpRefs.

◆ EndCombatBeyondRange()

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

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

Referenced by Player::Update().

◆ GetAnyTarget()

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

References _owner, _pveRefs, and _pvpRefs.

Referenced by UpdateOwnerCombatState().

◆ GetEvadeState()

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

◆ GetOwner()

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

◆ GetPvECombatRefs()

◆ GetPvPCombatRefs()

std::unordered_map< ObjectGuid, PvPCombatReference * > const & CombatManager::GetPvPCombatRefs ( ) const
inline

◆ HasCombat()

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

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

◆ HasPvECombat()

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

References _owner, and _pveRefs.

◆ HasPvECombatWithPlayers()

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

References _owner, and _pveRefs.

◆ HasPvPCombat()

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

References _owner, and _pvpRefs.

◆ InheritCombatStatesFrom()

void CombatManager::InheritCombatStatesFrom ( Unit const *  who)
270{
271 CombatManager const& mgr = who->GetCombatManager();
272 for (auto& ref : mgr._pveRefs)
273 {
274 if (!IsInCombatWith(ref.first))
275 {
276 Unit* target = ref.second->GetOther(who);
279 continue;
280 SetInCombatWith(target);
281 }
282 }
283 for (auto& ref : mgr._pvpRefs)
284 {
285 Unit* target = ref.second->GetOther(who);
288 continue;
289 SetInCombatWith(target);
290 }
291}
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition UnitDefines.h:260
Definition CombatManager.h:104
bool SetInCombatWith(Unit *who, bool addSecondUnitSuppressed=false)
Definition CombatManager.cpp:213
bool IsInCombatWith(ObjectGuid const &who) const
Definition CombatManager.cpp:259
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
260{
261 return (_pveRefs.find(guid) != _pveRefs.end()) || (_pvpRefs.find(guid) != _pvpRefs.end());
262}

References _pveRefs, and _pvpRefs.

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

◆ IsInCombatWith() [2/2]

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

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
379{
380 if (UnitAI* ai = me->GetAI())
381 ai->JustEnteredCombat(other);
382}
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
401{
402 if (pvp)
403 _pvpRefs.erase(guid);
404 else
405 _pveRefs.erase(guid);
406}

References _pveRefs, and _pvpRefs.

Referenced by CombatReference::EndCombat().

◆ PutReference()

void CombatManager::PutReference ( ObjectGuid const &  guid,
CombatReference ref 
)
private
385{
386 if (ref->_isPvP)
387 {
388 auto& inMap = _pvpRefs[guid];
389 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());
390 inMap = static_cast<PvPCombatReference*>(ref);
391 }
392 else
393 {
394 auto& inMap = _pveRefs[guid];
395 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());
396 inMap = ref;
397 }
398}
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 ( )
344{
345 auto it = _pveRefs.begin(), end = _pveRefs.end();
346 while (it != end)
347 {
348 CombatReference* const ref = it->second;
350 {
351 it = _pveRefs.erase(it), end = _pveRefs.end(); // erase manually here to avoid iterator invalidation
352 ref->EndCombat();
353 }
354 else
355 ++it;
356 }
357
358 auto it2 = _pvpRefs.begin(), end2 = _pvpRefs.end();
359 while (it2 != end2)
360 {
361 CombatReference* const ref = it2->second;
363 {
364 it2 = _pvpRefs.erase(it2), end2 = _pvpRefs.end(); // erase manually here to avoid iterator invalidation
365 ref->EndCombat();
366 }
367 else
368 ++it2;
369 }
370}
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.

◆ SetEvadeState()

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

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 
)
214{
215 // Are we already in combat? If yes, refresh pvp combat
217 {
218 existingPvpRef->RefreshTimer();
219 existingPvpRef->Refresh();
220 return true;
221 }
223 {
224 existingPveRef->Refresh();
225 return true;
226 }
227
228 // Otherwise, check validity...
230 return false;
231
232 // ...then create new reference
233 CombatReference* ref;
235 ref = new PvPCombatReference(_owner, who);
236 else
237 ref = new CombatReference(_owner, who);
238
239 if (addSecondUnitSuppressed)
240 ref->Suppress(who);
241
242 // ...and insert it into both managers
243 PutReference(who->GetGUID(), ref);
245
246 // now, sequencing is important - first we update the combat state, which will set both units in combat and do non-AI combat start stuff
247 bool const needSelfAI = UpdateOwnerCombatState();
248 bool const needOtherAI = who->GetCombatManager().UpdateOwnerCombatState();
249
250 // then, we finally notify the AI (if necessary) and let it safely do whatever it feels like
251 if (needSelfAI)
253 if (needOtherAI)
255
256 return IsInCombatWith(who);
257}
void PutReference(ObjectGuid const &guid, CombatReference *ref)
Definition CombatManager.cpp:384
friend struct CombatReference
Definition CombatManager.h:163
static void NotifyAICombat(Unit *me, Unit *other)
Definition CombatManager.cpp:378
bool UpdateOwnerCombatState() const
Definition CombatManager.cpp:408
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 ( )
326{
327 for (auto const& pair : _pvpRefs)
328 pair.second->Suppress(_owner);
330 if (UnitAI* ownerAI = _owner->GetAI())
331 ownerAI->JustExitedCombat();
332}

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

Referenced by Unit::CombatStop().

◆ Update()

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

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
409{
410 bool const combatState = HasCombat();
411 if (combatState == _owner->IsInCombat())
412 return false;
413
414 if (combatState)
415 {
418 if (!_owner->IsCreature())
420
421 if (Player* player = _owner->ToPlayer())
422 sScriptMgr->OnPlayerEnterCombat(player, GetAnyTarget());
423 }
424 else
425 {
428 if (!_owner->IsCreature())
430 }
431
432 if (Unit* master = _owner->GetCharmerOrOwner())
433 master->UpdatePetCombatState();
434
435 return true;
436}
#define sScriptMgr
Definition ScriptMgr.h:734
@ UNIT_FLAG_IN_COMBAT
Definition UnitDefines.h:276
bool HasCombat() const
Definition CombatManager.h:127
Unit * GetAnyTarget() const
Definition CombatManager.cpp:202
Player * ToPlayer()
Definition Object.h:202
bool IsCreature() const
Definition Object.h:205
virtual void AtExitCombat()
Definition Unit.cpp:7486
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:7491
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: