aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/Spell.cpp
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-11-16 02:39:15 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2017-12-30 22:56:48 +0100
commit5bcf14cdb8a7725bb3481fdc46289d13176b6ae0 (patch)
treea8a1c94ffe3721e80fe574e05baa55cefb9452cc /src/server/game/Spells/Spell.cpp
parent9d0dfeb425c3253765b823b1d3043bdebea4ece0 (diff)
Core/Unit: damage immune improvements (9f5df023b746d324588f175e264c62205b69e165 follow up)
- Handling checked in sniffs: Spell 63710 Void Barrier vs 49143 Frost Strike * Send spell miss immune only if spell consists of damage effects - Checked with 348 Immolate: * No packets sent if damage immune, aura is applied normally Also... who the fuck uses 0 to compare against pointers (cherry picked from commit ca1c4525c7da320da2c0a55bfd803879e3cf60b2) Core/Unit: fix build Ctrl-S failure (cherry picked from commit f3bdd705c0e3ab28585406ae8e08da44a09b14df)
Diffstat (limited to 'src/server/game/Spells/Spell.cpp')
-rw-r--r--src/server/game/Spells/Spell.cpp35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index f683d0fe1cd..a98a65cfd16 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -2510,12 +2510,30 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
// Fill base damage struct (unitTarget - is real spell target)
SpellNonMeleeDamage damageInfo(caster, unitTarget, m_spellInfo->Id, m_SpellVisual, m_spellSchoolMask, m_castId);
- // Add bonuses and fill damageInfo struct
- caster->CalculateSpellDamageTaken(&damageInfo, m_damage, m_spellInfo, m_attackType, target->crit);
- caster->DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
+ // Check damage immunity
+ if (unitTarget->IsImmunedToDamage(m_spellInfo))
+ {
+ hitMask = PROC_HIT_IMMUNE;
+ m_damage = 0;
- hitMask |= createProcHitMask(&damageInfo, missInfo);
- procVictim |= PROC_FLAG_TAKEN_DAMAGE;
+ // no packet found in sniffs
+ }
+ else
+ {
+ // Add bonuses and fill damageInfo struct
+ caster->CalculateSpellDamageTaken(&damageInfo, m_damage, m_spellInfo, m_attackType, target->crit);
+ caster->DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb);
+
+ hitMask |= createProcHitMask(&damageInfo, missInfo);
+ procVictim |= PROC_FLAG_TAKEN_DAMAGE;
+
+ m_damage = damageInfo.damage;
+
+ caster->DealSpellDamage(&damageInfo, true);
+
+ // Send log damage message to client
+ caster->SendSpellNonMeleeDamageLog(&damageInfo);
+ }
// Do triggers for unit
if (canEffectTrigger)
@@ -2527,13 +2545,6 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))
caster->ToPlayer()->CastItemCombatSpell(spellDamageInfo);
}
-
- m_damage = damageInfo.damage;
-
- caster->DealSpellDamage(&damageInfo, true);
-
- // Send log damage message to client
- caster->SendSpellNonMeleeDamageLog(&damageInfo);
}
// Passive spell hits/misses or active spells only misses (only triggers)
else