/// <summary>增加武将闪避几率 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddDodgeProbability(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (skill.round > 0 && skill.round != 99999) { if (!IsTrue(skill.robabilityValues)) { continue; } RemoveRoleBuff(m, (int)FightingSkillType.DUCK_PROBABILITY); } var count = m.dodgeProbability + skill.values; if (count < 0) { skill.values = m.dodgeProbability; m.dodgeProbability = 0; } else { m.dodgeProbability = count; } AddRoleBuff(m, skill.round, (int)FightingSkillType.DUCK_PROBABILITY, skill.values, true); } }
/// <summary>增加武将减伤 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddHurtReduce(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (skill.round > 0 && skill.round != 99999) { if (!IsTrue(skill.robabilityValues)) { continue; } RemoveRoleBuff(m, (int)FightingSkillType.REDUCE_DAMAGE_PERCENTAGE); } var count = m.hurtReduce + skill.values; if (count < 0) { skill.values = m.hurtReduce; m.hurtReduce = 0; } else { m.hurtReduce = count; } AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_DAMAGE_PERCENTAGE, skill.values, true); } }
/// <summary>增加武将攻击 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddAttack(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (skill.round > 0 && skill.round != 99999) { if (!IsTrue(skill.robabilityValues)) { continue; } RemoveRoleBuff(m, (int)FightingSkillType.INCREASE_ATTACK); } var count = m.attack + skill.values; if (count < 0) { skill.values = m.attack; m.attack = 0; } else { m.attack = count; } AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASE_ATTACK, skill.values, true); } }
/// <summary>增加武将会心效果 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddCritKmowing(List <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (skill.round > 0 && skill.round != 99999) { if (!IsTrue(skill.robabilityValues)) { continue; } RemoveRoleBuff(m, (int)FightingSkillType.INCREASE_KMOWING); } var count = m.critAddition + skill.values; if (count < 0) { skill.values = m.critAddition; m.critAddition = 0; } else { m.critAddition = count; } AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASE_KMOWING, skill.values, true); } }
/// <summary> 组装技能效果实体 </summary> /// <param name="item">要解析的字符串</param> /// <returns>FightSkillEffects</returns> private FightSkillEffects BuildSkillEffects(string item) { var array = item.Split('_'); if (array.Length < 5 || array.Length > 6) { return(null); } var skill = new FightSkillEffects(); skill.type = Convert.ToInt32(array[0]); //技能效果类型 skill.target = Convert.ToInt32(array[1]); //技能效果目标 (1=本方 2=敌方) skill.range = Convert.ToInt32(array[2]); //技能效果范围 (1=单体 2=全体) skill.round = Convert.ToInt32(array[3]); //技能效果回合数 skill.values = Convert.ToDouble(array[4]); //技能效果值 if (array.Length == 6) //几率类型效果 { skill.robabilityValues = Convert.ToDouble(array[5]); //技能效果几率 } if (skill.robabilityValues <= 0) { skill.robabilityValues = 100; } return(skill); }
/// <summary>效果类型</summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void EffectType(List <FightRole> list, FightSkillEffects skill) { if (!list.Any()) { return; } switch (skill.type) //技能效果类型 { case (int)FightingSkillType.INCREASE_ATTACK: { RoleAddAttack(list, skill); break; } //增加攻击 case (int)FightingSkillType.REDUCE_ATTACK: { RoleReduceAttack(list, skill); break; } //减少攻击 case (int)FightingSkillType.INCREASE_DEFENSE: { RoleAddDefense(list, skill); break; } //增加防御 case (int)FightingSkillType.REDUCE_DEFENSE: { RoleReduceDefense(list, skill); break; } //减少防御 case (int)FightingSkillType.KMOWING_PROBABILITY: { RoleAddCritProbability(list, skill); break; } //会心几率 case (int)FightingSkillType.INCREASE_KMOWING: { RoleAddCritKmowing(list, skill); break; } //增加会心效果 case (int)FightingSkillType.DUCK_PROBABILITY: { RoleAddDodgeProbability(list, skill); break; } //闪避率 case (int)FightingSkillType.IGNORE_DUCK_PROBABILITY: { RoleProbability(list, skill); break; } //无视闪避几率 case (int)FightingSkillType.INCREASES_DAMAGE_PERCENTAGE: { RoleAddHurtIncrease(list, skill); break; } //增加伤害百分比 case (int)FightingSkillType.REDUCE_DAMAGE_PERCENTAGE: { RoleAddHurtReduce(list, skill); break; } //降低伤害百分比 case (int)FightingSkillType.DIZZINESS: { RoleDiziness(list, skill); break; } //眩晕 case (int)FightingSkillType.SEAL: { RoleSeal(list, skill); break; } //封印 case (int)FightingSkillType.INCREASES_STRENGTH: { RoleAddAngerCount(list, skill); break; } //增加气力 case (int)FightingSkillType.REDUCE_STRENGTH: { RoleReduceAngerCount(list, skill); break; } //减少气力 case (int)FightingSkillType.INCREASES_MYSTERY_PROBABILITY: { RoleAddMysteryProbability(list, skill); break; } //增加奥义触发几率 case (int)FightingSkillType.INCREASES_YINCOUNT: { if (!IsTrue(skill.robabilityValues)) { return; } AddYinCount(list, skill); break; } //增加印计数 case (int)FightingSkillType.REDUCE__YINCOUNT: { if (!IsTrue(skill.robabilityValues)) { return; } ReduceYinCount(list, skill); break; } //减少印计数 default: { break; } } }
/// <summary> 移除武将身上Buff值 </summary> private void RemoveRoleBuffValues(FightRole role, int type, double values) { var l = new List <FightRole> { role }; var skillEffects = new FightSkillEffects { type = type, values = values, round = -100 }; //round是负数表示恢复属性影响值 if (type != (int)FightingSkillType.DIZZINESS && type != (int)FightingSkillType.SEAL) { EffectType(l, skillEffects); } }
/// <summary> 封印武将 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleSeal(IEnumerable <FightRole> list, FightSkillEffects skill) { if (skill.round < 0) { return; } foreach (var m in list) { if (!IsTrue(skill.robabilityValues)) { continue; //是否封印 } AddRoleBuff(m, skill.round, (int)FightingSkillType.SEAL, true); } }
/// <summary>增加武将气力 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { #if DEBUG XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "增加气力 " + skill.values, "剩余气力 " + m.angerCount + skill.values); #endif if (!IsTrue(skill.robabilityValues)) { continue; } m.angerCount = m.angerCount + Convert.ToInt32(skill.values); AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASES_STRENGTH, skill.values, true); } }
/// <summary>减少武将气力 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleReduceAngerCount(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (!IsTrue(skill.robabilityValues)) { continue; } var count = m.angerCount - Convert.ToInt32(skill.values); if (count < 0) { skill.values = m.angerCount; m.angerCount = 0; } AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_STRENGTH, skill.values, false); #if DEBUG XTrace.WriteLine("{0} {1} {2}", "原本气力 " + m.angerCount, "减少气力 " + skill.values, "剩余气力 " + count); #endif } }
/// <summary>增加印计数</summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void AddYinCount(IEnumerable <FightRole> list, FightSkillEffects skill) { var role = list.First(); var userid = role.user_id; var value = Convert.ToInt32(skill.values); if (!dic_yincount.ContainsKey(userid)) { dic_yincount.Add(userid, value); } else { dic_yincount[userid] += value; #if DEBUG XTrace.WriteLine("{0} {1}", "增加印计数 " + value, "当前印计数 " + dic_yincount[userid]); #endif } GetYinCount(move); AddRoleBuff(role, skill.round, (int)FightingSkillType.INCREASES_YINCOUNT, value, true); }
/// <summary>增加武将防御 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleAddDefense(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (skill.round > 0 && skill.round != 99999) { if (!IsTrue(skill.robabilityValues)) { continue; } RemoveRoleBuff(m, (int)FightingSkillType.INCREASE_DEFENSE); } m.defense = m.defense + skill.values; if (m.defense < 0) { m.defense = 0; skill.values = 0; } AddRoleBuff(m, skill.round, (int)FightingSkillType.INCREASE_DEFENSE, skill.values, true); } }
/// <summary>减少印计数</summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void ReduceYinCount(IEnumerable <FightRole> list, FightSkillEffects skill) { var role = list.First(); var userid = role.user_id; var value = Convert.ToInt32(skill.values); if (!dic_yincount.ContainsKey(userid)) { dic_yincount.Add(userid, 0); } else { var yincount = dic_yincount[userid]; var count = yincount - value; dic_yincount[userid] = count < 0 ? 0 : count; #if DEBUG XTrace.WriteLine("{0} {1} {2}", "原本印计数 " + yincount, "减少印计数 " + value, "剩余印计数 " + count); #endif } GetYinCount(move); AddRoleBuff(role, skill.round, (int)FightingSkillType.REDUCE__YINCOUNT, value, false); }
/// <summary> 获取技能目标武将 </summary> /// <param name="skill">技能</param> /// <param name="p">触发方的阵形</param> /// <param name="_p">触发方敌对的阵形</param> /// <returns></returns> private List <FightRole> GetTargetRole(FightSkillEffects skill, FightPersonal p, FightPersonal _p) { bool flag; switch (skill.target) //目标类型 1己方 2敌方 { case (int)FightTargetType.OWN: { flag = true; break; } //己方 case (int)FightTargetType.ENEMY: { flag = false; break; } //敌方 default: { return(new List <FightRole>()); } } var tp = flag ? p : _p; switch (skill.range) //效果范围 1单人 2多人 { case (int)EffectRangeType.SINGLE: { return(GetTargetRole(tp, false, flag)); } //单人 case (int)EffectRangeType.ALL: { return(GetTargetRole(tp, true, flag)); } //多人 default: { return(new List <FightRole>()); } } }
/// <summary>减少武将防御 </summary> /// <param name="list">受影响的武将集合</param> /// <param name="skill"></param> private void RoleReduceDefense(IEnumerable <FightRole> list, FightSkillEffects skill) { foreach (var m in list) { if (skill.round > 0 && skill.round != 99999) { if (!IsTrue(skill.robabilityValues)) { continue; } RemoveRoleBuff(m, (int)FightingSkillType.REDUCE_DEFENSE); } var count = m.defense - skill.values; if (count < 0) { skill.values = m.defense; m.defense = 0; } else { m.defense = count; } AddRoleBuff(m, skill.round, (int)FightingSkillType.REDUCE_DEFENSE, skill.values, false); } }