Steam排行榜里的best,不是一律取数值最大。Steamworks文档说明,KeepBest比较玩家新成绩与已存成绩:升序榜保留较低值,降序榜保留较高值。[1] “保留最好”因此先依赖这个榜的排序方向,不能离开榜单定义只比较数字大小。

排序方向在文中被直接界定。Ascending的榜首是最低分,Descending的榜首是最高分;配置字段的说明还分别将位置型榜单和高分榜与这两种方向联系。Display Type另列Numeric、Seconds和Milliseconds,负责社区中成绩的显示形式。一个数被格式化为秒或毫秒,不会同时替排序方向作出决定;显示什么单位,与较高还是较低排在前面,是两项信息。

更新方式提供另一条分支。KeepBest只保留按排序规则判断的最好成绩,ForceUpdate则总用新的成绩替换该玩家在榜上的成绩。因此,测试资料中的“已更新”不应自然改写为“已经刷新最好成绩”。前者可能是在描述新值替换,后者还必须与采用的更新方式及新旧值关系相连。本文没有提交或查询任何真实玩家记录。

每位玩家在每个榜单上可以有一条entry。文档将其中的score列为int32,并允许附带至多六十四个int32的关联数据,用来存放产生这项成绩的对局信息。这些关联数据不会被Steam排序或解析。它们与score一起属于该条记录,但不能仅因同在entry内,就把每一个附带数值都当成参与名次计算的另一项分数。

关联资料也不是永远附在第一次成绩后不再改变。Uploading a Score说明说,玩家成绩被更新时,这次提供的关联数据会替换以前保存的数据。这让记录的对应关系更加具体:讨论某条成绩来自哪次对局,不能只保留score而假定关联说明从未变化。这里描述的是文档规定的替换关系,没有从附加资料推断玩家身份或作弊行为。

异步返回结果又把“成绩是否改变”与排名分开。来源说,结果包括标记成绩是否变化的flag,以及玩家原来和新的全局排名。三项信息共同出现,并没有被压成一个笼统成功标签。因此,一份结果摘要如果只留下“处理完成”,仍没有说明成绩值是否变化,也没有保留文档分别提供的新旧排名。

榜单名称也有内外之分。Steam为同一游戏的榜单使用唯一名称,这个名字用于API识别,并不向社区用户展示;Community Name是另一项面向公众的名称。文档说,若要在Community Hub显示榜单,需要这个字段,没有名称便不会显示。内部能够识别某榜,与社区页面有公开名称,因而不能仅靠一个内部字符串互相证明。

已有榜单还有一项易漏条件:FindOrCreateLeaderboard面对已经存在的榜时,会忽略传入的排序和显示类型参数,而文档另说这些属性可在Game Admin修改。看到一份参数说明,不足以单独确认既有榜目前采用什么方向。本文只解释记录、排序和更新语义,不提供调用、后台配置或反作弊方案;首发日期未知,也不据这些定义保证游戏获准发行或玩家名次提升。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。