79 firstAI->JustExitedCombat();
82 secondAI->JustExitedCombat();
90 bool needFirstAI =
false, needSecondAI =
false;
113 ai->JustExitedCombat();
157 for (
auto const& [guid, ref] :
_pveRefs)
158 if (!ref->IsSuppressedFor(
_owner))
165 for (std::pair<ObjectGuid const, CombatReference*>
const& reference :
_pveRefs)
175 if (!pair.second->IsSuppressedFor(
_owner))
183 if (!pair.second->IsSuppressedFor(
_owner))
184 return pair.second->GetOther(
_owner);
186 if (!pair.second->IsSuppressedFor(
_owner))
187 return pair.second->GetOther(
_owner);
196 existingPvpRef->RefreshTimer();
197 existingPvpRef->Refresh();
202 existingPveRef->Refresh();
217 if (addSecondUnitSuppressed)
253 Unit* target = ref.second->GetOther(who);
262 Unit* target = ref.second->GetOther(who);
304 for (
auto const& [guid, combatRef] :
_pvpRefs)
305 if (!unitFilter || unitFilter(combatRef->GetOther(
_owner)))
306 combatRef->Suppress(
_owner);
310 ownerAI->JustExitedCombat();
319 std::vector<CombatReference*> combatReferencesToRemove;
320 combatReferencesToRemove.reserve(
_pveRefs.size());
321 for (
auto const& [guid, combatRef] :
_pveRefs)
322 if (!unitFilter || unitFilter(combatRef->GetOther(
_owner)))
323 combatReferencesToRemove.push_back(combatRef);
326 combatRef->EndCombat();
360 std::vector<CombatReference*> combatReferencesToRemove;
361 combatReferencesToRemove.reserve(
_pvpRefs.size());
362 for (
auto const& [guid, combatRef] :
_pvpRefs)
363 if (!unitFilter || unitFilter(combatRef->GetOther(
_owner)))
364 combatReferencesToRemove.push_back(combatRef);
367 combatRef->EndCombat();
373 ai->JustEnteredCombat(other);
422 master->UpdatePetCombatState();
@ UNIT_FLAG_PLAYER_CONTROLLED
ObjectGuid const & GetGUID() const
void SuppressPvPCombat(UnitFilter *unitFilter=nullptr)
void EndAllPvECombat(UnitFilter *unitFilter=nullptr)
std::unordered_map< ObjectGuid, PvPCombatReference * > _pvpRefs
void PutReference(ObjectGuid const &guid, CombatReference *ref)
static bool CanBeginCombat(Unit const *a, Unit const *b)
Unit * GetAnyTarget() const
void InheritCombatStatesFrom(Unit const *who)
friend struct CombatReference
std::unordered_map< ObjectGuid, CombatReference * > _pveRefs
void Update(uint32 tdiff)
void EndCombatBeyondRange(float range, bool includingPvP=false)
bool HasPvECombat() const
CombatManager(Unit *owner)
static void NotifyAICombat(Unit *me, Unit *other)
bool HasPvECombatWithPlayers() const
bool UpdateOwnerCombatState() const
bool HasPvPCombat() const
bool(Unit const *otherUnit) UnitFilter
friend struct PvPCombatReference
bool SetInCombatWith(Unit *who, bool addSecondUnitSuppressed=false)
bool IsInCombatWith(ObjectGuid const &who) const
void EndAllPvPCombat(UnitFilter *unitFilter=nullptr)
void PurgeReference(ObjectGuid const &guid, bool pvp)
std::string ToString() const
bool IsGameMaster() const
void RemoveMeFromThreatLists(bool(*unitFilter)(Unit const *otherUnit))
void ClearThreat(Unit *target)
ThreatManager & GetThreatManager()
virtual void AtExitCombat()
virtual void AtEngage(Unit *)
bool HasUnitFlag(UnitFlags flags) const
virtual void AtEnterCombat()
virtual void AtDisengage()
bool IsImmuneToNPC() const
Unit * GetCharmerOrOwner() const
bool HasUnitState(const uint32 f) const
bool IsControlledByPlayer() const
bool IsCombatDisallowed() const
CombatManager & GetCombatManager()
void SetUnitFlag(UnitFlags flags)
bool IsImmuneToPC() const
void RemoveUnitFlag(UnitFlags flags)
bool InSamePhase(PhaseShift const &phaseShift) const
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsFriendlyTo(WorldObject const *target) const
auto MapGetValuePtr(M &map, typename M::key_type const &key)
void SuppressFor(Unit *who)
Unit * GetOther(Unit const *me) const
bool Update(uint32 tdiff)
static const uint32 PVP_COMBAT_TIMEOUT