Core/Creature: Clear creature focus after an evade

Port From (https://github.com/TrinityCore/TrinityCore/commit/a7cf209428fae5b025a0dcdc6b00bcef12175ed6)
This commit is contained in:
hondacrx
2022-01-05 23:55:47 -05:00
parent 654c9743e3
commit 72fa0cd450
3 changed files with 16 additions and 13 deletions
+1
View File
@@ -314,6 +314,7 @@ namespace Game.AI
me.SetLastDamagedTime(0);
me.SetCannotReachTarget(false);
me.DoNotReacquireSpellFocusTarget();
me.SetTarget(ObjectGuid.Empty);
me.GetSpellHistory().ResetAllCooldowns();
EngagementOver();
+11 -6
View File
@@ -1101,7 +1101,7 @@ namespace Game.Entities
{
return $"{base.GetDebugInfo()}\nAIName: {GetAIName()} ScriptName: {GetScriptName()} WaypointPath: {GetWaypointPath()} SpawnId: {GetSpawnId()}";
}
public override bool IsMovementPreventedByCasting()
{
// first check if currently a movement allowed channel is active and we're not casting
@@ -2903,11 +2903,11 @@ namespace Game.Entities
public void SetSpellFocus(Spell focusSpell, WorldObject target)
{
// already focused
if (_spellFocusInfo.Spell != null)
// Pointer validation and checking for a already existing focus
if (_spellFocusInfo.Spell != null || focusSpell == null)
return;
// Prevent dead/feigning death creatures from setting a focus target, so they won't turn
// Prevent dead / feign death creatures from setting a focus target
if (!IsAlive() || HasUnitFlag2(UnitFlags2.FeignDeath) || HasAuraType(AuraType.FeignDeath))
return;
@@ -2925,7 +2925,8 @@ namespace Game.Entities
if (spellInfo.HasAura(AuraType.ControlVehicle))
return;
if ((!target || target == this) && focusSpell.GetCastTime() == 0) // instant cast, untargeted (or self-targeted) spell doesn't need any facing updates
// instant non-channeled casts and non-target spells don't need facing updates
if (target == null && (focusSpell.GetCastTime() == 0 && !spellInfo.IsChanneled()))
return;
// store pre-cast values for target and orientation (used to later restore)
@@ -3042,7 +3043,11 @@ namespace Game.Entities
_spellFocusInfo.Delay = 0;
}
public void DoNotReacquireSpellFocusTarget() { _spellFocusInfo.Delay = 0; }
public void DoNotReacquireSpellFocusTarget()
{
_spellFocusInfo.Delay = 0;
_spellFocusInfo.Spell = null;
}
public ulong GetSpawnId() { return m_spawnId; }
+4 -7
View File
@@ -3994,13 +3994,10 @@ namespace Game.Spells
if (m_UniqueTargetInfo.Count == 1 && m_UniqueGOTargetInfo.Empty())
{
if (target.TargetGUID != unitCaster.GetGUID())
{
Creature creatureCaster = unitCaster.ToCreature();
if (creatureCaster != null)
if (!creatureCaster.HasSpellFocus())
creatureCaster.SetSpellFocus(this, Global.ObjAccessor.GetWorldObject(creatureCaster, target.TargetGUID));
}
Creature creatureCaster = unitCaster.ToCreature();
if (creatureCaster != null)
if (!creatureCaster.HasSpellFocus(this))
creatureCaster.SetSpellFocus(this, Global.ObjAccessor.GetWorldObject(creatureCaster, target.TargetGUID));
}
}