该 赛季通行证 功能包提供出盒功能,可以创建限时、任务驱动的进度系统,在其有效期内,玩家可以完成任务目标来获得仅在特定时间段内提供的奖励。使用包裹的自定义选项,您可以个性化所有赛季通行证,将新内容提供给您的观众,促进玩家保留,并产生收入。

获取包装
创建者商店是您可以使用的工具箱选项卡,可用于查找 Roblox 和 Roblox 社区制作的所有资产,包括模型、图像、网格、音频、插件、视频和字体资产。您可以使用创作者商店直接将一个或多个资产添加到开放体验中,包括功能包!
每个功能包需要 核心 功能包正常运行,而 赛季通行证 包需要 任务 功能包定义赛季任务。一旦三个包裹资产都在您的道具中,您可以在平台上的任何项目中重复使用它们。
要将库存的包从你的体验中获取到你的体验:
在 Studio 中通过单击以下组件中的 添加到库存 链接将 核心 、 任务 和 赛季通行证 包添加到库存中
在工具栏中,选择视图标签。
点击 工具箱 。显示 工具箱 窗口。
在 工具箱 窗口中,单击 库存 选项卡。显示 我的模型 排序。
单击 功能包核心 瓦片、 任务功能包 瓦片、然后是 赛季通行证功能包 瓦片。三个包文件夹都显示在 资源管理器 窗口中。
将包裹文件夹拖入 复制存储 。
允许数据存储调用跟踪玩家购买包装产品的购买。
- 在工具栏的 主页 选项卡中,选择 游戏设置 。
- 导航到 安全 选项卡,然后启用 启用工作室访问API服务 。
配置任务依赖
为了季节正常运行,你必须添加逻辑,以便 季节通行证 功能包可以跟踪玩家进度并更新其用户界面组件。为了简单起见,下面的例子使用了 任务 功能包并在玩家完成任务后调用 SeasonPasses.addProgressToSeason(),但你可以根据自己的需要跟踪玩家进度。无论您是否定义任务,您都必须将 任务 功能包添加到体验中,以便 赛季通行证 代码运行。
每个任务都有一个必须完成以完成任务、配置选项和可选显示元数据的一组任务。有关如何配置任务和任务的深入指南,请参阅定义任务。
从任务中添加经验值到赛季
这个例子使用 任务 功能包来定义玩家可以完成以获得经验 (XP) 和进步通过赛季的任务。要奖励玩家经验值当他们完成定义的任务时,您必须将逻辑添加到 ReplicatedStorage.Missions.Server.Examples.MissionsExample 服务器脚本中,以便它可以导入赛季通行证数据并根据玩家的进度奖励他们。
local SeasonPasses = require(ReplicatedStorage.SeasonPasses.Server.SeasonPasses)
local function completeHandler(player: Player, missionId: Types.MissionId)
print(`{player} completed mission {missionId}`)
if missionId == "Walking" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Walking2" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Walking3" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Availability" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Manual" then
SeasonPasses.addProgressToSeason(player, 100)
end
if missionId == "Minutely" then
SeasonPasses.addProgressToSeason(player, 100)
end
end
添加赛季阶级奖励图标
除了向玩家授予经验值当他们完成任务时, 赛季通行证 功能包使用 任务 功能包来在赛季内定义独特的奖励级别。如果您想为玩家获得足够的经验值时添加屏幕上的图标以获得等级奖励,请在每个赛季等级奖励配置中添加一个资产ID。
Tier3Mission = {categoryId = "General",metadata = {displayName = "Tier 3 Mission",description = "Jump 10 times",visibleAfterComplete = true,visibleBeforeUnlocked = true,rewards = {{icon = 16826775737,displayName = "Item",},{icon = 106912146245070,displayName = "Season XP",},},},}
配置季节
在你设置好要包含在赛季中的每个任务之后,是时候配置赛季通行证自己了。在 ReplicatedStorage.SeasonPasses.Configs.Season 中,有您参考的季节配置示例,以下代码示例来自该文件。
定义通行证
通行证 允许您向玩家收取一次性 Robux 费用,以便访问赛季通行游戏通行证的任务和潜在奖励。在你创建一个具有唯一ID的通行证之后,你可以在赛季的 premiumTrack 字段中设置通行证的详细信息。例如,以下代码示例定义了一个带有示例资产ID 928192647 的通行证来代表赛季通行游戏通行证,然后给出赛季通行证一个名为“高级通道”的轨道名称。
premiumTrack = {pricing = {gamePassId = 928192647,},trackMetadata = {trackName = "Premium Track",},},
配置阶级和奖励
赛季阶级代表玩家在整个赛季中获得奖励的必须遵循的里程碑。为了攀登等级,玩家完成任务以获得经验值,当他们获得足够的经验值时,他们会升至下一等级并获得刚刚完成的等级的奖励。等级具有 upperBoundXP 属性,该属性设置了需要达到的经验门槛以领取等级的奖励。每个等级都可以提供两种奖励类型:
- 免费 - 玩家可以无需购买赛季通行游戏通行证获得的奖励。
- 高级 - 玩家只能通过购买赛季通行游戏通行证获得的奖励。
为了说明,请查看以下代码示例,其中包含一个需要 100 经验值赢得免费冰矛奖励和高级爆破盾奖励的季节。icon 是奖励显示的 UI 图像的资产ID,而 displayName 显示了奖励的名称。请注意,displayName在用户界面显示,但rewardId是隐藏的,主要用于数据存储目的。
tiers = {[1] = {upperBoundXP = 100,freeReward = {icon = 128181721602852,displayName = "Ice Lance",rewardId = "iceLance",},premiumReward = {icon = 95882371958115,displayName = "Blast Shield",rewardId = "blastShield",},},}
虽然这个脚本是为了说明如何在一次配置一个级别时,大多数季节包括多于一个级别。当你为一个赛季定义多个级别和奖励时,请确保每个 rewardId 是数字且逐渐增加,以便你的级别在你在级别列表中定义它们的顺序显示。
定义季节详情
现在你有了季节通行证与阶级和奖励,是时候定义你的季节细节了:
- title - 你的赛季名称。
- description - 你的赛季的描述。
- startUtc - 协调宇宙时间的赛季开始。
- endUtc - 协调宇宙时间的赛季结束。
- seasonId - 让你跟踪玩家在指定赛季期间获得的经验值。
包使用 startUtc 和 endUtc 来显示赛季倒计时。
startUtc = DateTime.fromUniversalTime(2024, 10, 01, 17, 0, 0),endUtc = DateTime.fromUniversalTime(2025, 2, 28, 17, 0, 0),title = "Season 1",description = "Into Space City",seasonId = "season1",
整合服务器逻辑
看看 ReplicatedStorage.SeasonPasses.Server.Examples.SeasonPassesExample , 它显示了您的服务器如何与 赛季通行证功能包 互动。下面的代码片段来自该脚本。
你主要需要创建一个处理器函数来奖励你的玩家获得声称的奖励。例如,以下代码示例创建了一个 rewardClaimedHandlerFunction() 函数,该函数跟踪玩家进入下一级时间,然后奖励他们免费奖励或购买赛季通行游戏通行证的两种免费和高级奖励。
为了满足您的需求,请将 task.wait() 调用替换为允许玩家获得赛季中声称的奖励的逻辑。这个函数 必须 返回一个 boolean:如果服务器授予了奖励,返回 true;如果没有,返回 false。
local function rewardClaimedHandlerFunction(_player: Player, _rewardId: Types.RewardId): boolean
task.wait(2)
return true
end
local function initializeRewardClaimedHandlers()
for tierId, tier in pairs(Season.tiers) do
if tier then
if tier.freeReward then
SeasonPasses.setRewardClaimedHandler(tier.freeReward.rewardId, rewardClaimedHandlerFunction)
end
if tier.premiumReward then
SeasonPasses.setRewardClaimedHandler(tier.premiumReward.rewardId, rewardClaimedHandlerFunction)
end
end
end
end
配置常量
核心 功能包的常量在两个地方生活:
- 共享常量生活在 ReplicatedStorage.FeaturePackagesCore.Configs.SharedConstants 。
- 包装特定常量,在这里是 赛季通行证 功能包,生活在 ReplicatedStorage.SeasonPasses.Configs.Constants .您可能需要调整的主要事情,以满足体验的设计要求:
- 音效资产ID
- 购买效果持续时间和粒子颜色 此外,您可以找到翻译成一个位置分开的字符串:ReplicatedStorage.FeaturePackagesCore.Configs.TranslationStrings。
自定义用户界面组件
通过修改包裹对象,例如颜色、字体和透明度,您可以调整赛季通行证提示的视觉呈现。但是,请记住,如果你移动任何对象在层次上,代码将无法找到它们,你需要对你的代验证码进行调整。
一个赛季由以下高级组件组成,这些组件通过编程添加到 任务功能包 UI组件:
- SeasonBottomFrame – 包含每个轨道信息、阶级奖励滚动框架和阶级数据的框架。
- SeasonDescriptionFrame - 显示赛季标题、描述和倒计时的头部框架。
- TierRewardFrame - 显示特定奖励给特定级别的框架。
- TierProgressFrame - 显示玩家对当前层级所做的进度的框架。
- PurchaseFrame - 提示玩家购买高级通行游戏通行证的框架。
- SeasonProgressFrame - 整个赛季显示玩家进度条的框架。
- RewardsButtonFrame - 添加允许显示赛季信息的按钮的框架 SeasonBottomFrame .