From c4f0ad601217c4b43248c18cc89ce4ba19a57ea0 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 9 Feb 2021 13:31:59 -0500 Subject: [PATCH] Core/Auras: Handle SPELL_AURA_MOD_SCHOOL_MASK_DAMAGE_FROM_CASTER Port From (https://github.com/TrinityCore/TrinityCore/commit/e11067a39861214bde940bdc0e5b11daf7c326a0) --- Source/Framework/Constants/Spells/SpellAuraConst.cs | 2 +- Source/Game/Entities/Unit/Unit.Combat.cs | 9 ++++++--- Source/Game/Entities/Unit/Unit.Spells.cs | 9 ++++++--- Source/Game/Spells/Auras/AuraEffect.cs | 1 + Source/Game/Spells/SpellManager.cs | 1 + 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Source/Framework/Constants/Spells/SpellAuraConst.cs b/Source/Framework/Constants/Spells/SpellAuraConst.cs index 614804de0..ba6844d7c 100644 --- a/Source/Framework/Constants/Spells/SpellAuraConst.cs +++ b/Source/Framework/Constants/Spells/SpellAuraConst.cs @@ -291,7 +291,7 @@ namespace Framework.Constants ModImmuneAuraApplySchool = 267, Unk268 = 268, // Old ModAttackPowerOfStatPercent. Unused 4.3.4 ModIgnoreTargetResist = 269, - ModSchoolMaskDamageFromCaster = 270, // NYI + ModSchoolMaskDamageFromCaster = 270, ModSpellDamageFromCaster = 271, IgnoreMeleeReset = 272, XRay = 273, diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index 3c3b05e50..6e95125a1 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -2910,11 +2910,14 @@ namespace Game.Entities if (spellProto != null) { // From caster spells + TakenTotalMod *= GetTotalAuraMultiplier(AuraType.ModSchoolMaskDamageFromCaster, aurEff => + { + return aurEff.GetCasterGUID() == attacker.GetGUID() && (aurEff.GetMiscValue() & (int)spellProto.GetSchoolMask()) != 0; + }); + TakenTotalMod *= GetTotalAuraMultiplier(AuraType.ModSpellDamageFromCaster, aurEff => { - if (aurEff.GetCasterGUID() == attacker.GetGUID() && aurEff.IsAffectingSpell(spellProto)) - return true; - return false; + return aurEff.GetCasterGUID() == attacker.GetGUID() && aurEff.IsAffectingSpell(spellProto); }); // Mod damage from spell mechanic diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index 0d87e48fd..69ef6f06b 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -299,11 +299,14 @@ namespace Game.Entities TakenTotalMod *= GetTotalAuraMultiplierByMiscMask(AuraType.ModDamagePercentTaken, (uint)spellProto.GetSchoolMask()); // From caster spells + TakenTotalMod *= GetTotalAuraMultiplier(AuraType.ModSchoolMaskDamageFromCaster, aurEff => + { + return aurEff.GetCasterGUID() == caster.GetGUID() && (aurEff.GetMiscValue() & (int)spellProto.GetSchoolMask()) != 0; + }); + TakenTotalMod *= GetTotalAuraMultiplier(AuraType.ModSpellDamageFromCaster, aurEff => { - if (aurEff.GetCasterGUID() == caster.GetGUID() && aurEff.IsAffectingSpell(spellProto)) - return true; - return false; + return aurEff.GetCasterGUID() == caster.GetGUID() && aurEff.IsAffectingSpell(spellProto); }); int TakenAdvertisedBenefit = SpellBaseDamageBonusTaken(spellProto.GetSchoolMask()); diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index 3dc208268..2b54d8dcd 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -649,6 +649,7 @@ namespace Game.Spells if (!eventInfo.GetProcSpell() || eventInfo.GetProcSpell().GetCastTime() == 0) return false; break; + case AuraType.ModSchoolMaskDamageFromCaster: case AuraType.ModSpellDamageFromCaster: // Compare casters if (GetCasterGUID() != eventInfo.GetActor().GetGUID()) diff --git a/Source/Game/Spells/SpellManager.cs b/Source/Game/Spells/SpellManager.cs index f5a51af68..e51a30c78 100644 --- a/Source/Game/Spells/SpellManager.cs +++ b/Source/Game/Spells/SpellManager.cs @@ -3480,6 +3480,7 @@ namespace Game.Entities case AuraType.ModMeleeHaste3: case AuraType.ModAttackerMeleeHitChance: case AuraType.ProcTriggerSpellWithValue: + case AuraType.ModSchoolMaskDamageFromCaster: case AuraType.ModSpellDamageFromCaster: case AuraType.AbilityIgnoreAurastate: case AuraType.ModInvisibility: