跳到主要内容

文件夹与房间

随机地牢和一般副本一样,plugins/CloudDungeon/dungeons/ 底下一个文件夹就是一个副本,文件夹名称就是副本 ID。差别是:地图不在根目录,而是拆成 rooms/ 底下的很多间房间。

dungeons/
└─ abyss/
├─ config.yml 基本设置(type: roguelike)+ roguelike: 随机地牢设置
├─ floors.yml 楼层规则(选用,没有 = 内置规则)
├─ cards.yml 祝福卡(选用,没有 = 内置的 16 张)
├─ shop.yml 商店商品(选用,没有 = 内置的 8 样)
├─ end.yml 整场的结算与奖励
├─ before.yml 开场前脚本(选用,整场有效)
├─ start.yml 开场脚本(选用,整场有效)
├─ monster.yml 怪物组「库」(选用):每个房间都叫得到,不会自动开始
├─ script.yml 共用脚本组(选用)
├─ task.yml 共用任务组(选用)
├─ trigger.yml 整场都有效的触发
├─ loot.yml 共用宝箱组(选用)
└─ rooms/
├─ start/ 起点房(config.yml roguelike.start-room)
│ ├─ room.yml 房间设置
│ ├─ map.schem 地图(编辑模式自动产生)
│ ├─ points.yml 点位(编辑模式自动产生)
│ └─ start.yml 进房间后执行
├─ combat_hall/
│ ├─ room.yml
│ ├─ monster.yml 这间房的怪物组
│ ├─ map.schem
│ └─ points.yml
├─ boss_warden/
│ ├─ room.yml
│ ├─ monster.yml
│ ├─ trigger.yml 只在这间房有效的触发
│ ├─ map.schem
│ └─ points.yml
└─ …

上面列出了根目录可以放的所有文件,标「选用」的没有也可以。范例「深渊回廊」的根目录没有 before.yml、start.yml、script.yml、task.yml、loot.yml;/cd admin create --roguelike 建立的范本则带了根目录的 start.yml、script.yml,但没有根目录的 monster.yml。

房间不会被当成独立的副本:/cd join 只认根目录的文件夹。编辑某一间房用 副本:房间 的写法,例如 /cd admin edit abyss:boss_warden。

房间文件夹名称(房间 ID)只能用英文、数字、下划线 _、减号 -,最长 32 字;其他名称的文件夹会被略过并在后台提示。以 . 开头的文件夹不读取。

根目录的文件​

文件在随机地牢里的意思
config.yml一般副本的所有设置照常有效(名称、人数、生命、门票、入场条件、计分板、难度模式……),另外多了 type: roguelike 和 roguelike: 区块,见 config.yml 的 roguelike。map 与 spawn 不会用到(地图与入口在每个房间里);time-limit 默认改成 0(不限时)
floors.yml每层的房间数、门后面的种类、首领、怪物成长,见 楼层规则
cards.yml祝福卡与选卡规则,见 祝福卡
shop.yml商店商品与价格,见 商店
end.ymlclear / fail 脚本与 rewards:(通关、每层、里程碑、撤退、每场结束),见 结算与奖励
before.yml / start.yml和一般副本一样,开场时各执行一次;里面的 delay 不会因为换房间而中断
monster.yml怪物组「库」:每个房间的脚本、触发都能 monstergroup start <组> 叫出来,出怪点用当时那间房地图上的同名点位。写了 auto-start: true 也不会自动开始(后台会提示)
script.yml / task.yml / trigger.yml / loot.yml每个房间共用;房间自己有同名的,在那间房里以房间的为准

房间的文件​

文件内容
room.yml房间设置:种类、权重、出现楼层、入口 / 出口、清除条件、种类专属设置……,见 房间 room.yml。没有这个文件 = 当成权重 10 的战斗房
map.schem + points.yml地图与点位,/cd admin edit 副本:房间 盖好后 /cd admin save 产生
monster.yml这间房的怪物组。auto-start: true 的组在进房间(enter-delay 之后)自动出怪
start.yml进房间、enter-delay 之后执行的 script:(开场剧情、NPC、全息字)
end.yml只用两个:clear:(房间清除时执行)和 rewards.clear(房间清除时每位队员各发一份)。fail、first-clear、rank、bonus 不会用到,要写在根目录的 end.yml
trigger.yml / task.yml / script.yml / loot.yml只在这间房有效
before.yml房间不会执行,开场剧情请写在房间的 start.yml
编辑模式自动补的怪物组

在房间里用铁锹输入一个还不存在的怪物组名称时,插件会自动补一组范本(3 只僵尸)。房间的第一组会写成 auto-start: true(进房间就出怪),之后补的组是 false,要一波接一波就在上一组的 end 写 monstergroup start <这一组>。

根目录与房间怎么合并​

进入一间房时,这间房看到的内容 = 根目录的内容 + 房间自己的内容:

  • 怪物组、脚本组、任务组、触发、宝箱组都是这样合并;同名的(不分大小写)以房间的为准。
  • 根目录的触发整场有效,换房间也不会重置(例如「第 1 次有人倒下」只会触发一次);房间自己的触发只在这间房里生效,离开就失效。
  • 根目录的环境(时间、天气、游戏模式、药水效果、边界)是默认值,房间的 room.yml 只覆盖有写的部分;rules: 也是以根目录为基础覆盖。

整场有效与只在这间房有效​

换房间时,属于这间房的东西会一起停掉:房间 start.yml 里还没跑完的 delay、房间怪物组的脚本、房间的任务组、休息处与事件选项的脚本、宝藏房的效果脚本。

下面这些整场有效,换房间也会继续跑完:

  • 根目录的 before.yml、start.yml
  • 根目录的触发、任务组
  • 祝福卡的 on-pick、on-kill……等脚本
  • 商店商品的 actions

坐标​

房间里的脚本写坐标(tp、mob 的位置、{point:点位}……)时,照编辑模式里看到的坐标写。每一场房间实际贴在哪一格是随机的,插件会自动换算到这间房当时的位置。

房间大小​

一场随机地牢只占一格副本,所有房间都排在这一格里面(起点房在它原本的位置,其他房间排成格子)。房间之间不用互相连通:每间房各盖各的,走进门时全队会被传送到下一间房的入口。因为都排在同一格里,一间房的长宽有上限:

  • 一格副本的建筑范围 = 主配置 world.slot-spacing − 128(默认 1024 → 896)。
  • 房间之间的间隔 = 2 × max(16, 副本与所有房间里最大的 environment.border) + 16。
  • 起点房以外的房间,长宽最多 =(896 − 间隔)÷ 2:
environment.border间隔一间房最大
16(范本与范例的设置)48424 × 424
64(没写时的默认)144376 × 376
  • 起点房照它在编辑区里的位置贴,只要放得进一格副本就好;但它会占掉和它重叠的格子。
  • 格子数要够:同时最多 3 扇门,至少要 门数上限 + 1 格。/cd admin rogue rooms <副本> 第一行会显示「格子 N 格、每格 P」。

太大的房间不会出现在门后面,validate 与房间清单会提示「地图 X×Z 太大」。解决方法:把房间盖小、调小 environment.border,或调大 world.slot-spacing。

修改设置与地图​

  • /cd admin reload 之后新开的场次才用新的设置;正在进行的场次一直用开场时读到的那一份(房间、祝福、商品、楼层规则都是)。
  • 房间的地图与点位在这一场第一次贴那间房时读取:门出现时(甚至更早,先在背景贴好时)就读了,不是走进去才读。保存后,正在进行的场次里还没贴过的房间会用新地图;已经贴过的房间这一场继续用旧的。
  • 有人正在编辑某个随机地牢的任何一间房时,玩家不能开始这个随机地牢,只有 /cd admin test 可以。