参与奖励功能包是一个可定制的框架,用于为某些玩家活动提供游戏内奖励,包括每日登录连续天数和游戏时长。除了客户端和服务器逻辑外,该包还包括一个默认的用户界面,用于查看奖励进度、奖励状态和领取奖励。

获取该包
通过点击此处的添加到库存链接,将核心和参与奖励包添加到您的Studio库存中:
从Studio的窗口菜单或主页选项卡工具栏中,打开工具箱。
在工具箱窗口中,点击库存选项卡。我的模型排序显示。

点击功能包核心图块,然后点击参与奖励功能包图块。两个包文件夹将在资源管理器窗口中显示。
将文件夹拖入ReplicatedStorage。
初始化包
将包移动到ReplicatedStorage并测试您的游戏会运行ReplicatedStorage.EngagementRewards.Server.Examples中的EngagementRewardsExample脚本。
该脚本展示了如何初始化包以供您的游戏使用,这涉及到要求几个模块脚本并定义一个rewardClaimedHandlerFunction()函数,该函数最终将奖励给予玩家。
此函数必须返回一个布尔值。在示例脚本中,您可以看到它并没有给玩家任何奖励;它只是打印了玩家、奖励和被领取的数量。
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local EngagementRewardsConfig = require(ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig)
local EngagementRewards = require(ReplicatedStorage.EngagementRewards.Server.EngagementRewards)
local EngagementRewardsUtils = require(ReplicatedStorage.EngagementRewards.Utils.EngagementRewardsUtils)
local Types = require(ReplicatedStorage.EngagementRewards.Configs.Types)
-- 用您自己的奖励领取处理函数替换此处理函数
-- 此函数应处理传入的rewardId的奖励领取事件
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`奖励 {rewardId} 被 {player} 以数量 {quantity} 领取`)
return true
end
-- 更多您可以直接修改此脚本,或将其移动到ServerScriptService,如果这是您首选的服务器代码位置。按原样,该脚本仅对测试目的有用。
给予玩家奖励的方式因游戏而异。在某些游戏中,您可能会授予游戏增益或仅增加玩家的金币数量。在其他游戏中,您可能有一个自定义库存系统,而其他游戏可能会将物品放入玩家的背包中。然而,在所有情况下,您必须用自己的函数替换rewardClaimedHandlerFunction()。
添加奖励和标准
大多数奖励自定义发生在ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig中。此模块脚本定义了奖励及其解锁要求。
您可以在ReplicatedStorage.EngagementRewards.Configs.Types中查看完整的类型声明(或添加新的),但您可能只需要处理EngagementRewardsConfig。该功能包包括两种奖励类型:时间和每日。
local engagementRewardsConfig: Types.EngagementRewardsConfig = {
[Types.RewardType.Time] = {
tabDisplayName = "时间",
tabOrder = 1,
description = "继续游戏以解锁奖励!",
rewards = {
MinutesPlayed1 = {
icon = 116913478160966,
displayName = "冰矛",
requiredSecondsInGame = 1 * 5,
},
-- 更多
[Types.RewardType.Daily] = {
tabDisplayName = "每日",
tabOrder = 2,
description = "每日游戏以解锁奖励!",
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "冰矛",
requiredDaysVisitedStreak = 1,
effect = Types.RewardEffect.Valuable,
},
-- 更多两种奖励类型都需要一个图标,这是一个Roblox资产ID,用于图像(不是贴图)。您可能还希望有一个用于用户界面的显示名称。对于值不等于1的情况,请指定quantity。您还可以选择将奖励指定为有价值的(effect = Types.RewardEffect.Valuable),以在用户界面中给予其不同的背景框。
| 变量 | 类型 | 描述 | 默认 | 必需 |
|---|---|---|---|---|
| icon | 数字 | 用于用户界面的图标的Roblox资产ID。 | N/A | 是 |
| displayName | 字符串 | 用于用户界面的奖励名称。 | RewardId | 否 |
| quantity | 数字 | 奖励的物品数量。 | 1 | 否 |
| effect | RewardEffect | 在用户界面中使用的视觉效果。请参见自定义用户界面。 | Types.RewardEffect.Default | 否 |
时间奖励
时间奖励在游戏中达到一定秒数后解锁。根据您的需要自定义这些数字。您可能会使用小数字进行简单测试,而在发布的游戏中,在10分钟后授予奖励,30分钟后再授予奖励,1小时后再授予奖励,依此类推。
乘法使得以秒为单位的数字更易于人类处理,因此对于两个小时,您可能更愿意指定2 * 60 * 60而不是7200。
| 变量 | 类型 | 描述 | 默认 | 必需 |
|---|---|---|---|---|
| requiredSecondsInGame | 数字 | 玩家必须在游戏中花费的秒数(正整数),以获得奖励。 | N/A | 是 |
每日奖励
每日奖励在连续登录的天数达到一定数量后解锁。例如,玩家第一次登录时,您可能会给他们三个药水或一个肉桂卷。随后几天,您可能会奖励更有价值的消耗品,接着在连续七天后给予耐用物品,比如新的钓鱼竿。
| 变量 | 类型 | 描述 | 默认 | 必需 |
|---|---|---|---|---|
| requiredDaysVisitedStreak | 数字 | 玩家必须连续连接到游戏的天数,以获得奖励。 | N/A | 是 |
在DailyRewardTabConfig中还有两个额外的每日奖励配置选项。
[Types.RewardType.Daily] = {
tabDisplayName = "每日",
tabOrder = 2,
description = "每日游戏以解锁奖励!",
isHiddenOnJoin = true,
isAlignedToStreakResetTime = true,
rewards = {
DailyStreak1 = {
icon = 116913478160966,
displayName = "冰矛",
requiredDaysVisitedStreak = 1,
},
-- 更多| 变量 | 类型 | 描述 | 默认 | 必需 |
|---|---|---|---|---|
| isHiddenOnJoin | 布尔 | 当为真时,奖励在加入游戏时不会自动弹出。当为假时,如果玩家有新的每日奖励可领取,奖励将在加入游戏时自动弹出。 | 假 | 否 |
| isAlignedToStreakResetTime | 布尔 | 当为真时,第二天的奖励可以在初始第一天可领取时间后的24小时内领取。当为假时,第二天的奖励可以在第一天可领取时间后的第一个午夜领取。例如,如果玩家在晚上11:00(23:00)登录并领取他们的第一天奖励,真意味着他们必须等到第二天的晚上11:00才能领取第二天的奖励。假意味着他们可以在午夜12:00(00:00)领取第二天的奖励,晚一个小时。第三天及以后的奖励总是在前一天可领取时间后的24小时内可用。 | 假 | 否 |
自定义用户界面
在上一节中,您可能注意到了tabDisplayName、tabOrder和description字段,这些字段允许对用户界面进行基本自定义。您还可以在ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings中找到一些用户界面字符串。

要使用effect变量指定新的奖励背景,请向ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames添加一个框架。然后将框架的名称添加到ReplicatedStorage.EngagementRewards.Configs.Types中的Types.RewardEffect表中。
要进行更全面的自定义,请修改ReplicatedStorage.EngagementRewards.Objects中的对象。例如,您可能会修改RewardsHudButton.Background框架的BackgroundColor3或FooterContentFrame.ClaimableUIGradient的Color。
用户界面的入口点是ReplicatedStorage.EngagementRewards.Client.UIController脚本,该脚本获取必要的对象并初始化用户界面。如果您添加或重命名顶级对象(而不是仅添加子对象或修改属性),您可能需要更新此文件夹中的代码以处理它们。