跳到主要内容

对比 DungeonPlus / QueDP

DungeonPlus 与 QueDP 都是国内服常用的副本插件。云副本在设计时把这两个插件拆开研究过,下面是做法上的差异。

最大的差别:开副本时要不要建世界​

两个插件都是「每开一场副本,就复制一份地图文件夹、加载成一个新世界」,结束后再卸载。 Paper 规定建立和卸载世界只能在主线程做,所以每开一场、每关一场,服务器都会顿一下;同时开的人越多越明显。 它们能做的只有减轻:DungeonPlus 有「启动队列」(默认关闭)和「每 1000 毫秒才能建一个世界」的限制,配置注释里自己写着同时开太多会让 CPU 跑到 100%; QueDP 会先把文件夹复制好,但加载世界仍在主线程,并限制同时最多 3 场在建立中。

云副本完全不在运行中建世界:

  1. 开服时建一个空的副本世界,之后一直加载着,世界不存档;
  2. 这个世界切成很多格子,每格相隔 1024 格,一场副本占一格;
  3. 地图用 FastAsyncWorldEdit 在后台线程贴上,主线程只负责分批放方块;
  4. 热门副本可以事先贴好几份(预热),开副本时直接分到一格,等于秒开;
  5. 结束后清掉这一格的怪物与掉落物,这一格就能给下一场用。

实测(Purpur 1.21.4):连续贴 3 次 240 万方块的地图,每次约 0.56 秒(在后台线程);期间服务器 MSPT 平均 0.2 ms、最高 3.6 ms。

一张表看差异​

DungeonPlus 1.4.6QueDP 1.4.1CloudDungeon 云副本
开副本复制文件夹 + 加载新世界(主线程)复制文件夹 + 加载新世界(主线程)常驻世界分格 + FAWE 后台贴图,可预热秒开
文件组织option / monster / obstacle / task / interact单一配置一个副本一个文件夹:config、开始前、开始后、怪物组、脚本组、任务组、触发组、通关组、宝箱组
脚本写法$脚本{参数} @类型,另有 Kether、JS 判断GraalJS(JavaScript)简写 动作 参数,也能直接贴 DungeonPlus 写法
延迟只有 monstergroup / end 的 delay 参数与任务时间轴—任何地方都能写 delay 1.5
条件分支脚本组 condition / true / falseJSif / then / else 区块、一行 if 条件 -> 动作、chance,也读得懂 DungeonPlus 的写法
地图设置在线编辑:锄头、木剑、木锹网页编辑器(默认监听 0.0.0.0:28888,明文 HTTP)游戏内编辑模式:虚空编辑世界、9 个快捷工具、全息字标示每个点位、编辑菜单快速设置
掉线默认等 120 秒;副本只剩一人时掉线直接结束断线保护默认关闭(0 秒)默认保留 180 秒、重连直接回到副本;全队掉线时副本暂停(怪物停止行动、不计时)
当机 / 重开——开服时找出没打完的场次,自动退还门票、次数与体力,玩家上线送回原处
门票本体没有,需要自己用脚本扣物品金币、物品、体力、每日次数门票物品(隐藏标签防伪造)、金钱、体力;先押着,进场成功才算扣,开不成自动退
入场条件js-condition等级等任何 PlaceholderAPI 变量(%mmocore_level% >= 20),每条可自订提示
防作弊指令白名单、禁止右键物品部分默认关闭末影珍珠、紫颂果、鞘翅、烟花加速、激流、不死图腾、末影箱、桶、载具、拴绳、刷怪蛋、TNT、飞行… 每项可开关
计分板 / 王条需另外搭配有每个副本自己的计分板、Boss 王条,变量即时更新
音效$sound 只有原版音效名—原版音效或资源包 ogg,可设音量与音调
复活次数、死亡点复活有共用 / 个人生命、旁观等待、队友蹲下救援、复活道具、团灭重来
奖励脚本自行发放有通关、首通、评价(S/A/B)、无伤 / 满人 / 时限内额外奖励;不在线的上线补发
世界存档会接管服务器的自动存档—不动服务器存档
跨服赞助版附属—内置(BungeeCord / Velocity + MySQL)
支持版本1.12 – 1.20.4—1.20 – 26.x
「—」的意思

「—」表示该插件本体没有直接对应的现成功能,或我们没有查证到;不代表做不到。 DungeonPlus 的信息以官方文档与 1.4.6 版本的默认配置为准,QueDP 以 1.4.1 版本的默认配置为准。

从 DungeonPlus 换过来​

DungeonPlus 的脚本行($message{…} @dungeon、$monstergroup{group=…;delay=1}、$kill{mobname=…;amount=…} @system…)、 monster.yml 的 groups: 列表格式、task 的 auto-start: ["名称 false cycle"]、交互的 type: AREA / PLAYER_DEATH + parameter: 都能直接读。 主要要改的是坐标(云副本用点位名称或相对坐标)和 Kether(不支持,改用一般动作)。详见 从 DungeonPlus 迁移。