房间制作
一般用局内编辑器做房间,文件会自动生成。这页是文件格式说明。
plugins/QueDP-ProcGen/rooms/mydungeon/ ← 房间集├── start_1.schem ← 建筑├── start_1.yml ← 设置└── ...一间房 = .schem + 同名 .yml。副本用 procgen.yml 的 room-set 指定房间集,不写就用和副本 ID 同名的。
- 封闭:地板、四面墙、天花板都要有
- 不用留门:墙保持实心,生成时在相邻墙中间自动挖门(默认 5×5)。门洞内侧别放东西挡路
- 大小随意:每边至少比门宽多 2 格
- 最底层是地板
| 房型 | 写法 | 行为 |
|---|---|---|
| 起点 | start | 出生点,每局一间 |
| 战斗 | combat | 封门刷怪,清完开门,可能带词缀 |
| 精英 | elite | 同战斗房,必带词缀,怪 +2 级 |
| Boss | boss | 主路线终点,清完结算 |
| 商店 | shop | 进入即通过 |
| 宝藏 | treasure | 进入即通过 |
| 事件 | event | 配合手动清房做机关、抉择 |
| 休息 | rest | 进入即通过 |
起点、战斗、Boss 必需。其余是岔路,房间集没有就跳过。
元数据 yml
Section titled “元数据 yml”所有字段都可省略:
type: combat # 房型,默认 combatweight: 10 # 抽取权重,默认 10manual-clear: false # 手动清房
spawn: "10,1,10" # 出生点(起点房),默认房间中心
mobs: # 第 1 波:"x,y,z: MythicMobs ID" - "4,1,4: SkeletonWarrior"mobs-wave-2: # 第 2 波,不能跳号 - "8,1,8: ZombieBrute"
chests: # chest_rewards.yml 里的宝箱 ID - "12,1,3: 普通宝箱"npcs: # npcs.yml 里的 NPC ID,首次进房生成 - "8,1,8: 商人"interacts: # interacts.yml 里的交互点 ID - "4,1,4: 神秘机关"
doors: # 自定义门:"墙,中心位置,宽,高" - "north,8,5,5"
scripts: on_enter: # 首次有人进房,@trigger 是进来的人 - "action.title('@trigger', '&c危险房间', '')" on_wave: # 第 N 波刷出后 '2': - "action.title('@all', '&c第二波', '')" on_clear: # 清房时 - "action.give_exp('@all', 50)"manual-clear: true:怪清完也不开门,要脚本调用action.procgen_clear_room,见玩法机制- 脚本是本体 JavaScript,本体动作都能用
- 坐标是房间内相对坐标,原点在最小角。地板 y=0,站在地板上写 y=1。旋转自动换算
- 门:墙写
north/south/east/west,中心位置是沿墙第几格。不写就每面墙正中开门
从现成地图截取:
- 把地图导入本体(或用网页工作台导入)
/pg map 地图名进入工作副本- WorldEdit 框住整个房间(含墙)
/pg capture 房间集 房间名 combat/pg edit 房间集 房间名补点/pg map exit
WorldEdit 导出: 框住 → //copy → //schem save 名字,文件拷进房间集,自己写 yml。原点总是选区最小角。
框内所有方块都会保存,脚手架先拆掉。
房间和服务器版本
Section titled “房间和服务器版本”新版本做的房间拿到旧版本用,旧版本没有的方块会变成空气(控制台报 Invalid BlockState ... replaced with air)。房间要在服务器版本或更低版本上做。示例 grand 是 1.20 做的,用了深板岩,1.16 上会有洞。