/// <summary> /// Provides a safe way to invoke the <see cref="FortDeployPokemonReceived" /> event. /// </summary> /// <param name="value"></param> public void RaiseFortDeployPokemonReceived(FortDeployPokemonResponse value) => FortDeployPokemonReceived?.Invoke(this, value);
private static async Task DeployPokemonToGym(ISession session, FortDetailsResponse fortInfo, GetGymDetailsResponse fortDetails, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var points = fortDetails.GymState.FortData.GymPoints; var maxCount = GetGymLevel(points); var availableSlots = maxCount - fortDetails.GymState.Memberships.Count(); if (availableSlots > 0) { var deployed = await session.Inventory.GetDeployedPokemons(); if (!deployed.Any(a => a.DeployedFortId == fortInfo.FortId)) { var pokemon = await GetDeployablePokemon(session); if (pokemon != null) { FortDeployPokemonResponse response = null; try { response = await session.Client.Fort.FortDeployPokemon(fortInfo.FortId, pokemon.Id); } catch (APIBadRequestException) { Logger.Write("Failed to deploy pokemon. Trying again...", LogLevel.Gym, ConsoleColor.Magenta); await Execute(session, cancellationToken, fortDetails.GymState.FortData, fortInfo); return; } if (response?.Result == FortDeployPokemonResponse.Types.Result.Success) { session.EventDispatcher.Send(new GymDeployEvent() { PokemonId = pokemon.PokemonId, Name = fortDetails.Name }); if (session.LogicSettings.GymConfig.CollectCoinAfterDeployed > 0) { var count = deployed.Count() + 1; if (count >= session.LogicSettings.GymConfig.CollectCoinAfterDeployed) { try { if (session.Profile.PlayerData.DailyBonus.NextDefenderBonusCollectTimestampMs <= DateTime.Now.ToUnixTime()) { var collectDailyBonusResponse = await session.Client.Player.CollectDailyDefenderBonus(); if (collectDailyBonusResponse.Result == CollectDailyDefenderBonusResponse.Types.Result.Success) { Logger.Write($"Collected {count * 10} coins", LogLevel.Gym, ConsoleColor.DarkYellow); } else { Logger.Write($"Hmm, we have failed with gaining a reward: {collectDailyBonusResponse}", LogLevel.Gym, ConsoleColor.Magenta); } } else { Logger.Write($"You will be able to collect bonus at {DateTimeFromUnixTimestampMillis(session.Profile.PlayerData.DailyBonus.NextDefenderBonusCollectTimestampMs)}", LogLevel.Info, ConsoleColor.Magenta); } } catch (APIBadRequestException) { Logger.Write("Can't get coins", LogLevel.Warning); //Debug.WriteLine(e.Message, "GYM"); //Debug.WriteLine(e.StackTrace, "GYM"); await Task.Delay(500); } } else { Logger.Write(string.Format("You have only {0} defenders deployed but {1} required to get reward", count, session.LogicSettings.GymConfig.CollectCoinAfterDeployed), LogLevel.Gym, ConsoleColor.Magenta); } } else { Logger.Write("You have disabled reward collecting in config file", LogLevel.Gym, ConsoleColor.Magenta); } } else { Logger.Write(string.Format("Deploy pokemon failed with result: {0}", response.Result), LogLevel.Gym, ConsoleColor.Magenta); } } else { Logger.Write($"You don't have pokemons to be deployed!", LogLevel.Gym); } } else { Logger.Write($"You already have pokemon deployed here", LogLevel.Gym); } } else { string message = string.Format("No action. No FREE slots in GYM {0}/{1} ({2})", fortDetails.GymState.Memberships.Count(), maxCount, points); Logger.Write(message, LogLevel.Gym, ConsoleColor.White); } }