aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-11-05 01:52:38 -0300
committerjoschiwald <joschiwald.trinity@gmail.com>2017-12-10 18:25:47 +0100
commiteb2b0151a47788c7dcd8a813098c5509b91c09dd (patch)
tree6c175354ce98f425bf2ec77deb6f9d4fc4538e0c
parentd5f94a24e29f0070be8fdbb504ca71e37b4fdc3b (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.cpp16
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