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.
AdLike2048/assets/script/manager/DailyWinStats.ts

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}`;
}
}