/// <summary> /// 使用普通道具 /// </summary> /// <param name="sm"></param> /// <param name="roleId"></param> /// <param name="itemId"></param> /// <param name="count"></param> /// <returns></returns> private async Task <UseItemResult> UseGeneralItem(int itemId, long count) { var item = GetItemById(itemId); if (item == null) { return(null); } UseItemResult result = new UseItemResult(); //检查背包空间 if (!CheckBagSpace(itemId, count)) { result.Result = GameEnum.WsResult.NotEnoughBagSpace; return(result); } var itemCount = GetUsedItems(itemId, count); //拿到将要造成的影响 道具 id 道具数量 //删除使用的道具 if (!(await RemoveItemsAsync(itemId, count))) { result.Result = GameEnum.WsResult.NotEnoughItem; return(result); } //区分一下 是增加属性 还是增加道具 return(await UseItemResult(itemCount)); }
/// <summary> /// 使用道具的结果 加道具/属性/经验/金钱/打开UI /// </summary> /// <param name="sm"></param> /// <param name="roleId"></param> /// <param name="dicItem"></param> /// <returns></returns> public async Task <UseItemResult> UseItemResult(Dictionary <int, ItemTypeAndCount> dicItem) { if (dicItem == null) { throw new ArgumentNullException(); } UseItemResult result = new UseItemResult(); foreach (var item in dicItem) { if (item.Key <= 0) { continue; } var itemId = item.Key; var itemCount = item.Value.Count; //数量 switch (item.Value.ItemType) { case UseEffet.GetItem: //获得道具 await AddItemToRoleBag(itemId, itemCount); break; case UseEffet.AddAttribute: //增加属性 var attr = await AddRoleAttrByUseItemAsync(itemId, itemCount); result.ChangeAttr.Add(new Model.ResponseData.UserAttr() { Count = attr.Count, UserAttrID = attr.UserAttrID }); break; case UseEffet.AddCurrency: //增加金钱 await AddMoneyByUseItemAsync(itemId, itemCount); break; } } foreach (var b in LogicServer.User.bag.Items) { result.BagInfo.Items.Add(b.Key, new LoadRoleBagInfo() { CurCount = b.Value.CurCount, OnSpace = b.Value.OnSpace }); } result.BagInfo.CurUsedCell = LogicServer.User.bag.CurUsedCell; result.BagInfo.MaxCellNumber = LogicServer.User.bag.MaxCellNumber; return(result); }
public void FindsBonusItems(string message) { var subject = new UseItemResult() { Messages = new List <string>() { message } }; var item = subject.BonusItems.First(); Check.That(item.Id).IsEqualTo("b338a5d1-acfc-4bbf-b1ef-95a1ab0234b5"); Check.That(item.Name).IsEqualTo("Blue Shell"); }
/// <summary> /// 使用道具 /// </summary> /// <param name="account"></param> /// <param name="role"></param> /// <param name="sid"></param> /// <param name="bytes"></param> /// <returns></returns> private static async Task <BaseResponseData> UseItem() { UseItemResult result = new UseItemResult(); if (User.bytes == null) { result.Result = GameEnum.WsResult.ParamsError; return(result); } var data = await InitHelpers.GetPse().DeserializeAsync <UseItemReq>(User.bytes); if (data == null) { result.Result = GameEnum.WsResult.ParamsError; return(result); } var id = data.ItemId; var count = data.Count; return(await BagController.Instance.UseItemsAsync(_stateManager, User.role.Id, id, count)); }
public static void UpdateItemStock(UseItemResult item, MainWindowViewModel viewModel) { if (AstrumClient.INSTANT_HALF_STAMINA.Equals(item._id)) { viewModel.StaminaHalfStock = item.stock.after; viewModel.StaminaValue = item.value.after; } else if (AstrumClient.INSTANT_STAMINA.Equals(item._id)) { viewModel.StaminaStock = item.stock.after; viewModel.StaminaValue = item.value.after; } else if (AstrumClient.INSTANT_MINI_BP.Equals(item._id)) { viewModel.BpMiniStock = item.stock.after; viewModel.BpValue = item.value.after; } else if (AstrumClient.INSTANT_BP.Equals(item._id)) { viewModel.BpStock = item.stock.after; viewModel.BpValue = item.value.after; } }
/// <summary> /// 多次使用同一个物品 /// </summary> /// <param name="sm"></param> /// <param name="roleId"></param> /// <param name="itemId"></param> /// <returns></returns> public async Task <BaseResponseData> UseItemsAsync(IReliableStateManager sm, Guid roleId, int itemId, long count) { UseItemResult result = new UseItemResult(); if (itemId <= 0) { throw new ArgumentNullException(); } //1 检查传过来的道具类型是否都是可以使用的类型 if (!(CheckItemType(itemId))) { result.Result = GameEnum.WsResult.ItemTypeError; return(result); //道具不可使用 } if (!(CheckItemInBag(itemId, count))) { result.Result = GameEnum.WsResult.NotItemInBag; return(result); } else { var item = GetItemById(itemId); //获取物品 if (item != null) { //检查玩家级别是否可以使用该物品 if (CheckItemLevel(itemId)) { switch (item.Type) { case 1: //普通物品 可以使用 result = await UseGeneralItem(itemId, count); break; case (int)Currency.Coin: //金钱类物品 case (int)Currency.Gold: //金钱类物品 result.BagInfo = await GoldCtrl(itemId, count); FinanceLogData loginfo = new FinanceLogData() { Count = item.Sell.Count * count, EventName = item.Name, MoneyType = item.Sell.CurrencyID, Type = (int)GameEnum.FinanceLog.SellItem }; await FinanceLogController.Instance.UpdateFinanceLog(roleId, loginfo); await MsgSender.Instance.FinanceLogUpdate(loginfo); break; } return(result); } else { result.Result = GameEnum.WsResult.NeedLevel; } } else { result.Result = GameEnum.WsResult.NotItemConfig; } } return(result); }