[开发者心得] 第二天登录功能

[复制链接]
177 |0
感情偏食BZ8 发表于 2024-7-14 18:45:11 | 显示全部楼层 |阅读模式
本帖最后由 感情偏食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())
        }
    }
}

   





回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表