参与奖励

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

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

获取该包

  1. 通过点击此处的添加到库存链接,将核心参与奖励包添加到您的Studio库存中:

  2. 从Studio的窗口菜单或主页选项卡工具栏中,打开工具箱

  3. 工具箱窗口中,点击库存选项卡。我的模型排序显示。

    Studio的工具箱窗口,库存选项卡突出显示。
  4. 点击功能包核心图块,然后点击参与奖励功能包图块。两个包文件夹将在资源管理器窗口中显示。

  5. 将文件夹拖入ReplicatedStorage

初始化包

将包移动到ReplicatedStorage并测试您的游戏会运行ReplicatedStorage.EngagementRewards.Server.Examples中的EngagementRewardsExample脚本。

该脚本展示了如何初始化包以供您的游戏使用,这涉及到要求几个模块脚本并定义一个rewardClaimedHandlerFunction()函数,该函数最终将奖励给予玩家。

此函数必须返回一个布尔值。在示例脚本中,您可以看到它并没有给玩家任何奖励;它只是打印了玩家、奖励和被领取的数量。

EngagementRewardsExample
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
effectRewardEffect在用户界面中使用的视觉效果。请参见自定义用户界面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小时内可用。

自定义用户界面

在上一节中,您可能注意到了tabDisplayNametabOrderdescription字段,这些字段允许对用户界面进行基本自定义。您还可以在ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings中找到一些用户界面字符串。

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

  • 要进行更全面的自定义,请修改ReplicatedStorage.EngagementRewards.Objects中的对象。例如,您可能会修改RewardsHudButton.Background框架的BackgroundColor3FooterContentFrame.ClaimableUIGradientColor

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

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。