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