参与奖励

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

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

获取包裹

  1. 在工作室中,选择 视图 标签。

  2. 点击 工具箱

    Studio's View tab with the Toolbox tool highlighted.
  3. 工具箱 窗口中,单击 物品栏 标签。

    Studio's Toolbox window with the Inventory tab highlighted.
  4. 单击 功能包核心 瓦片,然后单击 参与奖励功能包 瓦片。两个包文件夹都显示在 资源管理器 窗口。

  5. 将文件夹拖入 复制存储

启动包裹

将包裹移至 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 工作。功能包包括两种奖励类型:TimeDaily


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 小时内提供。| 否 | 无

自定义用户界面

在上一节中,您可能已注意到 tabDisplayNametabOrderdescription 字段,这些字段可用于用户界面的基本自定义。你还可以在 ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings 中找到一些用户界面字符串。

  • 要使用 effect 变量指定新的奖励背景,请添加框架到 ReplicatedStorage.EngagementRewards.Objects.RewardItemFrames 。然后将框架名称添加到 Types.RewardEffect 表中的 ReplicatedStorage.EngagementRewards.Configs.Types 表。

  • 对于更全面的自定义,请修改 ReplicatedStorage.EngagementRewards.Objects 中的对象。例如,你可能会修改框架 BackgroundColor3RewardsHudButton.BackgroundColorFooterContentFrame.ClaimableUIGradient

  • 用户界面的入口是 ReplicatedStorage.EngagementRewards.Client.UIController 脚本,它获取必要的对象并初始化用户界面。如果你添加或重命名顶级对象(与仅添加子对象或修改属性不同),你可能需要在此文件夹中更新代码来处理它们。