43 lines
2.1 KiB
TypeScript
43 lines
2.1 KiB
TypeScript
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: {}}});
|
||
}
|
||
} |