Ejemplo n.º 1
0
        void GetValue(UserToken token, int userid, int skill, ref AbsRoleModel att, ref AbsRoleModel target, ref List <int[]> damages)
        {
            int attValue      = att.attack;
            int attArmour     = att.armour;
            int attCrit       = att.crit;
            int targetDef     = target.def;
            int targetExeCrit = target.exemptCrit;

            //if (userid >= 0)//攻击者为真人
            //{
            //    UserDTO userDto = (UserDTO)att;

            //    for (int i = 0; i < userDto.equips.Length; i++)
            //    {
            //        if (userDto.equips[i] > 0)//获取拥有的装备,加上装备的属性
            //        {
            //          InventoryItemDTO itemDto=  inventoryBiz.GetItem(userDto.equips[i]);
            //            if (itemDto != null)
            //            {
            //                attValue += itemDto.attack;
            //                attArmour += itemDto.armour;
            //                attCrit += itemDto.crit;
            //            }
            //        }
            //    }
            //}
            //if (target.id >= 0)//被攻击者为真人
            //{
            //    UserDTO targetDto = (UserDTO)target;

            //    for (int i = 0; i < targetDto.equips.Length; i++)
            //    {
            //        if (targetDto.equips[i] > 0)//获取拥有的装备,加上装备的属性
            //        {
            //            InventoryItemDTO itemDto = inventoryBiz.GetItem(targetDto.equips[i]);
            //            targetDef += itemDto.def;
            //            targetExeCrit += itemDto.exemptCrit;
            //        }
            //    }
            //}

            if (skill > 0)//若此伤害为技能伤害
            {
                List <SkillDTO> skillDtos = skillBiz.GetSkillList(token);
                for (int i = 0; i < skillDtos.Count; i++)
                {
                    if (skillDtos[i].id == skill)//获取对应的技能伤害加成
                    {
                        attValue = (int)(attValue * ((float)skillDtos[i].applyValue / 100));
                        break;
                    }
                }
            }

            int    value  = (attValue - (targetDef - attArmour > 0 ? targetDef - attArmour : 0));
            int    crit   = 0;//是否暴击,0为没有,1为有触发暴击
            Random random = new Random(DateTime.Now.Millisecond);

            if (random.Next(1, 100) < (attCrit - targetExeCrit > 0 ? attCrit - targetExeCrit : 0))
            {
                value *= 2;
                crit   = 1;
            }
            target.hp -= value;
            if (target.id >= 0)//被攻击者为真人则更新被攻击者数据
            {
                USER user = userCache.GetUserById(target.id);
                user.Hp = target.hp;
            }
            damages.Add(new[] { target.id, value, target.hp <= 0 ? 0 : 1, crit });//0为被攻击者id,1为收到伤害的值,2被攻击者是否死亡,3是否触发暴击
        }
Ejemplo n.º 2
0
        void GetSkillLit(UserToken token)
        {
            List <SkillDTO> skillDtos = Skill.GetSkillList(token);

            Write(token, SkillProtocol.GetskillList_SRES, skillDtos);
        }