Esempio n. 1
0
        private async Task <MethodResult> IncubateEggs()
        {
            MethodResult <EggIncubator> incubatorResponse = GetIncubator();

            if (!incubatorResponse.Success)
            {
                return(new MethodResult());
            }

            PokemonData egg = Eggs.FirstOrDefault(x => String.IsNullOrEmpty(x.EggIncubatorId));

            if (egg == null)
            {
                return(new MethodResult
                {
                    Message = "No egg to incubate",
                    Success = true
                });
            }

            try
            {
                UseItemEggIncubatorResponse response = await _client.Inventory.UseItemEggIncubator(incubatorResponse.Data.Id, egg.Id);

                if (response.Result != UseItemEggIncubatorResponse.Types.Result.Success)
                {
                    LogCaller(new LoggerEventArgs(String.Format("Failed to incubate egg. Response: {0}", response.Result), LoggerTypes.Warning));

                    return(new MethodResult());
                }

                LogCaller(new LoggerEventArgs(String.Format("Incubating egg in {0}. Pokmeon Id: {1}", response.EggIncubator.ItemId.ToString().Replace("ItemIncubator", ""), response.EggIncubator.PokemonId), LoggerTypes.Incubate));

                return(new MethodResult
                {
                    Message = "Success",
                    Success = true
                });
            }
            catch (Exception ex)
            {
                LogCaller(new LoggerEventArgs("Incubate egg request failed", LoggerTypes.Exception, ex));

                return(new MethodResult
                {
                    Message = "Incubate egg request failed"
                });
            }
        }
Esempio n. 2
0
        private async Task <MethodResult> IncubateEggs()
        {
            if (!UserSettings.IncubateEggs)
            {
                LogCaller(new LoggerEventArgs("Incubating disabled", LoggerTypes.Info));

                return(new MethodResult
                {
                    Message = "Incubate eggs disabled",
                    Success = true
                });
            }

            MethodResult <EggIncubator> incubatorResponse = GetIncubator();

            if (!incubatorResponse.Success)
            {
                return(new MethodResult
                {
                    Message = incubatorResponse.Message,
                    Success = true
                });
            }

            PokemonData egg = Eggs.FirstOrDefault(x => String.IsNullOrEmpty(x.EggIncubatorId));

            if (egg == null)
            {
                return(new MethodResult
                {
                    Message = "No egg to incubate",
                    Success = true
                });
            }

            try
            {
                var response = await _client.ClientSession.RpcClient.SendRemoteProcedureCallAsync(new Request
                {
                    RequestType    = RequestType.UseItemEggIncubator,
                    RequestMessage = new UseItemEggIncubatorMessage
                    {
                        ItemId    = incubatorResponse.Data.Id,
                        PokemonId = egg.Id
                    }.ToByteString()
                });

                UseItemEggIncubatorResponse useItemEggIncubatorResponse = null;

                useItemEggIncubatorResponse = UseItemEggIncubatorResponse.Parser.ParseFrom(response);
                LogCaller(new LoggerEventArgs(String.Format("Incubating egg in {0}. Pokmeon Id: {1}", useItemEggIncubatorResponse.EggIncubator.ItemId.ToString().Replace("ItemIncubator", ""), useItemEggIncubatorResponse.EggIncubator.PokemonId), LoggerTypes.Incubate));

                return(new MethodResult
                {
                    Message = "Success",
                    Success = true
                });
            }
            catch (Exception ex)
            {
                LogCaller(new LoggerEventArgs("UseItemEggIncubatorResponse parsing failed because response was empty", LoggerTypes.Exception, ex));

                return(new MethodResult());
            }
        }
 /// <summary>
 /// Provides a safe way to invoke the <see cref="UseItemEggIncubatorReceived" /> event.
 /// </summary>
 /// <param name="value"></param>
 public void RaiseUseItemEggIncubatorReceived(UseItemEggIncubatorResponse value) => UseItemEggIncubatorReceived?.Invoke(this, value);
Esempio n. 4
0
        private static async Task <List <IncubatorUsage> > HatchNewEgg(ISession session)
        {
            _logger.Debug("Hatching new egg?");

            PlayerStats playerStats = await session.Inventory.GetPlayerStats(refreshCache : true);

            //if (playerStats == null) return null; // can this ever be null?

            List <EggIncubator> incubators =
                (await session.Inventory.GetEggIncubators()).Where(incubator => incubator.UsesRemaining > 0 || incubator.ItemId == ItemId.ItemIncubatorBasicUnlimited).ToList();

            _logger.Debug("Incubators :: Count {0}, Total Remaining Usages {1}", incubators.Count, incubators.Sum(incubator => incubator.UsesRemaining));

            List <PokemonData> unusedEggs =
                (await session.Inventory.GetEggs()).Where(egg => string.IsNullOrEmpty(egg.EggIncubatorId))
                .OrderBy(egg => egg.EggKmWalkedTarget - egg.EggKmWalkedStart)
                .ToList();

            List <IncubatorUsage> newRememberedIncubators = new List <IncubatorUsage>();

            foreach (EggIncubator incubator in incubators)
            {
                if (incubator.PokemonId == 0)
                {
                    // Unlimited incubators prefer short eggs, limited incubators prefer long eggs
                    // Special case: If only one incubator is available at all, it will prefer long eggs
                    PokemonData egg = incubator.ItemId == ItemId.ItemIncubatorBasicUnlimited && incubators.Count > 1
                        ? unusedEggs.FirstOrDefault()
                        : unusedEggs.LastOrDefault();

                    if (egg == null)
                    {
                        continue;
                    }

                    // Skip (save) limited incubators depending on user choice in config
                    if (!session.LogicSettings.UseLimitedEggIncubators &&
                        incubator.ItemId != ItemId.ItemIncubatorBasicUnlimited)
                    {
                        continue;
                    }

                    UseItemEggIncubatorResponse response = await session.Client.Inventory.UseItemEggIncubator(incubator.Id, egg.Id);

                    unusedEggs.Remove(egg);

                    newRememberedIncubators.Add(new IncubatorUsage {
                        IncubatorId = incubator.Id, PokemonId = egg.Id
                    });

                    session.EventDispatcher.Send(new EggIncubatorStatusEvent
                    {
                        IncubatorId = incubator.Id,
                        WasAddedNow = true,
                        PokemonId   = egg.Id,
                        KmToWalk    = egg.EggKmWalkedTarget,
                        KmRemaining = response.EggIncubator.TargetKmWalked - playerStats.KmWalked
                    });
                }
                else
                {
                    newRememberedIncubators.Add(new IncubatorUsage
                    {
                        IncubatorId = incubator.Id,
                        PokemonId   = incubator.PokemonId
                    });

                    session.EventDispatcher.Send(new EggIncubatorStatusEvent
                    {
                        IncubatorId = incubator.Id,
                        PokemonId   = incubator.PokemonId,
                        KmToWalk    = incubator.TargetKmWalked - incubator.StartKmWalked,
                        KmRemaining = incubator.TargetKmWalked - playerStats.KmWalked
                    });
                }
            }

            return(newRememberedIncubators);
        }