跳转到内容

房间制作

一般用局内编辑器做房间,文件会自动生成。这页是文件格式说明。

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 级
Bossboss主路线终点,清完结算
商店shop进入即通过
宝藏treasure进入即通过
事件event配合手动清房做机关、抉择
休息rest进入即通过

起点、战斗、Boss 必需。其余是岔路,房间集没有就跳过。

所有字段都可省略:

type: combat # 房型,默认 combat
weight: 10 # 抽取权重,默认 10
manual-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,中心位置是沿墙第几格。不写就每面墙正中开门

从现成地图截取:

  1. 把地图导入本体(或用网页工作台导入)
  2. /pg map 地图名 进入工作副本
  3. WorldEdit 框住整个房间(含墙)
  4. /pg capture 房间集 房间名 combat
  5. /pg edit 房间集 房间名 补点
  6. /pg map exit

WorldEdit 导出: 框住 → //copy → //schem save 名字,文件拷进房间集,自己写 yml。原点总是选区最小角。

框内所有方块都会保存,脚手架先拆掉。

新版本做的房间拿到旧版本用,旧版本没有的方块会变成空气(控制台报 Invalid BlockState ... replaced with air)。房间要在服务器版本或更低版本上做。示例 grand 是 1.20 做的,用了深板岩,1.16 上会有洞。