季節通行證包

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

季節通行證功能包提供出盒功能,可以創建限時、任務驅動的進度系統,玩家可以完成任務目標以獲得只在預定時間內提供的獎勵。使用包裝的自訂選項,您可以個人化所有賽季通行證,將新內容提供給您的觀眾,促進玩家保留,並生成收入。

取得包裹

創作者商店是您可以使用的工具箱標籤,包括模型、圖像、網格、音訊頻、外掛程式、視頻和字體資產,是 Roblox 和 Roblox 社群為您的項目所製作的所有資產。您可以使用創作者商店直接將一個或多個資產添加到開放的體驗中,包括功能包!

每個功能包需要 核心 功能包正常運作,而 季節通行證 包需要 任務 功能包來定義季節的任務。一旦所有三個包資產都在您的道具欄,您可以在平台上的任何項目上重複使用它們。

要將庫存的包裹帶入您的體驗:

  1. 在工具欄中,選擇查看標籤。

  2. 點擊 工具箱。工具箱窗口顯示。

    Studio's View tab with the Toolbox tool highlighted.
  3. 工具箱 窗口中,單擊 庫存 標籤。顯示 我的模型 排序。

    Studio's Toolbox window with the Inventory tab highlighted.
  4. 點擊 功能包核心 磚塊, 任務功能包 磚塊,然後是 季節通行證功能包 磚塊。三個包裝文件夾都會顯示在 資料檢視器 視窗中。

  5. 將包裹文件夾拖入 ReplicatedStorage

  6. 允許數據儲存呼叫跟蹤玩家購買包裝的產品。

    1. 在工具欄的 首頁 標籤中,選擇 遊戲設定
    2. 導航到 安全 標籤,然後啟用 啟用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

新增季節層獎勵圖示

除了給玩家XP當他們完成任務外, 賽季通行證 功能包使用 任務 功能包來在賽季內定義獨特的獎勵階級。如果您想為玩家獲得足夠的經驗值時添加畫面上的圖標以獲得階層獎勵,請在每個賽季階層獎勵配置中添加一個資產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 - 讓您追蹤玩家在指定賽季期間獲得的經驗值。

包裝使用 startUtcendUtc 來顯示賽季倒數。


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() 呼叫替換為允許玩家獲得他們在賽季中領取的獎勵的邏輯。此功能 必須 返回是否:如果伺服器授予獎勵,則返回 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

自訂介面元件

通過修改包裝對象,例如顏色、字體和透明度,您可以調整季節通行證提示的視覺呈現。但是,請記住,如果你移動任何對象在階層上,代碼將無法找到它們,你需要對你的代碼進行調整。

季節由下列高級組件組成,這些組件會被程式atically添加到 任務功能包 UI組件中:

  • SeasonBottomFrame – 包含每個軌道資訊、層級獎勵滚动框和層級資料的框架。
  • SeasonDescriptionFrame - 顯示賽季標題、說明和倒數的頭部框架。
  • TierRewardFrame - 顯示層級特定獎勵的框架。
  • TierProgressFrame - 顯示玩家對目前層級進行的進度的框架。
  • PurchaseFrame - 提示玩家購買高級通行特權證的框架。
  • SeasonProgressFrame - 整個賽季顯示玩家進度條的框架。
  • RewardsButtonFrame - 添加允許顯示賽季資訊的按鈕的框架 SeasonBottomFrame .