예제 #1
0
        public async Task <UseItemRequest> UseItem(ItemId itemId)
        {
            var customRequest = new UseItemRequest
            {
                ItemId = itemId,
            };

            PokemonGo.RocketAPI.Enums.RequestType type = RequestType.METHOD_UNSET;
            switch (itemId)
            {
            case ItemId.ItemLuckyEgg:
                type = RequestType.USE_ITEM_XP_BOOST;
                break;

            case ItemId.ItemIncenseOrdinary:
                type = RequestType.USE_INCENSE;
                break;
            }

            var useItemRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 30,
                                                           new Request.Types.Requests
            {
                Type    = (int)type,
                Message = customRequest.ToByteString()
            });

            return
                (await
                 _httpClient.PostProtoPayload <Request, UseItemRequest>($"https://{_apiUrl}/rpc",
                                                                        useItemRequest));
        }
예제 #2
0
    private void CreateSyncRequest()
    {
        GameObject playerSyncRequest = new GameObject("PlayerSyncRequest");

        moveRequest = playerSyncRequest.AddComponent <MoveRequest>();
        moveRequest.PlayerManager     = this;
        useSkillRequest               = playerSyncRequest.AddComponent <UseSkillRequest>();
        useSkillRequest.PlayerManager = this;
        useItemRequest = playerSyncRequest.AddComponent <UseItemRequest>();
        useItemRequest.PlayerManager = this;
        attackRequest = playerSyncRequest.AddComponent <AttackRequest>();
        attackRequest.PlayerManager = this;
    }
예제 #3
0
        public async Task UseIncense(Client client, GetInventoryResponse inventory)
        {
            IEnumerable <Item> myItems  = inventory.InventoryDelta.InventoryItems.Select(i => i.InventoryItemData?.Item).Where(p => p != null);
            IEnumerable <Item> Incenses = myItems.Where(i => (ItemId)i.Item_ == ItemId.ItemIncenseOrdinary);
            Item Incense = Incenses.FirstOrDefault();

            if (Incense != null && Incense.Count > 0)
            {
                UseItemRequest useIncense = await client.UseItem(ItemId.ItemLuckyEgg);

                ColoredConsoleWrite(ConsoleColor.Green, $"[{DateTime.Now.ToString("HH:mm:ss")}] Used Incense. Remaining: {Incense.Count}");
            }
            await Task.Delay(11 * 60 * 1000);

            GetInventoryResponse newInventory = await client.GetInventory();

            UseIncense(client, newInventory);
        }
예제 #4
0
        public async Task <UseItemRequest> UseItemXpBoost(ItemId itemId)
        {
            var customRequest = new UseItemRequest
            {
                ItemId = itemId,
            };

            var useItemRequest = RequestBuilder.GetRequest(_unknownAuth, _currentLat, _currentLng, 30,
                                                           new Request.Types.Requests
            {
                Type    = (int)RequestType.USE_ITEM_XP_BOOST,
                Message = customRequest.ToByteString()
            });

            return
                (await
                 _httpClient.PostProtoPayload <Request, UseItemRequest>($"https://{_apiUrl}/rpc",
                                                                        useItemRequest));
        }
예제 #5
0
        public async Task <UseItemRequest> UseItemIncense(ItemId itemId) //changed from UseItem to UseItemXpBoost because of the RequestType
        {
            var customRequest = new UseItemRequest
            {
                ItemId = itemId,
            };

            var useItemRequest = RequestBuilder.GetRequest(_unknownAuth, CurrentLat, CurrentLng, CurrentAltitude,
                                                           new Request.Types.Requests
            {
                Type    = (int)RequestType.USE_INCENSE,
                Message = customRequest.ToByteString()
            });

            return
                (await
                 _httpClient.PostProtoPayload <Request, UseItemRequest>($"https://{_apiUrl}/rpc",
                                                                        useItemRequest));
        }
예제 #6
0
        public async Task<UseItemRequest> UseXpBoostItem(ItemId itemId)
        {
            var customRequest = new UseItemRequest
            {
                ItemId = itemId,
            };

            var useItemRequest = RequestBuilder.GetRequest(_unknownAuth, CurrentLat, CurrentLng, CurrentAltitude,
                new Request.Types.Requests
                {
                    Type = (int)RequestType.USE_ITEM_XP_BOOST,
                    Message = customRequest.ToByteString()
                });
            return
                await
                    _httpClient.PostProtoPayload<Request, UseItemRequest>($"https://{_apiUrl}/rpc",
                        useItemRequest);
        }
예제 #7
0
        public async Task<UseItemRequest> UseItemIncense(ItemId itemId) //changed from UseItem to UseItemXpBoost because of the RequestType
        {
            var customRequest = new UseItemRequest
            {
                ItemId = itemId,
            };

            var useItemRequest = RequestBuilder.GetRequest(_unknownAuth, CurrentLat, CurrentLng, CurrentAltitude,
                new Request.Types.Requests
                {
                    Type = (int)RequestType.USE_INCENSE,
                    Message = customRequest.ToByteString()
                });
            return
                await
                    _httpClient.PostProtoPayload<Request, UseItemRequest>($"https://{_apiUrl}/rpc",
                        useItemRequest);
        }
예제 #8
0
        public int Call_UseItem(UseItemRequest request)
        {
            int itemCnt = 1;

            if (request.cnt > itemCnt)
            {
                itemCnt = request.cnt;
            }
            var player = CurrentSession.GetBindPlayer();
            var item   = player.Items.FirstOrDefault(x => x.Id == request.id);

            if (item == null)
            {
                return((int)GameErrorCode.道具并不存在);
            }

            if (item.Count < itemCnt)
            {
                return((int)GameErrorCode.道具不足);
            }

            DItem di = _ditems[item.Tid];

            if (!di.useable)
            {
                return((int)GameErrorCode.道具不可使用);
            }

            UseItemResponse response = new UseItemResponse();

            response.id      = request.id;
            response.success = true;
            int    unitId = di.breakUnitId;//使用后解锁的兵种id
            string reason = $"使用道具{di.tid}";

            if (unitId > 0)
            {
                var      campController = Server.GetController <CampController>();
                UnitInfo ui             = campController.UnlockUnit(player, unitId);
                response.unitInfo = ui;
            }
            else if (di.breakRandomId > 0)//使用后可以获得随机库
            {
                RewardInfo reward = this.RandomReward(player, di.breakRandomId, reason);
                response.rewardInfo = reward;
            }
            else if (di.breakCount > 0)//资源
            {
                var playerController = Server.GetController <PlayerController>();
                playerController.AddCurrency(player, di.type, di.breakCount, reason);
                response.rewardInfo     = new RewardInfo();
                response.rewardInfo.res = new List <ResInfo>()
                {
                    new ResInfo()
                    {
                        type = di.type, count = di.breakCount
                    }
                };
            }
            //else if (di.type == 18)
            //{
            //    //后勤基地工人+1
            //    //        int maxCnt = engine.getInt(Application.systemFile, "worker_max_cnt");
            //    //        Industry industry = Spring.bean(IndustryService.class).getIndustry(item.getPid());
            //    //        if (industry.getTotalWorkers() + cnt > maxCnt) {
            //    //            response.setInfo(Spring.errCode("item_use_fail_workersmax"));
            //    //            return response;
            //    //        }
            //    //        industry.setIdleWorkers(industry.getIdleWorkers() + cnt);
            //    //        industry.setTotalWorkers(industry.getTotalWorkers() + cnt);
            //    //        rojo.updateAndFlush(industry, "idleWorkers", "totalWorkers");
            //    //        BuyWorkerResponse resp = new BuyWorkerResponse();
            //    //resp.setSuccess(true);
            //    //        resp.setIdleWorkers(industry.getIdleWorkers());
            //    //        resp.setTotalWorkers(industry.getTotalWorkers());
            //    //        Support su = Spring.bean(PlayerService.class).getSupport(item.getPid());
            //    //    resp.setDiamond((int) su.getDiamond());
            //    //        Context.getContextServer().send(resp, item.getPid());
            //    //    response.setSuccess(true);
            //}


            item.Count -= itemCnt;//减少堆叠
            if (item.Count <= 0)
            {
                _db.Items.Remove(item);
                //player.Items.Remove(item);
            }
            _db.SaveChanges();
            response.lap = item.Count;
            CurrentSession.SendAsync(response);
            return(0);
        }