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

获取包裹
在工作室中,选择 视图 标签。
点击 工具箱 。
在 工具箱 窗口中,单击 物品栏 标签。
单击 功能包核心 瓦片,然后单击 参与奖励功能包 瓦片。两个包文件夹都显示在 资源管理器 窗口。
将文件夹拖入 复制存储 。
启动包裹
将包裹移至 ReplicatedStorage 并测试您的体验运行 EngagementRewardsExample 脚本在 ReplicatedStorage.EngagementRewards.Server.Examples 中。
这段脚本显示了如何为体验中使用的包进行初始化,这涉及到需要几个模块脚本和定义一个 rewardClaimedHandlerFunction() 函数,最终将奖励(s)交给玩家。
此函数必须返回一个 boolean。在示例脚本中,您可以看到它不给玩家提供任何奖励;它只打印玩家、奖励和要领取的数量。
参与奖励示例
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)
-- 用您自己声称的奖励处理函数替换此处理器函数
-- 该函数应该处理传给奖励ID的奖励声称事件
local function rewardClaimedHandlerFunction(player: Player, rewardId: RewardId, quantity: number): (boolean, string?)
print(`Reward {rewardId} claimed by {player} with quantity {quantity}`)
return true
end
-- more
您可以直接修改此脚本或将其移至 服务器脚本服务 如果那是您喜欢的服务器代验证码位置。按原样,该脚本仅用于测试目的。
给玩家奖励的方式会根据经验而异。在一些体验中,您可能会授予体验提升或只是增加玩家的金币数量。在其他体验中,您可能会拥有自定义的库存系统,而其他人可能会将物品放入玩家背包。但在所有情况下,你必须用自己的函数替换 rewardClaimedHandlerFunction()。
添加奖励和条件
大多数奖励定制发生在 ReplicatedStorage.EngagementRewards.Configs.EngagementRewardsConfig 内。该模块脚本定义了奖励以及解锁它的要求。
你可以在 ReplicatedStorage.EngagementRewards.Configs.Types 中看到完整的类型声明(或添加新的),但你可能只需要与 EngagementRewardsConfig 工作。功能包包括两种奖励类型:Time和Daily。
local engagementRewardsConfig: Types.EngagementRewardsConfig = {[Types.RewardType.Time] = {tabDisplayName = "Time",tabOrder = 1,description = "Keep playing to unlock rewards!",rewards = {MinutesPlayed1 = {icon = 116913478160966,displayName = "Ice Lance",requiredSecondsInGame = 1 * 5,},-- 更多[Types.RewardType.Daily] = {tabDisplayName = "Daily",tabOrder = 2,description = "Play daily to unlock rewards!",rewards = {DailyStreak1 = {icon = 116913478160966,displayName = "Ice Lance",requiredDaysVisitedStreak = 1,effect = Types.RewardEffect.Valuable,},-- more
两种奖励类型都需要一个标志,这是 Roblox 图像资产 ID( 不是 一张贴花)。你可能还想要一个用于 UI 的显示名称。为 1 以外的值指定 quantity。您还可以选择将奖励指定为具有价值()来在用户界面中给予它不同的背景框架。
变量 | 类型 | 描述 | 默认 | 需要 :--- | :--- | :--- | :--- | :--- 图标 | 数字 | Roblox 用于 UI 标志的资产 ID。| N/A | 是 displayName | 字符串 | 在 UI 中使用的奖励名称。| RewardId | 无数量 | 数量 | 要奖励的物品数量。| 1 | 没有影响 | 奖励效果 | UI中使用的视觉效果。请参阅自定义用户界面。| Types.RewardEffect.Default | No
时间奖励
Time 奖励在游戏中的一定数量秒后解锁。自定义这些数字以满足您的需求。你可能会使用小数进行简单测试,在发布体验中,在 10 分钟后授予奖励,在 30 分钟后再授予奖励,在一小时后再授予奖励等等。
乘法使数字在秒内更容易让人类使用,因此在两小时内,你可能会选择指定 2 * 60 * 60 而不是 7200 。
变量 | 类型 | 描述 | 默认 | 需要 :--- | :--- | :--- | :--- | :--- 游戏中必须花费的秒数 (一个正整数) 玩家必须在游戏中花费的秒数来获得奖励。| N/A | 是
每日奖励
Daily 奖励在连续登录多天后解锁。例如,当玩家第一次登录时,你可以给他们三种药水或肉桂卷。之后的几天,你可能会奖励更有价值的消耗品,随后是一件耐用的物品,例如新的钓竿,在七天连续之后。
变量 | 类型 | 描述 | 默认 | 需要 :--- | :--- | :--- | :--- | :--- requiredDaysVisitedStreak | 数字 |玩家必须连接到体验以获得奖励的连续天数。| N/A | 是
两个额外的每日奖励配置选项在 DailyRewardTabConfig 中可用。
[Types.RewardType.Daily] = {tabDisplayName = "Daily",tabOrder = 2,description = "Play daily to unlock rewards!",isHiddenOnJoin = true,isAlignedToStreakResetTime = true,rewards = {DailyStreak1 = {icon = 116913478160966,displayName = "Ice Lance",requiredDaysVisitedStreak = 1,},-- more
变量 | 类型 | 描述 | 默认 | 需要 :--- | :--- | :--- | :--- | :--- 隐藏在加入体验时不会自动显示奖励。当为 false 时,玩家加入游戏时奖励会自动弹出,如果玩家有新的每日奖励可领取。| 错误 | 没有 isAlignedToStreakResetTime | 布尔 | 当真实时,第二天的奖励可以在初始第 1 天可领取时间后 24 小时领取。当为 false 时,第 2 天的奖励可以在第 1 天可领取时间后的第一个午夜领取。例如,如果玩家在晚上11点(23点)登录并领取第一天的奖励,真正意味着他们必须等到第二天晚上11点才能领取第二天的奖励。错误意味着他们可以在上午 12:00(00:00)领取第 2 天的奖励。第 3 天及以后的奖励始终在前一天可领取时间结束后的 24 小时内提供。| 否 | 无
自定义用户界面
在上一节中,您可能已注意到 tabDisplayName 、 tabOrder 和 description 字段,这些字段可用于用户界面的基本自定义。你还可以在 ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings 中找到一些用户界面字符串。

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