예제 #1
0
        public async Task <MethodResult> CompleteEncounterTutorial(PokemonId pokemon)
        {
            var response = await _client.ClientSession.RpcClient.SendRemoteProcedureCallAsync(new Request
            {
                RequestType    = RequestType.EncounterTutorialComplete,
                RequestMessage = new EncounterTutorialCompleteMessage
                {
                    PokemonId = pokemon
                }.ToByteString()
            });

            EncounterTutorialCompleteResponse encounterTutorialCompleteResponse = null;

            try
            {
                encounterTutorialCompleteResponse = EncounterTutorialCompleteResponse.Parser.ParseFrom(response);
                LogCaller(new LoggerEventArgs(String.Format("Caught a {0}", pokemon), LoggerTypes.Success));

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

                return(new MethodResult());
            }
        }
예제 #2
0
        public async Task <MethodResult> CompleteEncounterTutorial(PokemonId pokemon)
        {
            try
            {
                EncounterTutorialCompleteResponse response = await _client.Encounter.EncounterTutorialComplete(pokemon);

                if (response.Result == EncounterTutorialCompleteResponse.Types.Result.Success)
                {
                    LogCaller(new LoggerEventArgs(String.Format("Caught a {0}", pokemon), LoggerTypes.Success));

                    return(new MethodResult
                    {
                        Success = true
                    });
                }

                LogCaller(new LoggerEventArgs(String.Format("Invalid response from complete encounter tutorial. Response: {0}", response.Result), LoggerTypes.Warning));

                return(new MethodResult());
            }
            catch (Exception ex)
            {
                LogCaller(new LoggerEventArgs("Failed to complete encounter tutorial", LoggerTypes.Exception, ex));

                return(new MethodResult());
            }
        }
예제 #3
0
        private void wizardPage3_Initialize(object sender, WizardPageInitEventArgs e)
        {
            PokemonId firstPoke = rdoBulbasaur.Checked
                ? PokemonId.Bulbasaur
                : rdoCharmander.Checked
                    ? PokemonId.Charmander
                    : PokemonId.Squirtle;
            EncounterTutorialCompleteResponse res = null;

            Task.Run(() =>
            {
                res = session.Client.Encounter.EncounterTutorialComplete(firstPoke).Result;

                //await DelayingUtils.DelayAsync(7000, 2000, cancellationToken);
                if (res.Result != EncounterTutorialCompleteResponse.Types.Result.Success)
                {
                    session.EventDispatcher.Send(new NoticeEvent()
                    {
                        Message = $"Caught Tutorial pokemon! it's {firstPoke}!"
                    });
                }
                //return true;

                //state.CatchFirstPokemon(session, session.CancellationTokenSource.Token).Wait();
            })
            .ContinueWith((t) => { this.Invoke(new Action(() => { wizardControl1.NextPage(); }), null); });
        }
예제 #4
0
        private async Task <MethodResult> CompleteEncounterTutorial(PokemonId pokemon)
        {
            var response = await _client.ClientSession.RpcClient.SendRemoteProcedureCallAsync(new Request
            {
                RequestType    = RequestType.EncounterTutorialComplete,
                RequestMessage = new EncounterTutorialCompleteMessage
                {
                    PokemonId = pokemon
                }.ToByteString()
            });

            if (response == null)
            {
                return(new MethodResult());
            }

            EncounterTutorialCompleteResponse encounterTutorialCompleteResponse = null;

            encounterTutorialCompleteResponse = EncounterTutorialCompleteResponse.Parser.ParseFrom(response);
            LogCaller(new LoggerEventArgs(String.Format("Caught a {0}", pokemon), LoggerTypes.Success));

            return(new MethodResult
            {
                Success = true
            });
        }
예제 #5
0
        public async Task <EncounterTutorialCompleteResponse> AceptLegalScreen()
        {
            EncounterTutorialCompleteResponse res = await MarkTutorialComplete(new RepeatedField <TutorialState>() {
                TutorialState.LegalScreen
            }).ConfigureAwait(false);

            return(res);
        }
예제 #6
0
        private void wizardPage4_Initialize(object sender, WizardPageInitEventArgs e)
        {
            Task.Run(async() =>
            {
                if (!tutState.Contains(TutorialState.AvatarSelection))
                {
                    int gender = rdoMale.Checked ? 0 : 1;

                    var avatarRes = await session.Client.Player.SetAvatar(new PlayerAvatar()
                    {
                        Backpack = 0,
                        Eyes     = 0,
                        Avatar   = gender,
                        Hair     = 0,
                        Hat      = 0,
                        Pants    = 0,
                        Shirt    = 0,
                        Shoes    = 0,
                        Skin     = 0
                    });

                    if (avatarRes.Status == SetAvatarResponse.Types.Status.AvatarAlreadySet ||
                        avatarRes.Status == SetAvatarResponse.Types.Status.Success)
                    {
                        encounterTutorialCompleteResponse = session.Client.Misc
                                                            .MarkTutorialComplete(new RepeatedField <TutorialState>()
                        {
                            TutorialState.AvatarSelection
                        }).Result;

                        if (encounterTutorialCompleteResponse.Result == EncounterTutorialCompleteResponse.Types.Result.Success)
                        {
                            session.EventDispatcher.Send(new NoticeEvent()
                            {
                                Message = $"Selected your avatar, now you are {gender}!"
                            });

                            this.Invoke(new Action(() =>
                            {
                                wizardControl1.NextPage();
                            }), null);

                            return(true);
                        }
                    }

                    this.Invoke(new Action(() =>
                    {
                        lblNameError.Text    = "Error selecting avatar gender!";
                        lblNameError.Visible = true;
                        wizardControl1.PreviousPage();
                    }));
                }
                return(true);
            });
        }
예제 #7
0
        private void wizardPage3_Initialize(object sender, WizardPageInitEventArgs e)
        {
            PokemonId firstPoke = rdoBulbasaur.Checked
                ? PokemonId.Bulbasaur
                : rdoCharmander.Checked
                    ? PokemonId.Charmander
                    : PokemonId.Squirtle;

            Task.Run(() =>
            {
                if (!tutState.Contains(TutorialState.PokemonCapture))
                {
                    encounterTutorialCompleteResponse = session.Client.Encounter.EncounterTutorialComplete(firstPoke).Result;

                    if (encounterTutorialCompleteResponse.Result == EncounterTutorialCompleteResponse.Types.Result.Success)
                    {
                        session.EventDispatcher.Send(new NoticeEvent()
                        {
                            Message = $"Caught Tutorial pokemon! it's {firstPoke}!"
                        });

                        this.Invoke(new Action(() =>
                        {
                            wizardControl1.NextPage();
                        }), null);
                    }
                    else
                    {
                        this.Invoke(new Action(() =>
                        {
                            lblNameError.Text    = "Error catching tutorial pokemon.";
                            lblNameError.Visible = true;
                            wizardControl1.PreviousPage();
                        }));
                    }
                }
            });
        }
예제 #8
0
        private void wizardPage6_Initialize(object sender, WizardPageInitEventArgs e)
        {
            string nickname           = txtNick.Text;
            ClaimCodenameResponse res = null;

            bool   markTutorialComplete = false;
            string errorText            = null;
            string warningText          = null;
            string infoText             = null;

            Task.Run(() =>
            {
                if (!tutState.Contains(TutorialState.NameSelection))
                {
                    res = session.Client.Misc.ClaimCodename(nickname).Result;

                    switch (res.Status)
                    {
                    case ClaimCodenameResponse.Types.Status.Unset:
                        errorText = "Unset, somehow";
                        break;

                    case ClaimCodenameResponse.Types.Status.Success:
                        infoText             = $"Your name is now: {res.Codename}";
                        markTutorialComplete = true;
                        break;

                    case ClaimCodenameResponse.Types.Status.CodenameNotAvailable:
                        errorText = $"That nickname ({nickname}) isn't available, pick another one!";
                        break;

                    case ClaimCodenameResponse.Types.Status.CodenameNotValid:
                        errorText = $"That nickname ({nickname}) isn't valid, pick another one!";
                        break;

                    case ClaimCodenameResponse.Types.Status.CurrentOwner:
                        warningText          = $"You already own that nickname!";
                        markTutorialComplete = true;
                        break;

                    case ClaimCodenameResponse.Types.Status.CodenameChangeNotAllowed:
                        warningText          = "You can't change your nickname anymore!";
                        markTutorialComplete = true;
                        break;

                    default:
                        errorText = "Unknown Niantic error while changing nickname.";
                        break;
                    }
                    if (!string.IsNullOrEmpty(infoText))
                    {
                        session.EventDispatcher.Send(new NoticeEvent()
                        {
                            Message = infoText
                        });
                    }
                    else if (!string.IsNullOrEmpty(warningText))
                    {
                        session.EventDispatcher.Send(new WarnEvent()
                        {
                            Message = warningText
                        });
                    }
                    else if (!string.IsNullOrEmpty(errorText))
                    {
                        session.EventDispatcher.Send(new ErrorEvent()
                        {
                            Message = errorText
                        });
                    }

                    if (markTutorialComplete)
                    {
                        encounterTutorialCompleteResponse = session.Client.Misc.MarkTutorialComplete(new RepeatedField <TutorialState>()
                        {
                            TutorialState.NameSelection
                        }).Result;

                        if (encounterTutorialCompleteResponse.Result == EncounterTutorialCompleteResponse.Types.Result.Success)
                        {
                            if (!tutState.Contains(TutorialState.FirstTimeExperienceComplete))
                            {
                                encounterTutorialCompleteResponse = session.Client.Misc.MarkTutorialComplete(new RepeatedField <TutorialState>()
                                {
                                    TutorialState.FirstTimeExperienceComplete
                                }).Result;

                                if (encounterTutorialCompleteResponse.Result == EncounterTutorialCompleteResponse.Types.Result.Success)
                                {
                                    session.EventDispatcher.Send(new NoticeEvent()
                                    {
                                        Message = "First time experience complete, looks like i just spinned an virtual pokestop :P"
                                    });

                                    this.Invoke(new Action(() =>
                                    {
                                        this.DialogResult = DialogResult.OK;
                                        this.Close();
                                    }));

                                    return;
                                }
                            }
                        }
                    }

                    this.Invoke(new Action(() =>
                    {
                        lblNameError.Text    = errorText;
                        lblNameError.Visible = true;
                        wizardControl1.PreviousPage();
                    }));
                }
            });
        }
예제 #9
0
        public async Task <IState> Execute(ISession session, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            // Always get a fresh PlayerData when checking tutorial state.
            var tutState = (await session.Client.Player.GetPlayer()).PlayerData.TutorialState;

            if (tutState.Contains(TutorialState.FirstTimeExperienceComplete))
            {
                // If we somehow marked the tutorial as complete but have not yet created an avatar,
                // then create it.
                if (!tutState.Contains(TutorialState.AvatarSelection))
                {
                    var avatarRes = await session.Client.Player.SetAvatar(new PlayerAvatar()
                    {
                        Backpack = 0,
                        Eyes     = 0,
                        Avatar   = 0,
                        Hair     = 0,
                        Hat      = 0,
                        Pants    = 0,
                        Shirt    = 0,
                        Shoes    = 0,
                        Skin     = 0
                    });

                    EncounterTutorialCompleteResponse res = await
                                                            session.Client.Misc.MarkTutorialComplete(new RepeatedField <TutorialState>()
                    {
                        TutorialState.AvatarSelection
                    });
                }
                return(new InfoState());
            }

            if (!tutState.Contains(TutorialState.LegalScreen))
            {
                EncounterTutorialCompleteResponse res = await
                                                        session.Client.Misc.MarkTutorialComplete(new RepeatedField <TutorialState>()
                {
                    TutorialState.LegalScreen
                });

                if (res.Result == EncounterTutorialCompleteResponse.Types.Result.Success)
                {
                    session.EventDispatcher.Send(new NoticeEvent()
                    {
                        Message = "Just read the Niantic ToS, looks legit, accepting!"
                    });
                    await DelayingUtils.DelayAsync(5000, 2000, cancellationToken);
                }
                else
                {
                    session.EventDispatcher.Send(new NoticeEvent()
                    {
                        Message = "Error reading the Niantic ToS!"
                    });
                }
            }
            if (!session.LogicSettings.AutoFinishTutorial)
            {
                InitialTutorialForm form = new InitialTutorialForm(this, tutState, session);

                if (form.ShowDialog() == DialogResult.OK)
                {
                }
                else
                {
                    return(new CheckTosState());
                }
            }
            else
            {
                if (!tutState.Contains(TutorialState.AvatarSelection))
                {
                    //string genderString = GlobalSettings.PromptForString(session.Translation, session.Translation.GetTranslation(TranslationString.FirstStartSetupAutoCompleteTutGenderPrompt), new string[] { "Male", "Female" }, "You didn't set a valid gender.", false);

                    //Gender gen;
                    //switch (genderString)
                    //{
                    //    case "Male":
                    //    case "male":
                    //        gen = Gender.Male;
                    //        break;
                    //    case "Female":
                    //    case "female":
                    //        gen = Gender.Female;
                    //        break;
                    //    default:
                    //        // We should never get here, since the prompt should only allow valid options.
                    //        gen = Gender.Male;
                    //        break;
                    //}


                    var avatarRes = await session.Client.Player.SetAvatar(new PlayerAvatar()
                    {
                        Backpack = 0,
                        Eyes     = 0,
                        Hair     = 0,
                        Hat      = 0,
                        Pants    = 0,
                        Shirt    = 0,
                        Shoes    = 0,
                        Skin     = 0,
                        Avatar   = 1
                    });

                    if (avatarRes.Status == SetAvatarResponse.Types.Status.AvatarAlreadySet ||
                        avatarRes.Status == SetAvatarResponse.Types.Status.Success)
                    {
                        await session.Client.Misc.MarkTutorialComplete(new RepeatedField <TutorialState>()
                        {
                            TutorialState.AvatarSelection
                        });

                        session.EventDispatcher.Send(new NoticeEvent()
                        {
                            Message = $"Selected your avatar, now you are Male!"
                        });
                    }
                }
                if (!tutState.Contains(TutorialState.PokemonCapture))
                {
                    await CatchFirstPokemon(session, cancellationToken);
                }
                if (!tutState.Contains(TutorialState.NameSelection))
                {
                    await SelectNickname(session, cancellationToken);
                }
                if (!tutState.Contains(TutorialState.FirstTimeExperienceComplete))
                {
                    await
                    session.Client.Misc.MarkTutorialComplete(new RepeatedField <TutorialState>()
                    {
                        TutorialState.FirstTimeExperienceComplete
                    });

                    session.EventDispatcher.Send(new NoticeEvent()
                    {
                        Message = "First time experience complete, looks like i just spinned an virtual pokestop :P"
                    });
                    await DelayingUtils.DelayAsync(3000, 2000, cancellationToken);
                }
            }
            return(new InfoState());
        }
 /// <summary>
 /// Provides a safe way to invoke the <see cref="EncounterTutorialCompleteReceived" /> event.
 /// </summary>
 /// <param name="value"></param>
 public void RaiseEncounterTutorialCompleteReceived(EncounterTutorialCompleteResponse value) => EncounterTutorialCompleteReceived?.Invoke(this, value);