分桶排行榜 #
随着游戏玩家群体的扩大,网络游戏中的社交互动出现了一个根本性问题。全局排行榜和一般排行榜逐渐形成静态局面,特定的技能或分数水平几乎没有变化。这会导致新玩家失去或缺乏参与度,从而对游戏失去兴趣。采用分桶排行榜可以解决这一问题。
在分桶排行榜中,玩家不会与所有其他玩家比赛,而是会看到有限的其他玩家(通常为25-50个)。他们与该群组竞争,直到排行榜到期或滚动到另一个开始时间。这些较小的玩家群体被称为队列或“玩家桶”,分桶排行榜的名称因此而产生。
在许多流行的游戏中都可以看到分桶排行榜,其中包括Rovio的Angry Birds系列中的几款游戏。 使用Nakama的存储引擎、排行榜和锦标赛功能,可以通过服务器运行时代码、特别是RPC函数在游戏中实现分桶排行榜。
Nakama排行榜API已经允许您输入一组用户ID(或用户名),这些ID将成为筛选器,用于生成排行榜的“分桶视图”,其中只有这些玩家。
这样就只剩下如何为特定玩组成用户ID集合,以及此集合是否被个性化或遵循其他游戏条件。这是成功实现的关键,它取决于游戏的特定机制。您可能希望“视图”显示排名相似的玩家、VIP玩家、用户的朋友或同一地区的玩家。
在本示例中,我们使用“随机”选择的用户作为特定玩家将要看到的分桶。我们首先浏览代码的关键部分,并在最后提供完整的文件供参考。
插件分桶排行榜 #
此处我们创建每周滚动的新的分桶排行榜Bucketed Weekly #1
。
|
|
|
|
生成用户分桶 #
每个玩家都将有一个单独的分桶 — 他们与之对抗的对手组 — 这是单独为他们创建的。首先我们定义分桶存储对象:
|
|
|
|
然后我们定义一个RPC函数来获取玩家的ID并检查是否存在任何分桶。如找到分桶则获取它,如未找到则创建新的分桶。最后,我们获取实际排行榜。
|
|
|
|
检查分桶状态 #
在继续之前,我们会检查排行榜是否已重置或是否没有对手。如果是其中一种情况,必须生成一个新的对手组。
|
|
|
|
生成对手组 #
为生成随机对手列表,我们使用Nakama 3.5.0中的UsersGetRandom
函数。
|
|
|
|
如果最终想要得到一个明确定义的对手列表(例如,仅限10-20级玩家),建议在数据库查询中按所需分桶大小的因子进行扫描,然后根据相关条件(玩家元数据)在应用层过滤器中进行扫描。
写入新分桶 #
在生成新的对手列表后,我们写入这个新的用户分桶,首先将分桶重置和排行榜结束时间设置到比赛。
|
|
|
|
最后,由于用户列表是伪随机生成的,因此用户本身可能会也可能不会被包括在其中,因此我们在列出记录之前,也会明确地将用户添加到分桶排行榜中。
|
|
|
|
您可以使用Nakama控制台验证排行榜及其设置: