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)
 
Unit * GetOwner () 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
 
Unit * GetAnyTarget () 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 RestartPvPCombatTimers ()
 
void EndAllPvECombat ()
 
void RevalidateCombat ()
 
void EndAllPvPCombat ()
 
void EndAllCombat ()
 
 CombatManager (CombatManager const &)=delete
 
CombatManager & operator= (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:165
EvadeState _evadeState
Definition CombatManager.h:166
uint32 _evadeTimer
Definition CombatManager.h:167

◆ ~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:169
std::unordered_map< ObjectGuid, CombatReference * > _pveRefs
Definition CombatManager.h:168
std::string ToString() const
Definition ObjectGuid.cpp:49
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:120

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:1086
bool IsGameMaster() const
Definition Player.h:1178
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:7533

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:115

Referenced by UnitAI::EvadeTimerExpired().

◆ EndAllCombat()

void CombatManager::EndAllCombat ( )
inline
void EndAllPvPCombat()
Definition CombatManager.cpp:374
void EndAllPvECombat()
Definition CombatManager.cpp:344

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

◆ EndAllPvECombat()

void CombatManager::EndAllPvECombat ( )
345{
346 // cannot have threat without combat
349 while (!_pveRefs.empty())
350 _pveRefs.begin()->second->EndCombat();
351}
void RemoveMeFromThreatLists()
Definition ThreatManager.cpp:831
void ClearAllThreat()
Definition ThreatManager.cpp:617
ThreatManager & GetThreatMgr()
Definition Unit.h:965

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

Referenced by Unit::ClearInCombat(), and Unit::CombatStop().

◆ EndAllPvPCombat()

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

References _pvpRefs.

◆ EndCombatBeyondRange()

void CombatManager::EndCombatBeyondRange ( float  range,
bool  includingPvP = false 
)
298{
299 auto it = _pveRefs.begin(), end = _pveRefs.end();
300 while (it != end)
301 {
302 CombatReference* const ref = it->second;
303 if (!ref->first->IsWithinDistInMap(ref->second, range))
304 {
305 it = _pveRefs.erase(it), end = _pveRefs.end(); // erase manually here to avoid iterator invalidation
306 ref->EndCombat();
307 }
308 else
309 ++it;
310 }
311
312 if (!includingPvP)
313 return;
314
315 auto it2 = _pvpRefs.begin(), end2 = _pvpRefs.end();
316 while (it2 != end2)
317 {
318 CombatReference* const ref = it2->second;
319 if (!ref->first->IsWithinDistInMap(ref->second, range))
320 {
321 it2 = _pvpRefs.erase(it2), end2 = _pvpRefs.end(); // erase manually here to avoid iterator invalidation
322 ref->EndCombat();
323 }
324 else
325 ++it2;
326 }
327}
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1386
Definition CombatManager.h:66
Unit *const second
Definition CombatManager.h:68
Unit *const first
Definition CombatManager.h:67
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
124{ return _evadeState; }

◆ GetOwner()

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

◆ GetPvECombatRefs()

◆ GetPvPCombatRefs()

◆ HasCombat()

bool CombatManager::HasCombat ( ) const
inline
133{ 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)
274{
275 CombatManager const& mgr = who->GetCombatManager();
276 for (auto& ref : mgr._pveRefs)
277 {
278 if (!IsInCombatWith(ref.first))
279 {
280 Unit* target = ref.second->GetOther(who);
283 continue;
284 SetInCombatWith(target);
285 }
286 }
287 for (auto& ref : mgr._pvpRefs)
288 {
289 Unit* target = ref.second->GetOther(who);
292 continue;
293 SetInCombatWith(target);
294 }
295}
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition UnitDefines.h:260
Definition CombatManager.h:110
bool SetInCombatWith(Unit *who, bool addSecondUnitSuppressed=false)
Definition CombatManager.cpp:214
bool IsInCombatWith(ObjectGuid const &who) const
Definition CombatManager.cpp:263
Definition Unit.h:670
bool HasUnitFlag(UnitFlags flags) const
Definition Unit.h:753
bool IsImmuneToNPC() const
Definition Unit.h:943
bool IsImmuneToPC() const
Definition Unit.h:941

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
126{ 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
269{
270 return IsInCombatWith(who->GetGUID());
271}

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

◆ IsInEvadeMode()

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

References EVADE_STATE_NONE.

◆ NotifyAICombat()

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

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
403{
404 if (pvp)
405 _pvpRefs.erase(guid);
406 else
407 _pveRefs.erase(guid);
408}

References _pveRefs, and _pvpRefs.

Referenced by CombatReference::EndCombat().

◆ PutReference()

void CombatManager::PutReference ( ObjectGuid const &  guid,
CombatReference *  ref 
)
private
387{
388 if (ref->_isPvP)
389 {
390 auto& inMap = _pvpRefs[guid];
391 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());
392 inMap = static_cast<PvPCombatReference*>(ref);
393 }
394 else
395 {
396 auto& inMap = _pveRefs[guid];
397 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());
398 inMap = ref;
399 }
400}
bool const _isPvP
Definition CombatManager.h:69
Definition CombatManager.h:95

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

Referenced by SetInCombatWith().

◆ RestartPvPCombatTimers()

void CombatManager::RestartPvPCombatTimers ( )
339{
340 for (auto const& pair : _pvpRefs)
341 pair.second->RefreshTimer();
342}

References _pvpRefs.

Referenced by Unit::Kill(), and Unit::setDeathState().

◆ RevalidateCombat()

void CombatManager::RevalidateCombat ( )
354{
355 // EndCombat's combat-exit handling (AI, scripts, aura removal) can end or create more of our refs, so no
356 // iterator may be held across it: collect the invalid guids first, then look each one up again
357 auto endInvalidCombat = [this](auto& refs)
358 {
359 std::vector<ObjectGuid> invalid;
360 for (auto const& [guid, ref] : refs)
361 if (!CanBeginCombat(_owner, ref->GetOther(_owner)))
362 invalid.push_back(guid);
363
364 for (ObjectGuid const& guid : invalid)
365 if (auto* ref = Acore::Containers::MapGetValuePtr(refs, guid))
366 if (!CanBeginCombat(_owner, ref->GetOther(_owner)))
367 ref->EndCombat();
368 };
369
370 endInvalidCombat(_pveRefs);
371 endInvalidCombat(_pvpRefs);
372}
static bool CanBeginCombat(Unit const *a, Unit const *b)
Definition CombatManager.cpp:36
Definition ObjectGuid.h:121
auto MapGetValuePtr(M &map, typename M::key_type const &key) -> decltype(AddressOrSelf(map.find(key) ->second))
Definition Containers.h:216
Definition AsioHacksFwd.h:47

References _owner, _pveRefs, _pvpRefs, CanBeginCombat(), and Acore::Containers::MapGetValuePtr().

Referenced by Unit::RemoveCharmedBy().

◆ SetEvadeState()

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

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 // a ref kept alive past a death runs out on its own - don't extend it or pull the corpse back into combat
220 if (!_owner->IsAlive() || !who->IsAlive())
221 return true;
222 existingPvpRef->RefreshTimer();
223 existingPvpRef->Refresh();
224 return true;
225 }
227 {
228 existingPveRef->Refresh();
229 return true;
230 }
231
232 // Otherwise, check validity...
234 return false;
235
236 // ...then create new reference
237 CombatReference* ref;
239 ref = new PvPCombatReference(_owner, who);
240 else
241 ref = new CombatReference(_owner, who);
242
243 if (addSecondUnitSuppressed)
244 ref->Suppress(who);
245
246 // ...and insert it into both managers
247 PutReference(who->GetGUID(), ref);
249
250 // now, sequencing is important - first we update the combat state, which will set both units in combat and do non-AI combat start stuff
251 bool const needSelfAI = UpdateOwnerCombatState();
252 bool const needOtherAI = who->GetCombatManager().UpdateOwnerCombatState();
253
254 // then, we finally notify the AI (if necessary) and let it safely do whatever it feels like
255 if (needSelfAI)
257 if (needOtherAI)
259
260 return IsInCombatWith(who);
261}
void PutReference(ObjectGuid const &guid, CombatReference *ref)
Definition CombatManager.cpp:386
friend struct CombatReference
Definition CombatManager.h:171
static void NotifyAICombat(Unit *me, Unit *other)
Definition CombatManager.cpp:380
bool UpdateOwnerCombatState() const
Definition CombatManager.cpp:410
friend struct PvPCombatReference
Definition CombatManager.h:172
bool IsAlive() const
Definition Unit.h:1812
bool IsControlledByPlayer() const
Definition Unit.h:1324
CombatManager & GetCombatManager()
Definition Unit.h:967
void Suppress(Unit *who)
Definition CombatManager.h:86

References _owner, _pveRefs, _pvpRefs, CanBeginCombat(), CombatReference, Unit::GetCombatManager(), Object::GetGUID(), Unit::IsAlive(), 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:114

Referenced by Creature::SetCannotReachTarget().

◆ StopEvade()

void CombatManager::StopEvade ( )

◆ SuppressPvPCombat()

void CombatManager::SuppressPvPCombat ( )
330{
331 for (auto const& pair : _pvpRefs)
332 pair.second->Suppress(_owner);
334 if (UnitAI* ownerAI = _owner->GetAI())
335 ownerAI->JustExitedCombat();
336}

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

Referenced by Unit::ClearInCombat(), and 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
411{
412 bool const combatState = HasCombat();
413 if (combatState == _owner->IsInCombat())
414 return false;
415
416 if (combatState)
417 {
420 if (!_owner->IsCreature())
422
423 if (Player* player = _owner->ToPlayer())
424 sScriptMgr->OnPlayerEnterCombat(player, GetAnyTarget());
425 }
426 else
427 {
430 if (!_owner->IsCreature())
432
433 if (Player* player = _owner->ToPlayer())
434 sScriptMgr->OnPlayerLeaveCombat(player);
435 }
436
437 if (Unit* master = _owner->GetCharmerOrOwner())
438 master->UpdatePetCombatState();
439
440 return true;
441}
#define sScriptMgr
Definition ScriptMgr.h:769
@ UNIT_FLAG_IN_COMBAT
Definition UnitDefines.h:276
bool HasCombat() const
Definition CombatManager.h:133
Unit * GetAnyTarget() const
Definition CombatManager.cpp:203
Player * ToPlayer()
Definition Object.h:208
bool IsCreature() const
Definition Object.h:211
virtual void AtExitCombat()
Definition Unit.cpp:7383
virtual void AtDisengage()
Definition Unit.h:980
Unit * GetCharmerOrOwner() const
Definition Unit.h:1303
virtual void AtEnterCombat()
Definition Unit.h:975
virtual void AtEngage(Unit *target)
Definition Unit.cpp:7389
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:754
bool IsInCombat() const
Definition Unit.h:949
void RemoveUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:755

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: