地牢类型与程序化生成
Classic、Procedural、Continuous、房间、连接点、门与两种布局。
Classic:固定整图
classic 会把一张完整模板作为副本来源,适合剧情关卡、机关解谜、Boss 场和手工地图。
优点:
- 设计方式直观;
- 坐标固定,触发器容易理解;
- 适合先完成流程闭环。
代价:
- 模板越大,复制、保存和清理时间越长;
- 多并发实例需要更多磁盘、区块处理和世界池容量;
- 修改地形后应重新做完整实例测试。
Procedural:程序化房间
procedural 由房间模板、连接点、门、白名单和布局算法组合。编辑时使用:
/lidungeon roomtool
房间工具只在程序化编辑实例中可用。房间需要有清晰边界、连接点方向和可旋转结构;门名与房间触发器/功能引用必须一致。
布局模式
| 布局 | 行为 |
|---|---|
BRANCHING |
先生成主干 TRUNK,再按深度和次数生成命名分支 |
MINECRAFTY |
类似要塞/下界堡垒,从连接点不断尝试拼接房间 |
通用生成配置
maps/<地牢>/generator.yml 主要字段:
| 字段 | 用途 |
|---|---|
Layout |
BRANCHING 或 MINECRAFTY |
General.SurroundingBlock |
包围房间的 Bukkit 方块;AIR 表示不包围 |
General.MinRooms / MaxRooms |
MINECRAFTY 房间数范围 |
General.StrictRoomCount |
是否必须达到最少房间数 |
生成计算受全局 Generator.Timeout 限制,默认 5 秒。超时不代表服务器崩溃,而是当前房间/连接规则无法在时间内得到有效布局。
BRANCHING 主干与分支
BranchSettings.TRUNK 必须存在且不能改名。每个分支支持:
Rooms:可用房间白名单,空列表表示全部;EndRooms:可作为终点的房间;Straightness:偏向直线的权重,范围 0 到 1;MinRooms/MaxRooms:房间数范围;StrictRoomCount:是否必须达到最少房间数;Depth:分支允许出现的主干深度;Occurrences:分支生成次数范围;StrictBranchCount:是否强制达到出现次数。
房间生成失败时,先降低 MinRooms、关闭严格数量,再检查连接方向和包围盒冲突,不要一开始就无限调高超时。
Continuous:持续型实例
continuous 面向长期开启、玩家陆续进入的玩法。重点配置:
General.MaxPlayers:实例最大玩家数;IgnoreParties: true:每名玩家独立进入,不把整个队伍带入;General.MaxInstances:控制同一地牢并发实例上限;CleanupDelay:无人后何时清理。
持续型副本应测试玩家在不同时刻加入、退出、断线重连以及满员后创建新实例的行为。
房间门与房间触发器
程序化模式额外提供:
- “房间门控制器”功能:按门名开关门;
- “房间门开关”触发器:监听门打开或关闭;
- “进入/离开房间”触发器:按玩家进入、离开及原因筛选触发;
/lidungeon testdoor <门>:测试指定门;/lidungeon testalldoors:测试当前房间全部有效门。
门名是逻辑引用,不是显示文本。改名后要同步检查所有触发器、功能和 MythicMobs 机制。
程序化地牢验收
至少连续生成 10 次,并记录:
- 是否每次都达到最小房间数;
- 是否有封死连接、悬空入口、重叠房间;
- 起点和终点是否可达;
- 房门是否关联正确;
- 房间旋转后,功能坐标和朝向是否正确;
save force后重启,房间模板是否保留;- Folia 下结构投放时是否出现跨区域告警或超时。