public IActionResult BuyItem(BuyItemRequest buyItemRequest)
        {
            var buyItemResult = _shopService.BuyItem(buyItemRequest);

            if (buyItemResult.Status)
            {
                return(SuccessResponse());
            }
            else
            {
                return(FailResponse(buyItemResult.Message));
            }
        }
示例#2
0
        public async Task <L2Response> BuyItem(string accountName, string modelUsername, int modelItemId, int modelItemCount, int modelEnchant,
                                               int modelPrice)
        {
            var buyItemRequest = new BuyItemRequest
            {
                AccountName = accountName,
                Username    = modelUsername,
                ItemId      = modelItemId,
                ItemCount   = modelItemCount,
                Enchant     = modelEnchant,
                Price       = modelPrice
            };

            var responseObject = await buyItemRequest.SendPostRequest <L2Response>();

            return(responseObject);
        }
示例#3
0
        public async Task <bool> BuyItemAsync(ApiRequestModel apiRequestModel, BuyItemRequest model)
        {
            var requestUrl = "store_items/buy";

            var requestBody = new
            {
                user_id = model.UserId,
                item_id = model.ItemId
            };

            using (var response = await SendPostRequestAsync(apiRequestModel, requestUrl, requestBody))
            {
                if (!response.IsSuccessStatusCode)
                {
                    return(false);
                }

                return(true);
            }
        }
示例#4
0
        public override async Task BuyItem(BuyItemRequest request, IServerStreamWriter <BuyItemReply> responseStream, ServerCallContext context)
        {
            var session = await context.GetSession();

            if (session == null)
            {
                await responseStream.WriteAsync(new BuyItemReply()
                {
                    Code = ErrorCode.LostSession
                });

                return;
            }

            var reply = new BuyItemReply();

            (reply.Code, reply.Item, reply.AccountGoods) = await ShopManager.BuyItem(session, request.ShopItemId, request.ShopId);

            await responseStream.WriteAsync(reply);
        }
示例#5
0
        void Start()
        {
            // 释放资源
            UIManager.Instance.ClearAll();
            ResourcesManager.Instance.ReleaseAll();

            // 获取请求
            m_InitComplete        = GetComponent <InitCompleteRequest>();
            m_DamageRequest       = GetComponent <DamageRequest>();
            m_HeroMoveRequest     = GetComponent <HeroMoveRequest>();
            m_BuyRequest          = GetComponent <BuyItemRequest>();
            m_UpgradeSkillRequest = GetComponent <UpgradeSkillRequest>();
            m_UseSkillRequest     = GetComponent <UseSkillRequest>();
            m_EffectEndRequest    = GetComponent <EffectEndRequest>();

            // 加载资源
            ResourcesManager.Instance.Load(Paths.UI_BUY, typeof(AudioClip));

            // 发送进入游戏的请求
            GetComponent <EnterBattleRequest>().SendRequest();
        }
        /// <summary>
        /// 購買物品
        /// </summary>
        /// <param name="buyItemRequest"></param>
        /// <returns></returns>
        public ServiceResult BuyItem(BuyItemRequest buyItemRequest)
        {
            User    userInfo = _context.User.SingleOrDefault(x => x.Id == buyItemRequest.UserId);
            Product product  = _context.Product.SingleOrDefault(y => y.Id == buyItemRequest.ProductId);

            if (userInfo == null)
            {
                return(ServiceResult.Fail("使用者資訊錯誤"));
            }
            if (product == null)
            {
                return(ServiceResult.Fail("產品錯誤"));
            }
            // Data Annoatation已判斷
            //if(buyItemRequest.Quantity <= 0)
            //{
            //    return ServiceResult.Fail("請選擇數量");
            //}
            if (userInfo.Money < product.Price * buyItemRequest.Quantity)
            {
                return(ServiceResult.Fail("金幣不足"));
            }

            var userProduct = _context.UserProduct.SingleOrDefault(x => x.ProductId == buyItemRequest.ProductId && x.UserId == buyItemRequest.UserId);

            //DB操作
            if (userProduct == null)
            {
                UserProduct insertUserProduct = _mapper.Map <BuyItemRequest, UserProduct>(buyItemRequest);
                _context.UserProduct.Add(insertUserProduct);
            }
            else
            {
                userInfo.UserProduct.SingleOrDefault(x => x.ProductId == buyItemRequest.ProductId).Quantity += buyItemRequest.Quantity;
            }
            userInfo.Money -= product.Price * buyItemRequest.Quantity;

            _context.SaveChanges();
            return(ServiceResult.Success());
        }
示例#7
0
        public override bool HandlePacket(Peer peer, byte[] data)
        {
            var request = new BuyItemRequest(data);

            var itemTemplate = _itemManager.SafeGetItemType(request.id);

            if (itemTemplate == null)
            {
                return(false);
            }

            var   champion    = _playerManager.GetPeerInfo(peer).Champion;
            var   stats       = champion.GetStats();
            var   inventory   = champion.getInventory();
            var   recipeParts = inventory.GetAvailableItems(itemTemplate.Recipe);
            var   price       = itemTemplate.TotalPrice;
            Item  i;
            short itemSlot = 0;

            if (recipeParts.Count == 0)
            {
                if (stats.Gold < price)
                {
                    return(true);
                }

                i = inventory.AddItem(itemTemplate);

                if (i == null)
                { // Slots full
                    return(false);
                }
                else
                {
                    itemSlot = inventory.GetItemSlot(i);
                }
            }
            else
            {
                foreach (var instance in recipeParts)
                {
                    price -= instance.ItemType.TotalPrice;
                }

                if (stats.Gold < price)
                {
                    return(false);
                }

                foreach (var instance in recipeParts)
                {
                    stats.RemoveModifier(instance.ItemType);
                    _game.PacketNotifier.NotifyRemoveItem(champion, inventory.GetItemSlot(instance), 0);
                    inventory.RemoveItem(instance);
                }

                i        = inventory.AddItem(itemTemplate);
                itemSlot = inventory.GetItemSlot(i);
            }

            short spellSlot = (short)(itemSlot + 6);

            champion.Spells[spellSlot] = new Spell(champion, i.ItemType.SpellName, (byte)spellSlot);

            stats.Gold -= price;
            stats.AddModifier(itemTemplate);
            _game.PacketNotifier.NotifyItemBought(champion, i);

            return(true);
        }