User:WYXkk/关于查分器的小科普

< User:WYXkk
WYXkk讨论 | 贡献2022年9月10日 (六) 22:35的版本 (瞎写了一通。有问题请在评论区纠正)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

你可以在各种音游群,特别是Arcaea群,看到各种Arcaea查分bot。

你还可以找到网页查分器。

那么查分是怎么实现的呢?


众所周知,各种查分器都会在查分前要求你提供好友码(或用户名,下面会解释)。

这说明查分器的操作都是通过好友码实现的。

实际上原理非常简单:

  • 查分器登录一个查分用账号
  • 使用此账号加你提供的好友码的好友
  • 根据需要查询的信息进行查询:
    • 点开好友列表,获取ptt,用户名和最近游玩信息
    • 点开歌曲好友榜,获取你的最好成绩信息
  • 查分器删除你提供的好友码的好友
  • 根据查询到的信息生成成绩图然后发送消息(或者其他展示方式)

当然,游戏内操作全部都是通过逆向获得的api完成,而不是真的打开游戏然后文字识别。

这也是为什么能获取到比如pure/far/lost数而不仅仅是分数的原因。


虽然通过逆向得到的api查询能查到更丰富的信息,但是也不是什么都能查到。

毕竟原理就是加好友,那么简单来说,你完全看不到的查分器仍然看不到

比如,ptt的小数点后第三位是查不到的,查分器和你一样只能看到第二位。

再比如,所谓的r10也是查不到的。有的查分器提供了r10平均值,那也是通过(ptt*40-b30)/10计算的,而且这个ptt还只是那个精确到0.01的ptt。不过b30当然是完全精确的。

这就导致了一种现象,如果你在b30里推了分但是ptt没动,那么显示的r10就会降低。

再比如,历史ptt也是查不到的。提供了此功能的查分器仅仅是根据你的全部或部分查分记录生成。

再比如,你的段位信息也是查不到的,除非你给密码让他上你号。段位是完全的给自己看的内容。世界排名(头像右下角的#xxx)同理。


上面说了能查最近游玩和单曲,那么b30是如何实现的呢?

实现方法就是一个优化的暴力:定数从高到低查询全部谱面,直到已查询成绩的第30大的单曲ptt不小于接下来需要查询的谱面的定数+2。

这就是通常的b30的查询原理。

不过,除了上面这个也没有什么能保证不出错的优化。因为别人无法知道你购买了什么曲包/单曲,所有前置条件又可以通过借档跳过或者不上传。

另外有的查分器在查询b30时提供了一个official选项,即使用官方api查询。

这是因为此前616宣布提供了一个直接返回b30信息或者其他信息的接口(Arcaea Limited API,通常简称ala),不过需要申请,而且调用次数有限制:每天至多2000次和100个玩家,每分钟至多120次,而且此接口只保证在2022年2月1日前可用(虽然目前似乎仍然可用)。

关于ala的更详细信息可以参考这篇文章


有的查分器允许使用用户名查分,或者可以通过用户名查询好友码。

实际上,并没有任何通过用户名在服务器上获取好友码的方法。

所有查分器在这一步使用的方法都是查询本地存储的映射表。

某个时间点之前存在遍历全部用户的方法,另外有几个查分器是互相共用一个表的,所以你能查到若干远古用户,或者在使用某个查分器前能通过用户名查到自己的号。


如还有疑问可以发在评论区,我会尝试补充。如果发现有错误也欢迎纠正。