Exemple #1
0
        /// <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));
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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");
        }
Exemple #4
0
        /// <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));
        }
Exemple #5
0
 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;
     }
 }
Exemple #6
0
        /// <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);
        }