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()); } }
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()); } }
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); }); }
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 }); }
public async Task <EncounterTutorialCompleteResponse> AceptLegalScreen() { EncounterTutorialCompleteResponse res = await MarkTutorialComplete(new RepeatedField <TutorialState>() { TutorialState.LegalScreen }).ConfigureAwait(false); return(res); }
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); }); }
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(); })); } } }); }
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(); })); } }); }
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);