Core/Spells: Implemented SPELL_ATTR6_ABSORB_CANNOT_BE_IGNORE
Port From (https://github.com/TrinityCore/TrinityCore/commit/8c85bdb24e9b3b1163f636c737140933306cd01f)
This commit is contained in:
@@ -1814,7 +1814,7 @@ namespace Framework.Constants
|
||||
DelayCombatTimerDuringCast = 0x80000, // Delay Combat Timer During Cast
|
||||
AuraIconOnlyForCasterLimit10 = 0x100000, // Aura Icon Only For Caster (Limit 10) (Client Only)
|
||||
ShowMechanicAsCombatText = 0x200000, // Show Mechanic As Combat Text (Client Only)
|
||||
AbsorbCannotBeIgnore = 0x400000, /*Nyi*/ // Absorb Cannot Be Ignore
|
||||
AbsorbCannotBeIgnore = 0x400000, // Absorb Cannot Be Ignore
|
||||
TapsImmediately = 0x800000, /*Nyi*/ // Taps Immediately
|
||||
CanTargetUntargetable = 0x1000000, // Can Target Untargetable
|
||||
DoesntResetSwingTimerIfInstant = 0x2000000, // Doesn'T Reset Swing Timer If Instant
|
||||
|
||||
@@ -2600,6 +2600,7 @@ namespace Game.Entities
|
||||
if (currentAbsorb < 0)
|
||||
currentAbsorb = 0;
|
||||
|
||||
|
||||
uint tempAbsorb = (uint)currentAbsorb;
|
||||
|
||||
// This aura type is used both by Spirit of Redemption (death not really prevented, must grant all credit immediately) and Cheat Death (death prevented)
|
||||
@@ -3364,7 +3365,6 @@ namespace Game.Entities
|
||||
spell.CallScriptOnResistAbsorbCalculateHandlers(damageInfo, ref resistedDamage, ref absorbIgnoringDamage);
|
||||
|
||||
damageInfo.ResistDamage(resistedDamage);
|
||||
damageInfo.ModifyDamage(-absorbIgnoringDamage);
|
||||
|
||||
// We're going to call functions which can modify content of the list during iteration over it's elements
|
||||
// Let's copy the list so we can prevent iterator invalidation
|
||||
@@ -3391,6 +3391,9 @@ namespace Game.Entities
|
||||
if (currentAbsorb < 0)
|
||||
currentAbsorb = 0;
|
||||
|
||||
if (!absorbAurEff.GetSpellInfo().HasAttribute(SpellAttr6.AbsorbCannotBeIgnore))
|
||||
damageInfo.ModifyDamage(-absorbIgnoringDamage);
|
||||
|
||||
uint tempAbsorb = (uint)currentAbsorb;
|
||||
|
||||
bool defaultPrevented = false;
|
||||
@@ -3400,7 +3403,6 @@ namespace Game.Entities
|
||||
|
||||
if (!defaultPrevented)
|
||||
{
|
||||
|
||||
// absorb must be smaller than the damage itself
|
||||
currentAbsorb = MathFunctions.RoundToInterval(ref currentAbsorb, 0, damageInfo.GetDamage());
|
||||
|
||||
@@ -3420,6 +3422,9 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
if (!absorbAurEff.GetSpellInfo().HasAttribute(SpellAttr6.AbsorbCannotBeIgnore))
|
||||
damageInfo.ModifyDamage(absorbIgnoringDamage);
|
||||
|
||||
if (currentAbsorb != 0)
|
||||
{
|
||||
SpellAbsorbLog absorbLog = new();
|
||||
@@ -3456,6 +3461,9 @@ namespace Game.Entities
|
||||
if (currentAbsorb < 0)
|
||||
currentAbsorb = 0;
|
||||
|
||||
if (!absorbAurEff.GetSpellInfo().HasAttribute(SpellAttr6.AbsorbCannotBeIgnore))
|
||||
damageInfo.ModifyDamage(-absorbIgnoringDamage);
|
||||
|
||||
uint tempAbsorb = (uint)currentAbsorb;
|
||||
|
||||
bool defaultPrevented = false;
|
||||
@@ -3494,6 +3502,9 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
if (!absorbAurEff.GetSpellInfo().HasAttribute(SpellAttr6.AbsorbCannotBeIgnore))
|
||||
damageInfo.ModifyDamage(absorbIgnoringDamage);
|
||||
|
||||
if (currentAbsorb != 0)
|
||||
{
|
||||
SpellAbsorbLog absorbLog = new();
|
||||
@@ -3509,8 +3520,6 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
damageInfo.ModifyDamage(absorbIgnoringDamage);
|
||||
|
||||
// split damage auras - only when not damaging self
|
||||
if (damageInfo.GetVictim() != damageInfo.GetAttacker())
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user