Core/Spells: Implement AURA_REMOVE_BY_INTERRUPT to provide aura scripts with more information when removing by Unit::RemoveAurasWithInterruptFlags
This commit is contained in:
@@ -2563,7 +2563,7 @@ namespace Game.Entities
|
||||
|
||||
Aura aura = app.Value.GetBase();
|
||||
if (!aura.IsPassive() && !aura.IsDeathPersistent())
|
||||
_UnapplyAura(app, AuraRemoveMode.ByDeath);
|
||||
_UnapplyAura(app, AuraRemoveMode.Death);
|
||||
}
|
||||
|
||||
foreach (var pair in GetOwnedAuras())
|
||||
@@ -2573,7 +2573,7 @@ namespace Game.Entities
|
||||
continue;
|
||||
|
||||
if (!aura.IsPassive() && !aura.IsDeathPersistent())
|
||||
RemoveOwnedAura(pair, AuraRemoveMode.ByDeath);
|
||||
RemoveOwnedAura(pair, AuraRemoveMode.Death);
|
||||
}
|
||||
}
|
||||
public void RemoveMovementImpairingAuras()
|
||||
@@ -3193,7 +3193,7 @@ namespace Game.Entities
|
||||
&& !(Convert.ToBoolean(flag & (uint)SpellAuraInterruptFlags.Move) && HasAuraTypeWithAffectMask(AuraType.CastWhileWalking, aura.GetSpellInfo())))
|
||||
{
|
||||
uint removedAuras = m_removedAurasCount;
|
||||
RemoveAura(aura);
|
||||
RemoveAura(aura, AuraRemoveMode.Interrupt);
|
||||
if (m_removedAurasCount > removedAuras + 1)
|
||||
i = 0;
|
||||
}
|
||||
|
||||
@@ -37,10 +37,11 @@ namespace Game.Spells
|
||||
{
|
||||
None = 0,
|
||||
Default = 1, // scripted remove, remove by stack with aura with different ids and sc aura remove
|
||||
Interrupt,
|
||||
Cancel,
|
||||
EnemySpell, // dispel and absorb aura destroy
|
||||
Expire, // aura duration has ended
|
||||
ByDeath
|
||||
Death
|
||||
}
|
||||
public enum AuraFlags
|
||||
{
|
||||
@@ -1162,7 +1163,7 @@ namespace Game.Spells
|
||||
{
|
||||
if (spell < 0)
|
||||
target.RemoveAurasDueToSpell((uint)-spell);
|
||||
else if (removeMode != AuraRemoveMode.ByDeath)
|
||||
else if (removeMode != AuraRemoveMode.Death)
|
||||
target.CastSpell(target, (uint)spell, true, null, null, GetCasterGUID());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4468,7 +4468,7 @@ namespace Game.Spells
|
||||
if (!mode.HasAnyFlag(AuraEffectHandleModes.Real))
|
||||
return;
|
||||
|
||||
if (apply || aurApp.GetRemoveMode() != AuraRemoveMode.ByDeath)
|
||||
if (apply || aurApp.GetRemoveMode() != AuraRemoveMode.Death)
|
||||
return;
|
||||
|
||||
Unit caster = GetCaster();
|
||||
|
||||
@@ -298,7 +298,10 @@ namespace Scripts.Spells.Hunter
|
||||
|
||||
void OnRemove(AuraEffect aurEff, AuraEffectHandleModes mode)
|
||||
{
|
||||
if (GetTargetApplication().GetRemoveMode() != AuraRemoveMode.Default || !GetTarget().HasAura(SpellIds.MisdirectionProc))
|
||||
if (GetTargetApplication().GetRemoveMode() = AuraRemoveMode.Default || GetTargetApplication().GetRemoveMode() == AuraRemoveMode.Interrupt)
|
||||
return;
|
||||
|
||||
if (!GetTarget().HasAura(SpellIds.MisdirectionProc))
|
||||
GetTarget().ResetRedirectThreat();
|
||||
}
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ namespace Scripts.Spells.Warlock
|
||||
return;
|
||||
|
||||
AuraRemoveMode removeMode = GetTargetApplication().GetRemoveMode();
|
||||
if (removeMode != AuraRemoveMode.ByDeath || !IsExpired())
|
||||
if (removeMode != AuraRemoveMode.Death || !IsExpired())
|
||||
return;
|
||||
|
||||
if (GetCaster().ToPlayer().isHonorOrXPTarget(GetTarget()))
|
||||
|
||||
Reference in New Issue
Block a user