跳到主要内容

MegaBlock Survivors 排行榜

MegaBlock Survivors 会把符合条件的对局记录到持久化排行榜中,存储位置为 plugins/MegaBlockSurvivors/leaderboard.yml。作弊对局(任何使用过 /mbs cheat 的对局)会被明确排除。

插件在添加成绩之前会读取并验证现有文件。如果读取失败,会拒绝新成绩,并显示最后一次成功加载的记录。保存会以原子方式替换文件;保存失败时保留原文件,不应用新成绩。请在服务器日志中检查这些错误。

哪些情况会被记录​

每种模式只有一种结局会产生条目:

模式记录时机不予记录
Challenge胜利(WORLD_4 中的最终 Boss 死亡)中途死亡、退出或断开连接
Endless死亡(Endless 没有胜利路径)退出或断开连接

以死亡告终的 Challenge 对局不会上榜。被 /mbs cheat 标记的对局在两种模式下都会被跳过。不过,当前 /mbs skipworld 不要求权限,也不设置该标记,因此排行榜过滤不能证明所有上榜对局都经过了正常的世界进度。

类别​

每条记录都包含游戏模式与难度,因此排行榜分为 6 个相互独立的类别:

模式难度
ChallengeEasy
ChallengeMedium
ChallengeHard
EndlessEasy
EndlessMedium
EndlessHard

各类别独立排名,每类在磁盘上最多保留 100 条记录,向玩家展示前 10 名。

排名规则​

模式主要排序平局判定
Challenge通关时间最短(升序)新条目在平局时胜出
Endless到达波次最高(降序)生存时间更长的排名更高,仍相同则较新的记录优先

Challenge 模式以击败最终 Boss 为终点,因此比较通关时间。Endless 没有终点,因此比较到达的最高波次。

由于 highestWave 来自经过的时间,波次相同的 Endless 记录存活时间也相近。其中用时较长的对局排在前面。MegaBlock Survivors 每次读取条目时都会重新排序,因此 leaderboard.yml 中已保存的对局也遵循这一顺序。

世界内全息图​

会在 mbs_spawn 大厅世界中生成一个单一的 TextDisplay 全息图(世界坐标约 4.5, 67, -14.5)。该全息图采用底部对齐——文本的底边始终位于锚点 Y 上,因此新增段落会让显示内容向上扩展,而不是穿过地板向下延伸。

全息图最多渲染六段内容(Challenge × {Easy, Medium, Hard},随后是 Endless × {Easy, Medium, Hard})。没有任何条目的段落会被静默跳过,这样全新的服务器就不会显示六个空桶。如果全部分桶都为空,则只显示一行「no highscores yet」。

全息图会在以下情形自动维护:

  • 插件启用 / 重载时。
  • 新增记录后,会更新现有显示的文本。如果已跟踪的实体失效,则重新生成;如果从未生成过显示,这次更新不会创建一个。
  • mbs_spawn 中的锚点区块重新加载时(Paper 会在区块卸载时移除非持久化的 display 实体,因此监听器会在大厅区块每次重新加载时重新生成全息图)。

如果 mbs_spawn 未加载,则跳过生成全息图,并记录一条信息日志。

单场对局的聊天展示​

符合条件且未标记作弊的对局被记录后,玩家会在聊天中看到该类别的前 10 名。退出或 Challenge 失败不会显示这份排行榜。玩家自己的行以 > #N 高亮。排名为 11~100 时,会在省略号后显示自己的排名;被排除在保留的前 100 条之外的记录没有排名行。

作弊获胜则会改为显示「Leaderboard not updated (cheating detected)」提示。

条目结构​

每条条目会记录:

字段描述
playerName对局结束时的 Bukkit 账户名(Player.getName())。
playerUUID玩家的 UUID。
timeSeconds对局总时长(秒)。
kills本场对局的总击杀数。Boss 计入;幽灵大军的怪物不计入(它们被禁用了奖励,不提供击杀计数)。
level玩家最终等级。
highestWave对局结束时的波次等级 —— max(1, secondsSurvived / 36)。Endless 的主要指标。
gameModeCHALLENGE 或 ENDLESS。
difficultyEASY、MEDIUM 或 HARD。
timestamp对局结束时的 epoch 秒数(Instant.now().getEpochSecond())。同时用作平局判定键。

此次切分之前的旧条目在读取时会自动打上 Challenge / Medium 标签,因此旧排行榜仍能正常渲染。

清空排行榜​

游戏内没有用于清空排行榜的指令。如需重置,请停止服务器并删除 plugins/MegaBlockSurvivors/leaderboard.yml。