Roblox GUI Maker
← 全部教程

菜单

如何制作 Roblox 每日奖励 GUI

每日奖励界面显示一排天数卡片 —— 已领的天数变暗、今天可领、未来的天数锁定 —— 加一个领取按钮。视觉状态只是背景色的区别;真正的逻辑在服务端:记录玩家上次领取的时间和连签天数,只有进入了新一天才发放奖励。

打开每日奖励 模板 →

1. 一个带视觉状态的 7 天网格

每天是一个按状态上色的 Frame:已领(变暗)、当日(高亮)、未解锁(弱化)。用 UIListLayout 或手动位置排列 —— 编辑器的 daily-rewards 模板已经替你做好了。

2. 在服务端追踪连签

按玩家存储 lastClaimTime 和 streak(DataStore)。收到领取请求时,把服务器时间和上次领取对比:不到一天就忽略;在两天以内就推进连签;否则重置为第 1 天。

local DAY = 86400
claimEvent.OnServerEvent:Connect(function(player)
	local data = playerData[player.UserId] -- { last = 0, streak = 0 }
	local now = os.time()
	if now - data.last < DAY then return end -- already claimed today
	data.streak = (now - data.last < 2 * DAY) and data.streak + 1 or 1
	data.last = now
	grantDayReward(player, data.streak)
end)
提示: 天的边界永远用 os.time()(服务器时钟)。客户端的时钟可能不准或被篡改。

3. 把结果反映到 UI

服务器发放后,把新的连签天数和上次领取日告诉客户端。客户端重新给天数卡片上色(把今天标为已领、高亮明天),让日历和服务端的真实状态保持同步。

常见问题

怎么在多次会话间保存连签?

把 lastClaimTime 和 streak 存到按 UserId 索引的 DataStore 里。玩家加入时加载,每次领取后保存。

玩家漏了一天会怎样?

由你决定:把连签重置为 1,或者在宽限期内(比如两天)保留。上面的代码在隔了两天后重置。

相关教程