diff --git a/src/locales/en/menu-ui-handler.ts b/src/locales/en/menu-ui-handler.ts index 6eb680544ed..bc45520a86e 100644 --- a/src/locales/en/menu-ui-handler.ts +++ b/src/locales/en/menu-ui-handler.ts @@ -4,6 +4,7 @@ export const menuUiHandler: SimpleTranslationEntries = { "GAME_SETTINGS": "Game Settings", "ACHIEVEMENTS": "Achievements", "STATS": "Stats", + "RUN_HISTORY": "Run History", "VOUCHERS": "Vouchers", "EGG_LIST": "Egg List", "EGG_GACHA": "Egg Gacha", diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 08d4bd9c162..98de5040960 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -568,10 +568,10 @@ export class GameData { public async getRunHistoryData(scene: BattleScene): Promise { if (!Utils.isLocal) { - const data = await Utils.apiFetch("savedata/runHistory", true).json(); - //const data = await response.json(); + const response = await Utils.apiFetch("savedata/runHistory", true); + const data = await response.json(); if (localStorage.hasOwnProperty(`runHistoryData_${loggedInUser.username}`)) { - let cachedResponse = localStorage.getItem(`runHistoryData_${loggedInUser.username}`, true); + let cachedResponse = localStorage.getItem(`runHistoryData_${loggedInUser.username}`); if (cachedResponse) { cachedResponse = JSON.parse(decrypt(cachedResponse, true)); } @@ -580,13 +580,13 @@ export class GameData { if ( Object.keys(cachedRHData).length >= Object.keys(data).length ) { return cachedRHData; } - } else { - localStorage.setItem(`runHistoryData_${loggedInUser.username}`, JSON.parse(encrypt({}, true))); + } else { + localStorage.setItem(`runHistoryData_${loggedInUser.username}`, JSON.parse(encrypt("", true))); return {}; } return data; } else { - let cachedResponse = localStorage.getItem(`runHistoryData_${loggedInUser.username}`, true); + let cachedResponse = localStorage.getItem(`runHistoryData_${loggedInUser.username}`); if (cachedResponse) { cachedResponse = JSON.parse(decrypt(cachedResponse, true)); } @@ -602,10 +602,12 @@ export class GameData { runHistoryData = {}; } const timestamps = Object.keys(runHistoryData); + const timestampsNo = timestamps.map(Number); //Arbitrary limit of 25 entries per User --> Can increase or decrease if (timestamps.length >= 25) { - delete this.scene.gameData.runHistory[Math.min(timestamps)]; + const oldestTimestamp = Math.min.apply(Math, timestampsNo); + delete this.scene.gameData.runHistory[oldestTimestamp.toString()]; } const timestamp = (runEntry.timestamp).toString(); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index a0cea2f78d5..55f26bc8aa5 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -16,6 +16,7 @@ enum MenuOptions { GAME_SETTINGS, ACHIEVEMENTS, STATS, + RUN_HISTORY, VOUCHERS, EGG_LIST, EGG_GACHA, @@ -325,6 +326,10 @@ export default class MenuUiHandler extends MessageUiHandler { ui.setOverlayMode(Mode.GAME_STATS); success = true; break; + case MenuOptions.RUN_HISTORY: + ui.setOverlayMode(Mode.RUN_HISTORY); + success = true; + break; case MenuOptions.VOUCHERS: ui.setOverlayMode(Mode.VOUCHERS); success = true; diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 9827cd057ac..aa8d9cbf103 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -248,6 +248,7 @@ class RunEntry extends Phaser.GameObjects.Container { const enemyIconContainer = this.scene.add.container(65+(e*25),-8); enemyIconContainer.setScale(0.75); enemyData.boss = false; + enemyData["player"] = true; const enemy = enemyData.toPokemon(this.scene); const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); const enemyLevel = addTextObject(this.scene, 32, 20, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 365db67a05b..b981247abe7 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -162,6 +162,7 @@ export default class GameInfoUiHandler extends UiHandler { const enemyData = runData.enemyParty[0]; const bossStatus = enemyData.boss; enemyData.boss = false; + enemyData["player"] = true; //addPokemonIcon() throws an error if the Pokemon used is a boss const enemy = enemyData.toPokemon(this.scene); const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); @@ -180,6 +181,7 @@ export default class GameInfoUiHandler extends UiHandler { const enemyIconContainer = this.scene.add.container(0, 0); const bossStatus = enemyData.boss; enemyData.boss = false; + enemyData["player"] = true; const enemy = enemyData.toPokemon(this.scene); const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); const enemyLevel = addTextObject(this.scene, 36, 26, `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, bossStatus ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "44px", color: "#f8f8f8" }); @@ -230,6 +232,7 @@ export default class GameInfoUiHandler extends UiHandler { enemyIconContainer.setScale(0.6); const isBoss = enemyData.boss; enemyData.boss = false; + enemyData["player"] = true; const enemy = enemyData.toPokemon(this.scene); const enemyIcon = this.scene.addPokemonIcon(enemy, 0, 0, 0, 0); const enemySprite1 = enemyIcon.list[0] as Phaser.GameObjects.Sprite;