Core/Auras: Enable DoEffectCalcDamageAndHealing aura script hook for initial absorb amount calculation

This commit is contained in:
Shauren
2025-11-28 11:15:32 +01:00
parent 233a063eba
commit 43d48cf1a7
2 changed files with 5 additions and 3 deletions

View File

@@ -7617,7 +7617,7 @@ int32 Unit::SpellAbsorbBonusDone(Unit* victim, SpellInfo const* spellProto, int3
return absorbamount;
int32 doneTotal = 0;
float doneTotalMod = 1.f;
float doneTotalMod = SpellAbsorbPctDone(victim, spellProto);
int32 doneAdvertisedBenefit = SpellBaseAbsorbBonusDone(spellProto->GetSchoolMask());
doneAdvertisedBenefit += victim->GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_HEALING, spellProto->GetSchoolMask());
@@ -7664,7 +7664,8 @@ int32 Unit::SpellAbsorbBonusDone(Unit* victim, SpellInfo const* spellProto, int3
doneTotal += int32(doneAdvertisedBenefit * coeff * stack);
}
doneTotalMod = SpellAbsorbPctDone(victim, spellProto);
if (aurEff)
aurEff->GetBase()->CallScriptCalcDamageAndHealingHandlers(aurEff, aurEff->GetBase()->GetApplicationOfTarget(victim->GetGUID()), victim, absorbamount, doneTotal, doneTotalMod);
float absorbAmount = float(absorbamount + doneTotal) * doneTotalMod;

View File

@@ -1727,13 +1727,14 @@ public:
HookList<EffectCalcCritChanceHandler> DoEffectCalcCritChance;
#define AuraEffectCalcCritChanceFn(F, I, N) EffectCalcCritChanceHandler(&F, I, N)
// executed when aura effect calculates damage or healing for dots and hots
// executed when aura effect calculates damage or healing for dots and hots or initial absorb aura amount calculation
// example: DoEffectCalcDamageAndHealing += AuraEffectCalcDamageFn(class::function, EffectIndexSpecifier, EffectAuraNameSpecifier);
// example: DoEffectCalcDamageAndHealing += AuraEffectCalcHealingFn(class::function, EffectIndexSpecifier, EffectAuraNameSpecifier);
// where function is: void function(AuraEffect const* aurEff, Unit* victim, int32& damageOrHealing, int32& flatMod, float& pctMod);
HookList<EffectCalcDamageAndHealingHandler> DoEffectCalcDamageAndHealing;
#define AuraEffectCalcDamageFn(F, I, N) EffectCalcDamageAndHealingHandler(&F, I, N)
#define AuraEffectCalcHealingFn(F, I, N) EffectCalcDamageAndHealingHandler(&F, I, N)
#define AuraEffectCalcAbsorbFn(F, I) EffectCalcDamageAndHealingHandler(&F, I, SPELL_AURA_SCHOOL_ABSORB)
// executed when absorb aura effect is going to reduce damage
// example: OnEffectAbsorb += AuraEffectAbsorbFn(class::function, EffectIndexSpecifier);