コード例 #1
0
ファイル: Unit.Fields.cs プロジェクト: kinkonwow/CypherCore
        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;
            }
        }
コード例 #2
0
        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;
            }
        }