From af95defd9aae82a0f7eeefa209cb9e90aaf2554d Mon Sep 17 00:00:00 2001 From: spacemeowx2 Date: Mon, 28 Nov 2022 16:09:14 +0800 Subject: [PATCH] fix: auto promotion not working as expecting --- src/RankTracker.test.ts | 16 +++++++++++++++- src/RankTracker.ts | 1 + src/exporters/stat.ink.ts | 10 ++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/RankTracker.test.ts b/src/RankTracker.test.ts index 001d0c0..36ab49b 100644 --- a/src/RankTracker.test.ts +++ b/src/RankTracker.test.ts @@ -132,11 +132,25 @@ Deno.test("RankTracker autotrack after promotion", async () => { }, }]); + const gameId1 = await gameId(genId(1)); assertEquals(finalState, { - gameId: await gameId(genId(1)), + gameId: gameId1, rank: "A-", rankPoint: 200, }); + + assertEquals(await tracker.getRankStateById(genId(1)), { + before: { + gameId: await gameId(genId(0)), + rank: "B+", + rankPoint: -1, + }, + after: { + gameId: gameId1, + rank: "A-", + rankPoint: 200, + }, + }); }); Deno.test("RankTracker tracks promotion, ignoring INPROGRESS", async () => { diff --git a/src/RankTracker.ts b/src/RankTracker.ts index ca1e446..0975082 100644 --- a/src/RankTracker.ts +++ b/src/RankTracker.ts @@ -331,6 +331,7 @@ export class RankTracker { return; } + this.state = curState; const deltaList = generateDeltaList(curState, flatten); if (!deltaList) { diff --git a/src/exporters/stat.ink.ts b/src/exporters/stat.ink.ts index 0863ad4..9723fc2 100644 --- a/src/exporters/stat.ink.ts +++ b/src/exporters/stat.ink.ts @@ -492,6 +492,16 @@ export class StatInkExporter implements GameExporter { result.rank_exp_change === undefined ) { result.rank_exp_change = result.rank_after_exp - result.rank_before_exp; + } else if ( + bankaraMatchChallenge?.isUdemaeUp && + bankaraMatchChallenge.earnedUdemaePoint + ) { + // If the before state is generated by auto promotion, the rank_before_exp is wrong. + // And `earnedUdemaePoint` from splatnet3 is -xxx. + // So we calcuate `rank_before_exp` and remove `rank_exp_change` here + result.rank_before_exp = result.rank_after_exp - + bankaraMatchChallenge.earnedUdemaePoint; + result.rank_exp_change = undefined; } if (!result.rank_after) {