如何在应用程序中实现战斗通行证

Notice
使用Game Commerce资源时请参考本方法详解。

战斗通行证让玩家在战斗通行证有效期内通过完成任务或增加活跃度方式的获得奖励,从而提高玩家参与度。

提供有限奖励的免费战斗通行证可以面向所有玩家。免费通行证中不包含最终奖励。

此外,玩家也可以购买提供所有奖励(包括最终奖励)的付费通行证。

通行证全部进度分成几个等级。要解锁新等级并在通行证到期前打开最终奖励,玩家需获得相应的经验或购买等级。

演示项目提供了使用艾克索拉产品实现战斗通行证的示例。要试用战斗通行证:

  1. 启动Xsollus演示场景。
  2. 以演示用户身份登录或创建新用户。
  3. 单击侧边栏菜单中的Battle pass

要调整战斗通行证用于自己的项目:

  1. 在项目中添加战斗通行证逻辑
  2. 创建奖励优惠券组
  3. 创建战斗通行证配置
  4. 创建战斗通行证商品项
  5. 创建升级商品项

在项目中添加战斗通行证逻辑

战斗通行证的所有逻辑包含在BattlepassPage预制件中,分为以下几部分:

  • ScriptHolders — 操作战斗通行证配置、商品和玩家信息的脚本
  • UIScriptHolders — 玩家交互的脚本

要添加战斗通行证逻辑:

  1. 在项目中,实例化BattlepassPage预制件。
  2. 更改界面(可选)。
  3. 修改信息存储逻辑

创建奖励优惠券组

奖励可以是虚拟物品和虚拟货币套餐。

当前解决方案中,奖励以优惠券兑换的形式发放给玩家。要创建优惠券组:

  1. 发布商帐户中前往您的项目。
  2. 创建用于奖励玩家的虚拟物品虚拟货币套餐
  3. 对于每个奖励,按照以下建议设置优惠券活动

    • 根据战斗通行证预计的优惠券兑换数指定每个用户的兑换次数。战斗通行证中的一张优惠券可以兑换多次(例如针对不同的战斗通行证等级、付费版和免费版进行设置)。
    • 活动有效期必须与战斗通行证的有效期一致。

要创建战斗通行证配置,建议提前创建一个奖励列表,并为每个奖励指定:

  • 优惠券码
  • 虚拟物品或虚拟货币套餐SKU
  • 奖励是否属于战斗通行证的某个指定等级
  • 奖励是否属于免费版或付费版

Note
可在上一个战斗通行证到期之前为新的战斗通行证配置奖励。为避免破坏应用程序的逻辑,请不要在新战斗通行证开始之前激活优惠券活动。

创建战斗通行证配置

战斗通行证配置是一个包含以下信息的JSON文件:

  • 战斗通行证名称
  • 战斗通行证到期日
  • 等级结构,指示免费版和付费版的奖励

Note
战斗通行证付费版最高等级享受的奖励自动为最终战斗通行证奖励。其显示与完成等级的奖励不同。

JSON文件结构:

参数类型描述
Name
string战斗通行证的名称。必须与战斗通行证商品项的名称一致。
ExpiryDate
string战斗通行证到期日。
Levels
array战斗通行证等级结构。
Levels.Tier
integer等级数。
Levels.Experience
integer到达下一个等级需要的经验。
Levels.FreeItem
object战斗通行证免费版的奖励信息。可以是null
Levels.FreeItem.Sku
string虚拟物品或虚拟货币套餐的SKU。用于向用户显示奖励图片和奖励信息。
Note
对于虚拟货币套餐,套餐SKU和虚拟货币SKU均可使用。
Levels.FreeItem.Quantity
integer奖励数量。
Levels.FreeItem.Promocode
string奖励的优惠券码。
Levels.PremiumItem
object战斗通行证付费版的奖励信息。可以是null
Levels.PremiumItem.Sku
string虚拟物品或虚拟货币套餐的SKU。用于向用户显示奖励图片和奖励信息。
Note
对于虚拟货币套餐,套餐SKU和虚拟货币SKU均可使用。
Levels.PremiumItem.Quantity
integer奖励数量。
Levels.PremiumItem.Promocode
string奖励的优惠券码。

战斗通行证配置示例:

Copy
Full screen
Small screen
{
  "Name": "BP2021JAN",
  "ExpiryDate": "29-03-2021",
  "Levels": [
    {
      "Tier": 1,
      "Experience": 1000,
      "FreeItem": {
        "Sku": "Sku",
        "Quantity": 10,
        "Promocode": "HELLO_WORLD"
      },
      "PremiumItem": {
        "Sku": "Sku2",
        "Promocode": "HELLO_WORLD2"
      }
    },
    {
      "Tier": 2,
      "Experience": 1000
    },
    {
      "Tier": 3,
      "Experience": 1000
    }
  ]
}

创建战斗通行证商品项

战斗通行证商品项是战斗通行证配置的容器,用于决定玩家的付费状态(玩家是否购买了付费版)。

要创建一个战斗通行证商品项:

  1. 发布商帐户中前往您的项目。
  2. 创建一个虚拟物品组并命名为#BATTLEPASS#

Note
#BATTLEPASS#组是一个工具组,不会在游戏内商店和物品库中显示。

  1. 创建一个虚拟物品,包含以下参数:
    • 商品名称 — 配置中指定的商品通行证名称。
    • SKU — 战斗通行证ID。建议使用配置中指定的战斗通行证名称。
    • 商品属性 — 消耗品还是非消耗品。

Note
在应用程序调试过程中,建议创建消耗品。这样可以测试在有或没有战斗通行证时系统的反应。

    • 价格 — 战斗通行证付费版的价格。可以用真实货币或虚拟货币进行设置。

Note
如果虚拟物品同时具有真实货币和虚拟货币下的价格,则应用程序显示真实货币下的价格。

    • 组 — #BATTLEPASS#

Note
在应用程序调试过程中,建议将商品放在#BATTLEPASS#之外的组中,这样它就会在物品库中显示。

  1. 向创建的虚拟物品中添加战斗通行证配置:
    1. 使用Get virtual item API调用获取JSON格式的当前商品描述。
    2. 使用在线服务或JavaScript中的JSON.stringify()方法将战斗通行证配置转换为一个字符串。
    3. 在商品描述中,在long_description参数的en对象中指定结果字符串。
    4. 使用Update virtual item API调用修改商品,在请求正文中指定更新后的商品描述。

战斗通行证商品项描述示例:

Copy
Full screen
Small screen
{
  "sku": "BP2021JAN",
  "name":{
    "en": "BP2021JAN"
  },
  "type": "virtual_good",
  "description":{
    "en": "BP2021JAN"
  },
  "image_url": "https://cdn3.xsolla.com/img/misc/images/7cb1c2b719af329a9bc1df994d58b749.png",
  "long_description": {
    "en": "{
                \"Name\":\"BP2021JAN\",
                \"ExpiryDate\":\"01-07-2021\",
                \"Levels\":
                    [
                        {
                            \"Tier\":1,
                            \"Experience\":100,
                            \"FreeItem\":
                                {
                                    \"Sku\":\"Bullets\",
                                    \"Promocode\":\"B2021S1FL1E100\",
                                    \"Quantity\":50
                                }
                        }
                    ]
            }"
  },
  "attributes":[
  ],
  "is_free": false,
  "order": 1,
  "groups":[
    "Battlepass"
  ],
  "regional_prices":[
  ],
  "prices":[
    {
      "amount": 1,
      "currency": "USD",
      "is_default": true,
      "is_enabled": true
    }
  ],
  "media_list":[
  ],
  "vc_prices":[
  ],
  "is_enabled": true,
  "is_show_in_store": true,
  "regions":[
  ],
  "inventory_options":{
    "consumable": false,
    "expiration_period": null
  }
}

创建升级商品项

当前战斗通行证解决方案可让玩家用真实货币或虚拟货币购买等级。等级的价格是固定的。玩家在当前等级获得的经验可转移到下一等级。

要创建升级商品项:

  1. 发布商帐户中前往您的项目。
  2. 创建一个虚拟物品,包含以下参数:
    • 商品名称 — 升级商品项名称,格式为<battlepassname>_levelup_util,其中<battlepassname>是配置中指定的战斗通行证名称。
    • SKU — 建议使用配置中指定的战斗通行证名称。
    • 商品属性 — 消耗品还是非消耗品。
    • 价格 — 等级的价格。可用虚拟或真实货币进行设置。

Note
如果升级商品项同时具有真实货币和虚拟货币下的价格,则应用程序显示真实货币下的价格。

    • 组 — #BATTLEPASS#

Note
在应用程序调试过程中,建议将升级商品项放在#BATTLEPASS#之外的组中,这样它就会在物品库中显示。

当前战斗通行证解决方案的细节

战斗通行证的显示逻辑

应用程序根据以下逻辑只显示一个战斗通行证:

  • 如果存在一个或多个未到期的战斗通行证,应用程序显示离到期日最近的战斗通行证。
  • 如果所有通行证都已到期,应用程序显示最后一个到期的战斗通行证。

示例1

当前日期:2021年3月4日。

各战斗通行证的到期日:2021年3月1日、2021年4月1日、2021年5月1日。

应用程序显示到期日为2021年4月1日的战斗通行证。

示例2

当前日期:2021年3月4日。

各战斗通行证的到期日:2021年2月1日、2021年3月1日。

应用程序显示到期日为2021年3月1日的战斗通行证。

信息存储逻辑

当前解决方案中,玩家战斗通行证的所有进度信息(等级、经验、收到的奖励等)存储在用户可编辑属性中。演示中包含读取和编辑这些属性的演示,见Character页面。

如果系统未找到所需的属性,将自动创建新属性。如果系统找到的属性不属于当前战斗通行证,将自动删掉这些属性。

Notice
用户可编辑属性可在游戏客户端侧更改。为保护玩家战斗通行证的进度数据,建议实现自己的逻辑时使用只读属性。

为判断玩家的付费状态,将检查玩家物品库中存在的战斗通行证商品项。

本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
为此页面评分
为此页面评分
我们还有其他可改进之处吗?

不想回答

感谢您的反馈!
上次更新时间: 2022年4月28日

发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!