/// <summary> /// 换装 /// </summary> /// <param name="account"></param> /// <param name="role"></param> /// <param name="sid"></param> /// <param name="bytes">时装id数组</param> /// <returns></returns> private static async Task <BaseResponseData> ChangeAvater() { ChangeAvatarResult result = new ChangeAvatarResult(); if (User.bytes == null) { result.Result = GameEnum.WsResult.ParamsError; return(result); } var data = await InitHelpers.GetPse().DeserializeAsync <ChangeAvatarReq>(User.bytes); if (data == null) { result.Result = GameEnum.WsResult.ParamsError; return(result); } var id = data.Id; return(await BagController.Instance.ChangeAvatar(id, result)); }
public async Task <ChangeAvatarResult> ChangeAvatar(int[] id, ChangeAvatarResult result) { var role = LogicServer.User.role; #region 检查时装部位 var parts = GetAvatarParts(role.Avatar); List <int> oldAvatar = new List <int>(); //换下来的时装id #endregion foreach (var i in id) { if (!(CheckItemInBag(i, 1))) { result.Result = GameEnum.WsResult.NotItemInBag; return(result); } var tmp = GetForId(i); if (tmp == null) { result.Result = GameEnum.WsResult.NotItemConfig; return(result); } oldAvatar.AddRange(GetOldAvatarItemId(parts, tmp.Parts)); foreach (var j in tmp.Attribute) //增加属性 { var attr = role.UserAttr.First(a => a.UserAttrID == j.AttributeID); checked { try { attr.Count += j.Count; } catch (OverflowException ex) { throw new Exception(ex.Message); } } } } foreach (var i in oldAvatar.Distinct()) //移除旧的属性 { var tmp = GetForId(i); foreach (var item in tmp.Attribute) { var attr = role.UserAttr.First(a => a.UserAttrID == item.AttributeID); checked { try { attr.Count -= item.Count; } catch (OverflowException ex) { throw new Exception(ex.Message); } } } } //检查背包剩余空间是否可以存放卸下来的时装 foreach (var oldItem in oldAvatar) { if (!CheckBagSpace(oldItem, 1)) { result.Result = GameEnum.WsResult.NotEnoughBagSpace; return(result); } } RoleDataHelper.Instance.UpdateRoleByRoleIdAsync(role.Id, role).Wait(); //移除背包中的时装 foreach (var item in id) { await RemoveItemsAsync(item, 1); } foreach (var item in oldAvatar) { await AddItemToRoleBag(item, 1); //增加旧时装到背包中 } //更换时装到身上 await UpdateAvaterAsync(id, parts); ///构造返回 foreach (var art in role.UserAttr) { result.ChangeAttr.Add(new Model.ResponseData.UserAttr() { Count = art.Count, UserAttrID = art.UserAttrID }); } result.BagInfo.CurUsedCell = LogicServer.User.bag.CurUsedCell; result.BagInfo.MaxCellNumber = LogicServer.User.bag.MaxCellNumber; foreach (var item in LogicServer.User.bag.Items) { result.BagInfo.Items.Add(item.Key, new LoadRoleBagInfo() { CurCount = item.Value.CurCount, OnSpace = item.Value.OnSpace }); } return(result); }