你也来一个每日签到功能吧,时间计算解析

该功能教程是逻辑思维教程,学习该功能首先,你要学会的东西:存储,lua基础,获取系统时间等等。
该功能是以碰撞实现的每日签到,以下是源代码,有各种注释:
该功能我将其分为了两个脚本:

  1. 时间的存储
    local qdStore = DataStoreService:GetDataStore(“qd”) --签到
    game.Players.PlayerAdded:Connect(function(player) --玩家加入时
    –创建两个值
    local qdrqz = Instance.new(“NumberValue”,player) --签到过的日期时间戳
    qdrqz.Name = “qdrqz”
    local mrqdz = Instance.new(“BoolValue”,player) --是否已经签到过了
    mrqdz.Name = “mrqdz”

    if qdStore:GetAsync(player.UserId) == nil then --获取存储为空就初始化值对象
    qdrqz.Value = 0
    mrqdz.Value = false
    else --获取到存储就将值获取并设置给值对象
    qdrqz.Value = qdStore:GetAsync(player.UserId)[1]
    mrqdz.Value = qdStore:GetAsync(player.UserId)[2]
    end
    –下面是值的存储,这里是为了方便,学会之后可以换成玩家退出游戏就进行存储
    qdrqz.Changed:Connect(function() --值改变的时候将表存储,为了
    qdStore:SetAsync(player.UserId,{qdrqz.Value,mrqdz.Value})
    end)
    mrqdz.Changed:Connect(function() --值改变的时候将表存储
    qdStore:SetAsync(player.UserId,{qdrqz.Value,mrqdz.Value})
    end)
    end)
    2.签到功能
    local part = script.Parent --获取part对象
    local bool = true --防止多次碰撞
    part.Touched:Connect(function(avatar) --碰撞监听
    local p = game:service(“Players”):GetPlayerFromCharacter(avatar.Parent) --获取玩家
    if not p then
    return
    else
    if bool == true then
    bool = false
    local mrqdz = p:WaitForChild(“mrqdz”) --签到过的日期时间戳,值对象
    local qdrqz = p:WaitForChild(“qdrqz”) --是否已经签到过了,值对象
    local sjcday = tonumber(os.date("%d",os.time())) --获取当日(“%d”)的时间戳
    local czz = sjcday - qdrqz.Value --两个时间戳相减
    if czz == 0 then --如果为0,说明当天还未过去,而且已经签到过了
    mrqdz.Value = true
    print(“已经签到过了”)
    else --不为0,当天已经过去了,将值设置为false,表示未签到。
    mrqdz.Value = false
    end
    if mrqdz.Value == false then --当值mrqdz为false时触发
    mrqdz.Value = true --值设置为true表示签到了
    qdrqz.Value = tonumber(os.date("%d",os.time())) --将当天的时间戳存储起来
    print(“签到成功”)
    –这里就可以玩家签到成功时获得的奖励
    end
    wait(1)
    bool = true
    end
    end
    end)
    以上就是每日签到的全部内容了

4赞

感谢分享,我去试试 :v:

还没把帖子页面排版好久不小心按了enter发表了 :rofl: