跳到主要内容

运行与世界隔离

运行(run) 是一个分组对副本的一次通关。本页说明运行拥有什么、它的世界如何创建,以及该选择哪种隔离模式。

运行拥有什么​

每次运行都拥有自己的:

  • 成员:分组中的玩家。一名玩家同一时间只能处于一次运行中。
  • 世界或槽位:副本仅为这次运行而存在的地方。
  • 时间限制:副本的 cooldownSeconds 字段(最长持续时间;留空或 0 表示无限制)。
  • 状态:每位成员所在的房间、已用过的 once 房间、箱子、已刷出的怪物。
  • 受众:运行的 NPC 和箱子只向其成员显示。

同一副本可以同时存在多次运行,最多 maxSimultaneousInstances 次。这个数字也是该副本的大厅数量。当所有名额都被占用时,下一个分组会收到 “All the runs of this dungeon are taken.”。

分组​

分组指一起加入大厅的人,或者 Dungeon Enter 动作中的那一名玩家。如果玩家在 MMOCore、Parties 或 Typewriter 队伍扩展中有队伍,只要有足够空位容纳整支队伍,整支队伍会一起加入大厅。Dungeon 只读取这些队伍:从不创建或修改任何队伍。

分组人数必须在 minPartySize 和 maxPartySize 之间,并且每位成员都必须符合副本的 criteria。使用 /typewriter dungeon force-start 的管理员可以跳过最小人数和条件。

选择隔离模式​

设置 Dungeon Instance 的 isolation 字段。

模式是否隔离代价需要
SLIME_CLONE是低:内存中的克隆Advanced Slime Paper,以及作为已加载 Slime 世界的模板。
WORLD_PER_RUN是高:复制模板文件夹,之后删除副本服务器根目录中的模板世界文件夹。
SHARED_WORLD_SLOTS否最低:不复制任何东西在每个槽位中都完全相同地构建的世界。
AUTO(默认)安装了 Advanced Slime Paper 时为 SLIME_CLONE,否则为 WORLD_PER_RUN。

在服务器上无法运行的模式会拒绝该次运行;它绝不会回退到其他模式。玩家会看到 “The dungeon cannot be started on this server.”,服务器日志会说明原因。

SLIME_CLONE​

每次运行获得一个 Slime 世界的内存克隆。这是完全隔离的模式中最便宜的一种。它需要 Advanced Slime Paper,并且 templateWorld 必须指向一个已加载的 Slime 世界。

WORLD_PER_RUN​

每次运行获得模板世界文件夹的一份副本,这是一个真正的新世界。副本在服务器线程之外创建,新世界由扩展命名,并打上一个标记文件,因此只有它创建的世界才可能被删除。运行结束时,世界会被不保存地卸载,其文件夹被删除。

  • 扩展绝不会加载、写入或删除模板。
  • 模板文件夹中任何位置存在链接(符号链接、junction),都会使复制被拒绝。
  • 模板名称只能使用字母、数字、_ 和 -(最长 64 个字符)。服务器的主世界以及看起来像运行世界的名称会被拒绝。
  • 如果因为有玩家留在世界中而无法卸载,它会保持加载状态,并在下次启动时被删除。

这也是唯一能承载生成型副本的模式:扩展为该次运行创建一个空世界,并把房间粘贴进去。有生成器时,AUTO 和 WORLD_PER_RUN 可用,而 SLIME_CLONE 和 SHARED_WORLD_SLOTS 会被拒绝。

SHARED_WORLD_SLOTS​

该副本的所有运行都发生在模板世界本身中,各自位于网格里属于自己的槽位。扩展会把你编写的每一个位置(出生点、房间、箱子、NPC、怪物位置)按该次运行所在槽位的偏移量平移,所以你只需在原点槽位构建一次副本,然后在其他每个槽位中完全相同地构建它(例如通过粘贴)。

sharedSlots 字段设置网格:

字段含义默认值
spacingX, spacingZ两个槽位之间的方块数。至少等于占地面积。512
columns每行的槽位数。0 = 所有槽位沿 X 排成一行。0
footprintX, footprintZ模板的大小,以方块计。256
此模式不是隔离的

怪物、掉落物和方块由该世界的所有槽位共享。运行结束时,它的怪物、箱子和 NPC 会被移除,但世界本身不会被修复:掉在地上的物品,以及被玩家或怪物破坏的方块,会留在原处。其他槽位的玩家彼此隐藏,运行的箱子、NPC 和怪物也只对其成员可见,但带有破坏性怪物或世界编辑的副本会留下痕迹。在共享世界中,请在 Dungeon Mob Spawn 条目上保持 blockDamage 和 dropVanillaLoot 关闭。

构建在同一个共享世界上的两个副本会共用它的槽位。请为两者使用相同的 maxSimultaneousInstances。

启动运行​

启动是要么全部成功,要么完全不做:

  1. 检查条件和分组人数,并确定隔离模式。
  2. 预留一个位置,因此双击只会产生一次运行,而不是两次。
  3. 对于生成型副本,先生成布局,然后每个 tick 粘贴几个房间到新世界中。
  4. 准备世界(克隆、复制或槽位)。
  5. 收取进入费用,全部收取或完全不收。
  6. 记录每位成员的出发点,然后所有人被传送。
  7. 运行转为活动状态,然后为每位成员执行箱子、onStart、修饰器(生成型副本还有词缀)。

如果任何一步失败,玩家留在原地,费用被退还,世界被释放,名额被归还。

结束运行​

以下情况先发生者生效,即使几个同时发生,也只会执行一次结束:

  • Dungeon Complete(副本已通关)。
  • 时间限制(cooldownSeconds)耗尽。
  • Dungeon Close 或 /typewriter dungeon close <instance>。
  • 每位成员都已离开、切换了世界或断开了连接。

结束时会为每位在线成员执行 onEnd,清理该次运行的箱子、NPC 和怪物,把成员送回(设置了 Complete 和 Close 的 exitPoint 时送到那里,否则送回各自来时的位置),然后释放世界。在运行中断开连接的玩家,会在下次加入时被带回他们来时的位置。如果他在重新连接的宽限(reconnectGrace,默认 2 分钟)内回来,则会保留自己的位置:参见断线。

重载与重启​

事件运行会怎样
typewriter reload、Publish运行会被重新接管:成员、世界、截止时间、房间状态、已打开的箱子和已刷出的怪物都会恢复。onStart 和修饰器不会再次执行。
服务器重启运行会结束:它们的世界会消失。玩家在下次加入时被送回,孤立的世界文件夹会被清除。

要让接管生效,请在 runtimeArtifact 字段中链接一个 Active Dungeon Instance Artifact。没有它,运行会被写入扩展的 runs.json 文件,并且服务器日志会在加载时警告你。多个副本可以共用一个 artifact。

无法被接管的运行(它的副本已被删除、它的世界未加载、它生成的布局无法重建)会在启动时被关闭,其玩家被送回。日志会说明原因。

大厅不会在重载或重启后恢复:它们会以空的状态回来,被接管的运行的大厅除外。