#include "CombatManager.h"
◆ 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{
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]
◆ CanBeginCombat()
| bool CombatManager::CanBeginCombat |
( |
Unit const * |
a, |
|
|
Unit const * |
b |
|
) |
| |
|
static |
37{
38
39
40
41 if (a == b)
42 return false;
43
44 if (!a->IsInWorld() || !b->IsInWorld())
45 return false;
46
47 if (!a->IsAlive() || !b->IsAlive())
48 return false;
49
50 if (a->GetMap() != b->GetMap())
51 return false;
52
53 if (!a->InSamePhase(b))
54 return false;
56 return false;
58 return false;
59
60 if (a->IsCombatDisallowed() || b->IsCombatDisallowed())
61 return false;
62
63 if ((a->IsFriendlyTo(b) || b->IsFriendlyTo(a)) && !a->IsHostileTo(b) && !b->IsHostileTo(a))
64 return false;
67
69 return false;
70 return true;
71}
@ UNIT_STATE_EVADE
Definition UnitDefines.h:194
@ UNIT_STATE_IN_FLIGHT
Definition UnitDefines.h:181
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 |
◆ EndAllCombat()
| void CombatManager::EndAllCombat |
( |
| ) |
|
|
inline |
◆ EndAllPvECombat()
| void CombatManager::EndAllPvECombat |
( |
| ) |
|
◆ EndAllPvPCombat()
| void CombatManager::EndAllPvPCombat |
( |
| ) |
|
◆ EndCombatBeyondRange()
| void CombatManager::EndCombatBeyondRange |
( |
float |
range, |
|
|
bool |
includingPvP = false |
|
) |
| |
298{
300 while (it != end)
301 {
304 {
307 }
308 else
309 ++it;
310 }
311
312 if (!includingPvP)
313 return;
314
316 while (it2 != end2)
317 {
320 {
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 |
◆ GetEvadeState()
◆ GetOwner()
| Unit * CombatManager::GetOwner |
( |
| ) |
const |
|
inline |
◆ GetPvECombatRefs()
◆ GetPvPCombatRefs()
◆ HasCombat()
| bool CombatManager::HasCombat |
( |
| ) |
const |
|
inline |
◆ 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{
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{
277 {
279 {
280 Unit* target = ref.second->GetOther(who);
283 continue;
285 }
286 }
288 {
289 Unit* target = ref.second->GetOther(who);
292 continue;
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
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 |
◆ IsInCombatWith() [1/2]
| bool CombatManager::IsInCombatWith |
( |
ObjectGuid const & |
who | ) |
const |
◆ IsInCombatWith() [2/2]
| bool CombatManager::IsInCombatWith |
( |
Unit const * |
who | ) |
const |
◆ IsInEvadeMode()
| bool CombatManager::IsInEvadeMode |
( |
| ) |
const |
|
inline |
◆ NotifyAICombat()
| void CombatManager::NotifyAICombat |
( |
Unit * |
me, |
|
|
Unit * |
other |
|
) |
| |
|
staticprivate |
◆ operator=()
◆ PurgeReference()
| void CombatManager::PurgeReference |
( |
ObjectGuid const & |
guid, |
|
|
bool |
pvp |
|
) |
| |
|
private |
◆ PutReference()
387{
389 {
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());
393 }
394 else
395 {
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 |
( |
| ) |
|
◆ RevalidateCombat()
| void CombatManager::RevalidateCombat |
( |
| ) |
|
354{
355
356
357 auto endInvalidCombat = [this](auto& refs)
358 {
359 std::vector<ObjectGuid> invalid;
360 for (auto const& [guid, ref] : refs)
362 invalid.push_back(guid);
363
367 ref->EndCombat();
368 };
369
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 | ) |
|
◆ SetInCombatWith()
| bool CombatManager::SetInCombatWith |
( |
Unit * |
who, |
|
|
bool |
addSecondUnitSuppressed = false |
|
) |
| |
215{
216
218 {
219
221 return true;
222 existingPvpRef->RefreshTimer();
223 existingPvpRef->Refresh();
224 return true;
225 }
227 {
228 existingPveRef->Refresh();
229 return true;
230 }
231
232
234 return false;
235
236
240 else
242
243 if (addSecondUnitSuppressed)
245
246
249
250
253
254
255 if (needSelfAI)
257 if (needOtherAI)
259
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 |
◆ StopEvade()
| void CombatManager::StopEvade |
( |
| ) |
|
◆ SuppressPvPCombat()
| void CombatManager::SuppressPvPCombat |
( |
| ) |
|
◆ Update()
| void CombatManager::Update |
( |
uint32 |
tdiff | ) |
|
◆ UpdateOwnerCombatState()
| bool CombatManager::UpdateOwnerCombatState |
( |
| ) |
const |
|
private |
411{
414 return false;
415
416 if (combatState)
417 {
422
425 }
426 else
427 {
432
435 }
436
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().
◆ CombatReference
◆ PvPCombatReference
◆ _evadeState
◆ _evadeTimer
| uint32 CombatManager::_evadeTimer |
|
private |
◆ _owner
| Unit* const CombatManager::_owner |
|
private |
Referenced by EndAllPvECombat(), GetAnyTarget(), HasPvECombat(), HasPvECombatWithPlayers(), HasPvPCombat(), InheritCombatStatesFrom(), PutReference(), RevalidateCombat(), SetEvadeState(), SetInCombatWith(), SuppressPvPCombat(), Update(), UpdateOwnerCombatState(), and ~CombatManager().
◆ _pveRefs
Referenced by EndAllPvECombat(), EndCombatBeyondRange(), GetAnyTarget(), HasPvECombat(), HasPvECombatWithPlayers(), InheritCombatStatesFrom(), IsInCombatWith(), PurgeReference(), PutReference(), RevalidateCombat(), SetInCombatWith(), and ~CombatManager().
◆ _pvpRefs
Referenced by EndAllPvPCombat(), EndCombatBeyondRange(), GetAnyTarget(), HasPvPCombat(), InheritCombatStatesFrom(), IsInCombatWith(), PurgeReference(), PutReference(), RestartPvPCombatTimers(), RevalidateCombat(), SetInCombatWith(), SuppressPvPCombat(), Update(), and ~CombatManager().
◆ EVADE_REGEN_DELAY
◆ EVADE_TIMER_DURATION
The documentation for this class was generated from the following files: