[Telemetry][Misc] Client-Side changes to log run results at the end of runs (#4834)
* Added new telemetry-related parameters * Update test with new parameters. * Removing extra parameters. * Cat in front of keyboar d sorry * Changed variable name to isVictory. * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Thank you Torranx * Condensed if-else pair to else if statement * Update src/phases/game-over-phase.ts Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> * inhale... exhale... corrected variable name to pass linter --------- Co-authored-by: frutescens <info@laptop> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com>
This commit is contained in:
parent
44a68a91ba
commit
b3a94e6a6b
|
@ -8,6 +8,7 @@ export class UpdateSessionSavedataRequest {
|
|||
/** This is **NOT** similar to {@linkcode ClearSessionSavedataRequest} */
|
||||
export interface NewClearSessionSavedataRequest {
|
||||
slot: number;
|
||||
isVictory: boolean;
|
||||
clientSessionId: string;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,13 +26,13 @@ import i18next from "i18next";
|
|||
import { pokerogueApi } from "#app/plugins/api/pokerogue-api";
|
||||
|
||||
export class GameOverPhase extends BattlePhase {
|
||||
private victory: boolean;
|
||||
private isVictory: boolean;
|
||||
private firstRibbons: PokemonSpecies[] = [];
|
||||
|
||||
constructor(scene: BattleScene, victory?: boolean) {
|
||||
constructor(scene: BattleScene, isVictory: boolean = false) {
|
||||
super(scene);
|
||||
|
||||
this.victory = !!victory;
|
||||
this.isVictory = isVictory;
|
||||
}
|
||||
|
||||
start() {
|
||||
|
@ -40,22 +40,22 @@ export class GameOverPhase extends BattlePhase {
|
|||
|
||||
// Failsafe if players somehow skip floor 200 in classic mode
|
||||
if (this.scene.gameMode.isClassic && this.scene.currentBattle.waveIndex > 200) {
|
||||
this.victory = true;
|
||||
this.isVictory = true;
|
||||
}
|
||||
|
||||
// Handle Mystery Encounter special Game Over cases
|
||||
// Situations such as when player lost a battle, but it isn't treated as full Game Over
|
||||
if (!this.victory && this.scene.currentBattle.mysteryEncounter?.onGameOver && !this.scene.currentBattle.mysteryEncounter.onGameOver(this.scene)) {
|
||||
if (!this.isVictory && this.scene.currentBattle.mysteryEncounter?.onGameOver && !this.scene.currentBattle.mysteryEncounter.onGameOver(this.scene)) {
|
||||
// Do not end the game
|
||||
return this.end();
|
||||
}
|
||||
// Otherwise, continue standard Game Over logic
|
||||
|
||||
if (this.victory && this.scene.gameMode.isEndless) {
|
||||
if (this.isVictory && this.scene.gameMode.isEndless) {
|
||||
const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET;
|
||||
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
||||
this.scene.ui.showDialogue(i18next.t("miscDialogue:ending_endless", { context: genderStr }), i18next.t("miscDialogue:ending_name"), 0, () => this.handleGameOver());
|
||||
} else if (this.victory || !this.scene.enableRetries) {
|
||||
} else if (this.isVictory || !this.scene.enableRetries) {
|
||||
this.handleGameOver();
|
||||
} else {
|
||||
this.scene.ui.showText(i18next.t("battle:retryBattle"), null, () => {
|
||||
|
@ -93,7 +93,7 @@ export class GameOverPhase extends BattlePhase {
|
|||
this.scene.disableMenu = true;
|
||||
this.scene.time.delayedCall(1000, () => {
|
||||
let firstClear = false;
|
||||
if (this.victory && newClear) {
|
||||
if (this.isVictory && newClear) {
|
||||
if (this.scene.gameMode.isClassic) {
|
||||
firstClear = this.scene.validateAchv(achvs.CLASSIC_VICTORY);
|
||||
this.scene.validateAchv(achvs.UNEVOLVED_CLASSIC_VICTORY);
|
||||
|
@ -109,8 +109,8 @@ export class GameOverPhase extends BattlePhase {
|
|||
this.scene.gameData.gameStats.dailyRunSessionsWon++;
|
||||
}
|
||||
}
|
||||
this.scene.gameData.saveRunHistory(this.scene, this.scene.gameData.getSessionSaveData(this.scene), this.victory);
|
||||
const fadeDuration = this.victory ? 10000 : 5000;
|
||||
this.scene.gameData.saveRunHistory(this.scene, this.scene.gameData.getSessionSaveData(this.scene), this.isVictory);
|
||||
const fadeDuration = this.isVictory ? 10000 : 5000;
|
||||
this.scene.fadeOutBgm(fadeDuration, true);
|
||||
const activeBattlers = this.scene.getField().filter(p => p?.isActive(true));
|
||||
activeBattlers.map(p => p.hideInfo());
|
||||
|
@ -120,7 +120,7 @@ export class GameOverPhase extends BattlePhase {
|
|||
this.scene.clearPhaseQueue();
|
||||
this.scene.ui.clearText();
|
||||
|
||||
if (this.victory && this.scene.gameMode.isChallenge) {
|
||||
if (this.isVictory && this.scene.gameMode.isChallenge) {
|
||||
this.scene.gameMode.challenges.forEach(c => this.scene.validateAchvs(ChallengeAchv, c));
|
||||
}
|
||||
|
||||
|
@ -128,7 +128,7 @@ export class GameOverPhase extends BattlePhase {
|
|||
if (newClear) {
|
||||
this.handleUnlocks();
|
||||
}
|
||||
if (this.victory && newClear) {
|
||||
if (this.isVictory && newClear) {
|
||||
for (const species of this.firstRibbons) {
|
||||
this.scene.unshiftPhase(new RibbonModifierRewardPhase(this.scene, modifierTypes.VOUCHER_PLUS, species));
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ export class GameOverPhase extends BattlePhase {
|
|||
this.end();
|
||||
};
|
||||
|
||||
if (this.victory && this.scene.gameMode.isClassic) {
|
||||
if (this.isVictory && this.scene.gameMode.isClassic) {
|
||||
const dialogueKey = "miscDialogue:ending";
|
||||
|
||||
if (!this.scene.ui.shouldSkipDialogue(dialogueKey)) {
|
||||
|
@ -173,25 +173,21 @@ export class GameOverPhase extends BattlePhase {
|
|||
});
|
||||
};
|
||||
|
||||
/* Added a local check to see if the game is running offline on victory
|
||||
/* Added a local check to see if the game is running offline
|
||||
If Online, execute apiFetch as intended
|
||||
If Offline, execute offlineNewClear(), a localStorage implementation of newClear daily run checks */
|
||||
if (this.victory) {
|
||||
If Offline, execute offlineNewClear() only for victory, a localStorage implementation of newClear daily run checks */
|
||||
if (!Utils.isLocal || Utils.isLocalServerConnected) {
|
||||
pokerogueApi.savedata.session.newclear({ slot: this.scene.sessionSlotId, clientSessionId })
|
||||
pokerogueApi.savedata.session.newclear({ slot: this.scene.sessionSlotId, isVictory: this.isVictory, clientSessionId: clientSessionId })
|
||||
.then((success) => doGameOver(!!success));
|
||||
} else {
|
||||
} else if (this.isVictory) {
|
||||
this.scene.gameData.offlineNewClear(this.scene).then(result => {
|
||||
doGameOver(result);
|
||||
});
|
||||
}
|
||||
} else {
|
||||
doGameOver(false);
|
||||
}
|
||||
}
|
||||
|
||||
handleUnlocks(): void {
|
||||
if (this.victory && this.scene.gameMode.isClassic) {
|
||||
if (this.isVictory && this.scene.gameMode.isClassic) {
|
||||
if (!this.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]) {
|
||||
this.scene.unshiftPhase(new UnlockPhase(this.scene, Unlockables.ENDLESS_MODE));
|
||||
}
|
||||
|
|
|
@ -28,7 +28,8 @@ describe("Pokerogue Session Savedata API", () => {
|
|||
describe("Newclear", () => {
|
||||
const params: NewClearSessionSavedataRequest = {
|
||||
clientSessionId: "test-session-id",
|
||||
slot: 3,
|
||||
isVictory: true,
|
||||
slot: 3
|
||||
};
|
||||
|
||||
it("should return true on SUCCESS", async () => {
|
||||
|
|
Loading…
Reference in New Issue