Economy v2 現已正式推出。如需支援和意見反應,請前往 PlayFab 論壇。
- 在 Title Data 中定義具有加權物品池的戰利品表。
- 使用 Azure Function 從戰利品表中隨機抽出物品。
- 在單一呼叫中,以不可部分完成的方式扣除容器權杖並授與隨機選取的物品。
運作方式
- 在 Title Data 中定義戰利品表:將您的掉落表設定 (物品 ID、權重、數量) 以 JSON 格式儲存在 Title Data 中,這樣您就能在不重新部署程式碼的情況下更新它們。
- 以虛擬貨幣表示容器:使用與固定內容容器相同的容器權杖模式:以虛擬貨幣作為未開啟的戰利品箱。
- 呼叫 Azure Function 以開啟容器:函式會讀取戰利品表、執行加權隨機選取,然後呼叫
ExecuteInventoryOperations,以不可部分完成的方式扣除 1 個容器權杖並新增隨機選取的物品。
必要條件
- PlayFab 開發人員帳戶。
- 在 Game Manager 中建立的遊戲。
- 可作為戰利品獎勵授與的已發佈目錄物品。
- 代表容器的虛擬貨幣 (如需設定指示,請參閱具有固定內容的容器)。
- 已連線至 PlayFab 遊戲的 Azure Functions 專案。
步驟 1:在 Title Data 中定義戰利品表
將您的戰利品表定義儲存在 Title Data 中,讓設計人員不需要變更程式碼就能更新掉落率。戰利品表結構範例
建立名為LootTables 的 Title Data 索引鍵,並使用 JSON 值:
設定 Title Data
Game Manager
- 前往 Content > Title Data。
- 建立名為
LootTables的索引鍵。 - 貼上您的 JSON 戰利品表設定作為值。
- 選取 Save。
API
使用 SetTitleData:步驟 2:建立 Azure Function
建立一個 Azure Function,讓您的遊戲用戶端在玩家想要開啟容器時呼叫。此函式會:- 確認玩家至少擁有一個容器權杖。
- 從 Title Data 讀取戰利品表。
- 執行加權隨機選取。
- 呼叫
ExecuteInventoryOperations,以不可部分完成的方式扣除權杖並授與獎勵。
資料模型
加權隨機選取
完整的 Azure Function
GetContainerCurrencyId 協助程式函式會將戰利品表名稱對應至其對應的容器貨幣 ID。您可以將此對應與戰利品表一起儲存在 Title Data 中,或使用命名慣例。步驟 3:將容器權杖授與玩家
透過遊戲過程、商店購買或獎勵將容器權杖授與玩家。請使用具有固定內容的容器中所述的相同方法。步驟 4:從遊戲用戶端呼叫函式
當玩家想要開啟容器時,請使用 ExecuteFunction 呼叫 Azure Function:戰利品表設計模式
稀有度層級
權重呈指數遞減的經典稀有度系統:- 普通:約 90.0%
- 罕見:約 9.0%
- 稀有:約 0.9%
- 傳奇:約 0.09%
多次抽選搭配混合獎勵
從混合物品池中提供三個隨機物品的補給箱:保底 + 隨機 (保底系統)
若要實作「每開啟 10 次保證獲得稀有或更高等級物品」的模式,請在顯示屬性或玩家資料中追蹤玩家的開啟次數,並在達到閾值時於 Azure Function 中覆寫隨機選取。巢狀掉落表
戰利品表可以依 ID 參照另一個戰利品表。您的 Azure Function 會以遞迴方式解析參照:ItemId 是否以 TABLE: 開頭,若是,則會在參照的表上抽選,而不是直接授與該物品。
安全性考量
- 一律在伺服器端執行戰利品邏輯 (在 Azure Function 中)。永遠不要信任用戶端來決定抽到哪些物品。此方法可防止竄改。
- 在
ExecuteInventoryOperations呼叫上使用IdempotencyId,以防止函式重試時重複授與。如需詳細資訊,請參閱等冪交易和重試。 - 在扣除之前檢查玩家的庫存,以驗證容器擁有權。如果玩家沒有足夠的權杖,
ExecuteInventoryOperations中的Subtract作業會失敗,這會復原整個批次。 - 記錄所有抽選以供稽核。函式的傳回值和 PlayStream 事件可提供每位玩家所獲得內容的記錄。
