更新日志
1.2
- Dungeon Mob Spawn:新增
lootTable、spawnParticle、随玩家人数缩放(perExtraPlayer、maxCount、playerCountSource)、maxSimultaneous、waves,以及触发器onWaveCleared和onCleared。 - 新条目 Dungeon Loot Table:由箱子和怪物共用的一张战利品表。
- Dungeon Loot Chest:新增
lootTableRef,以及可用一个条目放置多个箱子的additionalLocations(在生成式地下城中被忽略)。 - Loot Chest Trigger:新增
particleEffect,X、Y、Z 轴分开设置并带中心点。四个triggerParticle字段为旧版字段:仅当particleEffect未指定粒子时才生效。 - 新事件 On Dungeon Mobs Cleared。
- 新条目 Dungeon Restrictions,通过
restrictions关联到 Dungeon Instance 或 Dungeon Room:禁止鞘翅、船和矿车、末影珍珠、紫颂果与激流三叉戟,可屏蔽命令,并可设置拒绝提示和绕过权限。 - 需要 GUI(OmniGUI)0.20。 新的 Dungeon Leaderboard Source 使用 GUI 0.20 的排行榜来源约定:旧版 GUI 无法加载副本排行榜。请先更新 GUI。
- 面向附加组件的 API 破坏性变更:
DungeonArtifactData、DungeonStats和PlayerDungeonStats移到了包btcrenaud.dungeons.core,DungeonArtifactEntry.getPlayerStats和DungeonArtifactEntry.update的签名也已更改。针对 Dungeon 1.1.x 编译的附加组件必须重新编译。在网页面板中搭建的副本不受影响。 - 统计:每名玩家 22 项统计(造成和承受的伤害、击杀怪物数、死亡、游玩时间、已清理的房间和波次、纪录、单人通关和无死亡通关等)。它们在运行期间累计,按 artifact 为每名成员结算一次,并可跨多个 artifact 求总和。伤害指真正扣掉的生命值,上限为目标当时的生命值。
- Dungeon Instance:
statsMobScope选择哪些怪物计入统计,MARKED_ONLY(默认,该次运行生成的怪物)或ANY_MOB_IN_RUN_WORLD。 - 新增 fact Player Dungeon Statistic,以及占位符
dungeon_stat_<key>(加_raw为纯数字)、dungeon_total_<key>和dungeon_inst_<id>_<key>。片段content.dungeon_stats.duration_format和content.dungeon_stats.missing_value决定它们的写法。 - 新增条目 Dungeon Leaderboard Source,接入 GUI 排行榜的
source字段(GUI 0.20):artifact、scope(LIFETIME或CURRENT_RUN)、rankBy、values、durationFormat、decimals、missingValue和unknownName。行标记:{value_<key>}、{value_<key>_raw}和{score_raw}。 - Dungeon Instance:
reconnectGrace(默认 2 分钟)。断线的成员在这段时间内保留自己的位置,及时回来就带着侧边栏、隐藏状态和游戏模式继续。超时后他离开运行,重新连接时回到入口位置。参见断线。 - Dungeon Restrictions:
gameMode(可选,例如ADVENTURE;离开时归还玩家原本的模式;CREATIVE和SPECTATOR会关闭战斗统计)、limitInteractions配合allowedInteractions(默认CHEST、TRAPPED_CHEST和BARREL)与protectedEntities(物品展示框、盔甲架、画),以及messageRepeatDelay(2 秒)。limitInteractions还会拒绝放置方块、桶、载具、刷怪蛋、火、骨粉以及对方块使用工具。 - Dungeon Restrictions:激流和紫颂果现在在点击时就被拒绝,而不只是拒绝其效果。只有绕过权限能豁免玩家:除非该节点被明确设为
false,否则管理员(op)默认拥有它。 - Dungeon Category:槽位字段
unlockedLore和lockedLore现在是unlockLore和lockLore。用旧名称保存的页面仍可读取;两者同时存在时,新的优先。 - MMOProfiles:玩家选择档案后,会重新应用返回入口位置和原游戏模式的处理。
- 修复:
runs_left不再统计让玩家离开运行的死亡(它仍计入deaths);waves_cleared只统计定义了waves的组;%typewriter_dungeon_stat_current_health%在运行中显示实时生命值;统计写入器在出错后不会再停止保存;因重载时没有任何成员在线而被关闭的运行,会为缺席的成员统计游玩时间。 - 现有地下城在使用这些字段之前不会有任何变化。关于击败所有怪物后出现箱子的做法,参见地下城中的实体。
1.1.1
- Paper 26.x:
WORLD_PER_RUN模式的副本可能因The server did not create world 'dungeon_classic_...'而失败。模板的副本保留了模板的世界 ID(data/paper/metadata.dat),服务器因此将其视为重复世界而拒绝加载。现在副本会获得自己的 ID。
1.1
- 下方所述重构的公开版本。自 1.0 起的修复:
WORLD_PER_RUN现在会复制以 Paper 26.x 方式存储的模板世界(dimensions/minecraft/<name>)。
1.0
这是围绕运行(run)模型对扩展所做的重构。在更新曾使用 0.10 的服务器之前,请参阅迁移说明。
运行与世界
- 每次运行现在都有自己的状态机、注册表和日志。启动运行是要么全部成功,要么完全不做:如果某一步失败,什么都不会保留,进入费用会被退还。
- 三种隔离模式,按副本通过
isolation设置:SLIME_CLONE、WORLD_PER_RUN、SHARED_WORLD_SLOTS,以及AUTO(默认)。无法运行的模式会拒绝该次运行。参见运行与世界隔离。 - 按 Paper 26.x 方式存放的世界(
dimensions/minecraft/<name>)现在可被SHARED_WORLD_SLOTS找到,并可被WORLD_PER_RUN复制;世界准备过程中的问题只会在日志中记录一行,而不是完整的堆栈。 typewriter reload或 Publish 会重新接管正在进行的运行。服务器重启则会干净地结束它们。cooldownSeconds现在是真正的时间限制:0或留空表示无限制。- 孤立的运行世界会在启动时被清除,并带有保护措施(名称、标记文件、绝不清除已加载的世界)。
- 统计数据会被写入:每个副本、每位玩家的尝试次数、完成次数和最佳用时。
damageMultiplier和副本的criteria现在会生效。
生成型副本
- 新条目:Dungeon Room Template、Dungeon Connector Type、Dungeon Room Pool、Dungeon Generator、Dungeon Affix,以及用于门和标记点的游戏内编辑器。带有
generator的副本会为每次运行组装。相同的种子生成相同的副本。参见生成型副本。
房间、事件与事实
- 房间的
onEnter和onLeave触发器、enterOnce、leaveOnce、priority、criteria和modifiers现在生效。新增verticalMargin字段。 - 新事件:on_dungeon_start、on_dungeon_complete、on_dungeon_room_enter、on_dungeon_room_leave、on_dungeon_mob_death。
- 事实
indungeon和indungeon_instance现在生效。新事实 dungeon_mobs_alive。 - 新动作:Dungeon Complete、Dungeon Clear Room、Dungeon Spawn Mobs。
- 新增 Dungeon Run Audience 和 Dungeon Run Group。
菜单与大厅
- 菜单会实时刷新(
autoRefreshTicks),并在任何大厅发生变化时刷新。 - 等待计分板生效。
DUNGEON_LOBBY_SLOT标记点用于放置大厅。槽位的criteria会针对每位玩家评估。 - 队伍菜单可以指定它的副本(
dungeonInstance);为空的菜单服务所有没有被其他菜单指定的副本。 - MMOCore、Parties 和 Typewriter 队伍扩展的队伍仅被读取。
箱子
- 每位玩家每个箱子一次抽取、
visibility(AUTO、PER_PLAYER、SHARED)、onDisappear、lootSelection和weightedPicks、箱子动画、依据 yaw 的朝向、CraftEngine 和 Nexo 方块、重载后恢复箱子。
副本中的实体
- Dungeon NPC Instance:由任意实体定义创建的、每次运行专属的 NPC,现在会向其运行的成员显示。
- Dungeon Mob Spawn:原版战斗怪物,每次运行一次,带有上限(
maxAliveMobs)。参见副本中的实体。
玩家文本与新字段
- 菜单、大厅、运行侧边栏、战利品箱和启动拒绝的文本是 snippet (
content.dungeon_menu.,content.dungeon_lobby.,content.dungeon_run.sidebar.,content.dungeon_chest.,content.dungeon_launch.). 默认值不变。/typewriter dungeon ...命令的回复同样是 snippet(content.dungeon_command.)。 - Dungeon Instance 上的新字段
lobbyIdleKickSeconds(默认120)。 - Loot Chest Trigger 上的新字段:
triggerSoundVolume、triggerSoundPitch、triggerParticleCount、triggerParticleSpread、triggerParticleSpeed。broadcastMessage接受颜色代码。
命令
- 移除了从未起过作用的
start子命令。命令记录在索引页中。
已知限制
- 仅支持 Paper。不支持 Folia。
- 生成型副本只使用
WORLD_PER_RUN。 - 副本中的 MythicMobsNPC 过场动画尚未测试。
0.10
独立构建。房间触发器、两个“in dungeon”事实、NPC 实例和统计已声明,但未生效。