예제 #1
0
        public void LoadData(ISession session, FortData fort)
        {
            var task = session.Client.Fort.GetGymDetails(fort.Id, fort.Latitude, fort.Longitude);

            task.Wait();
            if (task.IsCompleted && task.Result.Result == GymGetInfoResponse.Types.Result.Success)
            {
                var state = new POGOProtos.Data.Gym.GymState()
                {
                    FortData = fort
                };
                fort       = state.FortData;
                GymDetails = task.Result;
                LastCall   = DateTime.UtcNow;
            }
        }
예제 #2
0
        public static async Task Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();
            TinyIoC.TinyIoCContainer.Current.Resolve <MultiAccountManager>().ThrowIfSwitchAccountRequested();
            //request map objects to referesh data. keep all fort in session

            var mapObjectTupe = await GetPokeStops(session).ConfigureAwait(false);

            var pokeStop = await GetNextPokeStop(session).ConfigureAwait(false);

            while (pokeStop != null)
            {
                cancellationToken.ThrowIfCancellationRequested();
                // Exit this task if both catching and looting has reached its limits
                await CheckLimit(session).ConfigureAwait(false);

                var fortInfo = pokeStop.Id.StartsWith(SetMoveToTargetTask.TARGET_ID) ? SetMoveToTargetTask.FakeFortInfo(pokeStop) : await session.Client.Fort.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude).ConfigureAwait(false);
                await WalkingToPokeStop(session, cancellationToken, pokeStop, fortInfo).ConfigureAwait(false);

                await DoActionAtPokeStop(session, cancellationToken, pokeStop, fortInfo).ConfigureAwait(false);

                try // Try to fix Error: System.NullReferenceException
                {
                    bool gymAttackSucceeded = await UseGymBattleTask.Execute(session, cancellationToken, pokeStop, fortInfo).ConfigureAwait(false);

                    var _fortstate = new POGOProtos.Data.Gym.GymState()
                    {
                        FortData = pokeStop
                    };


                    if (gymAttackSucceeded &&
                        fortInfo.Type == FortType.Gym &&
                        (_fortstate.FortData.OwnedByTeam == session.Profile.PlayerData.Team || session.GymState.CapturedGymId.Equals(fortInfo.FortId)) &&
                        session.LogicSettings.GymConfig.Enable &&
                        session.LogicSettings.GymConfig.EnableGymTraining)
                    {
                        if (string.IsNullOrEmpty(session.GymState.TrainingGymId) || !session.GymState.TrainingGymId.Equals(fortInfo.FortId))
                        {
                            session.GymState.TrainingGymId = fortInfo.FortId;
                            session.GymState.TrainingRound = 0;
                        }
                        session.GymState.TrainingRound++;
                        if (session.GymState.TrainingRound <= session.LogicSettings.GymConfig.MaxTrainingRoundsOnOneGym)
                        {
                            continue;
                        }
                    }
                }
                catch
                {
                    Logger.Write("Retry waiting, gym check please wait ...", LogLevel.Gym);
                    return;
                }

                if (!await SetMoveToTargetTask.IsReachedDestination(pokeStop, session, cancellationToken).ConfigureAwait(false))
                {
                    pokeStop.CooldownCompleteTimestampMs = DateTime.UtcNow.ToUnixTime() + (pokeStop.Type == FortType.Gym ? session.LogicSettings.GymConfig.VisitTimeout : 5) * 60 * 1000; //5 minutes to cooldown
                    session.AddForts(new List <FortData>()
                    {
                        pokeStop
                    });                                                  //replace object in memory.
                }

                await MSniperServiceTask.Execute(session, cancellationToken).ConfigureAwait(false);

                if (session.LogicSettings.EnableHumanWalkingSnipe)
                {
                    await HumanWalkSnipeTask.Execute(session, cancellationToken, pokeStop, fortInfo).ConfigureAwait(false);
                }

                pokeStop = await GetNextPokeStop(session).ConfigureAwait(false);
            }
        }