Ejemplo n.º 1
0
 public static List<SkillLvInfo> CreateSkillLvInfo(CombatGeneral general)
 {
     List<SkillLvInfo> _skillLvList = new List<SkillLvInfo>();
     if (general.GeneralID == LanguageManager.GetLang().GameUserGeneralID)
     {
         var abilityCacheSet = new ConfigCacheSet<AbilityInfo>();
         var skillLvSet = new ConfigCacheSet<SkillLvInfo>();
         UserTrump userTrump = new GameDataCacheSet<UserTrump>().FindKey(general.UserID, TrumpInfo.CurrTrumpID) ?? new UserTrump();
         if (userTrump.LiftNum > 0)
         {
             userTrump.SkillInfo.Foreach(obj =>
             {
                 var abilityInfo = abilityCacheSet.FindKey(obj.AbilityID) ?? new AbilityInfo();
                 if (abilityInfo.AttackType == AttackType.Trigger)
                 {
                     var temp = skillLvSet.FindKey(obj.AbilityID, obj.AbilityLv);
                     if (temp != null)
                     {
                         _skillLvList.Add(temp);
                     }
                 }
                 return true;
             });
         }
     }
     return _skillLvList;
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 检查攻击方式
 /// </summary>
 /// <returns></returns>
 public static CombatBaseAttack CheckAttack(CombatGeneral general)
 {
     //return !general.IsHunluanStatus && general.IsRelease
     //           ? (CombatBaseAttack)new CombatAbilityAttack(general)
     //           : new CombatPhysicalAttack(general);
     if(!general.IsHunluanStatus && general.IsRelease)
     {
         general.IsSelfAbility = 1;
         return (CombatBaseAttack) new CombatAbilityAttack(general);
     }
     else
     {
         var ability = AbilityDispose.TriggerAbilityList(general.AbilityInfoList);
         if (ability!=null)
         {
             general.IsSelfAbility = 2;
             general.TriggerAbility = ability;
             return (CombatBaseAttack)new CombatAbilityAttack(general);
         }
         else
         {
             return new CombatPhysicalAttack(general);
         }
         
     }
 }
Ejemplo n.º 3
0
 public CombatCenter(EmbattleRole role, CombatGeneral general, EmbattleRole targerRole, TargetHandle targetHandle)
 {
     _role = role;
     _attrGeneral = general;
     _targerRole = targerRole;
     _targerHandle = targetHandle;
     _processLog = new CombatProcess();
 }
Ejemplo n.º 4
0
 /// <summary>
 /// 破盾
 /// </summary>
 /// <param name="general"></param>
 /// <param name="abilityType"></param>
 /// <returns></returns>
 public static bool AttackPoDun(CombatGeneral general, AbilityType abilityType)
 {
     SkillLvInfo skillLvInfo = CreateSkillLvInfo(general).Find(m => m.EffType == abilityType);
     if (skillLvInfo != null && RandomUtils.IsHit(skillLvInfo.Probability))
     {
         return true;
     }
     return false;
 }
Ejemplo n.º 5
0
 public CombatBaseAttack(CombatGeneral general)
 {
     General = general;
     ProcessLog = new CombatProcess();
     ProcessLog.GeneralID = general.GeneralID;
     ProcessLog.Position = general.Position.ToShort();
     ProcessLog.LiveNum = general.LifeNum;
     ProcessLog.Momentum = general.Momentum;
     ProcessLog.AttStatus = general.BattleStatus;
 }
Ejemplo n.º 6
0
        public CombatAbilityAttack(CombatGeneral general)
            : base(general)
        {
            if (general.IsSelfAbility==2)
            {
                _ability = General.TriggerAbility;
                General.TempAbility = General.TriggerAbility;

            }
            else
            {
                _ability = General.Ability;
                General.TempAbility = General.Ability;
            }

            general.IsSelfAbility = 0;
        }
Ejemplo n.º 7
0
 public static decimal GetEffect(CombatGeneral general, AbilityType abilityType)
 {
     decimal effNum = 1;
     if (general.GeneralID != LanguageManager.GetLang().GameUserGeneralID)
     {
         return 0;
     }
     switch (abilityType)
     {
         case AbilityType.BaoJiJiaCheng:
             effNum = MathUtils.Addition(effNum, GetEffTypeNum(general, abilityType));
             break;
         case AbilityType.IsBaoJiReduce:
             effNum = MathUtils.Subtraction(effNum, GetEffTypeNum(general, abilityType));
             break;
         case AbilityType.Resurrect:
             effNum = GetEffTypeNum(general, abilityType);
             break;
         case AbilityType.AttackLife:
             effNum = GetEffTypeNum(general, abilityType);
             break;
         case AbilityType.Furious:
             effNum = LifeLowerTnumEffNum(general, abilityType);
             break;
         case AbilityType.NormalAttackPoFang:
             effNum = GetEffTypeNum(general, abilityType);
             break;
         case AbilityType.AttackPoDun:
             //effNum = GetEffTypeNum(general, abilityType);
             break;
         case AbilityType.FanShang:
             effNum = GetEffTypeNum(general, abilityType);
             break;
         default:
             return effNum;
     }
     return effNum;
 }
Ejemplo n.º 8
0
 private void SetCrystal(CombatGeneral general)
 {
     var packageCrystal = UserCrystalPackage.Get(general.UserID);
     if (packageCrystal != null)
     {
         UserCrystalInfo[] crystalList = packageCrystal.CrystalPackage.FindAll(m => m.GeneralID.Equals(general.GeneralID)).ToArray();
         foreach (UserCrystalInfo item in crystalList)
         {
             AbilityType abilityType = new ConfigCacheSet<CrystalInfo>().FindKey(item.CrystalID).AbilityID;
             var crystalLv = new ConfigCacheSet<CrystalLvInfo>().FindKey(item.CrystalID, item.CrystalLv);
             decimal effectNum = crystalLv == null ? 0 : crystalLv.AbilityNum;
             SetAbilityValue(general, abilityType, effectNum);
         }
     }
 }
Ejemplo n.º 9
0
 /// <summary>
 /// 法宝配置
 /// </summary>
 /// <param name="general"></param>
 /// <param name="item"></param>
 /// <returns></returns>
 private static void SetTrump(CombatGeneral general)
 {
     var user = new GameDataCacheSet<GameUser>().FindKey(general.UserID);
     if (user != null)
     {
         UserTrump userTrump = new GameDataCacheSet<UserTrump>().FindKey(general.UserID, TrumpInfo.CurrTrumpID);
         if (userTrump != null && userTrump.LiftNum > 0 && general.GeneralID == LanguageManager.GetLang().GameUserGeneralID && userTrump.PropertyInfo.Count > 0)
         {
             userTrump.PropertyInfo.Foreach(property =>
             {
                 SetAbilityValue(general, property.AbilityType, property.AbilityValue);
                 return true;
             });
         }
     }
 }
Ejemplo n.º 10
0
 /// <summary>
 /// 附魔符配置
 /// </summary>
 /// <param name="general"></param>
 /// <param name="item"></param>
 /// <returns></returns>
 private static void SetEnchant(CombatGeneral general)
 {
     var enchantList = new List<UserEnchantInfo>();
     var user = new GameDataCacheSet<GameUser>().FindKey(general.UserID);
     if (user != null)
     {
         var package = UserItemPackage.Get(general.UserID);
         var enchantPackage = UserEnchant.Get(general.UserID);
         if (package != null && enchantPackage != null)
         {
             var useritem = package.ItemPackage.Find(m => !m.IsRemove && m.GeneralID == general.GeneralID && m.Equparts == EquParts.WuQi);
             if (useritem != null)
             {
                 enchantList = enchantPackage.EnchantPackage.FindAll(m => m.UserItemID == useritem.UserItemID);
             }
         }
         foreach (var enchantInfo in enchantList)
         {
             decimal abilityNum = CombatHelper.EnchantFinalNum(enchantInfo);
             SetAbilityValue(general, enchantInfo.AbilityType, abilityNum);
         }
     }
 }
Ejemplo n.º 11
0
 /// <summary>
 /// 属相克制伤害
 /// </summary>
 /// <param name="userID1"></param>
 /// <param name="userID2"></param>
 /// <returns></returns>
 public static decimal TrumpZodiacHarm(CombatGeneral general, string userID2)
 {
     if (general.GeneralID != LanguageManager.GetLang().GameUserGeneralID)
     {
         return 0;
     }
     ZodiacType zodiacType1 = GetZodiacType(general.UserID);
     ZodiacType zodiacType2 = GetZodiacType(userID2);
     return ZodiacRestraint(zodiacType1, zodiacType2);
 }
Ejemplo n.º 12
0
        /// <summary>
        /// 附加加成:武器攻击 + 命运水晶攻击 + 魔术技能攻击 + 阵法攻击 + 附魔攻击
        /// </summary>
        /// <returns></returns>
        private void SetExtraProperty(CombatGeneral general)
        {
            //命运水晶攻击
            SetCrystal(general);
            //武器攻击
            var package = UserItemPackage.Get(general.UserID);
            var equList = package.ItemPackage.FindAll(m => !m.IsRemove && m.GeneralID.Equals(general.GeneralID) && m.ItemStatus == ItemStatus.YongBing);
            foreach (var item in equList)
            {
                //general.LifeNum += GetEquAttrEffect(item, AbilityType.ShengMing);
                general.ExtraAttack.WuliNum += GetEquAttrEffect(item, AbilityType.WuLiGongJi);
                general.ExtraAttack.HunjiNum += GetEquAttrEffect(item, AbilityType.HunJiGongJi);
                general.ExtraAttack.MofaNum += GetEquAttrEffect(item, AbilityType.MoFaGongJi);

                general.ExtraDefense.WuliNum += GetEquAttrEffect(item, AbilityType.WuLiFangYu);
                general.ExtraDefense.HunjiNum += GetEquAttrEffect(item, AbilityType.HunJiFangYu);
                general.ExtraDefense.MofaNum += GetEquAttrEffect(item, AbilityType.MoFaFangYu);

                SetSparePart(general, item);
            }
            //阵法攻击
            int magicLv = 0;
            UserMagic userMagic = new GameDataCacheSet<UserMagic>().FindKey(this._userID, this._magicID);
            if (userMagic != null)
            {
                magicLv = userMagic.MagicLv;
                MagicLvInfo mlv = new ConfigCacheSet<MagicLvInfo>().FindKey(this._magicID, magicLv);
                if (mlv != null)
                {
                    SetAbilityValue(general, mlv.AbilityType, mlv.EffectNum);
                }
            }

            //魔术技能攻击
            var userMagicList = new GameDataCacheSet<UserMagic>().FindAll(_userID, m => m.MagicType == MagicType.JiNeng);
            foreach (UserMagic item in userMagicList)
            {
                MagicLvInfo magicLvItem = new ConfigCacheSet<MagicLvInfo>().FindKey(item.MagicID, item.MagicLv);
                if (magicLvItem != null)
                {
                    SetAbilityValue(general, magicLvItem.AbilityType, magicLvItem.EffectNum);
                }
            }
            int feelWuliNum = CombatHelper.FeelEffectNum(general.UserID, general.GeneralID, AbilityType.WuLiFangYu);
            int feelHunjiNum = CombatHelper.FeelEffectNum(general.UserID, general.GeneralID, AbilityType.HunJiFangYu);
            int feelMofaNum = CombatHelper.FeelEffectNum(general.UserID, general.GeneralID, AbilityType.MoFaFangYu);
            general.ExtraDefense.WuliNum += feelWuliNum;
            general.ExtraDefense.HunjiNum += feelHunjiNum;
            general.ExtraDefense.MofaNum += feelMofaNum;

            //附魔符数值
            SetEnchant(general);
            //法宝数值
            SetTrump(general);
        }
Ejemplo n.º 13
0
        private static void KarmaAdditionValue(Karma karma, CombatGeneral combatGeneral)
        {
            decimal attValue = karma.AttValue;
            switch (karma.AbilityType.ToInt())
            {
                //生命回复
                case 1:

                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.LifeNum = MathUtils.Addition(combatGeneral.LifeNum, (combatGeneral.LifeNum * attValue).ToInt());
                        combatGeneral.LifeMaxNum = MathUtils.Addition(combatGeneral.LifeMaxNum, (combatGeneral.LifeMaxNum * attValue).ToInt());
                    }
                    else
                    {
                        combatGeneral.LifeNum = MathUtils.Addition(combatGeneral.LifeNum, attValue).ToInt();
                        combatGeneral.LifeMaxNum = MathUtils.Addition(combatGeneral.LifeMaxNum, attValue).ToInt();
                    }
                    break;
                //物理攻击
                case 2:
                   
                        if (combatGeneral.ExtraAttack != null)
                        {
                            combatGeneral.ExtraAttack.AdditionWuliNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionWuliNum, attValue);
                        }

                    break;
                //魂技攻击
                case 3:
                   
                        if (combatGeneral.ExtraAttack != null)
                        {
                            combatGeneral.ExtraAttack.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionHunjiNum, attValue);
                        }

                    break;
                //魔法攻击
                case 4:
                   
                        if (combatGeneral.ExtraAttack != null)
                        {
                            combatGeneral.ExtraAttack.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionMofaNum, attValue);
                        }
                    break;
                //物理防御
                case 5:
  
                        if (combatGeneral.ExtraDefense != null)
                        {
                            combatGeneral.ExtraDefense.AdditionWuliNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionWuliNum, attValue);
                        }
                    break;
                //魂技防御
                case 6:
                    
                        if (combatGeneral.ExtraDefense != null)
                        {
                            combatGeneral.ExtraDefense.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionHunjiNum, attValue);
                        }
                    break;
                //魔法防御
                case 7:
                   
                        if (combatGeneral.ExtraDefense != null)
                        {
                            combatGeneral.ExtraDefense.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionMofaNum, attValue);
                        }

                    break;
                //暴击
                case 8:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.BaojiNum = MathUtils.Addition(combatGeneral.BaojiNum, (combatGeneral.BaojiNum * attValue));

                    }
                    else
                    {
                        combatGeneral.BaojiNum = MathUtils.Addition(combatGeneral.BaojiNum, attValue);

                    }
                    break;
                //命中
                case 9:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.HitNum = MathUtils.Addition(combatGeneral.HitNum, (combatGeneral.HitNum * attValue));

                    }
                    else
                    {
                        combatGeneral.HitNum = MathUtils.Addition(combatGeneral.HitNum, attValue);

                    }
                    break;
                //破击
                case 10:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.PojiNum = MathUtils.Addition(combatGeneral.PojiNum, (combatGeneral.PojiNum * attValue));

                    }
                    else
                    {
                        combatGeneral.PojiNum = MathUtils.Addition(combatGeneral.PojiNum, attValue);

                    }
                    break;
                //韧性
                case 11:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.RenxingNum = MathUtils.Addition(combatGeneral.RenxingNum, (combatGeneral.RenxingNum * attValue));

                    }
                    else
                    {
                        combatGeneral.RenxingNum = MathUtils.Addition(combatGeneral.RenxingNum, attValue);

                    }
                    break;
                //闪避
                case 12:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.ShanbiNum = MathUtils.Addition(combatGeneral.ShanbiNum, (combatGeneral.ShanbiNum * attValue));

                    }
                    else
                    {
                        combatGeneral.ShanbiNum = MathUtils.Addition(combatGeneral.ShanbiNum, attValue);

                    }
                    break;
                //格挡
                case 13:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.GedangNum = MathUtils.Addition(combatGeneral.GedangNum, (combatGeneral.GedangNum * attValue));

                    }
                    else
                    {
                        combatGeneral.GedangNum = MathUtils.Addition(combatGeneral.GedangNum, attValue);

                    }
                    break;
                //必杀
                case 14:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.BishaNum = MathUtils.Addition(combatGeneral.BishaNum, (combatGeneral.BishaNum * attValue));

                    }
                    else
                    {
                        combatGeneral.BishaNum = MathUtils.Addition(combatGeneral.BishaNum, attValue);

                    }
                    break;
                //力量
                case 26:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.PowerNum = MathUtils.Addition(combatGeneral.PowerNum, (combatGeneral.PowerNum * attValue).ToInt());

                    }
                    else
                    {
                        combatGeneral.PowerNum = MathUtils.Addition(combatGeneral.PowerNum, attValue.ToInt());
                    }
                    break;
                //魂力
                case 27:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.SoulNum = MathUtils.Addition(combatGeneral.SoulNum, (combatGeneral.SoulNum * attValue).ToShort());

                    }
                    else
                    {
                        combatGeneral.SoulNum = MathUtils.Addition(combatGeneral.SoulNum, attValue.ToShort());
                    }
                    break;
                //智力
                case 28:
                    if (karma.AttValueType == 2)
                    {
                        combatGeneral.IntellectNum = MathUtils.Addition(combatGeneral.IntellectNum, (combatGeneral.IntellectNum * attValue).ToShort());

                    }
                    else
                    {
                        combatGeneral.IntellectNum = MathUtils.Addition(combatGeneral.IntellectNum, attValue.ToShort());
                    }
                    break;

            }
        }
Ejemplo n.º 14
0
 /// <summary>
 /// 圣吉塔加成
 /// </summary>
 /// <param name="embattle"></param>
 /// <param name="combatGeneral"></param>
 private void SJTAddition(UserEmbattle embattle, CombatGeneral combatGeneral)
 {
     if(_combatType==CombatType.ShengJiTa)
     {
         var cacheSetUserSJT = new GameDataCacheSet<UserShengJiTa>();
         var userSJT = cacheSetUserSJT.FindKey(embattle.UserID);
         if (userSJT != null)
         {
             combatGeneral.LifeNum = MathUtils.Addition(combatGeneral.LifeNum, (combatGeneral.LifeNum * userSJT.LifeNum).ToInt());
             combatGeneral.LifeMaxNum = MathUtils.Addition(combatGeneral.LifeMaxNum, (combatGeneral.LifeNum * userSJT.LifeNum).ToInt());
             combatGeneral.ExtraAttack.AdditionWuliNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionWuliNum, (combatGeneral.ExtraAttack.AdditionWuliNum * userSJT.WuLiNum));
             combatGeneral.ExtraAttack.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionHunjiNum, (combatGeneral.ExtraAttack.AdditionHunjiNum * userSJT.FunJiNum));
             combatGeneral.ExtraAttack.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionMofaNum, (combatGeneral.ExtraAttack.AdditionMofaNum * userSJT.MofaNum));
             combatGeneral.ExtraDefense.AdditionWuliNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionWuliNum, (combatGeneral.ExtraDefense.AdditionWuliNum * userSJT.WuLiNum));
             combatGeneral.ExtraDefense.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionHunjiNum, (combatGeneral.ExtraDefense.AdditionHunjiNum * userSJT.FunJiNum));
             combatGeneral.ExtraDefense.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionMofaNum, (combatGeneral.ExtraDefense.AdditionMofaNum * userSJT.MofaNum));
         }
     }
 }
Ejemplo n.º 15
0
        /// <summary>
        /// 计算技能伤害公式,不产生负数
        /// </summary>
        /// <param name="tagetGeneral"></param>
        /// <returns></returns>
        protected int GetAbilityDamageNum(CombatGeneral tagetGeneral)
        {
            string traceStr = string.Empty;
            int damageNum;
            int attackNum;
            int defenseNum = 0;

            decimal harmNum = 0;  //法宝属相克制伤害 --技能攻击
            AbilityProperty property = General.AbilityProperty;

            ProcessLog.AbilityProperty = property;
            attackNum = General.GetAttackNum(AbilityProperty.Ability) + General.GetAttackNum(property);
            if (tagetGeneral != null)
            {
                //法宝属相克制伤害 --技能攻击
                harmNum = TrumpAbilityAttack.TrumpZodiacHarm(General, tagetGeneral.UserID);

                defenseNum = tagetGeneral.GetDefenseNum(AbilityProperty.Ability, tagetGeneral) + tagetGeneral.GetDefenseNum(property, tagetGeneral);
            }
            General.MinDamageNum = (int)Math.Ceiling(attackNum * ConfigEnvSet.GetDouble("Combat.MinDamagePencent"));
            damageNum = MathUtils.Subtraction(attackNum, defenseNum, General.MinDamageNum);

            decimal ratioNum = General.TempAbility.RatioNum > 0 ? General.TempAbility.RatioNum : 1;
            damageNum = (int)Math.Floor(damageNum * ratioNum); //计算伤害系数
            //气势加成=气势/{100-(气势-100)*2/3}*100% 
            if (General != null)
            {
                var qishiNum = General.Momentum == 0 ? (short)100 : General.Momentum;
                traceStr += "qishiNum:" + qishiNum;
                decimal qishiPercent = (decimal)qishiNum / 100;
                traceStr += "qishiPercent:" + qishiNum;
                damageNum = (int)Math.Floor(damageNum * qishiPercent);
                traceStr += "damageNum:" + qishiNum;
                //加固定伤害
                damageNum = MathUtils.Addition(damageNum, General.FixedDamageNum, int.MaxValue);
                traceStr += "FixedDamageNum:" + qishiNum;


            }
            //技能伤害,负数是增加,
            //damageNum = General != null && General.Ability.IsIncrease ? -damageNum : damageNum;
            if (damageNum == 0)
            {
                new BaseLog().SaveLog(new Exception("释放技能:" + General.TempAbility.AbilityName + General.TempAbility.AbilityID + "伤害为0,Trace:" + traceStr));
            }
            if (damageNum < General.MinDamageNum)
            {
                damageNum = General.MinDamageNum;
            }
            //法宝属相克制伤害 --技能攻击
            if (!isharm && harmNum > 0)
            {
                damageNum = (int)(damageNum * MathUtils.Addition(1, harmNum));
                isharm = true;
            }
            //魂技等级与自身魂技加成

            int abilityID = General.TempAbility != null ? General.TempAbility.AbilityID : 0;
            decimal effectValue = AbilityDispose.GetAbilityEffect(General.UserID, General.GeneralID, abilityID);
            if (effectValue > 0)
            {
                damageNum = MathUtils.ToCeilingInt(damageNum * MathUtils.Addition(1, (effectValue)));
            }
            return damageNum;
        }
Ejemplo n.º 16
0
        public static IGeneral Create(SJTPlotEmbattleInfo embattle)
        {
            var monster = new ConfigCacheSet<SJTMonsterInfo>().FindKey(embattle.MonsterID);
            if (monster == null) throw new Exception("Plot monster:" + embattle.MonsterID + " is not exist");

            CareerInfo career = new ConfigCacheSet<CareerInfo>().FindKey(monster.CareerID);
            AbilityInfo ability = new ConfigCacheSet<AbilityInfo>().FindKey(monster.AbilityID);
            var abilityLv = new ConfigCacheSet<AbilityLvInfo>().FindKey(monster.AbilityLv);

            if (career == null || ability == null || abilityLv == null)
            {
                throw new Exception("career or ability or AbilityLv is null.");
            }

            CombatGeneral general = new CombatGeneral()
            {
                UserID = null,
                Position = embattle.GridSeqNo,
                GeneralID = embattle.MonsterID,
                GeneralName = monster.GeneralName,
                HeadID = monster.HeadID,
                CareerID = monster.CareerID,
                CareerType = career.CareerType,
                IsMove = career.IsMove,
                LifeNum = monster.LifeNum,
                LifeMaxNum = monster.LifeNum,
                Lv = monster.GeneralLv,
                Momentum = (short)monster.MomentumNum,
                Ability = ability,
                IsAttrMove = ability.IsMove,
                BaojiNum = monster.BaojiNum,
                BishaNum = monster.BishaNum,
                RenxingNum = monster.RenxingNum,
                HitNum =
                    monster.HitNum == 0
                        ? ConfigEnvSet.GetDecimal("Combat.HitiNum")
                        : monster.HitNum,
                ShanbiNum = monster.ShanbiNum,
                GedangNum = monster.GedangNum,
                PojiNum = monster.PojiNum,
                BattleStatus = BattleStatus.Normal,
                PowerNum = monster.PowerNum,
                SoulNum = monster.SoulNum,
                IntellectNum = monster.IntellectNum,
                FixedDamageNum = 0,
                //怪物没有附加属性
                ExtraAttack = new CombatProperty(),
                ExtraDefense = new CombatProperty(),
                IsMonster = true,
                IsWait = false,
                PhyAttackNum = monster.PhyAttackNum,
                PhyDefenseNum = monster.PhyDefenseNum,
                MagAttackNum = monster.MagAttackNum,
                MagDefenseNum = monster.MagDefenseNum,
                AbiAttackNum = monster.AbiAttackNum,
                AbiDefenseNum = monster.AbiDefenseNum

            };
            general.PhyAttackNum = MathUtils.Addition(general.PhyAttackNum,
                                                      (general.PhyAttackNum*abilityLv.EffectValue)).ToInt();
            general.PhyDefenseNum = MathUtils.Addition(general.PhyDefenseNum,
                                                      (general.PhyDefenseNum * abilityLv.EffectValue)).ToInt();
            general.MagAttackNum = MathUtils.Addition(general.MagAttackNum,
                                                      (general.MagAttackNum * abilityLv.EffectValue)).ToInt();
            general.MagDefenseNum = MathUtils.Addition(general.MagDefenseNum,
                                                      (general.MagDefenseNum * abilityLv.EffectValue)).ToInt();
            general.AbiAttackNum = MathUtils.Addition(general.AbiAttackNum,
                                                      (general.AbiAttackNum * abilityLv.EffectValue)).ToInt();
            general.AbiDefenseNum = MathUtils.Addition(general.AbiDefenseNum,
                                                      (general.AbiDefenseNum * abilityLv.EffectValue)).ToInt();
            return general;
        }
Ejemplo n.º 17
0
        public static IGeneral Create(SJTPlotEmbattleInfo embattle, double difficultNum)
        {

            SJTMonsterInfo monster = new ShareCacheStruct<SJTMonsterInfo>().FindKey(embattle.MonsterID);
            if (monster == null) throw new Exception("Plot monster:" + embattle.MonsterID + " is not exist");

            CareerInfo career = new ShareCacheStruct<CareerInfo>().FindKey(monster.CareerID);
            AbilityInfo ability = new ShareCacheStruct<AbilityInfo>().FindKey(monster.AbilityID);
            if (career == null || ability == null)
            {
                throw new Exception("career or ability is null.");
            }
            CombatGeneral general = new CombatGeneral()
            {
                UserID = null,
                Position = embattle.GridSeqNo,
                GeneralID = embattle.MonsterID,
                GeneralName = monster.GeneralName,
                HeadID = monster.HeadID,
                CareerID = monster.CareerID,
                CareerType = career.CareerType,
                IsMove = career.IsMove,
                LifeNum = monster.LifeNum,
                LifeMaxNum = monster.LifeNum,
                Lv = monster.GeneralLv,
                Momentum = (short)monster.MomentumNum,
                Ability = ability,
                IsAttrMove = ability.IsMove,
                BaojiNum = monster.BaojiNum,
                BishaNum = monster.BishaNum,
                RenxingNum = monster.RenxingNum,
                HitNum =
                    monster.HitNum == 0
                        ? ConfigEnvSet.GetDecimal("Combat.HitiNum")
                        : monster.HitNum,
                ShanbiNum = monster.ShanbiNum,
                GedangNum = monster.GedangNum,
                PojiNum = monster.PojiNum,
                BattleStatus = BattleStatus.Normal,
                PowerNum = monster.PowerNum,
                SoulNum = monster.SoulNum,
                IntellectNum = monster.IntellectNum,
                //todo 圣吉塔怪物表未配置固定伤害值
                FixedDamageNum = 1, //monster.DamageNum,
                //怪物没有附加属性
                ExtraAttack = new CombatProperty(),
                ExtraDefense = new CombatProperty(),
                IsMonster = true,
                IsWait = false,
                PhyAttackNum = (monster.PhyAttackNum * difficultNum).ToInt(),
                PhyDefenseNum = (monster.PhyDefenseNum * difficultNum).ToInt(),
                MagAttackNum = (monster.MagAttackNum * difficultNum).ToInt(),
                MagDefenseNum = (monster.MagDefenseNum * difficultNum).ToInt(),
                AbiAttackNum = (monster.AbiAttackNum * difficultNum).ToInt(),
                AbiDefenseNum = (monster.AbiDefenseNum * difficultNum).ToInt()

            };
            return general;
        }
Ejemplo n.º 18
0
 /// <summary>
 /// 血量低于特定值时加成
 /// </summary>
 /// <param name="abilityType"></param>
 /// <returns></returns>
 private static decimal LifeLowerTnumEffNum(CombatGeneral general, AbilityType abilityType)
 {
     SkillLvInfo skillLvInfo = CreateSkillLvInfo(general).Find(m => m.EffType == abilityType);
     if (skillLvInfo != null)
     {
         if (skillLvInfo.Tnum > 1 && general.LifeNum <= skillLvInfo.Tnum && RandomUtils.IsHit(skillLvInfo.Probability))
         {
             return skillLvInfo.EffNum;
         }
         else if (skillLvInfo.Tnum < 1)
         {
             decimal tnum = skillLvInfo.Tnum * general.LifeMaxNum;
             if (tnum >= general.LifeNum && RandomUtils.IsHit(skillLvInfo.Probability))
             {
                 return skillLvInfo.EffNum;
             }
         }
     }
     return 0;
 }
Ejemplo n.º 19
0
        private static void SetAbilityValue(CombatGeneral general, AbilityType abilityType, decimal effectNum)
        {
            switch (abilityType)
            {
                case AbilityType.ShengMing:
                    //注释原因:佣兵取最大生命时已经计算
                    //general.LifeNum += effectNum.ToInt();
                    break;
                case AbilityType.WuLiGongJi:
                    general.ExtraAttack.WuliNum += effectNum.ToInt();
                    break;
                case AbilityType.HunJiGongJi:
                    general.ExtraAttack.HunjiNum += effectNum.ToInt();
                    break;
                case AbilityType.MoFaGongJi:
                    general.ExtraAttack.MofaNum += effectNum.ToInt();
                    break;
                case AbilityType.WuLiFangYu:
                    general.ExtraDefense.WuliNum += effectNum.ToInt();
                    break;
                case AbilityType.HunJiFangYu:
                    general.ExtraDefense.HunjiNum += effectNum.ToInt();
                    break;
                case AbilityType.MoFaFangYu:
                    general.ExtraDefense.MofaNum += effectNum.ToInt();
                    break;
                case AbilityType.BaoJi:
                    general.BaojiNum += effectNum;
                    break;
                case AbilityType.MingZhong:
                    general.HitNum += effectNum;
                    break;
                case AbilityType.PoJi:
                    general.PojiNum += effectNum;
                    break;
                case AbilityType.RenXing:
                    general.RenxingNum += effectNum;
                    break;
                case AbilityType.ShanBi:
                    general.ShanbiNum += effectNum;
                    break;
                case AbilityType.GeDang:
                    general.GedangNum += effectNum;
                    break;
                case AbilityType.BiSha:
                    general.BishaNum += effectNum;
                    break;
                case AbilityType.Qishi:
                    general.Momentum += effectNum.ToShort();
                    break;

                default:
                    break;
            }
        }
Ejemplo n.º 20
0
        private CombatGeneral Create(UserEmbattle embattle, double inspirePercent, short replacePotion)
        {
            GameUser userInfo = UserCacheGlobal.CheckLoadUser(embattle.UserID);
            UserGeneral userGeneral = new GameDataCacheSet<UserGeneral>().FindKey(embattle.UserID, embattle.GeneralID);
            if (userGeneral == null || userInfo == null)
            {
                return null;
            }

            AbilityInfo ability = new ConfigCacheSet<AbilityInfo>().FindKey(userGeneral.AbilityID);
            CareerInfo careerInfo = new ConfigCacheSet<CareerInfo>().FindKey(userGeneral.CareerID);

            if (ability == null || careerInfo == null)
            {
                throw new Exception("职业或技能为空");
            }
            //职业加成
            decimal baojiNum = GetCareerAddition(careerInfo, AbilityType.BaoJi);
            decimal bishaNum = GetCareerAddition(careerInfo, AbilityType.BiSha);
            decimal renxingNum = GetCareerAddition(careerInfo, AbilityType.RenXing);
            decimal hitNum = GetCareerAddition(careerInfo, AbilityType.MingZhong);
            decimal shanbiNum = GetCareerAddition(careerInfo, AbilityType.ShanBi);
            decimal gedangNum = GetCareerAddition(careerInfo, AbilityType.GeDang);
            decimal pojiNum = GetCareerAddition(careerInfo, AbilityType.PoJi);
            //公会技能加成

            short powerNum = MathUtils.Addition(userGeneral.PowerNum, userGeneral.TrainingPower, short.MaxValue);
            short soulNum = MathUtils.Addition(userGeneral.SoulNum, userGeneral.TrainingSoul, short.MaxValue);
            short intellectNum = MathUtils.Addition(userGeneral.IntellectNum, userGeneral.TrainingIntellect, short.MaxValue);
            GameUser user = new GameDataCacheSet<GameUser>().FindKey(embattle.UserID);
            if (user != null && !string.IsNullOrEmpty(user.MercenariesID) && userGeneral.GeneralID == LanguageManager.GetLang().GameUserGeneralID)
            {
                powerNum = MathUtils.RoundCustom(powerNum * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.PowerNum)).ToShort();
                soulNum = MathUtils.RoundCustom(soulNum * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.SoulNum)).ToShort();
                intellectNum = MathUtils.RoundCustom(intellectNum * CombatHelper.GetGuildAbilityNum(user.UserID, GuildAbilityType.IntellectNum)).ToShort();
            }

            if (embattle.GeneralID == LanguageManager.GetLang().GameUserGeneralID)
            {
                //法宝基础属性加成
                powerNum = MathUtils.Addition(powerNum, TrumpAbilityAttack.TrumpPropertyNum(embattle.UserID, embattle.GeneralID, AbilityType.PowerNum));
                soulNum = MathUtils.Addition(soulNum, TrumpAbilityAttack.TrumpPropertyNum(embattle.UserID, embattle.GeneralID, AbilityType.SoulNum));
                intellectNum = MathUtils.Addition(intellectNum, TrumpAbilityAttack.TrumpPropertyNum(embattle.UserID, embattle.GeneralID, AbilityType.IntelligenceNum));

                //法宝--技能属性转换获得的值
                //法宝--技能属性转换获得的值
                decimal trumpPower = TrumpAbilityAttack.ConversionPropertyNum(embattle.UserID, powerNum, soulNum, intellectNum, AbilityType.PowerNum);
                decimal trumpsoul = TrumpAbilityAttack.ConversionPropertyNum(embattle.UserID, powerNum, soulNum, intellectNum, AbilityType.SoulNum);
                decimal trumpintellect = TrumpAbilityAttack.ConversionPropertyNum(embattle.UserID, powerNum, soulNum, intellectNum, AbilityType.IntelligenceNum);
                powerNum = MathUtils.Addition(trumpPower.ToShort(), powerNum);
                soulNum = MathUtils.Addition(trumpsoul.ToShort(), soulNum);
                intellectNum = MathUtils.Addition(trumpintellect.ToShort(), intellectNum);
            }

            if (userGeneral.LifeMaxNum == 0 || userGeneral.LifeNum > userGeneral.LifeMaxNum)
            {
                userGeneral.RefreshMaxLife();
                userGeneral.LifeNum = userGeneral.LifeMaxNum;
            }
            //
            decimal effectValue = 0;// AbilityDispose.GetAbilityEffect(embattle.UserID, embattle.GeneralID, ability.AbilityID);
            decimal selfEffectValue = 0;
            List<AbilityInfo> selfAbilityList = AbilityDispose.GetSelfAbilityList(embattle.UserID, embattle.GeneralID,
                                                                                  ability.AbilityID, out selfEffectValue);
            CombatGeneral general = new CombatGeneral()
            {
                UserID = embattle.UserID,
                Position = embattle.Position,
                GeneralID = embattle.GeneralID,
                CombatType = _combatType,
                GeneralName = userGeneral.GeneralName,
                HeadID = userGeneral.HeadID,
                CareerID = userGeneral.CareerID,
                CareerType = careerInfo.CareerType,
                IsMove = careerInfo.IsMove,
                LifeNum = userGeneral.LifeNum,
                LifeMaxNum = userGeneral.LifeMaxNum,
                Lv = userGeneral.GeneralLv,
                Momentum = (short)CombatMomentum,
                Ability = ability,
                IsAttrMove = ability.IsMove,
                BaojiNum = MathUtils.Addition(CombatBaojiNum, baojiNum, decimal.MaxValue),
                BishaNum = bishaNum,
                RenxingNum = renxingNum,
                HitNum = MathUtils.Addition(userGeneral.HitProbability, hitNum, decimal.MaxValue),
                ShanbiNum = shanbiNum,
                GedangNum = gedangNum,
                PojiNum = pojiNum,
                BattleStatus = BattleStatus.Normal,
                PowerNum = powerNum,
                SoulNum = soulNum,
                IntellectNum = intellectNum,
                ExtraAttack = new CombatProperty(),
                ExtraDefense = new CombatProperty(),
                InspirePercent = inspirePercent,
                Fatigue = userInfo.Fatigue,
                UserStatus = userInfo.UserStatus,
                IsMonster = false,
                IsWait = false,
                EffectValue = effectValue,
                AbilityInfoList = AbilityDispose.GetTriggerAbilityList(embattle.UserID, embattle.GeneralID, ability.AbilityID),
                SelfAbilityInfoList = selfAbilityList,
                SelfEffectValue = selfEffectValue
            };

            if (_combatType == CombatType.User)
            {
                //玩家竞技都是满血
                general.LifeNum = general.LifeMaxNum;
                userGeneral.ResetEmbatleReplace();
            }

            //判断是否替补佣兵
            if (replacePotion == general.Position)
            {
                if (_combatType == CombatType.Country && general.LifeNum > 0)
                {
                    general.ReplacePosition = userGeneral.ReplacePosition;
                }
                if (general.ReplacePosition > 0)
                {
                    general.Position = general.ReplacePosition;
                }
                else
                {
                    general.IsWait = true;
                }
            }
            SetExtraProperty(general);
            AbilityAddition(selfAbilityList, general);
            KarmaAddition(embattle.UserID, general);
            SJTAddition(embattle, general);
            
            return general;
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 计算伤害公式
        /// 攻击伤害 = 攻击力 - 物理防御力
        /// </summary>
        /// <param name="tagetGeneral">加血等辅助技能时可能为空值</param>
        /// <returns></returns>
        protected int GetPhysicalDamageNum(CombatGeneral tagetGeneral)
        {
            AbilityProperty property = General.AbilityProperty;
           
            ProcessLog.AbilityProperty = property;
            int damageNum;
            int attackNum;
            int defenseNum = 0;
            decimal harmNum = 0;  //法宝属相克制伤害 --技能攻击
            attackNum = General.GetAttackNum(property);
            if (tagetGeneral != null)
            {
                harmNum = TrumpAbilityAttack.TrumpZodiacHarm(General, tagetGeneral.UserID);
                defenseNum = tagetGeneral.GetDefenseNum(property, tagetGeneral);
                //普通攻击破防
                decimal normalAttackPoFang = TrumpAbilityAttack.GetEffect(General, AbilityType.NormalAttackPoFang);
                if (normalAttackPoFang > 0)
                {
                    ProcessLog.TrumpStatusList.Add(TrumpAbilityAttack.GetSkillprocess(AbilityType.NormalAttackPoFang, 0));
                }
                defenseNum = (int)Math.Floor(MathUtils.Subtraction(defenseNum, defenseNum * normalAttackPoFang));
            }
            General.MinDamageNum = (int)Math.Ceiling(attackNum * ConfigEnvSet.GetDouble("Combat.MinDamagePencent"));

            damageNum = MathUtils.Subtraction(attackNum, defenseNum, General.MinDamageNum);

            //加固定伤害
            damageNum = MathUtils.Addition(damageNum, General.FixedDamageNum, int.MaxValue);

            //法宝属相克制伤害 --技能攻击
            if (harmNum > 0 && !isPyharm)
            {
                damageNum = (int)(damageNum * MathUtils.Addition(1, (harmNum + General.EffectValue )));
                isPyharm = true;
            }
           
            return damageNum;
        }
Ejemplo n.º 22
0
        /// <summary>
        /// 缘分加成
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="general"></param>
        public static void KarmaAddition(string userId, CombatGeneral general)
        {
            var cacheSetKarma = new ConfigCacheSet<KarmaInfo>();
            var karmaInfo = cacheSetKarma.FindKey(general.GeneralID);
            if (karmaInfo != null && karmaInfo.KarmaList != null && karmaInfo.KarmaList.Count > 0)
            {
                var karmaList = karmaInfo.KarmaList;
                foreach (var karma in karmaList)
                {
                    bool isKarma = true;
                    string[] valueIDArray = karma.ValueID.Split(',');
                    switch (karma.KarmaType)
                    {
                        case KarmaType.YongBing:
                            foreach (var id in valueIDArray)
                            {
                                if (embattleList.Find(s => s.GeneralID == id.ToInt()) == null)
                                {
                                    isKarma = false;
                                    break;
                                }
                            }
                            if (isKarma)
                            {
                                KarmaAdditionValue(karma, general);
                            }


                            break;
                        case KarmaType.ZhuangBei:
                            var cacheSetItem = new GameDataCacheSet<UserItemPackage>();
                            var userItem = cacheSetItem.FindKey(userId);
                            if (userItem != null && userItem.ItemPackage != null)
                            {

                                foreach (var id in valueIDArray)
                                {
                                    if (userItem.ItemPackage.Find(s => s.ItemID == id.ToInt() && s.GeneralID == general.GeneralID) == null)
                                    {
                                        isKarma = false;
                                        break;
                                    }
                                }
                                if (isKarma)
                                {
                                    KarmaAdditionValue(karma, general);
                                }

                            }
                            break;
                        case KarmaType.JiNen:
                            var cacheSetAbility = new GameDataCacheSet<UserAbility>();
                            var ability = cacheSetAbility.FindKey(userId);
                            if (ability != null && ability.AbilityList != null)
                            {

                                var abilityList = ability.AbilityList;

                                foreach (var id in valueIDArray)
                                {
                                    if (abilityList.Find(s => s.AbilityID == id.ToInt() && s.GeneralID == general.GeneralID) == null)
                                    {
                                        isKarma = false;
                                        break;
                                    }
                                }
                                if (isKarma)
                                {
                                    KarmaAdditionValue(karma, general);
                                }
                            }
                            break;
                        case KarmaType.ShuiJing:
                            var cacheSetCrystal = new GameDataCacheSet<UserCrystalPackage>();
                            var userCrystal = cacheSetCrystal.FindKey(userId);

                            if (userCrystal != null && userCrystal.CrystalPackage != null)
                            {

                                var crystalList = userCrystal.CrystalPackage;

                                foreach (var id in valueIDArray)
                                {
                                    if (crystalList.Find(s => s.CrystalID == id.ToInt() && s.GeneralID == general.GeneralID) == null)
                                    {
                                        isKarma = false;
                                        break;
                                    }
                                }
                                if (isKarma)
                                {
                                    KarmaAdditionValue(karma, general);
                                }
                            }
                            break;
                    }
                }
            }
        }
Ejemplo n.º 23
0
 public CombatPhysicalAttack(CombatGeneral general)
     : base(general)
 {
 }
Ejemplo n.º 24
0
        /// <summary>
        /// 被动技能加成
        /// </summary>
        /// <param name="abilityInfoList"></param>
        /// <param name="combatGeneral"></param>
        private  void AbilityAddition(List<AbilityInfo> abilityInfoList, CombatGeneral combatGeneral)
        {
            if (abilityInfoList != null && abilityInfoList.Count > 0)
            {
                abilityInfoList.ForEach(obj =>
                {
                    decimal increaseNum = obj.IncreaseNum.ToDecimal();
                    int baseEffectNum = obj.BaseEffectNum.ToInt();
                    string[] abilityTypeArray = obj.AbilityType.Split(',');
                    foreach (var s in abilityTypeArray)
                    {
                        switch (s)
                        {
                            //生命回复
                            case "1":

                                if (increaseNum > 0)
                                {
                                    combatGeneral.LifeNum = MathUtils.Addition(combatGeneral.LifeNum, (combatGeneral.LifeNum * increaseNum).ToInt());
                                    combatGeneral.LifeMaxNum = MathUtils.Addition(combatGeneral.LifeMaxNum, (combatGeneral.LifeNum * increaseNum).ToInt());
                                }
                                else
                                {
                                    combatGeneral.LifeNum = MathUtils.Addition(combatGeneral.LifeNum, baseEffectNum);
                                    combatGeneral.LifeMaxNum = MathUtils.Addition(combatGeneral.LifeMaxNum, baseEffectNum);
                                }
                                break;
                            //物理攻击
                            case "2":
                                
                                    if (combatGeneral.ExtraAttack != null)
                                    {
                                        combatGeneral.ExtraAttack.AdditionWuliNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionWuliNum, baseEffectNum);
                                    }
                                
                                break;
                            //魂技攻击
                            case "3":
                                if (increaseNum > 0 && combatGeneral.ExtraAttack != null)
                                {
                                    combatGeneral.ExtraAttack.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionHunjiNum, (combatGeneral.ExtraAttack.AdditionHunjiNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    if (combatGeneral.ExtraAttack != null)
                                    {
                                        combatGeneral.ExtraAttack.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionHunjiNum, baseEffectNum);
                                    }
                                }
                                break;
                            //魔法攻击
                            case "4":
                                if (increaseNum > 0 && combatGeneral.ExtraAttack != null)
                                {
                                    combatGeneral.ExtraAttack.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionMofaNum, (combatGeneral.ExtraAttack.AdditionMofaNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    if (combatGeneral.ExtraAttack != null)
                                    {
                                        combatGeneral.ExtraAttack.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraAttack.AdditionMofaNum, baseEffectNum);
                                    }
                                }
                                break;
                            //物理防御
                            case "5":
                                if (increaseNum > 0 && combatGeneral.ExtraDefense != null)
                                {
                                    combatGeneral.ExtraDefense.AdditionWuliNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionWuliNum, (combatGeneral.ExtraDefense.AdditionWuliNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    if (combatGeneral.ExtraDefense != null)
                                    {
                                        combatGeneral.ExtraDefense.WuliNum = MathUtils.Addition(combatGeneral.ExtraDefense.WuliNum, baseEffectNum);
                                    }
                                }
                                break;
                            //魂技防御
                            case "6":
                                if (increaseNum > 0 && combatGeneral.ExtraDefense != null)
                                {
                                    combatGeneral.ExtraDefense.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionHunjiNum, (combatGeneral.ExtraDefense.AdditionHunjiNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    if (combatGeneral.ExtraDefense != null)
                                    {
                                        combatGeneral.ExtraDefense.AdditionHunjiNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionHunjiNum, baseEffectNum);
                                    }
                                }
                                break;
                            //魔法防御
                            case "7":
                                if (increaseNum > 0 && combatGeneral.ExtraDefense != null)
                                {
                                    combatGeneral.ExtraDefense.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionMofaNum, (combatGeneral.ExtraDefense.AdditionMofaNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    if (combatGeneral.ExtraDefense != null)
                                    {
                                        combatGeneral.ExtraDefense.AdditionMofaNum = MathUtils.Addition(combatGeneral.ExtraDefense.AdditionMofaNum, baseEffectNum);
                                    }
                                }
                                break;
                            //暴击
                            case "8":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.BaojiNum = MathUtils.Addition(combatGeneral.BaojiNum, (combatGeneral.BaojiNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.BaojiNum = MathUtils.Addition(combatGeneral.BaojiNum, baseEffectNum);

                                }
                                break;
                            //命中
                            case "9":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.HitNum = MathUtils.Addition(combatGeneral.HitNum, (combatGeneral.HitNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.HitNum = MathUtils.Addition(combatGeneral.HitNum, baseEffectNum);

                                }
                                break;
                            //破击
                            case "10":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.PojiNum = MathUtils.Addition(combatGeneral.PojiNum, (combatGeneral.PojiNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.PojiNum = MathUtils.Addition(combatGeneral.PojiNum, baseEffectNum);

                                }
                                break;
                            //韧性
                            case "11":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.RenxingNum = MathUtils.Addition(combatGeneral.RenxingNum, (combatGeneral.RenxingNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.RenxingNum = MathUtils.Addition(combatGeneral.RenxingNum, baseEffectNum);

                                }
                                break;
                            //闪避
                            case "12":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.ShanbiNum = MathUtils.Addition(combatGeneral.ShanbiNum, (combatGeneral.ShanbiNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.ShanbiNum = MathUtils.Addition(combatGeneral.ShanbiNum, baseEffectNum);

                                }
                                break;
                            //格挡
                            case "13":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.GedangNum = MathUtils.Addition(combatGeneral.GedangNum, (combatGeneral.GedangNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.GedangNum = MathUtils.Addition(combatGeneral.GedangNum, baseEffectNum);

                                }
                                break;
                            //必杀
                            case "14":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.BishaNum = MathUtils.Addition(combatGeneral.BishaNum, (combatGeneral.BishaNum * increaseNum));

                                }
                                else
                                {
                                    combatGeneral.BishaNum = MathUtils.Addition(combatGeneral.BishaNum, baseEffectNum);

                                }
                                break;
                            //力量
                            case "26":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.PowerNum = MathUtils.Addition(combatGeneral.PowerNum, (combatGeneral.PowerNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    combatGeneral.PowerNum = MathUtils.Addition(combatGeneral.PowerNum, baseEffectNum.ToInt());
                                }
                                break;
                            //魂力
                            case "27":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.SoulNum = MathUtils.Addition(combatGeneral.SoulNum, (combatGeneral.SoulNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    combatGeneral.SoulNum = MathUtils.Addition(combatGeneral.SoulNum, baseEffectNum.ToInt());
                                }
                                break;
                            //智力
                            case "28":
                                if (increaseNum > 0)
                                {
                                    combatGeneral.IntellectNum = MathUtils.Addition(combatGeneral.IntellectNum, (combatGeneral.IntellectNum * increaseNum).ToInt());

                                }
                                else
                                {
                                    combatGeneral.IntellectNum = MathUtils.Addition(combatGeneral.IntellectNum, baseEffectNum.ToInt());
                                }
                                break;

                        }
                    }

                });

            }
        }
Ejemplo n.º 25
0
        /// <summary>
        /// 佣兵属性集合
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="generalID"></param>
        /// <returns></returns>
        public static List<GeneralProperty> GetAbility(string userID, int generalID,UserGeneral userGeneral)
        {
           
            List<GeneralProperty> gPropertyList = new List<GeneralProperty>();
            var cacheSetUserEmbattle = new GameDataCacheSet<UserEmbattle>();
            GeneralProperty generalProperty = new GeneralProperty();
            var userMagic = new GameDataCacheSet<UserMagic>().Find(userID, s => s.IsEnabled);
            CombatGeneral combatGeneral = new CombatGeneral()
            {
                UserID = userID,
                GeneralID = generalID,
                ExtraAttack = new CombatProperty(),
                ExtraDefense = new CombatProperty(),
                LifeNum = userGeneral.LifeNum,
                LifeMaxNum = userGeneral.LifeMaxNum
            };
            
            
            var userEmbattleList = cacheSetUserEmbattle.FindAll(userID,
                                                                s =>
                                                                s.MagicID == (userMagic != null ? userMagic.MagicID : 0));
            UserEmbattleQueue.embattleList = userEmbattleList;
            UserEmbattleQueue.KarmaAddition(userID, combatGeneral);
            userGeneral.TLifeNum = combatGeneral.LifeNum;
            userGeneral.TLifeMaxNun = combatGeneral.LifeMaxNum;
            //int LifeReply = 0; // 生命回复
            //物理攻击
            generalProperty = GetAbilityProperty(userID, generalID, AbilityType.WuLiGongJi);
            generalProperty.AbilityValue = MathUtils.Addition(generalProperty.AbilityValue, generalProperty.AbilityValue*combatGeneral.ExtraAttack.AdditionWuliNum);
            gPropertyList.Add(generalProperty);
            //物理防御
            generalProperty = GetAbilityProperty(userID, generalID, AbilityType.WuLiFangYu);
            generalProperty.AbilityValue = MathUtils.Addition(generalProperty.AbilityValue, generalProperty.AbilityValue * combatGeneral.ExtraDefense.AdditionWuliNum);
            gPropertyList.Add(generalProperty);
            //魂技攻击
            generalProperty = GetAbilityProperty(userID, generalID, AbilityType.HunJiGongJi);
            generalProperty.AbilityValue = MathUtils.Addition(generalProperty.AbilityValue, generalProperty.AbilityValue * combatGeneral.ExtraAttack.AdditionHunjiNum);
            gPropertyList.Add(generalProperty);
            //魂技防御   
            generalProperty = GetAbilityProperty(userID, generalID, AbilityType.HunJiFangYu);
            generalProperty.AbilityValue = MathUtils.Addition(generalProperty.AbilityValue, generalProperty.AbilityValue * combatGeneral.ExtraDefense.AdditionHunjiNum);
            gPropertyList.Add(generalProperty);
            //魔法攻击
            generalProperty = GetAbilityProperty(userID, generalID, AbilityType.MoFaGongJi);
            generalProperty.AbilityValue = MathUtils.Addition(generalProperty.AbilityValue, generalProperty.AbilityValue * combatGeneral.ExtraAttack.AdditionMofaNum);
            gPropertyList.Add(generalProperty);
            //魔法防御
            generalProperty = GetAbilityProperty(userID, generalID, AbilityType.MoFaFangYu);
            generalProperty.AbilityValue = MathUtils.Addition(generalProperty.AbilityValue, generalProperty.AbilityValue * combatGeneral.ExtraDefense.AdditionMofaNum);
            gPropertyList.Add(generalProperty);

            //暴击
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.BaoJi));
            //命中
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.MingZhong));
            //破击 
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.PoJi));
            //韧性
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.RenXing));
            //闪避
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.ShanBi));
            //格挡
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.GeDang));
            //必杀
            gPropertyList.Add(GetAbilityProperty(userID, generalID, AbilityType.BiSha));

            //先攻
            gPropertyList.Add(new GeneralProperty() { AbilityType = AbilityType.FirstStrike, AbilityValue = (decimal)TotalPriorityNum(userID, generalID) });

            return gPropertyList;
        }
Ejemplo n.º 26
0
 /// <summary>
 /// 灵件配置
 /// </summary>
 /// <param name="general"></param>
 /// <param name="item"></param>
 /// <returns></returns>
 private static void SetSparePart(CombatGeneral general, UserItemInfo item)
 {
     var user = new GameDataCacheSet<GameUser>().FindKey(general.UserID);
     if (user != null)
     {
         var sparepartList = user.SparePartList.FindAll(m => m.UserItemID.Equals(item.UserItemID));
         foreach (var sparepart in sparepartList)
         {
             foreach (var property in sparepart.Propertys)
             {
                 switch (property.AbilityType)
                 {
                     case AbilityType.WuLiGongJi:
                         general.ExtraAttack.WuliNum += property.Num.ToInt();
                         break;
                     case AbilityType.HunJiGongJi:
                         general.ExtraAttack.HunjiNum += property.Num.ToInt();
                         break;
                     case AbilityType.MoFaGongJi:
                         general.ExtraAttack.MofaNum += property.Num.ToInt();
                         break;
                     case AbilityType.WuLiFangYu:
                         general.ExtraDefense.WuliNum += property.Num.ToInt();
                         break;
                     case AbilityType.HunJiFangYu:
                         general.ExtraDefense.HunjiNum += property.Num.ToInt();
                         break;
                     case AbilityType.MoFaFangYu:
                         general.ExtraDefense.MofaNum += property.Num.ToInt();
                         break;
                     case AbilityType.MingZhong:
                         general.HitNum = MathUtils.Addition(general.HitNum, property.Num.ToDecimal(), decimal.MaxValue);
                         break;
                     case AbilityType.ShanBi:
                         general.ShanbiNum = MathUtils.Addition(general.ShanbiNum, property.Num.ToDecimal(), decimal.MaxValue);
                         break;
                     case AbilityType.RenXing:
                         general.RenxingNum = MathUtils.Addition(general.RenxingNum, property.Num.ToDecimal(), decimal.MaxValue);
                         break;
                     case AbilityType.BaoJi:
                         general.BaojiNum = MathUtils.Addition(general.BaojiNum, property.Num.ToDecimal(), decimal.MaxValue);
                         break;
                     case AbilityType.PoJi:
                         general.PojiNum = MathUtils.Addition(general.PojiNum, property.Num.ToDecimal(), decimal.MaxValue);
                         break;
                     case AbilityType.GeDang:
                         general.GedangNum = MathUtils.Addition(general.GedangNum, property.Num.ToDecimal(), decimal.MaxValue);
                         break;
                     default:
                         break;
                 }
             }
         }
     }
 }
Ejemplo n.º 27
0
 private static decimal GetEffTypeNum(CombatGeneral general, AbilityType abilityType)
 {
     List<SkillLvInfo> skillLvList = CreateSkillLvInfo(general);
     foreach (SkillLvInfo info in skillLvList)
     {
         if (info.EffType == abilityType && RandomUtils.IsHit(info.Probability))
         {
             return info.EffNum;
         }
     }
     return 0;
 }