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); await UseGymBattleTask.Execute(session, cancellationToken, pokeStop, fortInfo).ConfigureAwait(false); if (fortInfo.Type == FortType.Gym && (session.GymState.getGymDetails(session, pokeStop).GymState.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; } } 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); } }
public static async Task Execute(ISession session, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); //request map objects to referesh data. keep all fort in session var mapObjectTupe = await GetPokeStops(session); _pokestopList = mapObjectTupe.Item2; var pokeStop = await GetNextPokeStop(session); while (pokeStop != null) { cancellationToken.ThrowIfCancellationRequested(); // Exit this task if both catching and looting has reached its limits if ((UseNearbyPokestopsTask._pokestopLimitReached || UseNearbyPokestopsTask._pokestopTimerReached) && (CatchPokemonTask._catchPokemonLimitReached || CatchPokemonTask._catchPokemonTimerReached)) { return; } if (session.LogicSettings.ActivateMSniper) { await MSniperServiceTask.CheckMSniper(session, cancellationToken); } var fortInfo = pokeStop.Id == SetMoveToTargetTask.TARGET_ID ? SetMoveToTargetTask.FortInfo : await session.Client.Fort.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); await WalkingToPokeStop(session, cancellationToken, pokeStop, fortInfo); await DoActionAtPokeStop(session, cancellationToken, pokeStop, fortInfo); await UseGymBattleTask.Execute(session, cancellationToken, pokeStop, fortInfo); if (session.LogicSettings.SnipeAtPokestops || session.LogicSettings.UseSnipeLocationServer) { await SnipePokemonTask.Execute(session, cancellationToken); } if (!await SetMoveToTargetTask.IsReachedDestination(pokeStop, session, cancellationToken)) { pokeStop.CooldownCompleteTimestampMs = DateTime.UtcNow.ToUnixTime() + (pokeStop.Type == FortType.Gym ? session.LogicSettings.GymVisitTimeout : 5) * 60 * 1000; //5 minutes to cooldown session.AddForts(new List <FortData>() { pokeStop }); //replace object in memory. } if (session.LogicSettings.EnableHumanWalkingSnipe) { await HumanWalkSnipeTask.Execute(session, cancellationToken, pokeStop); } pokeStop = await GetNextPokeStop(session); } }
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); if (pokeStop.Type == FortType.Gym) { var fortDetails = await session.Client.Fort.GymGetInfo(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude).ConfigureAwait(false); if (fortDetails.Result == GymGetInfoResponse.Types.Result.Success) { await UseGymBattleTask.Execute(session, cancellationToken, pokeStop, fortInfo, fortDetails).ConfigureAwait(false); } } if (!await SetMoveToTargetTask.IsReachedDestination(pokeStop, session, cancellationToken).ConfigureAwait(false)) { pokeStop.CooldownCompleteTimestampMs = DateTime.UtcNow.ToUnixTime() + 5 * 60 * 1000; //5 minutes to cooldown session.AddForts(new List <FortData>() { pokeStop }); //replace object in memory. } if (session.LogicSettings.EnableHumanWalkingSnipe) { await MSniperServiceTask.Execute(session, cancellationToken).ConfigureAwait(false); await HumanWalkSnipeTask.Execute(session, cancellationToken, pokeStop, fortInfo).ConfigureAwait(false); } pokeStop = await GetNextPokeStop(session).ConfigureAwait(false); } }
public static async Task Execute(ISession session, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); //request map objects to referesh data. keep all fort in session var mapObjectTupe = await GetPokeStops(session); _pokestopList = mapObjectTupe.Item2; var pokeStop = await GetNextPokeStop(session); while (pokeStop != null) { cancellationToken.ThrowIfCancellationRequested(); await SnipeMSniperTask.CheckMSniperLocation(session, cancellationToken); var fortInfo = await session.Client.Fort.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); await WalkingToPokeStop(session, cancellationToken, pokeStop, fortInfo); await DoActionAtPokeStop(session, cancellationToken, pokeStop, fortInfo); await UseGymBattleTask.Execute(session, cancellationToken, pokeStop, fortInfo); if (session.LogicSettings.SnipeAtPokestops || session.LogicSettings.UseSnipeLocationServer) { await SnipePokemonTask.Execute(session, cancellationToken); } await SnipeMSniperTask.CheckMSniperLocation(session, cancellationToken); if (session.LogicSettings.EnableHumanWalkingSnipe) { await HumanWalkSnipeTask.Execute(session, cancellationToken, pokeStop); } pokeStop.CooldownCompleteTimestampMs = DateTime.UtcNow.ToUnixTime() + (pokeStop.Type == FortType.Gym ? session.LogicSettings.GymVisitTimeout : 5) * 60 * 1000; //5 minutes to cooldown session.AddForts(new List <FortData>() { pokeStop }); //replace object in memory. pokeStop = await GetNextPokeStop(session); } //await VisitNearByGymTask.UpdateGymList(session, mapObjectTupe.Item2); //while (_pokestopList.Any()) //{ // cancellationToken.ThrowIfCancellationRequested(); // await SnipeMSniperTask.CheckMSniperLocation(session, cancellationToken); // _pokestopList = // _pokestopList.OrderBy( // i => // session.Navigation.WalkStrategy.CalculateDistance( // session.Client.CurrentLatitude, session.Client.CurrentLongitude, i.Latitude, i.Longitude, session)).ToList(); // // randomize next pokestop between first and second by distance // var pokestopListNum = 0; // if (_pokestopList.Count > 1) // pokestopListNum = _rc.Next(0, 2); // var pokeStop = _pokestopList[pokestopListNum]; // _pokestopList.RemoveAt(pokestopListNum); // // this logic should only be called when we reach a pokestop either via GPX path or normal walking // // as when walk-sniping, we want to get to the snipe ASAP rather than stop for lured pokemon upon // // calling FarmPokestop; in that situation we are also always within 40m of the pokestop, so no // // need to walk to it // var fortInfo = await session.Client.Fort.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); // // we only move to the PokeStop, and send the associated FortTargetEvent, when not using GPX // // also, GPX pathing uses its own EggWalker and calls the CatchPokemon tasks internally. // if (!session.LogicSettings.UseGpxPathing) // { // // Will modify Lat,Lng and Name to fake position // SetMoveToTargetTask.CheckSetMoveToTargetStatus(ref fortInfo, ref pokeStop); // var eggWalker = new EggWalker(1000, session); // var distance = LocationUtils.CalculateDistanceInMeters(session.Client.CurrentLatitude, // session.Client.CurrentLongitude, pokeStop.Latitude, pokeStop.Longitude); // cancellationToken.ThrowIfCancellationRequested(); // if (!session.LogicSettings.UseGoogleWalk && !session.LogicSettings.UseYoursWalk) // session.EventDispatcher.Send(new FortTargetEvent { Name = fortInfo.Name, Distance = distance, Route = "NecroBot" }); // else // BaseWalkStrategy.FortInfo = fortInfo; // await session.Navigation.Move(new GeoCoordinate(pokeStop.Latitude, pokeStop.Longitude, // LocationUtils.getElevation(session, pokeStop.Latitude, pokeStop.Longitude)), // async () => // { // if (SetMoveToTargetTask.CheckStopforSetMoveToTarget()) // return false; // // Catch normal map Pokemon // await CatchNearbyPokemonsTask.Execute(session, cancellationToken); // //Catch Incense Pokemon // await CatchIncensePokemonsTask.Execute(session, cancellationToken); // // Minor fix google route ignore pokestop // await LookPokestops(session, pokeStop, cancellationToken); // return true; // }, // session, // cancellationToken); // // we have moved this distance, so apply it immediately to the egg walker. // await eggWalker.ApplyDistance(distance, cancellationToken); // } // if (SetMoveToTargetTask.CheckReachTarget(session)) // return; // await FortAction(session, pokeStop, fortInfo, cancellationToken); // if (session.LogicSettings.SnipeAtPokestops || session.LogicSettings.UseSnipeLocationServer) // await SnipePokemonTask.Execute(session, cancellationToken); // //samuraitruong: since we has duplication code for gym. I temporary comment this line to disable my feature. keep the code as reference, will remove later. // //await VisitNearByGymTask.Execute(session, cancellationToken); // if (session.LogicSettings.EnableHumanWalkingSnipe) // { // //refactore to move this code inside the task later. // await HumanWalkSnipeTask.Execute(session, cancellationToken, // async (lat, lng) => // { // //idea of this function is to spin pokestop on way. maybe risky. // var reachablePokestops = _pokestopList.Where(i => // LocationUtils.CalculateDistanceInMeters(session.Client.CurrentLatitude, // session.Client.CurrentLongitude, i.Latitude, i.Longitude) < 40 // && i.CooldownCompleteTimestampMs == 0 // ).ToList(); // reachablePokestops = reachablePokestops.OrderBy(i => // LocationUtils.CalculateDistanceInMeters(session.Client.CurrentLatitude, // session.Client.CurrentLongitude, i.Latitude, i.Longitude)).ToList(); // foreach (var ps in reachablePokestops) // { // if (!session.LogicSettings.UseGpxPathing) // _pokestopList.Remove(ps); // var fi = await session.Client.Fort.GetFort(ps.Id, ps.Latitude, ps.Longitude); // await FarmPokestop(session, ps, fi, cancellationToken, true); // await Task.Delay(2000, cancellationToken); // } // }, // async () => // { // // if using GPX we have to move back to the original pokestop, to resume the path. // // we do not try to use pokest;ops on the way back, as we will have used them getting // // here. // if (session.LogicSettings.UseGpxPathing) // { // var eggWalker = new EggWalker(1000, session); // var distance = LocationUtils.CalculateDistanceInMeters(session.Client.CurrentLatitude, // session.Client.CurrentLongitude, pokeStop.Latitude, pokeStop.Longitude); // var geo = new GeoCoordinate(pokeStop.Latitude, pokeStop.Longitude); // await session.Navigation.Move(geo, // async () => // { // await CatchNearbyPokemonsTask.Execute(session, cancellationToken); // //Catch Incense Pokemon // await CatchIncensePokemonsTask.Execute(session, cancellationToken); // }, // session, // cancellationToken); // await eggWalker.ApplyDistance(distance, cancellationToken); // return; // } // var nearestStop = _pokestopList.OrderBy(i => // LocationUtils.CalculateDistanceInMeters(session.Client.CurrentLatitude, // session.Client.CurrentLongitude, i.Latitude, i.Longitude)).FirstOrDefault(); // if (nearestStop != null) // { // var walkedDistance = LocationUtils.CalculateDistanceInMeters(nearestStop.Latitude, nearestStop.Longitude, session.Client.CurrentLatitude, session.Client.CurrentLongitude); // if (walkedDistance > session.LogicSettings.HumanWalkingSnipeWalkbackDistanceLimit) // { // await Task.Delay(3000, cancellationToken); // var nearbyPokeStops = await UpdateFortsData(session); // var notexists = nearbyPokeStops.Where(p => _pokestopList.All(x => x.Id != p.Id)).ToList(); // _pokestopList.AddRange(notexists); // session.EventDispatcher.Send(new PokeStopListEvent { Forts = _pokestopList }); // session.EventDispatcher.Send(new HumanWalkSnipeEvent // { // Type = HumanWalkSnipeEventTypes.PokestopUpdated, // Pokestops = notexists, // NearestDistance = walkedDistance // }); // } // } // }); // } //} }