コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="parameter">MapPokemonWrapper containing the Pokemon that we're trying to capture</param>
        /// <param name="mode"></param>
        /// <param name="suspensionState"></param>
        /// <returns></returns>
        public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode,
                                                      IDictionary <string, object> suspensionState)
        {
            if (suspensionState.Any())
            {
                // Recovering the state
                CurrentPokemon      = (MapPokemonWrapper)suspensionState[nameof(CurrentPokemon)];
                CurrentEncounter    = (EncounterResponse)suspensionState[nameof(CurrentEncounter)];
                CurrentCaptureAward = (CaptureAward)suspensionState[nameof(CurrentCaptureAward)];
                SelectedCaptureItem = (ItemData)suspensionState[nameof(SelectedCaptureItem)];
            }
            else if (parameter is bool)
            {
                // Navigating from game page, so we need to actually load the encounter
                CurrentPokemon = (MapPokemonWrapper)NavigationHelper.NavigationState[nameof(CurrentPokemon)];
                Busy.SetBusy(true, Utils.Resources.Translation.GetString("LoadingEncounter") + Utils.Resources.Pokemon.GetString(CurrentPokemon.PokemonId.ToString()));
                NavigationHelper.NavigationState.Remove(nameof(CurrentPokemon));
                Logger.Write($"Catching {CurrentPokemon.PokemonId}");
                CurrentEncounter = await GameClient.EncounterPokemon(CurrentPokemon.EncounterId, CurrentPokemon.SpawnpointId);

                SelectedCaptureItem = ItemsInventory.First(item => item.ItemId == ItemId.ItemPokeBall);
                Busy.SetBusy(false);
                if (CurrentEncounter.Status != EncounterResponse.Types.Status.EncounterSuccess)
                {
                    // Encounter failed, probably the Pokemon ran away
                    await new MessageDialog("Pokemon ran away, sorry :(").ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                }
            }
            await Task.CompletedTask;
        }
コード例 #2
0
        /// <summary>
        /// </summary>
        /// <param name="parameter">MapPokemonWrapper containing the Pokemon that we're trying to capture</param>
        /// <param name="mode"></param>
        /// <param name="suspensionState"></param>
        /// <returns></returns>
        public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode,
                                                      IDictionary <string, object> suspensionState)
        {
            if (suspensionState.Any())
            {
                // Recovering the state
                CurrentPokemon      = (MapPokemonWrapper)suspensionState[nameof(CurrentPokemon)];
                CurrentEncounter    = (EncounterResponse)suspensionState[nameof(CurrentEncounter)];
                CurrentCaptureAward = (CaptureAward)suspensionState[nameof(CurrentCaptureAward)];
                SelectedCaptureItem = (ItemData)suspensionState[nameof(SelectedCaptureItem)];
            }
            else
            {
                // Navigating from game page, so we need to actually load the encounter
                CurrentPokemon = (MapPokemonWrapper)NavigationHelper.NavigationState[nameof(CurrentPokemon)];
                Busy.SetBusy(true,
                             string.Format(Resources.CodeResources.GetString("LoadingEncounterText"),
                                           Resources.Pokemon.GetString(CurrentPokemon.PokemonId.ToString())));
                NavigationHelper.NavigationState.Remove(nameof(CurrentPokemon));
                Logger.Write($"Catching {CurrentPokemon.PokemonId}");
                CurrentEncounter =
                    await GameClient.EncounterPokemon(CurrentPokemon.EncounterId, CurrentPokemon.SpawnpointId);

                SelectStartingBall();
                Busy.SetBusy(false);
                if (CurrentEncounter.Status != EncounterResponse.Types.Status.EncounterSuccess)
                {
                    // Encounter failed, probably the Pokemon ran away
                    await new MessageDialog(Resources.CodeResources.GetString("PokemonRanAwayText")).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                }
            }
        }
コード例 #3
0
        /// <summary>
        ///     Launches the PokeBall for the current encounter, handling the different catch responses
        /// </summary>
        /// <returns></returns>
        private async Task ThrowPokeball(bool hitPokemon)
        {
            var caughtPokemonResponse =
                await
                GameClient.CatchPokemon(CurrentPokemon.EncounterId, CurrentPokemon.SpawnpointId, SelectedCaptureItem.ItemId, hitPokemon);

            switch (caughtPokemonResponse.Status)
            {
            case CatchPokemonResponse.Types.CatchStatus.CatchError:
                Logger.Write("CatchError!");
                // TODO: what can we do?
                break;

            case CatchPokemonResponse.Types.CatchStatus.CatchSuccess:
                CurrentCaptureAward = caughtPokemonResponse.CaptureAward;
                Logger.Write($"We caught {CurrentPokemon.PokemonId}");
                CatchSuccess?.Invoke(this, null);
                await GameClient.UpdateInventory();

                break;

            case CatchPokemonResponse.Types.CatchStatus.CatchEscape:
                Logger.Write($"{CurrentPokemon.PokemonId} escaped");
                CatchEscape?.Invoke(this, null);
                await GameClient.UpdateInventory();

                break;

            case CatchPokemonResponse.Types.CatchStatus.CatchFlee:
                Logger.Write($"{CurrentPokemon.PokemonId} fleed");
                CatchFlee?.Invoke(this, null);
                await new MessageDialog($"{CurrentPokemon.PokemonId} fleed").ShowAsyncQueue();
                await GameClient.UpdateInventory();

                ReturnToGameScreen.Execute();
                break;

            case CatchPokemonResponse.Types.CatchStatus.CatchMissed:
                Logger.Write($"We missed {CurrentPokemon.PokemonId}");
                await GameClient.UpdateInventory();

                CatchFlee?.Invoke(this, null);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #4
0
        private void AskAndUseLuckyEgg(ItemDataWrapper item)
        {
            if (!GameClient.IsXpBoostActive)
            {
                var dialog = new PoGoMessageDialog("", string.Format(Resources.CodeResources.GetString("ItemUseQuestionText"), Resources.Items.GetString(item.ItemId.ToString())));
                dialog.AcceptText      = Resources.CodeResources.GetString("YesText");
                dialog.CancelText      = Resources.CodeResources.GetString("CancelText");
                dialog.CoverBackground = true;
                dialog.AnimationType   = PoGoMessageDialogAnimation.Bottom;
                dialog.AcceptInvoked  += async(sender, e) =>
                {
                    // Send use request
                    var res = await GameClient.UseXpBoost(item.ItemId);

                    switch (res.Result)
                    {
                    case UseItemXpBoostResponse.Types.Result.Success:
                        AppliedItem appliedItem = res.AppliedItems.Item.FirstOrDefault <AppliedItem>();
                        GameClient.AppliedItems.Add(new AppliedItemWrapper(appliedItem));
                        ReturnToGameScreen.Execute();
                        break;

                    case UseItemXpBoostResponse.Types.Result.ErrorXpBoostAlreadyActive:
                        ReturnToGameScreen.Execute();
                        break;

                    case UseItemXpBoostResponse.Types.Result.ErrorInvalidItemType:
                    case UseItemXpBoostResponse.Types.Result.ErrorLocationUnset:
                    case UseItemXpBoostResponse.Types.Result.ErrorNoItemsRemaining:
                    case UseItemXpBoostResponse.Types.Result.Unset:
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                };

                dialog.Show();
            }
        }
コード例 #5
0
        private void AskAndUseIncense(ItemDataWrapper item)
        {
            if (!GameClient.IsIncenseActive)
            {
                var dialog = new PoGoMessageDialog("", string.Format(Resources.CodeResources.GetString("ItemUseQuestionText"), Resources.Items.GetString(item.ItemId.ToString())));
                dialog.AcceptText      = Resources.CodeResources.GetString("YesText");
                dialog.CancelText      = Resources.CodeResources.GetString("CancelText");
                dialog.CoverBackground = true;
                dialog.AnimationType   = PoGoMessageDialogAnimation.Bottom;
                dialog.AcceptInvoked  += async(sender, e) =>
                {
                    //// Send use request
                    var res = await GameClient.UseIncense(item.ItemId);

                    switch (res.Result)
                    {
                    case UseIncenseResponse.Types.Result.Success:
                        GameClient.AppliedItems.Add(new AppliedItemWrapper(res.AppliedIncense));
                        ReturnToGameScreen.Execute();
                        break;

                    case UseIncenseResponse.Types.Result.IncenseAlreadyActive:
                        ReturnToGameScreen.Execute();
                        break;

                    case UseIncenseResponse.Types.Result.LocationUnset:
                    case UseIncenseResponse.Types.Result.NoneInInventory:
                    case UseIncenseResponse.Types.Result.Unknown:
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                };

                dialog.Show();
            }
        }
コード例 #6
0
        /// <summary>
        /// Encounter logic
        /// </summary>
        /// <returns></returns>
        private async Task HandleEncounter()
        {
            if (CurrentPokemon is MapPokemonWrapper)
            {
                CurrentEncounter = await GameClient.EncounterPokemon(CurrentPokemon.EncounterId, CurrentPokemon.SpawnpointId);

                switch (CurrentEncounter.Status)
                {
                case EncounterResponse.Types.Status.PokemonInventoryFull:
                    await new MessageDialog(string.Format(Resources.CodeResources.GetString("PokemonInventoryFullText"), Resources.Pokemon.GetString($"{CurrentPokemon.PokemonId}"))).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                case EncounterResponse.Types.Status.EncounterSuccess:
                    break;

                case EncounterResponse.Types.Status.EncounterError:
                case EncounterResponse.Types.Status.EncounterNotFound:
                case EncounterResponse.Types.Status.EncounterClosed:
                    await new MessageDialog(string.Format(Resources.CodeResources.GetString("PokemonEncounterErrorText"), Resources.Pokemon.GetString($"{CurrentPokemon.PokemonId}"))).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                case EncounterResponse.Types.Status.EncounterNotInRange:
                    await new MessageDialog(string.Format(Resources.CodeResources.GetString("PokemonEncounterNotInRangeText"), Resources.Pokemon.GetString($"{CurrentPokemon.PokemonId}"))).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                case EncounterResponse.Types.Status.EncounterPokemonFled:
                case EncounterResponse.Types.Status.EncounterAlreadyHappened:
                    await new MessageDialog(Resources.CodeResources.GetString("PokemonRanAwayText")).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    GameClient.CatchablePokemons.Remove((MapPokemonWrapper)CurrentPokemon);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else
            {
                CurrentLureEncounter = await GameClient.EncounterLurePokemon(CurrentPokemon.EncounterId, CurrentPokemon.SpawnpointId);

                CurrentEncounter = new EncounterResponse()
                {
                    Background  = EncounterResponse.Types.Background.Park,
                    WildPokemon = new WildPokemon()
                    {
                        PokemonData = CurrentLureEncounter.PokemonData
                    }
                };
                switch (CurrentLureEncounter.Result)
                {
                case DiskEncounterResponse.Types.Result.PokemonInventoryFull:
                    await new MessageDialog(string.Format(Resources.CodeResources.GetString("PokemonInventoryFullText"), Resources.Pokemon.GetString($"{CurrentPokemon.PokemonId}"))).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                case DiskEncounterResponse.Types.Result.Success:
                    break;

                case DiskEncounterResponse.Types.Result.Unknown:
                case DiskEncounterResponse.Types.Result.NotAvailable:
                    await new MessageDialog(string.Format(Resources.CodeResources.GetString("PokemonEncounterErrorText"), Resources.Pokemon.GetString($"{CurrentPokemon.PokemonId}"))).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                case DiskEncounterResponse.Types.Result.NotInRange:
                    await new MessageDialog(string.Format(Resources.CodeResources.GetString("PokemonEncounterNotInRangeText"), Resources.Pokemon.GetString($"{CurrentPokemon.PokemonId}"))).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                case DiskEncounterResponse.Types.Result.EncounterAlreadyFinished:
                    await new MessageDialog(Resources.CodeResources.GetString("PokemonRanAwayText")).ShowAsyncQueue();
                    ReturnToGameScreen.Execute();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            PokemonExtraData    = GameClient.GetExtraDataForPokemon(CurrentPokemon.PokemonId);
            SelectedCaptureItem = SelectAvailablePokeBall();
            Busy.SetBusy(false);
        }