コード例 #1
0
ファイル: DataEnum.cs プロジェクト: wxl-007/ShadowDota
 public static bool check(this HurtHitClass flags, HurtHitClass totest)
 {
     return((flags & totest) == totest);
 }
コード例 #2
0
ファイル: DataEnum.cs プロジェクト: wxl-007/ShadowDota
 public static HurtHitClass set(this HurtHitClass flags, HurtHitClass totest)
 {
     return(flags | totest);
 }
コード例 #3
0
ファイル: InjuryOp.cs プロジェクト: wxl-007/ShadowDota
        ///
        /// 带AI的伤害技能的实现
        ///      但是要不要减伤
        ///
        ///     〖物理伤害〗_敌=〖物理攻击力〗_敌×(1-〖物理免伤〗_自  )
        ///     〖法术伤害〗_敌=〖法术攻击力〗_敌×(1-〖法术免伤〗_自  )
        /// 〖伤害〗_敌=〖物理伤害〗_敌+〖法术伤害〗_敌
        ///
        /// Self 对 target的技能伤害
        /// 只考虑了输出值,并不考虑后续的反弹,护盾等情况
        ///
        public Dmg toTargetDmg(NPCData self, NPCData target, EffectConfigData cfg)
        {
            ///-------- 物理伤害强度------
            ///先计算自己的物理伤害,
            float bphyselfhit = Physical_Hit(self, cfg);

            ///-------- 魔法伤害强度 -------
            /// 先计算自己的魔法伤害,
            float bMagselfhit = Magical_Hit(self, cfg);

            ///-------- NPC的总攻击强度,是cfg.EffectClass 类型-------
            float hit = bphyselfhit + bMagselfhit + cfg.Param3;

            HurtHitClass hitType = (HurtHitClass)Enum.ToObject(typeof(HurtHitClass), cfg.Param7);

            ///
            /// --------- 检测 不计算减伤 -----------
            ///
            bool forbidArmer = hitType.check(HurtHitClass.Forbid_Armer);

            float dmg = 0f;

            if (forbidArmer)
            {
                dmg = hit;
            }
            else
            {
                switch (cfg.EffectClass)
                {
                case SkillTypeClass.Holly:
                    //神圣伤害不减少伤害
                    dmg = hit;
                    break;

                case SkillTypeClass.Magical:
                    float magenemyavoid = Magical_Avoid(target, self);
                    dmg = hit * (1.0f - magenemyavoid);
                    break;

                case SkillTypeClass.Physical:
                    float avdenemyratio = Physical_Avoid(target, self);
                    dmg = hit * (1.0f - avdenemyratio);
                    break;
                }
            }

            dmg = dmg * (1 + cfg.Param4 * Consts.OneThousand);

            /// --------- 暴击伤害 ----------
            ///
            float critialRatio = CriticalRatio(self, target, cfg);
            bool  isCri        = PseudoRandom.getInstance().happen(critialRatio);

            if (isCri)
            {
                float addtion = AdditionRatio(self, cfg);
                dmg = dmg * addtion;
            }

            Dmg final = new Dmg()
            {
                dmgValue   = dmg,
                dmgType    = cfg.EffectClass,
                isCritical = isCri,
                hitCls     = hitType,
            };

            return(final);
        }