/// <summary> 职业系数 </summary> /// <param name="userid"></param> /// <param name="rivalid"></param> /// <param name="vocation"></param> private void VocationAdd(Int64 userid, Int64 rivalid, int vocation) { var baseVocation = Variable.BASE_VOCATION.FirstOrDefault(m => m.vocation == vocation); if (baseVocation == null) { return; } Vocations.Add(userid, baseVocation.fight); RivalVocationAdd(rivalid); }
/// <summary>伤害计算</summary> /// <param name="attackrole">攻击武将</param> /// <param name="defenserole">防守武将</param> /// <param name="flag">是否暴击</param> public Int64 DamageCount(Role attackrole, Role defenserole, bool flag) { //A属性 = A基础属性+A装备属性+A生活技能属性+A称号属性 //A总攻击 = A武力*1.5+A装备攻击力+A效果之增加攻击力-A效果之减少攻击力 //B总防御 = B装备防御力+B效果之增加防御力-B效果之减少防御力 //A会心几率 = A魅力/25 *0.01 +A效果之会心几率 //A会心效果 = 150% + (A政务/15)*0.01 +A效果之会心效果 //B闪避几率 = (B智谋/28)*0.01 +B效果之会心效果 //A伤害加成 = A效果之增加伤害+A装备增加伤害 //B减伤 = B装备减伤 + B效果之减伤 //B生命 = B基础生命+B装备生命+B技能生命 //攻击伤害 = (A总攻击-B总防御)*(1-B减伤)*(100% + A会心成功值*(A会心效果-100%))*(100% + A伤害加成) var A0 = attackrole.attack; //A总攻击 var A1 = defenserole.defense; //B总防御 var A3 = flag ? 1.5 + (attackrole.critAddition / 100) : 1.0; //A会心效果 var A5 = A0 - A1; //A总攻击-B总防御 var A6 = A5 > 0 ? A5 : 1; //A总攻击-B总防御 var A7 = 1 + (attackrole.hurtIncrease / 100); var A10 = (A6) * ((100 - defenserole.hurtReduce) / 100) * A3 * A7; double number = 1; var n = Round - 21; if (n >= 0) { var b = n / 10; if (b == 0) { number = number + 1; } if (b > 0) { number = number + (1 + n * 0.5); } } var count = A10 * number; if (Vocations.ContainsKey(attackrole.user_id)) { count = count * Vocations[attackrole.user_id]; } return(count < 0 ? 1 : Convert.ToInt64(count)); }
/// <summary> 对手职业系数 </summary> private void RivalVocationAdd(Int64 rivalid) { int v; switch (RivalFightType) { case (int)FightType.BOTH_SIDES: case (int)FightType.ONE_SIDE: { if (Variable.OnlinePlayer.ContainsKey(rivalid)) { var rivalsession = Variable.OnlinePlayer[rivalid] as TGGSession; if (rivalsession == null) { return; } v = rivalsession.Player.User.player_vocation; RivalName = rivalsession.Player.User.player_name; } else { var user = tg_user.FindByid(rivalid); if (user == null) { return; } v = user.player_vocation; RivalName = user.player_name; } break; } default: { return; } } var bv = Variable.BASE_VOCATION.FirstOrDefault(m => m.vocation == v); if (bv == null) { return; } Vocations.Add(rivalid, bv.fight); }