import {PublicShared} from '../../shared/public/public'; import {Scheduler, schedulerType} from './scheduler'; export class SchedulerZhanLing extends Scheduler { id: schedulerType = 'zhanling'; name = '战令'; async read() { if (PublicShared.getOpenServerDay() < G.gc.zhanling.eventOpen.day) { this.startTime = PublicShared.getToDayZeroTime(G.openTime) + G.gc.zhanling.eventOpen.day * 24 * 3600; this.isReady = false; return } let data = await this.db.findOne({type: this.id}); if (!data) { // 开服时间整除战令周期 let round = Math.floor(PublicShared.getOpenServerDay() / G.gc.zhanling.eventOpen.day) let prev_run_time = PublicShared.getToDayZeroTime(G.openTime) + round * G.gc.zhanling.eventOpen.day * 86400 this.db.updateOne({type: this.id}, {$set: {lastRunTime: prev_run_time, round: round}}, {upsert: true}); } if (!data || G.time > PublicShared.getToDayZeroTime(data.lastRunTime) + 24 * 3600 * G.gc.zhanling.eventOpen.day) { let round = Math.floor(PublicShared.getOpenServerDay() / G.gc.zhanling.eventOpen.day) this.startTime = PublicShared.getToDayZeroTime(G.openTime) + (round + 1) * G.gc.zhanling.eventOpen.day * 86400 } else { this.startTime = PublicShared.getToDayZeroTime(data.lastRunTime) + 24 * 3600 * G.gc.zhanling.eventOpen.day; } this.isReady = false; } async start() { // 开服时间整除战令周期 let round = Math.floor(PublicShared.getOpenServerDay() / G.gc.zhanling.eventOpen.day) // lastRunTime仅储存最大值,问题记录: 本地多人启动服务时,有调用此定时器的情况下,时间会混乱。 await this.db.updateOne({type: this.id}, {$set: {round: round}, $max: {lastRunTime: G.time}}, {upsert: true}); this.startTime = PublicShared.getToDayZeroTime() + 24 * 3600 * G.gc.zhanling.eventOpen.day; this.isStart = false; G.mongodb.collection('zhanling').updateMany({type: 'round'}, {$set: {data: {}}}); } }