79 firstAI->JustExitedCombat();
82 secondAI->JustExitedCombat();
90 bool needFirstAI =
false, needSecondAI =
false;
113 ai->JustExitedCombat();
153 for (
auto const& [guid, ref] :
_pveRefs)
154 if (!ref->IsSuppressedFor(
_owner))
161 for (std::pair<ObjectGuid const, CombatReference*>
const& reference :
_pveRefs)
171 if (!pair.second->IsSuppressedFor(
_owner))
179 if (!pair.second->IsSuppressedFor(
_owner))
180 return pair.second->GetOther(
_owner);
182 if (!pair.second->IsSuppressedFor(
_owner))
183 return pair.second->GetOther(
_owner);
192 existingPvpRef->RefreshTimer();
193 existingPvpRef->Refresh();
198 existingPveRef->Refresh();
213 if (addSecondUnitSuppressed)
249 Unit* target = ref.second->GetOther(who);
258 Unit* target = ref.second->GetOther(who);
300 for (
auto const& [guid, combatRef] :
_pvpRefs)
301 if (!unitFilter || unitFilter(combatRef->GetOther(
_owner)))
302 combatRef->Suppress(
_owner);
306 ownerAI->JustExitedCombat();
315 std::vector<CombatReference*> combatReferencesToRemove;
316 combatReferencesToRemove.reserve(
_pveRefs.size());
317 for (
auto const& [guid, combatRef] :
_pveRefs)
318 if (!unitFilter || unitFilter(combatRef->GetOther(
_owner)))
319 combatReferencesToRemove.push_back(combatRef);
322 combatRef->EndCombat();
356 std::vector<CombatReference*> combatReferencesToRemove;
357 combatReferencesToRemove.reserve(
_pvpRefs.size());
358 for (
auto const& [guid, combatRef] :
_pvpRefs)
359 if (!unitFilter || unitFilter(combatRef->GetOther(
_owner)))
360 combatReferencesToRemove.push_back(combatRef);
363 combatRef->EndCombat();
369 ai->JustEnteredCombat(other);
418 master->UpdatePetCombatState();
@ UNIT_FLAG_PLAYER_CONTROLLED
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
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
static ObjectGuid GetGUID(Object const *o)
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