/// <summary> 增加武将Buff</summary> /// <param name="role">武将</param> /// <param name="round">影响回合数</param> /// <param name="type">技能类型</param> /// <param name="values">技能效果值</param> /// <param name="flag">true:增加 false:减少</param> private void AddRoleBuff(FightRole role, int round, int type, double values, bool flag) { if (round < 0) { return; } switch (round) { case 0: { var roleAtt = new FightRoleBuff { id = role.id, round = 0, type = type, values = -values, state = 0 }; list_buff.Add(roleAtt); break; } case 99999: { role.foreverBuffVos.Add(new BuffVo { type = type, buffValue = values }); return; } default: { var roleAtt = new FightRoleBuff { id = role.id, round = Round + (round - 1), type = type, values = -values, state = 0 }; list_buff.Add(roleAtt); break; } } role.buffVos2.Add(new BuffVo { type = type, buffValue = flag ? values : -values }); #if DEBUG XTrace.WriteLine(string.Format("{0} {1} {2} - {3}", "增加 武将 " + role.id + " BUFF ", " 类型 " + type, " 过期回合数 " + (Round + (round - 1)), " 效果值 " + values)); #endif }
/// <summary>不加气力普通攻击操作</summary> /// <param name="attackrole">当前攻击武将</param> /// <param name="flag">范围类型:true 全体 false:单体</param> private void Attack(FightRole attackrole, bool flag) { var movesvo = move.CloneDeepEntity(); if (attackrole == null) { return; } var list = GetRoleOrRoleAll(GetMatrix(false), flag); if (!list.Any()) { return; } foreach (var item in list) { var iscrit = false; if (!IsTrue(attackrole.IgnoreDuck)) { if (IsDuck(item)) { continue; } } else { #if DEBUG XTrace.WriteLine(string.Format("{0} {1} {2}", "技能成功--> 被打方Id", item.id, "无视闪避触发成功 直接不计算闪避率进行攻击")); #endif } var number = DamageCount(attackrole, item, ref iscrit); if (flag) { number = Convert.ToInt64(number * 0.3); //群攻增加0.3系数 } item.hp = item.hp - number; movesvo.hitIds.Add(Convert.ToDouble(item.id)); //普通受击武将 if (iscrit) { var roleAtt = new FightRoleBuff { id = item.id, round = 0, type = (int)FightingSkillType.CRIT, values = 0, state = 0 }; list_buff.Add(roleAtt); item.buffVos2.Add(new BuffVo { type = (int)FightingSkillType.CRIT, buffValue = -number }); } else { item.damage = number; } } BuildMovesVo(movesvo, (int)SkillType.COMMON); }
/// <summary> 对相应的武将进行影响 </summary> /// <param name="attackrole">攻击武将</param> /// <param name="defenserole">防守武将</param> /// <param name="number">造成的伤害</param> /// <param name="flag">是否暴击</param> private void ByEffect(FightRole attackrole, FightRole defenserole, Int64 number, bool flag) { var movesvo = move.CloneDeepEntity(); movesvo.hitIds.Add(Convert.ToDouble(defenserole.id)); //防守武将id加入受击武将id defenserole.hp = defenserole.hp - number; //修改防守方属性 if (flag) { var roleAtt = new FightRoleBuff { id = defenserole.id, round = 0, type = (int)FightingSkillType.CRIT, values = 0, state = 0 }; list_buff.Add(roleAtt); defenserole.buffVos2.Add(new BuffVo { type = (int)FightingSkillType.CRIT, buffValue = -number }); } else { defenserole.damage = number; } BuildMovesVo(movesvo, (int)SkillType.COMMON); }
/// <summary>是否闪避 </summary> private bool IsDuck(FightRole defenserole) { if (!IsTrue(defenserole.dodgeProbability)) { return(false); } var movesvo = move.CloneDeepEntity(); var roleAtt = new FightRoleBuff { id = defenserole.id, round = 0, type = (int)FightingSkillType.DODGE, values = 0, state = 0 }; list_buff.Add(roleAtt); defenserole.buffVos2.Add(new BuffVo { type = (int)FightingSkillType.DODGE }); movesvo.hitIds.Add(defenserole.id); BuildMovesVo(movesvo, (int)SkillType.COMMON); #if DEBUG XTrace.WriteLine(string.Format("{0} {1} {2}", "被打方Id", defenserole.id, "触发闪避 ")); #endif return(true); }