本帖最后由 感情偏食BZ8 于 2024-7-14 18:45 编辑
几乎每个游戏都会有签到的功能,关于签到中我们势必会用到遇到一个需求,判断是否是第二日登录。
下面享一下关于第二天签到登录的实现办法。
大伙只要接受一下监听就能知道是第二天了
当如果希望实时刷新可能就需要在onUpdate里面执行了
export const NEWDAY = "newDay"
export default class TimeData extends Subdata {
@Decorator.persistence()
public loginTimeLast: number = 0
protected initDefaultData(): void {
this.loginTimeLast = Date.now();
}
saveTime(time) {
this.loginTimeLast = time
this.save(true);
}
}
export class TimeC extends ModuleC<TimeS, TimeData> {
protected onStart(): void {
Event.addServerListener(NEWDAY, () => {
console.log("太棒了又是新的一天")
})
}
}
export class TimeS extends ModuleS<TimeC, TimeData> {
protected onPlayerJoined(player: mw.Player): void {
//不延迟一秒可能会先于客户端的onStart
setTimeout(() => {
this.initDate(player)
}, 1000);
}
initDate(player: Player): void {
const data = DataCenterS.getData(player, TimeData)
const time = data.loginTimeLast
const Data1 = new Date(time)
const Data2 = new Date(Date.now());
//说明不是一天、
if (Data1.getFullYear() != Data2.getFullYear()
|| Data1.getMonth() != Data2.getMonth()
|| Data1.getDate() != Data2.getDate()
) {
//给客户端发送消息告诉是新的一天了
Event.dispatchToClient(player, NEWDAY)
//给服务端本地发消息是第二天了
Event.dispatchToLocal(NEWDAY, player)
//保存今天的时间戳
data.saveTime(Date.now())
}
}
}
|