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是否触发暴击 }
void GetSkillLit(UserToken token) { List <SkillDTO> skillDtos = Skill.GetSkillList(token); Write(token, SkillProtocol.GetskillList_SRES, skillDtos); }