奖品表(旧版 Economy)

重要

经济 v1 API 处于维护模式,将不会收到任何新功能,只有 bug 修复。 v1 API 将在可预见的未来进行维护。 请参阅“Economy v2 概述”,详细了解 PlayFab Economy 的下一版本!

本教程为您介绍使用 PlayFab Game Manager 创建奖品表的步骤。

奖品表让您能够随机生成物品栏物品,而顺序 奖品表可为玩家奖励提供一定的随机性。

  • 我们假设你已熟悉目录物品栏和 PlayFab Game Manager
  • 您必须拥有一个主目录 - 其中包含标准的非捆绑/非容器物品。
  • 必须已定义至少一种虚拟货币(用作“免费”的游戏内货币)。

您可以使用自己的一组物品,但我们的目标是创建重叠的物品分类。

例如,我们将使用以下物品表:

Accessory Armor Sword
常见 Common Accessory Common Armor Common Sword
Uncommon Uncommon Accessory Uncommon Armor Uncommon Sword
Rare Rare Accessory Rare Armor Rare Sword
Legendary Legendary Accessory Legendary Armor Legendary Sword

在目录中设置一组类似的物品后,就可以开始构建奖品表了。

构建奖品表

在 Game Manager 中:

  1. 导航到您的游戏
  2. 从左侧菜单中选择 Economy
  3. 转到 Catalogs 选项卡,然后选择主目录。
  4. 选择 Drop Tables

您的屏幕应与此示例类似。

Game Manager - Catalogs - Drop Tables

基于每个物品描述符开始构建 Drop Tables。 我们的第一个分类标准是装备类型,因此我们将创建一个名为 Accessories 的新 Drop Table

  1. 选择 New Drop Table 按钮。

  2. Table Id 设置为 Accessories

  3. 选择 ADD TO DROP TABLE。 此时将显示 Pick multiple items 弹出窗口。

  4. 通过选择物品 ID 旁边的 Add 按钮可添加物品:

    • Common Accessory
    • Uncommon Accessory
    • Rare Accessory
    • Legendary Accessory
  5. 选择 Close 按钮。

  6. 根据稀有度调整物品的 Weight 值:

    • Common:1000
    • Uncommon:100
    • Rare:10
    • Legendary:1

    权重指示物品相对于彼此应奖励的频率。 就此处显示的示例而言,每奖励 1 件 Legendary 物品,将奖励约 1000 件 Common 物品

  7. 选择 SAVE DROP TABLE

Game Manager - Drop Table - Edit Accessories

完成 Accessories 后,按照相同的步骤为 ArmorsWeapons 创建奖品表。

我们的另一个分类标准是稀有度,因此我们将创建另一组表,从 Common Equipment 开始。

  1. 选择 New Drop Table 按钮。

  2. Table Id 设置为 Common Equipment

  3. 选择 ADD TO DROP TABLE。 此时将显示 Pick multiple items 弹出窗口。

  4. 通过选择物品 ID 旁边的 Add 按钮可添加物品:

    • Common Accessory
    • Common Armor
    • Common Sword
  5. 选择 Close 按钮。

  6. 根据 Common Equipment 选项在抽奖器中应该如何表现,调整物品的 Weight 值:

    • Common Accessory:1
    • Common Armor:4
    • Common Sword:5
  7. 选择 SAVE DROP TABLE

Game Manager - Drop Table - Edit Common Equipment

使用奖品表

您可以使用以下两种 PlayFab Server API 方法以编程方式访问奖品表:

  1. GetRandomResultTables
  2. EvaluateRandomResultTable

使用 GetRandomResultTables 可以读取我们刚刚输入到 Game Manager 中的原始奖品表数据。

注意

GetRandomResultTables 对随机值或奖励结果进行选取。 此 API 允许您读取数据并以您认为合适的方式解析信息。

选项 1

public void ReadDropTableData() {
    PlayFabServerAPI.GetRandomResultTables(new GetRandomResultTablesRequest() {
        TableIDs = new List<string> { "Accessories", "Common Equipment" }
    }, result => {
        Debug.Log("Completed getting drop tables");
    }, error => {
        Debug.LogError(error.GenerateErrorReport());
    });
}

结果处理程序将接收我们创建的奖品表的结构信息,格式为 GetRandomResultTablesResult

或者,您也可以让 PlayFab 您评估表,并使用 EvaluateRandomResultTable API 为您提供单一物品结果。 这样做会返回 itemId,它可用于生成单一物品(根据提供的权重进行选取)。

然后,可以进行第二次调用,以创建物品并将其提供给玩家。

选项 2

public void Grant(string playFabId, string tableId) {
    // First, roll a random number and evaluate the drop table
    PlayFabServerAPI.EvaluateRandomResultTable(new EvaluateRandomResultTableRequest()
    {
        TableId = tableId
    }, result => OnRandomResultTableResponse(result, playFabId), OnError);
}

public void OnRandomResultTableResponse(EvaluateRandomResultTableResult tableResult, string playFabId) {
    // Second, take the result and grant it to the player
    PlayFabServerAPI.GrantItemsToUser(new GrantItemsToUserRequest {
        PlayFabId = playFabId,
        ItemIds = new List<string> { tableResult.ResultItemId }
    }, result =>
    {
        // Handle Result
    }, OnError);
}

public void OnError(PlayFabError error) {
    Debug.LogError(error.GenerateErrorReport());
}

总结:

选项 1 - 允许您在自己的游戏服务器上加载数据一次、缓存数据并自行 执行选取。 此选项对 PlayFab 的调用较少,因此延迟较低,并且允许你根据游戏特定逻辑自定义选取。

选项 2 - 让 PlayFab 完成更多工作,但请记住 - 多个 API 调用意味着更高 的延迟。

奖品表高级用法(设置战利品箱)

可以从捆绑包和容器链接奖品表。 捆绑包是虚拟货币商店的绝佳选择 - 一次购买产生一堆随机物品。

例如,假设我们有一个具有特定物品奖励规则的 11 件物品的捆绑包。 在本例中,它是一个面向客户的卖点 - 我们将保证其中有一件 Legendary 物品。 我们也将对其进行限制,以免玩家太过 幸运,收到 11 件 Legendary 物品

新建奖品表

我们来构建一个真的可以奖励任何物品 的奖品表 - 我们就给它取名叫 Anything

在创建此奖品表时,我们将其他 奖品表作为其选项(在 Pick multiple items 弹出窗口中,选择 Drop Tables 选项卡以添加其他奖品表),并为它们分配适当的权重。

Game Manager - New Drop Table

添加捆绑包

至此,我们已完成奖品表。接下来,我们将添加一个捆绑包

  1. 从左侧菜单中选择 Economy
  2. 转到 Catalogs 选项卡,然后选择主目录。
  3. 依次选择 BundlesNew Bundle
  4. Item Id 设置为 11-Item Drop,选择 Consumable,为 By time 选择 15 Seconds
  5. 选择 ADD TO BUNDLE
  6. Pick multiple items 弹出窗口中,选择 Drop tables 选项卡。
  7. 通过选择奖品表 ID 旁边的 Add 按钮来添加奖品表。
  8. Quantity 字段设置为下图中显示的值。
  9. 选择 SAVE BUNDLE

Game Manager - New Catalog Bundle

我们为此示例创建的捆绑包使用了以下几个功能:

  • 任何 类型的所有项目都必须拥有 Item ID
  • 捆绑包算作一件独特物品,其内容在授予的同时提供。 出于这一原因,我们将捆绑包归为易耗品,其在提供后 15 秒到期。
  • 我们添加不同数量的不同的奖品表,以确保提供 11 件物品,但从不同的表中选取不同的物品。
    • 首先,我们要保证至少有 1 件 Legendary 物品,因此第一个抽奖器将从 Legendary Equipment 中选取。
    • 接下来的 3 个抽奖器从 Anything 中选取 - 可能会选取更多的 Legendary 物品,也可能会选取没有多少价值的普通装备。 这 3 件物品可能存在很大差异,因此这些选取操作将确定玩家运气的
    • 最后,我们用剩下的抽奖器选取 Rare 物品和 Uncommon 物品,确保选取的 11 件物品不会好或太差。

总结

奖品表从潜在物品和权重列表中随机生成单一物品。 捆绑包和容器是使用奖品表向玩家提供一件或多件物品的最简单方法之一。

您可以通过 CloudScript 或者使用以下服务器 Server API 方法之一来手动使用删除表:

  1. GetRandomResultTables
  2. EvaluateRandomResultTable