public DamageInfo(CalcDamageInfo dmgInfo) { m_attacker = dmgInfo.attacker; m_victim = dmgInfo.target; m_damage = dmgInfo.damage; m_spellInfo = null; m_schoolMask = (SpellSchoolMask)dmgInfo.damageSchoolMask; m_damageType = DamageEffectType.Direct; m_attackType = dmgInfo.attackType; m_absorb = dmgInfo.absorb; m_resist = dmgInfo.resist; m_block = dmgInfo.blocked_amount; switch (dmgInfo.TargetState) { case VictimState.Immune: m_hitMask |= ProcFlagsHit.Immune; break; case VictimState.Blocks: m_hitMask |= ProcFlagsHit.FullBlock; break; } if (dmgInfo.HitInfo.HasAnyFlag(HitInfo.PartialAbsorb | HitInfo.FullAbsorb)) { m_hitMask |= ProcFlagsHit.Absorb; } if (dmgInfo.HitInfo.HasAnyFlag(HitInfo.FullResist)) { m_hitMask |= ProcFlagsHit.FullResist; } if (m_block != 0) { m_hitMask |= ProcFlagsHit.Block; } bool damageNullified = dmgInfo.HitInfo.HasAnyFlag(HitInfo.FullAbsorb | HitInfo.FullResist) || m_hitMask.HasAnyFlag(ProcFlagsHit.Immune | ProcFlagsHit.FullBlock); switch (dmgInfo.hitOutCome) { case MeleeHitOutcome.Miss: m_hitMask |= ProcFlagsHit.Miss; break; case MeleeHitOutcome.Dodge: m_hitMask |= ProcFlagsHit.Dodge; break; case MeleeHitOutcome.Parry: m_hitMask |= ProcFlagsHit.Parry; break; case MeleeHitOutcome.Evade: m_hitMask |= ProcFlagsHit.Evade; break; case MeleeHitOutcome.Crushing: case MeleeHitOutcome.Glancing: case MeleeHitOutcome.Normal: if (!damageNullified) { m_hitMask |= ProcFlagsHit.Normal; } break; case MeleeHitOutcome.Crit: if (!damageNullified) { m_hitMask |= ProcFlagsHit.Critical; } break; default: break; } }
public DamageInfo(CalcDamageInfo dmgInfo) { m_attacker = dmgInfo.attacker; m_victim = dmgInfo.target; m_damage = dmgInfo.damage; m_spellInfo = null; m_schoolMask = (SpellSchoolMask)dmgInfo.damageSchoolMask; m_damageType = DamageEffectType.Direct; m_attackType = dmgInfo.attackType; m_absorb = dmgInfo.absorb; m_resist = dmgInfo.resist; m_block = dmgInfo.blocked_amount; switch (dmgInfo.TargetState) { case VictimState.Immune: m_hitMask |= ProcFlagsHit.Immune; break; case VictimState.Blocks: m_hitMask |= ProcFlagsHit.FullBlock; break; } if (m_absorb != 0) { m_hitMask |= ProcFlagsHit.Absorb; } if (dmgInfo.HitInfo.HasAnyFlag(HitInfo.FullResist)) { m_hitMask |= ProcFlagsHit.FullResist; } if (m_block != 0) { m_hitMask |= ProcFlagsHit.Block; } switch (dmgInfo.hitOutCome) { case MeleeHitOutcome.Miss: m_hitMask |= ProcFlagsHit.Miss; break; case MeleeHitOutcome.Dodge: m_hitMask |= ProcFlagsHit.Dodge; break; case MeleeHitOutcome.Parry: m_hitMask |= ProcFlagsHit.Parry; break; case MeleeHitOutcome.Evade: m_hitMask |= ProcFlagsHit.Evade; break; default: break; } }