feat(RankTracker): add timestamp
parent
31949ae3cb
commit
6b6d919a04
|
|
@ -60,6 +60,7 @@
|
|||
"https://deno.land/x/msgpack@v1.4/utils/stream.ts": "1315e29af5c1a40d97bfa6f1c4f7f73d26067b912236f56851981f2f049500b8",
|
||||
"https://deno.land/x/msgpack@v1.4/utils/typedArrays.ts": "bb819c2f28cf7f85ed50b2e57f108462715555cc61ce315e8134cf1eef2ae662",
|
||||
"https://deno.land/x/msgpack@v1.4/utils/utf8.ts": "93183055a7a41986080eeb711e83d553e7c8b121642da4379a5adf253b7beefd",
|
||||
"https://deno.land/x/murmurhash@v1.0.0/mod.ts": "13fd2c5534dfd22ffbfcd4255ea13e47a2f2b99e9c90a83dc43e814a0e278829",
|
||||
"https://deno.land/x/progress@v1.2.8/deps.ts": "e0abdc972a0c152508b28ced5ae9c4be26a5773f0aa4a3caa72371c84d2e28a2",
|
||||
"https://deno.land/x/progress@v1.2.8/mod.ts": "5ef7c7ff079d71effed5055666af81cc58a566bc98e2df8473526bd6457976c5",
|
||||
"https://deno.land/x/progress@v1.2.8/multi.ts": "392553552243204539d83ee53cadda990db20b1b421520411318ff9bd0320646",
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ export const RANK_PARAMS: RankParam[] = [{
|
|||
type Delta = {
|
||||
beforeGameId: string;
|
||||
gameId: string;
|
||||
timestamp: number;
|
||||
rankAfter?: string;
|
||||
rankPoint: number;
|
||||
isPromotion: boolean;
|
||||
|
|
@ -91,7 +92,14 @@ type Delta = {
|
|||
// TODO: auto rank up using rank params and delta.
|
||||
function addRank(state: RankState, delta: Delta): RankState {
|
||||
const { rank, rankPoint } = state;
|
||||
const { gameId, rankAfter, isPromotion, isRankUp, isChallengeFirst } = delta;
|
||||
const {
|
||||
gameId,
|
||||
timestamp,
|
||||
rankAfter,
|
||||
isPromotion,
|
||||
isRankUp,
|
||||
isChallengeFirst,
|
||||
} = delta;
|
||||
|
||||
const rankIndex = RANK_PARAMS.findIndex((r) => r.rank === rank);
|
||||
|
||||
|
|
@ -104,6 +112,7 @@ function addRank(state: RankState, delta: Delta): RankState {
|
|||
if (isChallengeFirst) {
|
||||
return {
|
||||
gameId,
|
||||
timestamp,
|
||||
rank,
|
||||
rankPoint: rankPoint - rankParam.charge,
|
||||
};
|
||||
|
|
@ -112,6 +121,7 @@ function addRank(state: RankState, delta: Delta): RankState {
|
|||
// S+50 is the highest rank
|
||||
if (rankIndex === RANK_PARAMS.length - 1) {
|
||||
return {
|
||||
timestamp,
|
||||
gameId,
|
||||
rank,
|
||||
rankPoint: Math.min(rankPoint + delta.rankPoint, rankParam.pointRange[1]),
|
||||
|
|
@ -123,6 +133,7 @@ function addRank(state: RankState, delta: Delta): RankState {
|
|||
|
||||
return {
|
||||
gameId,
|
||||
timestamp,
|
||||
rank: nextRankParam.rank,
|
||||
rankPoint: nextRankParam.pointRange[0],
|
||||
};
|
||||
|
|
@ -130,6 +141,7 @@ function addRank(state: RankState, delta: Delta): RankState {
|
|||
|
||||
return {
|
||||
gameId,
|
||||
timestamp,
|
||||
rank: rankAfter ?? rank,
|
||||
rankPoint: rankPoint + delta.rankPoint,
|
||||
};
|
||||
|
|
@ -147,6 +159,7 @@ const battleTime = (id: string) => {
|
|||
};
|
||||
|
||||
type FlattenItem = {
|
||||
id: string;
|
||||
gameId: string;
|
||||
time: Date;
|
||||
bankaraMatchChallenge: BankaraMatchChallenge | null;
|
||||
|
|
@ -177,6 +190,7 @@ function generateDeltaList(
|
|||
let delta: Delta = {
|
||||
beforeGameId,
|
||||
gameId: i.gameId,
|
||||
timestamp: Math.floor(i.time.getTime() / 1000),
|
||||
rankPoint: 0,
|
||||
isPromotion: false,
|
||||
isRankUp: false,
|
||||
|
|
@ -230,6 +244,7 @@ function getRankState(i: FlattenItem): RankState {
|
|||
}
|
||||
return {
|
||||
gameId: i.gameId,
|
||||
timestamp: Math.floor(i.time.getTime() / 1000),
|
||||
rank,
|
||||
rankPoint: -1,
|
||||
};
|
||||
|
|
@ -287,6 +302,7 @@ export class RankTracker {
|
|||
.flatMap(
|
||||
({ historyDetails, bankaraMatchChallenge }) => {
|
||||
return historyDetails.nodes.map((j, index) => ({
|
||||
id: j.id,
|
||||
time: battleTime(j.id),
|
||||
gameId: gameId(j.id),
|
||||
bankaraMatchChallenge,
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ export type LoginState = {
|
|||
};
|
||||
export type RankState = {
|
||||
// generated by gameId(battle.id)
|
||||
// TODO: If the gameId does not exist, the tracker will assume that the user has
|
||||
// not played a bankara match. And it will start tracking from the first match
|
||||
gameId: string;
|
||||
// extract from battle.id
|
||||
timestamp?: number;
|
||||
// C-, B, A+, S, S+0, S+12
|
||||
rank: string;
|
||||
rankPoint: number;
|
||||
|
|
|
|||
Loading…
Reference in New Issue