Пример #1
0
        /// <summary>增加武将闪避几率 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleAddDodgeProbability(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
                if (skill.round > 0 && skill.round != 99999)
                {
                    if (!IsTrue(skill.robabilityValues))
                    {
                        continue;
                    }
                    RemoveRoleBuff(m, (int)FightingSkillType.DUCK_PROBABILITY);
                }

                var count = m.dodgeProbability + skill.values;
                if (count < 0)
                {
                    skill.values = m.dodgeProbability; m.dodgeProbability = 0;
                }
                else
                {
                    m.dodgeProbability = count;
                }

                AddRoleBuff(m, skill.round, (int)FightingSkillType.DUCK_PROBABILITY, skill.values, true);
            }
        }
Пример #2
0
        /// <summary>增加武将减伤 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleAddHurtReduce(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
                if (skill.round > 0 && skill.round != 99999)
                {
                    if (!IsTrue(skill.robabilityValues))
                    {
                        continue;
                    }
                    RemoveRoleBuff(m, (int)FightingSkillType.REDUCE_DAMAGE_PERCENTAGE);
                }

                var count = m.hurtReduce + skill.values;
                if (count < 0)
                {
                    skill.values = m.hurtReduce; m.hurtReduce = 0;
                }
                else
                {
                    m.hurtReduce = count;
                }

                AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_DAMAGE_PERCENTAGE, skill.values, true);
            }
        }
Пример #3
0
        /// <summary>增加武将攻击 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleAddAttack(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
                if (skill.round > 0 && skill.round != 99999)
                {
                    if (!IsTrue(skill.robabilityValues))
                    {
                        continue;
                    }
                    RemoveRoleBuff(m, (int)FightingSkillType.INCREASE_ATTACK);
                }

                var count = m.attack + skill.values;
                if (count < 0)
                {
                    skill.values = m.attack; m.attack = 0;
                }
                else
                {
                    m.attack = count;
                }

                AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASE_ATTACK, skill.values, true);
            }
        }
Пример #4
0
        /// <summary>增加武将会心效果 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleAddCritKmowing(List <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
                if (skill.round > 0 && skill.round != 99999)
                {
                    if (!IsTrue(skill.robabilityValues))
                    {
                        continue;
                    }
                    RemoveRoleBuff(m, (int)FightingSkillType.INCREASE_KMOWING);
                }

                var count = m.critAddition + skill.values;
                if (count < 0)
                {
                    skill.values = m.critAddition; m.critAddition = 0;
                }
                else
                {
                    m.critAddition = count;
                }

                AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASE_KMOWING, skill.values, true);
            }
        }
Пример #5
0
        /// <summary> 组装技能效果实体 </summary>
        /// <param name="item">要解析的字符串</param>
        /// <returns>FightSkillEffects</returns>
        private FightSkillEffects BuildSkillEffects(string item)
        {
            var array = item.Split('_');

            if (array.Length < 5 || array.Length > 6)
            {
                return(null);
            }
            var skill = new FightSkillEffects();

            skill.type   = Convert.ToInt32(array[0]);                //技能效果类型
            skill.target = Convert.ToInt32(array[1]);                //技能效果目标 (1=本方 2=敌方)
            skill.range  = Convert.ToInt32(array[2]);                //技能效果范围 (1=单体 2=全体)
            skill.round  = Convert.ToInt32(array[3]);                //技能效果回合数
            skill.values = Convert.ToDouble(array[4]);               //技能效果值
            if (array.Length == 6)                                   //几率类型效果
            {
                skill.robabilityValues = Convert.ToDouble(array[5]); //技能效果几率
            }
            if (skill.robabilityValues <= 0)
            {
                skill.robabilityValues = 100;
            }
            return(skill);
        }
Пример #6
0
        /// <summary>效果类型</summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void EffectType(List <FightRole> list, FightSkillEffects skill)
        {
            if (!list.Any())
            {
                return;
            }
            switch (skill.type)                                                                                           //技能效果类型
            {
            case (int)FightingSkillType.INCREASE_ATTACK: { RoleAddAttack(list, skill); break; }                           //增加攻击

            case (int)FightingSkillType.REDUCE_ATTACK: { RoleReduceAttack(list, skill); break; }                          //减少攻击

            case (int)FightingSkillType.INCREASE_DEFENSE: { RoleAddDefense(list, skill); break; }                         //增加防御

            case (int)FightingSkillType.REDUCE_DEFENSE: { RoleReduceDefense(list, skill); break; }                        //减少防御

            case (int)FightingSkillType.KMOWING_PROBABILITY: { RoleAddCritProbability(list, skill); break; }              //会心几率

            case (int)FightingSkillType.INCREASE_KMOWING: { RoleAddCritKmowing(list, skill); break; }                     //增加会心效果

            case (int)FightingSkillType.DUCK_PROBABILITY: { RoleAddDodgeProbability(list, skill); break; }                //闪避率

            case (int)FightingSkillType.IGNORE_DUCK_PROBABILITY: { RoleProbability(list, skill); break; }                 //无视闪避几率

            case (int)FightingSkillType.INCREASES_DAMAGE_PERCENTAGE: { RoleAddHurtIncrease(list, skill); break; }         //增加伤害百分比

            case (int)FightingSkillType.REDUCE_DAMAGE_PERCENTAGE: { RoleAddHurtReduce(list, skill); break; }              //降低伤害百分比

            case (int)FightingSkillType.DIZZINESS: { RoleDiziness(list, skill); break; }                                  //眩晕

            case (int)FightingSkillType.SEAL: { RoleSeal(list, skill); break; }                                           //封印

            case (int)FightingSkillType.INCREASES_STRENGTH: { RoleAddAngerCount(list, skill); break; }                    //增加气力

            case (int)FightingSkillType.REDUCE_STRENGTH: { RoleReduceAngerCount(list, skill); break; }                    //减少气力

            case (int)FightingSkillType.INCREASES_MYSTERY_PROBABILITY: { RoleAddMysteryProbability(list, skill); break; } //增加奥义触发几率

            case (int)FightingSkillType.INCREASES_YINCOUNT:
            {
                if (!IsTrue(skill.robabilityValues))
                {
                    return;
                }
                AddYinCount(list, skill); break;
            }        //增加印计数

            case (int)FightingSkillType.REDUCE__YINCOUNT:
            {
                if (!IsTrue(skill.robabilityValues))
                {
                    return;
                }
                ReduceYinCount(list, skill); break;
            }        //减少印计数

            default: { break; }
            }
        }
Пример #7
0
        /// <summary> 移除武将身上Buff值 </summary>
        private void RemoveRoleBuffValues(FightRole role, int type, double values)
        {
            var l = new List <FightRole> {
                role
            };
            var skillEffects = new FightSkillEffects {
                type = type, values = values, round = -100
            };                                                                                      //round是负数表示恢复属性影响值

            if (type != (int)FightingSkillType.DIZZINESS && type != (int)FightingSkillType.SEAL)
            {
                EffectType(l, skillEffects);
            }
        }
Пример #8
0
 /// <summary> 封印武将 </summary>
 /// <param name="list">受影响的武将集合</param>
 /// <param name="skill"></param>
 private void RoleSeal(IEnumerable <FightRole> list, FightSkillEffects skill)
 {
     if (skill.round < 0)
     {
         return;
     }
     foreach (var m in list)
     {
         if (!IsTrue(skill.robabilityValues))
         {
             continue;                                   //是否封印
         }
         AddRoleBuff(m, skill.round, (int)FightingSkillType.SEAL, true);
     }
 }
Пример #9
0
        /// <summary>增加武将气力 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleAddAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
#if DEBUG
                XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "增加气力 " + skill.values, "剩余气力 " + m.angerCount + skill.values);
#endif
                if (!IsTrue(skill.robabilityValues))
                {
                    continue;
                }
                m.angerCount = m.angerCount + Convert.ToInt32(skill.values);
                AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASES_STRENGTH, skill.values, true);
            }
        }
Пример #10
0
        /// <summary>减少武将气力 </summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void RoleReduceAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            foreach (var m in list)
            {
                if (!IsTrue(skill.robabilityValues))
                {
                    continue;
                }
                var count = m.angerCount - Convert.ToInt32(skill.values);
                if (count < 0)
                {
                    skill.values = m.angerCount; m.angerCount = 0;
                }
                AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_STRENGTH, skill.values, false);
#if DEBUG
                XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "减少气力 " + skill.values, "剩余气力 " + count);
#endif
            }
        }
Пример #11
0
        /// <summary>增加印计数</summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void AddYinCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            var role   = list.First();
            var userid = role.user_id;
            var value  = Convert.ToInt32(skill.values);

            if (!dic_yincount.ContainsKey(userid))
            {
                dic_yincount.Add(userid, value);
            }
            else
            {
                dic_yincount[userid] += value;
#if DEBUG
                XTrace.WriteLine("{0} {1}", "增加印计数 " + value, "当前印计数 " + dic_yincount[userid]);
#endif
            }
            GetYinCount(move);
            AddRoleBuff(role, skill.round, (int)FightingSkillType.INCREASES_YINCOUNT, value, true);
        }
Пример #12
0
 /// <summary>增加武将防御 </summary>
 /// <param name="list">受影响的武将集合</param>
 /// <param name="skill"></param>
 private void RoleAddDefense(IEnumerable <FightRole> list, FightSkillEffects skill)
 {
     foreach (var m in list)
     {
         if (skill.round > 0 && skill.round != 99999)
         {
             if (!IsTrue(skill.robabilityValues))
             {
                 continue;
             }
             RemoveRoleBuff(m, (int)FightingSkillType.INCREASE_DEFENSE);
         }
         m.defense = m.defense + skill.values;
         if (m.defense < 0)
         {
             m.defense = 0; skill.values = 0;
         }
         AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASE_DEFENSE, skill.values, true);
     }
 }
Пример #13
0
        /// <summary>减少印计数</summary>
        /// <param name="list">受影响的武将集合</param>
        /// <param name="skill"></param>
        private void ReduceYinCount(IEnumerable <FightRole> list, FightSkillEffects skill)
        {
            var role   = list.First();
            var userid = role.user_id;
            var value  = Convert.ToInt32(skill.values);

            if (!dic_yincount.ContainsKey(userid))
            {
                dic_yincount.Add(userid, 0);
            }
            else
            {
                var yincount = dic_yincount[userid];
                var count    = yincount - value;
                dic_yincount[userid] = count < 0 ? 0 : count;
#if DEBUG
                XTrace.WriteLine("{0} {1} {2}", "原本印计数 " + yincount, "减少印计数 " + value, "剩余印计数 " + count);
#endif
            }
            GetYinCount(move);
            AddRoleBuff(role, skill.round, (int)FightingSkillType.REDUCE__YINCOUNT, value, false);
        }
Пример #14
0
        /// <summary> 获取技能目标武将 </summary>
        /// <param name="skill">技能</param>
        /// <param name="p">触发方的阵形</param>
        /// <param name="_p">触发方敌对的阵形</param>
        /// <returns></returns>
        private List <FightRole> GetTargetRole(FightSkillEffects skill, FightPersonal p, FightPersonal _p)
        {
            bool flag;

            switch (skill.target)                                     //目标类型  1己方 2敌方
            {
            case (int)FightTargetType.OWN: { flag = true; break; }    //己方

            case (int)FightTargetType.ENEMY: { flag = false; break; } //敌方

            default: { return(new List <FightRole>()); }
            }
            var tp = flag ? p : _p;

            switch (skill.range)                                                          //效果范围  1单人 2多人
            {
            case (int)EffectRangeType.SINGLE: { return(GetTargetRole(tp, false, flag)); } //单人

            case (int)EffectRangeType.ALL: { return(GetTargetRole(tp, true, flag)); }     //多人

            default: { return(new List <FightRole>()); }
            }
        }
Пример #15
0
 /// <summary>减少武将防御 </summary>
 /// <param name="list">受影响的武将集合</param>
 /// <param name="skill"></param>
 private void RoleReduceDefense(IEnumerable <FightRole> list, FightSkillEffects skill)
 {
     foreach (var m in list)
     {
         if (skill.round > 0 && skill.round != 99999)
         {
             if (!IsTrue(skill.robabilityValues))
             {
                 continue;
             }
             RemoveRoleBuff(m, (int)FightingSkillType.REDUCE_DEFENSE);
         }
         var count = m.defense - skill.values;
         if (count < 0)
         {
             skill.values = m.defense; m.defense = 0;
         }
         else
         {
             m.defense = count;
         }
         AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_DEFENSE, skill.values, false);
     }
 }