You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
|
3 weeks ago
|
/**
|
||
|
|
* 每日胜场:战斗胜利 +1,跨天清零并归档至 yesterdayWins。
|
||
|
|
*/
|
||
|
|
export class DailyWinStats {
|
||
|
|
/** 今日胜场(跨天自动清零) */
|
||
|
|
static getTodayWins(): number {
|
||
|
|
this.ensureToday();
|
||
|
|
return Math.max(0, Math.floor(Number(gg.data.doc?.dailyWins) || 0));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 昨日胜场 */
|
||
|
|
static getYesterdayWins(): number {
|
||
|
|
this.ensureToday();
|
||
|
|
return Math.max(0, Math.floor(Number(gg.data.doc?.yesterdayWins) || 0));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 今日日期键 YYYYMMDD(与存档 dailyWinsDate 一致) */
|
||
|
|
static todayKey(): string {
|
||
|
|
return this._todayKey();
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 日榜 expiredate:YYYY-MM-DD,当日 23:59:59 退出,避免跨天沿用旧分 */
|
||
|
|
static expireDateToday(): string {
|
||
|
|
const k = this._todayKey();
|
||
|
|
if (k.length < 8) {
|
||
|
|
console.log('[DailyWinStats] 日期键非法', k);
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
return `${k.slice(0, 4)}-${k.slice(4, 6)}-${k.slice(6, 8)}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 读档 / 打开界面前确保日期一致 */
|
||
|
|
static ensureToday(): void {
|
||
|
|
const today = this._todayKey();
|
||
|
|
const saved = String(gg.data.doc?.dailyWinsDate ?? '').trim();
|
||
|
|
if (saved === today) return;
|
||
|
|
|
||
|
|
const prevWins = Math.max(0, Math.floor(Number(gg.data.doc?.dailyWins) || 0));
|
||
|
|
if (saved) {
|
||
|
|
gg.data.doc.yesterdayWins = prevWins;
|
||
|
|
}
|
||
|
|
gg.data.doc.dailyWins = 0;
|
||
|
|
gg.data.doc.dailyWinsDate = today;
|
||
|
|
gg.data.doc.rankLastSyncDailyWins = -1;
|
||
|
|
gg.data.doc.rankLastSyncDailyWinsDate = '';
|
||
|
|
gg.data.saveLocal();
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 跨天回调(GameData.onFirstLoginToday) */
|
||
|
|
static onCrossDay(): void {
|
||
|
|
this.ensureToday();
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 战斗胜利 +1
|
||
|
|
* @param opts.save 是否立即写本地档
|
||
|
|
*/
|
||
|
|
static recordWin(opts?: { save?: boolean }): void {
|
||
|
|
this.ensureToday();
|
||
|
|
gg.data.doc.dailyWins = this.getTodayWins() + 1;
|
||
|
|
if (opts?.save !== false) gg.data.saveLocal();
|
||
|
|
}
|
||
|
|
|
||
|
|
private static _todayKey(): string {
|
||
|
|
const d = new Date(gg.data.getCurentTime2());
|
||
|
|
const y = d.getFullYear();
|
||
|
|
const m = `${d.getMonth() + 1}`.padStart(2, '0');
|
||
|
|
const day = `${d.getDate()}`.padStart(2, '0');
|
||
|
|
return `${y}${m}${day}`;
|
||
|
|
}
|
||
|
|
}
|