跳至主要內容

MegaBlock Survivors 排行榜

MegaBlock Survivors 會將符合資格的比賽記錄到持久化排行榜,儲存於 plugins/MegaBlockSurvivors/leaderboard.yml。作弊的比賽(任何使用過 /mbs cheat 的場次)會被明確排除。

插件在新增成績前會讀取並驗證現有檔案。如果讀取失敗,會拒絕新成績,並顯示最後一次成功載入的記錄。儲存會以原子方式取代檔案;儲存失敗時保留原檔案,不套用新成績。請在伺服器日誌中檢查這些錯誤。

什麼會被記錄​

每種模式只有一種結果會產生條目:

模式記錄時機不會記錄
Challenge勝利(WORLD_4 中的最終首領死亡)中途死亡、退出或斷線
Endless死亡(Endless 沒有勝利路徑)退出或斷線

以死亡告終的 Challenge 比賽不會進入排名。兩種模式都會略過被 /mbs cheat 標記的比賽。不過,目前 /mbs skipworld 不要求權限,也不設定該標記,因此排行榜過濾不能證明所有上榜比賽都經過了正常的世界進度。

分類​

每筆條目都帶有一個遊戲模式標籤與一個難度標籤,因此排行榜會分成 6 個獨立的分組:

模式難度
ChallengeEasy
ChallengeMedium
ChallengeHard
EndlessEasy
EndlessMedium
EndlessHard

每個分組獨立排名,每個分組在磁碟上可保留最多 100 筆條目。前 10 名會呈現給玩家。

排名規則​

模式主要排序同分時的排序依據
Challenge最快完成時間(由小到大)較新的條目勝出
Endless最高波次(由大到小)存活時間(較長者排名較高),仍相同則較新的紀錄優先

Challenge 模式以擊敗最終首領為終點,因此比較通關時間。Endless 沒有終點,因此比較到達的最高波次。

由於 highestWave 來自經過的時間,波次相同的 Endless 紀錄存活時間也相近。其中較長的那一局排在前面。MegaBlock Survivors 每次讀取條目時都會重新排序,因此已經存在 leaderboard.yml 裡的紀錄也遵循這個順序。

世界內的全像投影​

在 mbs_spawn 大廳世界中會生成一個 TextDisplay 全像投影(位於世界座標約 4.5, 67, -14.5)。該全像投影採用底部錨定 -- 文字的下緣始終位於錨點的 Y 座標,因此新增區段時顯示內容會向上延伸,而不是向下穿透地板。

全像投影最多會渲染六個區段(Challenge x {Easy, Medium, Hard},接著 Endless x {Easy, Medium, Hard})。沒有條目的區段會靜默略過,因此剛上線的全新伺服器不會顯示六個空分組。如果所有分組都是空的,則改為顯示一行「no highscores yet」。

全像投影會在以下情況自動維護:

  • 插件啟用 / 重新載入時。
  • 新增紀錄後,會更新現有顯示的文字。如果已追蹤的實體失效,就重新生成;如果從未生成過顯示,這次更新不會建立一個。
  • mbs_spawn 中的錨點區塊重新載入時(Paper 在區塊卸載時會移除非持久顯示實體,因此監聽器會在大廳區塊再次出現時重新生成全像投影)。

如果 mbs_spawn 尚未載入,就略過生成全像投影,並記錄一則資訊訊息。

每場比賽的聊天顯示​

符合資格且未標記作弊的比賽被記錄後,玩家會在聊天中看見該分組的前 10 名。退出或 Challenge 失敗不會顯示這份排行榜。玩家自己的列以 > #N 標示。排名為 11~100 時,會在省略號後顯示自己的排名;被排除在保留的前 100 筆之外的紀錄沒有排名列。

作弊獲勝時則會改為顯示「Leaderboard not updated (cheating detected)」的提示。

條目欄位​

每筆條目記錄:

欄位說明
playerName比賽結束時的 Bukkit 帳號名稱(Player.getName())。
playerUUID玩家的 UUID。
timeSeconds本場比賽的總時長,單位為秒。
kills本場比賽的擊殺總數。首領計入;幽靈大軍的生物不計(它們的獎勵已關閉,不給予擊殺計數)。
level玩家最終等級。
highestWave比賽結束時的波次等級 -- max(1, secondsSurvived / 36)。為 Endless 模式的主要統計。
gameModeCHALLENGE 或 ENDLESS。
difficultyEASY、MEDIUM 或 HARD。
timestamp比賽結束時的 Epoch 秒數(Instant.now().getEpochSecond())。也用作同分時的排序鍵。

在此拆分之前的舊條目,會在讀取時自動標註為 Challenge / Medium,讓舊排行榜也能繼續顯示。

清除排行榜​

並無遊戲內指令可以清除排行榜。如需重置,請先停止伺服器,然後刪除 plugins/MegaBlockSurvivors/leaderboard.yml。