From b08f686ac5f37f7a79a0ff6a37499ea32c8e3f54 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 11 Mar 2018 14:55:45 -0400 Subject: [PATCH] Core/Spells: proc spells after damage apply, not before. --- Source/Game/Entities/Unit/Unit.Combat.cs | 4 ++-- Source/Game/Spells/Auras/AuraEffect.cs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index 5f42d3994..08eac1486 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -585,11 +585,11 @@ namespace Game.Entities DealDamageMods(victim, ref damageInfo.damage, ref damageInfo.absorb); SendAttackStateUpdate(damageInfo); + DealMeleeDamage(damageInfo, true); + DamageInfo dmgInfo = new DamageInfo(damageInfo); ProcSkillsAndAuras(damageInfo.target, damageInfo.procAttacker, damageInfo.procVictim, ProcFlagsSpellType.None, ProcFlagsSpellPhase.None, dmgInfo.GetHitMask(), null, dmgInfo, null); - DealMeleeDamage(damageInfo, true); - if (IsTypeId(TypeId.Player)) Log.outDebug(LogFilter.Unit, "AttackerStateUpdate: (Player) {0} attacked {1} (TypeId: {2}) for {3} dmg, absorbed {4}, blocked {5}, resisted {6}.", GetGUID().ToString(), victim.GetGUID().ToString(), victim.GetTypeId(), damageInfo.damage, damageInfo.absorb, damageInfo.blocked_amount, damageInfo.resist); diff --git a/Source/Game/Spells/Auras/AuraEffect.cs b/Source/Game/Spells/Auras/AuraEffect.cs index 29c1f18e7..8797008bf 100644 --- a/Source/Game/Spells/Auras/AuraEffect.cs +++ b/Source/Game/Spells/Auras/AuraEffect.cs @@ -5362,9 +5362,9 @@ namespace Game.Spells SpellPeriodicAuraLogInfo pInfo = new SpellPeriodicAuraLogInfo(this, damage, overkill, absorb, resist, 0.0f, crit); - caster.ProcSkillsAndAuras(target, procAttacker, procVictim, ProcFlagsSpellType.Damage, ProcFlagsSpellPhase.None, hitMask, null, damageInfo, null); - caster.DealDamage(target, damage, cleanDamage, DamageEffectType.DOT, GetSpellInfo().GetSchoolMask(), GetSpellInfo(), true); + + caster.ProcSkillsAndAuras(target, procAttacker, procVictim, ProcFlagsSpellType.Damage, ProcFlagsSpellPhase.None, hitMask, null, damageInfo, null); target.SendPeriodicAuraLog(pInfo); } @@ -5451,12 +5451,11 @@ namespace Game.Spells procVictim |= ProcFlags.TakenDamage; } - if (caster.IsAlive()) - caster.ProcSkillsAndAuras(target, procAttacker, procVictim, ProcFlagsSpellType.Damage, ProcFlagsSpellPhase.None, hitMask, null, damageInfo, null); - int new_damage = (int)caster.DealDamage(target, damage, cleanDamage, DamageEffectType.DOT, GetSpellInfo().GetSchoolMask(), GetSpellInfo(), false); if (caster.IsAlive()) { + caster.ProcSkillsAndAuras(target, procAttacker, procVictim, ProcFlagsSpellType.Damage, ProcFlagsSpellPhase.None, hitMask, null, damageInfo, null); + float gainMultiplier = GetSpellEffectInfo().CalcValueMultiplier(caster); uint heal = (caster.SpellHealingBonusDone(caster, GetSpellInfo(), (uint)(new_damage * gainMultiplier), DamageEffectType.DOT, GetSpellEffectInfo(), GetBase().GetStackAmount())); @@ -5750,10 +5749,11 @@ namespace Game.Spells spellTypeMask |= ProcFlagsSpellType.Damage; } + caster.DealSpellDamage(damageInfo, true); + DamageInfo dotDamageInfo = new DamageInfo(damageInfo, DamageEffectType.DOT, WeaponAttackType.BaseAttack, hitMask); caster.ProcSkillsAndAuras(target, procAttacker, procVictim, spellTypeMask, ProcFlagsSpellPhase.None, hitMask, null, dotDamageInfo, null); - caster.DealSpellDamage(damageInfo, true); caster.SendSpellNonMeleeDamageLog(damageInfo); }