用戶:WYXkk/關於查分器的小科普
你可以在各種音游群,特別是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的更詳細信息可以參考這篇文章。
有的查分器允許使用用戶名查分,或者可以通過用戶名查詢好友碼。
實際上,並沒有任何通過用戶名在伺服器上獲取好友碼的方法。
所有查分器在這一步使用的方法都是查詢本地存儲的映射表。
某個時間點之前存在遍歷全部用戶的方法,另外有幾個查分器是互相共用一個表的,所以你能查到若干遠古用戶,或者在使用某個查分器前能通過用戶名查到自己的號。
如還有疑問可以發在評論區,我會嘗試補充。如果發現有錯誤也歡迎糾正。