上是中国十七地 发表于 2021-5-31 12:25:14

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

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

[*]时间的存储
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)
mrqdz.Value = qdStore:GetAsync(player.UserId)
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)
以上就是每日签到的全部内容了

123457227 发表于 2021-5-31 12:25:36

感谢分享,我去试试

张利亚 发表于 2021-5-31 12:25:45

还没把帖子页面排版好久不小心按了enter发表了
页: [1]
查看完整版本: 你也来一个每日签到功能吧,时间计算解析