房间 room.yml
rooms/<房间>/room.yml 是一间房的设置。用 /cd admin rogue room-add 或编辑模式「新增房间」建立的房间都会带一份有注释的 room.yml。
type: combat # start 起点 / combat 战斗 / elite 精英 / boss 首领 / reward 宝藏 / shop 商店 / rest 休息处 / event 事件
name: "&c深渊大厅" # 进房间的标题(不写 = 种类名称)
icon: { material: BONE } # 门上的物品(不写 = config.yml roguelike.types 的默认)
weight: 10 # 同种类的房间之间谁比较常出现
floors: all # 第几层会出现:1-3 / 4+ / all
max-per-run: 0 # 每场最多出现几次(0 = 不限)
spawn: spawn # 入口点(编辑模式的床)
exit: exit # 出口点(门出现在这里;要指定每扇门就另外放 exit1 exit2 exit3)
door: "" # 清除时自动打开的障碍名称
clear-when: groups # groups / mobs / script / enter / event(不写 = 依种类)
clear-groups: [] # groups 模式要等哪些怪物组(空 = 这间房 monster.yml 的全部怪物组)
enter-delay: 2s # 不写 = config.yml 的 roguelike.enter-delay
draft: default # default 照 cards.yml 的 draft.when / true 清除后选祝福 / false 不选
scaling: { health: 1.0, damage: 1.0, level: 0, amount: 1.0 } # 这间房的怪额外倍率
environment: {} # 只覆盖有写的,例如 { time: 18000, weather: clear, border: 16, effects: [] }
rules: {} # 以副本 config.yml 的 rules 为基础覆盖
# max-mobs: 80
# chest-mode: personal
# interact-hint: true
种类 type
| 写法 | 中文也可以写 | 默认清除条件 | 说明 |
|---|---|---|---|
start | 起点、起始 | enter | 开场的房间。只有 config.yml 的 roguelike.start-room 那一间是起点,它的种类一定当成 start;其他房间写 start 没有意义 |
combat | 战斗 | groups | 一般的战斗 |
elite | 精英 | groups | 怪物套上 floors.yml 的 scaling.elite 倍率(MythicMobs 的怪在 mythic: level 时不套用);cards.yml 的 draft.when 有 elite 时打完选祝福 |
boss | 首领、王 | groups | 每层的最后一间,由楼层规则安排,不会出现在一般的门后面 |
reward | 宝藏、奖励(或 treasure) | enter | 见 宝藏房 |
shop | 商店 | enter | 见 商店房 |
rest | 休息、休息处、营火 | enter | 见 休息处 |
event | 事件、祭坛 | 有选项 = event,没有 = enter | 见 事件房 |
没有 room.yml 的房间当成权重 10、每层都会出现的战斗房(后台会提示)。
通用设置
| 键 | 默认 | 说明 |
|---|---|---|
name | 种类名称 | 进房间的大标题、计分板的 {room_name};门上要显示房名请开 door.show-room-name |
icon | 种类的物品 | 门上方飘着的物品(物品名称或物品区块) |
weight | 10 | 同种类的房间之间的权重;0 = 不会出现在门后面 |
floors | all | 第几层会出现:1-3、4+、all(全部)、2(只有第 2 层) |
max-per-run | 0 | 每场最多出现几次,0 = 不限 |
spawn | spawn | 入口点的名称:传送进来的位置,也是这间房的存档点(复活、团灭重来、掉线重连都回到这里) |
exit | exit | 出口点的名称,门出现在这里,见 门出现在哪里 |
door | 空 | 清除时自动打开的障碍(编辑模式的铁栏杆工具);脚本也可以 room door open / room door close |
clear-when | 依种类 | 什么时候算清除,见 清除条件 |
clear-groups | 空 | clear-when: groups 时要等哪些怪物组;空 = 这间房自己的全部怪物组 |
enter-delay | roguelike.enter-delay | 传送进来之后几秒才开始出怪、执行这间房的 start.yml |
draft | default | 清除后要不要选祝福:default 照 cards.yml 的 draft.when;true 一定选;false 不选 |
scaling | 全部 1、等级 0 | 这间房的怪额外倍率:health、damage、amount(倍率)与 level(加几级),叠在楼层成长上。MythicMobs 的怪在 scaling.mythic: level(默认)时只吃 level 与 amount |
environment | 副本的环境 | 只覆盖有写的:time、weather、gamemode、effects、border |
rules | 副本的 rules | 以副本的规则为基础覆盖,写法见 副本规则 |
max-mobs | 副本的 max-mobs | 这间房同时最多几只被追踪的怪 |
chest-mode | 副本的 chest-mode | 地图上的箱子:vanilla / personal / explore |
interact-hint | 副本的设置 | 互动点上方的提示 |
players、party、lives、ticket、requirements、modes、scoreboard、bossbar、sounds、notify、ranks、variables、time-limit、countdown、roguelike…… 这些只能写在副本的 config.yml;写在 room.yml 会提示并忽略。
清除条件 clear-when
| 值 | 什么时候算清除 |
|---|---|
groups | 要等的怪物组(clear-groups,没写 = 这间房 monster.yml 的全部怪物组)都打完,而且场上没有剩下的怪 |
mobs | 场上的怪全死了、没有正在进行的怪物组(一直没出过怪的话,开始 5 秒后也算) |
script | 只有脚本执行 room clear(或 clear)才算 |
enter | 一进来就算(门马上出现) |
event | 事件房的选择做完 |
groups 模式会等「全部」要等的怪物组打完,所以第二波、第三波不用写 auto-start:在上一组的 end 写 monstergroup start 第二波 就好。注意每一组都要会被叫出来(自动开始,或有脚本叫它),否则房间永远不会清除,validate 会提醒。
房间清除时依序发生:
- 剩下的怪全部移除(
enter除外),door的障碍打开; - 执行房间
end.yml的clear:,每位队员各发一份rewards.clear; - 每人拿到
roguelike.currency.room-clear的魂晶,有「清除房间回血」祝福的人回血; - 等复活的人站起来(
revive-on-room-clear)、room-clear触发、祝福的on-room-clear; - 这一层的最后一间 → 这一层打完;要选祝福 → 先选祝福再出现门;否则 → 门马上出现。
脚本里的 clear、win、complete、end 在随机地牢都代表「这间房清除」;/cd admin instance clear <编号> 也是。
门出现在哪里
房间清除后,下一步的门出现在出口:
exit1、exit2、exit3点位的数量不少于这一次的门数:第 1、2、3 扇门各自出现在那里;- 不够的话(例如只放了
exit1、exit2,却出现 3 扇门),或只有exit:以exit为中心(没有exit时以exit1为中心),往它朝向的左右两侧排开,每扇间隔 3 格; - 都没有:门出现在入口前方 3 格(
validate会提醒你补出口)。
要分别摆每扇门的话,门数上限是几扇就放几个 exit13:exit3。名称是 room.yml 的 exit 后面加 1exit: door 时要放 door1~door3。
每扇门 = 全息字(种类、房名或「???」、票数)+ 飘着的物品 + 一圈粒子,样子由 config.yml 的 roguelike.types 决定。
宝藏房 reward
type: reward
name: "&6遗忘的宝库"
reward:
point: chest # 宝箱的点位;空白 = 进房间直接领
coins: 20-35 # 每人拿多少魂晶(范围)
draft: true # 领完选一张祝福
draft-rarity: rare # 那次选祝福至少一张这个稀有度以上
effects: {} # 额外效果(和商店商品的写法一样,例如 { heal: 30 })
| 键 | 默认 | 说明 |
|---|---|---|
point | chest | 右键这个点位的方块(或它上方的提示字)领奖励,每人每次进房领一次;空白 = 一进房间大家直接领 |
coins | 20-35 | 每人拿多少魂晶(会算祝福的魂晶加成) |
draft | true | 领完再选一张祝福(个人选,不会挡住门) |
draft-rarity | rare | 那次选项里至少一张这个稀有度以上;空白 = 不保证 |
effects | 无 | 额外效果,写法见 效果区块 |
还没领的人每 10 秒会在动作栏收到提醒。房间里另外用 loot.yml 摆的宝箱照常能开,每次进这间房都会重新抽。
商店房 shop
type: shop
name: "&a深渊商人"
shop:
npc: shop # 商人站的点位
entity: minecraft:wandering_trader
display: "&e深渊商人 &7(右键)"
goods: [] # 只卖这些商品 ID(空 = shop.yml 全部)
| 键 | 默认 | 说明 |
|---|---|---|
npc | shop | 商人出现的点位名称(编辑模式的指南针点位或村民蛋 NPC 工具都可以) |
entity | minecraft:wandering_trader | 商人的实体种类 |
display | &e商人 &7(右键) | 商人头上的名字 |
goods | 空 | 这间店只卖 shop.yml 里的这些商品 ID;空 = 全部商品都可能出现 |
右键商人、点进房间时聊天栏的按钮、或输入 /cd shop 打开商店。商品、价格、刷新见 商店 shop.yml。
休息处 rest
type: rest
name: "&b林间营火"
rest:
point: campfire
picks: 1 # 每人可以选几次
options: {} # 空 = 内置:回复 / 淬炼 / 净化
| 键 | 默认 | 说明 |
|---|---|---|
point | campfire | 右键这个点位的方块(或提示字)打开选项 |
picks | 1 | 每人每次进房可以选几项 |
options | 内置三项 | 选项清单,写法同 事件房的选项;空 = 下面三项 |
内置选项:
| 选项 | 效果 |
|---|---|
heal 回复 | 生命回满,倒下的队友也会站起来(heal: 100、revive-dead: true) |
temper 淬炼 | 选一张祝福 +1 层(upgrade: 1) |
cleanse 净化 | 选一张诅咒 −1 层(remove-curse: 1,没有诅咒时不能选) |
事件房 event
type: event
name: "&5染血祭坛"
event:
point: altar
picker: each # each 每人各选 / leader 队长决定 / vote 全队投票
title: "&5染血祭坛"
text: ["&7祭坛上刻着:", "&7「以血换力,以金换运」"]
timeout: 60s # 时间到还没选的人 = default: true 的选项
options:
blood:
name: "&c以血换力"
icon: { material: REDSTONE }
description: ["&7失去 30% 生命", "&7获得一张稀有以上的祝福"]
actions: ["rogue damage 30% @self"]
card: "random:rare+"
gold:
name: "&e以金换运"
icon: { material: GOLD_NUGGET }
cost: 25
description: ["&7花费 &d◆ 25", "&750% 史诗祝福 / 50% 诅咒"]
actions:
- if: "chance 50"
then: ["card give random:epic @self"]
else: ["card give random:curse @self"]
leave:
name: "&7转身离开"
icon: { material: OAK_DOOR }
description: ["&7什么都不做"]
default: true
| 键 | 默认 | 说明 |
|---|---|---|
point | altar | 右键这个点位的方块(或提示字)打开选项;空白 = 进房间就打开 |
picker | each | each(每人)每人各选一次;leader(队长)队长选,效果套用到在场的每个人;vote(投票)全队投票,票多者胜、平手看队长 |
title / text | 空 | 菜单的标题与说明文字 |
timeout | 60s | 时间到还没选的人自动选 default: true 的选项(没有就最后一个) |
options | 空 | 选项;没有选项时这间房一进来就算清除 |
每个在场的人都选完(或时间到)事件才算完成;clear-when 没写时,这时候房间清除、门出现。每次有人选择,全队都会看到「XXX 选择了……」。
选项的写法
休息处与事件房的选项都是 <选项ID>: { ... }:
| 键 | 说明 |
|---|---|
name / icon / description | 显示的名称、物品、说明 |
cost | 选这项要花多少魂晶。休息处的选项都可以收费;事件房只有 picker: each 能收费,leader / vote 写了会提示并忽略 |
requires | 条件清单(脚本条件写法,对象 = 选的人),不符合时显示成锁住,例如 ["{curses} >= 1"] |
default | true = 时间到时自动选这一项 |
| 效果 | heal、revive-dead、card、rerolls、upgrade、remove-curse、coins、lives、items、bound、actions,写法见 效果区块 |
选项与宝藏房的效果脚本只在这间房里有效(离开房间时还没跑完的 delay 会停掉)。
房间自己的脚本
start.yml的script::进房间、enter-delay之后执行一次。end.yml的clear::房间清除时执行;rewards.clear:每位队员各发一份。trigger.yml:只在这间房有效的触发,除了一般副本的种类,还可以用room-enter、room-clear、card-pick、shop-buy,见 触发种类。- 房间里叫得到根目录
monster.yml的怪物组(例如首领半血时monstergroup start adds),出怪点用这间房地图上的同名点位。