fix(Core/Spells): Do not add PROC_HIT_NORMAL/PROC_HIT_CRITICAL if damage is fully nullified (#25105)
Co-authored-by: blinkysc <blinkysc@users.noreply.github.com> Co-authored-by: ariel- <ariel-@users.noreply.github.com>
This commit is contained in:
@@ -126,6 +126,28 @@ DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo, uint8 damageIndex)
|
|||||||
m_damageType(DIRECT_DAMAGE), m_attackType(dmgInfo.attackType), m_absorb(dmgInfo.damages[damageIndex].absorb), m_resist(dmgInfo.damages[damageIndex].resist), m_block(dmgInfo.blocked_amount),
|
m_damageType(DIRECT_DAMAGE), m_attackType(dmgInfo.attackType), m_absorb(dmgInfo.damages[damageIndex].absorb), m_resist(dmgInfo.damages[damageIndex].resist), m_block(dmgInfo.blocked_amount),
|
||||||
m_cleanDamage(dmgInfo.cleanDamage), m_hitMask(0)
|
m_cleanDamage(dmgInfo.cleanDamage), m_hitMask(0)
|
||||||
{
|
{
|
||||||
|
switch (dmgInfo.TargetState)
|
||||||
|
{
|
||||||
|
case VICTIMSTATE_IS_IMMUNE:
|
||||||
|
m_hitMask |= PROC_HIT_IMMUNE;
|
||||||
|
break;
|
||||||
|
case VICTIMSTATE_BLOCKS:
|
||||||
|
m_hitMask |= PROC_HIT_FULL_BLOCK;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dmgInfo.HitInfo & (HITINFO_PARTIAL_ABSORB | HITINFO_FULL_ABSORB))
|
||||||
|
m_hitMask |= PROC_HIT_ABSORB;
|
||||||
|
|
||||||
|
if (dmgInfo.HitInfo & HITINFO_FULL_RESIST)
|
||||||
|
m_hitMask |= PROC_HIT_FULL_RESIST;
|
||||||
|
|
||||||
|
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)
|
switch (dmgInfo.hitOutCome)
|
||||||
{
|
{
|
||||||
case MELEE_HIT_MISS:
|
case MELEE_HIT_MISS:
|
||||||
@@ -141,25 +163,19 @@ DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo, uint8 damageIndex)
|
|||||||
m_hitMask |= PROC_HIT_EVADE;
|
m_hitMask |= PROC_HIT_EVADE;
|
||||||
break;
|
break;
|
||||||
case MELEE_HIT_BLOCK:
|
case MELEE_HIT_BLOCK:
|
||||||
m_hitMask |= PROC_HIT_BLOCK;
|
|
||||||
[[fallthrough]];
|
|
||||||
case MELEE_HIT_CRUSHING:
|
case MELEE_HIT_CRUSHING:
|
||||||
case MELEE_HIT_GLANCING:
|
case MELEE_HIT_GLANCING:
|
||||||
case MELEE_HIT_NORMAL:
|
case MELEE_HIT_NORMAL:
|
||||||
m_hitMask |= PROC_HIT_NORMAL;
|
if (!damageNullified)
|
||||||
|
m_hitMask |= PROC_HIT_NORMAL;
|
||||||
break;
|
break;
|
||||||
case MELEE_HIT_CRIT:
|
case MELEE_HIT_CRIT:
|
||||||
m_hitMask |= PROC_HIT_CRITICAL;
|
if (!damageNullified)
|
||||||
|
m_hitMask |= PROC_HIT_CRITICAL;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dmgInfo.damages[damageIndex].absorb)
|
|
||||||
m_hitMask |= PROC_HIT_ABSORB;
|
|
||||||
|
|
||||||
if (dmgInfo.blocked_amount)
|
|
||||||
m_hitMask |= (dmgInfo.damages[damageIndex].damage == dmgInfo.blocked_amount) ? PROC_HIT_FULL_BLOCK : PROC_HIT_BLOCK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DamageInfo::DamageInfo(SpellNonMeleeDamage const& spellNonMeleeDamage, DamageEffectType damageType, WeaponAttackType attackType, uint32 hitMask)
|
DamageInfo::DamageInfo(SpellNonMeleeDamage const& spellNonMeleeDamage, DamageEffectType damageType, WeaponAttackType attackType, uint32 hitMask)
|
||||||
|
|||||||
Reference in New Issue
Block a user