Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <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);
        }