Combat/Threat: Split ThreatManager::NotifyDisengaged off from ThreatManager::ClearAllThreat. NotifyDisengaged signifies intent to clear the engagement flag, and should only be called from AI.

Port From (https://github.com/TrinityCore/TrinityCore/commit/38d7c1530a65a7ff1bd10775c4a35269b2416538)
This commit is contained in:
hondacrx
2021-12-24 20:15:10 -05:00
parent 3c38758f09
commit 3cf7f6b831
8 changed files with 15 additions and 12 deletions
+2 -5
View File
@@ -224,18 +224,15 @@ namespace Game.AI
me.RemoveAurasOnEvade();
// sometimes bosses stuck in combat?
me.GetThreatManager().ClearAllThreat();
me.CombatStop(true);
me.GetThreatManager().NotifyDisengaged();
me.SetLootRecipient(null);
me.ResetPlayerDamageReq();
me.SetLastDamagedTime(0);
me.SetCannotReachTarget(false);
me.DoNotReacquireTarget();
if (me.IsInEvadeMode())
return false;
return true;
return !me.IsInEvadeMode();
}
public CypherStrings VisualizeBoundary(int duration, Unit owner = null, bool fill = false)
+2 -2
View File
@@ -48,15 +48,15 @@ namespace Game.AI
{
me.GetMotionMaster().MoveIdle();
me.CombatStop(true);
me.GetThreatManager().ClearAllThreat();
me.GetThreatManager().NotifyDisengaged();
return;
}
Log.outDebug(LogFilter.Unit, "Guard entry: {0} enters evade mode.", me.GetEntry());
me.RemoveAllAuras();
me.GetThreatManager().ClearAllThreat();
me.CombatStop(true);
me.GetThreatManager().NotifyDisengaged();
me.GetMotionMaster().MoveTargetedHome();
}
@@ -134,8 +134,8 @@ namespace Game.AI
public override void EnterEvadeMode(EvadeReason why = EvadeReason.Other)
{
me.RemoveAllAuras();
me.GetThreatManager().ClearAllThreat();
me.CombatStop(true);
me.GetThreatManager().NotifyDisengaged();
me.SetLootRecipient(null);
if (HasEscortState(EscortState.Escorting))
@@ -126,8 +126,8 @@ namespace Game.AI
return;
me.RemoveAllAuras();
me.GetThreatManager().ClearAllThreat();
me.CombatStop(true);
me.GetThreatManager().NotifyDisengaged();
me.SetLootRecipient(null);
me.SetCannotReachTarget(false);
me.DoNotReacquireTarget();
+8
View File
@@ -396,6 +396,14 @@ namespace Game.Combat
_myThreatListEntries.FirstOrDefault().Value.UnregisterAndFree();
while (!_myThreatListEntries.Empty());
}
}
/// <summary>
/// THIS SHOULD ONLY BE CALLED FROM A CREATURE'S AI (typically in EnterEvadeMode)
/// notify the unit that the AI has disengaged
/// </summary>
public void NotifyDisengaged()
{
// note: i don't really like having this here
// (maybe engage flag should be in creature ai? it's inherently an AI property...)
if (_owner.IsEngaged())
-1
View File
@@ -1405,7 +1405,6 @@ namespace Game.Entities
if (s != DeathState.Alive && s != DeathState.JustRespawned)
{
CombatStop();
GetThreatManager().ClearAllThreat();
if (IsNonMeleeSpellCast(false))
InterruptNonMeleeSpells(false);
-1
View File
@@ -216,7 +216,6 @@ namespace Game.Maps
if (creature.IsInCombat())
{
creature.CombatStop();
creature.GetThreatManager().ClearAllThreat();
if (creature.IsAIEnabled())
creature.GetAI().EnterEvadeMode();
}
+1 -1
View File
@@ -44,8 +44,8 @@ namespace Scripts.Pets
if (!me.IsAlive())
return;
me.GetThreatManager().ClearAllThreat();
me.CombatStop(true);
me.GetThreatManager().NotifyDisengaged();
me.ResetPlayerDamageReq();
}
}