diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-11-05 01:52:38 -0300 |
---|---|---|
committer | joschiwald <joschiwald.trinity@gmail.com> | 2017-12-10 18:25:47 +0100 |
commit | eb2b0151a47788c7dcd8a813098c5509b91c09dd (patch) | |
tree | 6c175354ce98f425bf2ec77deb6f9d4fc4538e0c | |
parent | d5f94a24e29f0070be8fdbb504ca71e37b4fdc3b (diff) |
Core/Spells: do not add PROC_HIT_NORMAL/PROC_HIT_CRITICAL flags if damage is fully nullified
- Aka: full absorbs/full resists/full blocks/immune
(cherry picked from commit 2e457b3be418ce75b0e0ca901e84ebcdaf02ad18)
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f5275357733..7608bf62a21 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -124,7 +124,7 @@ DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo) break; } - if (m_absorb) + if (dmgInfo.HitInfo & (HITINFO_PARTIAL_ABSORB | HITINFO_FULL_ABSORB)) m_hitMask |= PROC_HIT_ABSORB; if (dmgInfo.HitInfo & HITINFO_FULL_RESIST) @@ -133,6 +133,8 @@ DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo) if (m_block) m_hitMask |= PROC_HIT_BLOCK; + bool const damageNullified = (dmgInfo.HitInfo & (HITINFO_FULL_ABSORB | HITINFO_FULL_RESIST)) != 0 || + (m_hitMask & (PROC_HIT_IMMUNE | PROC_HIT_FULL_BLOCK)) != 0; switch (dmgInfo.hitOutCome) { case MELEE_HIT_MISS: @@ -150,10 +152,12 @@ DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo) case MELEE_HIT_CRUSHING: case MELEE_HIT_GLANCING: case MELEE_HIT_NORMAL: - m_hitMask |= PROC_HIT_NORMAL; + if (!damageNullified) + m_hitMask |= PROC_HIT_NORMAL; break; case MELEE_HIT_CRIT: - m_hitMask |= PROC_HIT_CRITICAL; + if (!damageNullified) + m_hitMask |= PROC_HIT_CRITICAL; break; default: break; @@ -191,7 +195,10 @@ void DamageInfo::ResistDamage(uint32 amount) m_resist += amount; m_damage -= amount; if (!m_damage) + { m_hitMask |= PROC_HIT_FULL_RESIST; + m_hitMask &= ~(PROC_HIT_NORMAL | PROC_HIT_CRITICAL); + } } void DamageInfo::BlockDamage(uint32 amount) @@ -201,7 +208,10 @@ void DamageInfo::BlockDamage(uint32 amount) m_damage -= amount; m_hitMask |= PROC_HIT_BLOCK; if (!m_damage) + { m_hitMask |= PROC_HIT_FULL_BLOCK; + m_hitMask &= ~(PROC_HIT_NORMAL | PROC_HIT_CRITICAL); + } } uint32 DamageInfo::GetHitMask() const |