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; }
/// <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); } } }
public CombatCenter(EmbattleRole role, CombatGeneral general, EmbattleRole targerRole, TargetHandle targetHandle) { _role = role; _attrGeneral = general; _targerRole = targerRole; _targerHandle = targetHandle; _processLog = new CombatProcess(); }
/// <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; }
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; }
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; }
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; }
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); } } }
/// <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; }); } } }
/// <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); } } }
/// <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); }
/// <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); }
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; } }
/// <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)); } } }
/// <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; }
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; }
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; }
/// <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; }
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; } }
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; }
/// <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; }
/// <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; } } } }
public CombatPhysicalAttack(CombatGeneral general) : base(general) { }
/// <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; } } }); } }
/// <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; }
/// <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; } } } } }
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; }