Core/Spells: do not add PROC_HIT_NORMAL/PROC_HIT_CRITICAL flags if damage is fully nullified

This commit is contained in:
hondacrx
2017-12-11 11:09:18 -05:00
parent 3760bfcdbb
commit 9db6771d92
+10 -1
View File
@@ -261,7 +261,7 @@ namespace Game.Entities
break; break;
} }
if (m_absorb != 0) if (dmgInfo.HitInfo.HasAnyFlag(HitInfo.PartialAbsorb | HitInfo.FullAbsorb))
m_hitMask |= ProcFlagsHit.Absorb; m_hitMask |= ProcFlagsHit.Absorb;
if (dmgInfo.HitInfo.HasAnyFlag(HitInfo.FullResist)) if (dmgInfo.HitInfo.HasAnyFlag(HitInfo.FullResist))
@@ -270,6 +270,7 @@ namespace Game.Entities
if (m_block != 0) if (m_block != 0)
m_hitMask |= ProcFlagsHit.Block; m_hitMask |= ProcFlagsHit.Block;
bool damageNullified = dmgInfo.HitInfo.HasAnyFlag(HitInfo.FullAbsorb | HitInfo.FullResist) || m_hitMask.HasAnyFlag(ProcFlagsHit.Immune | ProcFlagsHit.FullBlock);
switch (dmgInfo.hitOutCome) switch (dmgInfo.hitOutCome)
{ {
case MeleeHitOutcome.Miss: case MeleeHitOutcome.Miss:
@@ -287,9 +288,11 @@ namespace Game.Entities
case MeleeHitOutcome.Crushing: case MeleeHitOutcome.Crushing:
case MeleeHitOutcome.Glancing: case MeleeHitOutcome.Glancing:
case MeleeHitOutcome.Normal: case MeleeHitOutcome.Normal:
if (!damageNullified)
m_hitMask |= ProcFlagsHit.Normal; m_hitMask |= ProcFlagsHit.Normal;
break; break;
case MeleeHitOutcome.Crit: case MeleeHitOutcome.Crit:
if (!damageNullified)
m_hitMask |= ProcFlagsHit.Critical; m_hitMask |= ProcFlagsHit.Critical;
break; break;
default: default:
@@ -335,7 +338,10 @@ namespace Game.Entities
m_resist += amount; m_resist += amount;
m_damage -= amount; m_damage -= amount;
if (m_damage == 0) if (m_damage == 0)
{
m_hitMask |= ProcFlagsHit.FullResist; m_hitMask |= ProcFlagsHit.FullResist;
m_hitMask &= ~(ProcFlagsHit.Normal | ProcFlagsHit.Critical);
}
} }
void BlockDamage(uint amount) void BlockDamage(uint amount)
{ {
@@ -344,7 +350,10 @@ namespace Game.Entities
m_damage -= amount; m_damage -= amount;
m_hitMask |= ProcFlagsHit.Block; m_hitMask |= ProcFlagsHit.Block;
if (m_damage == 0) if (m_damage == 0)
{
m_hitMask |= ProcFlagsHit.FullBlock; m_hitMask |= ProcFlagsHit.FullBlock;
m_hitMask &= ~(ProcFlagsHit.Normal | ProcFlagsHit.Critical);
}
} }
public Unit GetAttacker() { return m_attacker; } public Unit GetAttacker() { return m_attacker; }