锦标赛

锦标赛是对手争夺奖品的短时间比赛。

本文档概述了 Nakama 服务器的锦标赛设计。其涵盖的规则涉及玩家如何查找锦标赛,他们可以参加哪些锦标赛,允许他们何时提交分数,以及锦标赛结束时如何分配奖励。

规则 #

创建的锦标赛具有可选的重置时间表和持续时间。这些值允许灵活控制锦标赛重置为下一个持续时间之前最多可以玩多长时间。例如,可以创建每天中午开始,比赛时间为一小时的比赛。这可以表达为 CRON 表达式 (“0 12 * * *”) 和 3600 秒的持续时间。

锦标赛可以限制允许的对手数量(即先到先得),并执行可选的加入要求。例如,每个对手必须先加入,然后才能提交分数,只允许前 10000 名对手加入。

锦标赛是以编程方式创建的,可以在未来开始,也可以在创建后立即开始,所有锦标赛表示为具有特殊配置的排行榜。

并不是用户的对手也可以玩锦标赛。例如,在实施的公会锦标赛中,可按公会 ID 提交分数。

列出锦标赛 #

查找在服务器上创建的锦标赛。可以通过类别和起止时间筛选锦标赛。

忽略起止时间会返回进行中和未来的锦标赛。

将结束时间设置为 0,结果中将仅有没有结束时间的锦标赛。

将结束时间设置为 > 0 Unix 时间戳,相当于有了上限,将仅返回在此之前结束的锦标赛(排除无结束时间的锦标赛)。

将开始时间设置为 > 0 Unix 时间戳,将返回在此时间后开始的任何锦标赛。

加入锦标赛 #

需要加入锦标赛后,所有者才能提交分数。此操作可重复执行,即使所有者已经加入锦标赛,他们重复执行此操作也总可以成功。

列出锦标赛记录 #

获取属于特定所有者的锦标赛记录和一批记录的混合列表。这有助于建立排行榜视图,其中显示前 100 名玩家以及当前用户与其好友的分数。

列出围绕所有者的锦标赛记录 #

获取围绕所有者的锦标赛记录列表。

写入锦标赛记录 #

向锦标赛排行榜提交分数和子分数。如果锦标赛的配置要求加入,除非所有者已经加入锦标赛,否则本操作将失败。

权威功能 #

运行时函数可以通过服务器框架访问,并允许使用自定义逻辑将附加规则应用于锦标赛的各个方面。例如,可以要求仅允许高于某个级别的对手加入锦标赛。

创建锦标赛 #

使用所有配置选项创建锦标赛

如果您创建的锦标赛没有重置时间表,则您必须提供一个结束时间。

删除锦标赛 #

按 ID 删除锦标赛。

添加分数尝试 #

向所有者的锦标赛记录添加更多分数的尝试次数。这将覆盖此所有者的锦标赛允许的最大加分尝试数。

奖励分发 #

当锦标赛的有效期结束时,将调用服务器上注册的某个函数来传递过期的记录,以便用于计算和向所有者分发奖励。

要在 Go 中注册奖励分发函数,请使用 initializer

以下是一个简单的奖励分发函数,向前十名玩家发送持久通知,让他们知道自己赢了,并将硬币添加到他们的虚拟钱包中:

高级 #

可以用锦标赛来实现联赛系统。联赛和锦标赛之间的主要区别在于联赛通常是季节性的,并且包含了一个阶梯或层次结构,供对手依次晋级。

可以将联赛设计为一系列锦标赛,这些锦标赛具有相同的重置时间表和持续时间。可以用奖励分发功能在每个重置时间表之间的一场锦标赛和下一场锦标赛之间让各对手取得进展。

请参阅分层联赛指南示例。

锦标赛元数据 #

每个锦标赛和锦标赛记录都可以选择性地包含锦标赛本身或提交的分数和分数所有者的附加数据。附加字段必须采用 JSON 编码,且以元数据提交。

元数据的一个用例示例是驾驶游戏中的比赛状况,例如天气,这可以在用户列出记录时提供额外的 UI 提示。

1
2
3
4
5
{
  "surface": "wet",
  "timeOfDay": "night",
  "car": "Porsche 918 Spyder"
}