跳到主要内容

开始前 / 开始后

一场副本开头的两个文件:

文件什么时候执行适合放
before.yml全员传送进场后马上执行,跑完才开始倒数剧情、介绍、布置场景(NPC、全息字、关门)
start.yml倒数结束、正式开始计时的那一刻执行叫出第一个怪物组、设置目标、开始任务

完整顺序​

从队长开始挑战到正式开始,依序是:

  1. 检查:队长 /cd join <副本>(或在菜单里点开始),检查人数、config.yml 的入场条件、冷却、次数、门票,以及 before.yml 的 condition。有任何一条不符合就不会开始,并把原因列出来。
  2. 押门票:门票与金钱先收起来「押着」。
  3. 贴地图:在后台把地图贴到一个空的副本格子(有 prewarm 时直接用预先贴好的)。
  4. 传送进场:全员传送到 spawn 点位。任何人传送失败 → 整场取消、门票全数退还。
  5. 扣门票:门票真正扣掉,记录冷却、每日 / 每周次数(count-entry-on: start 时)、扣体力。
  6. 套用环境:游戏模式、时间、天气、世界边界、药水效果,显示计分板与王条(目标栏显示「准备中」的介绍文字)。
  7. 执行 before.yml:从第一行跑到最后一行,包含所有 delay。
  8. 倒数:before.yml 跑完后,倒数 countdown 秒(每秒显示倒数大字、播放 countdown 音效)。countdown: 0 = 跳过倒数。
  9. 正式开始:
    • 显示「挑战开始」大字(notify.start-title)、播放 start 音效;
    • 开始计时(time-limit 从这一刻算起,{elapsed} 从 0 开始);
    • trigger.yml 里 auto-start: true(默认)的触发组生效;
    • task.yml 里 auto-start: true 的任务开始;
    • monster.yml 里 auto-start: true 的怪物组开始出怪;
    • 执行 start.yml。
传送进场 ─▶ before.yml(剧情,含 delay)─▶ 倒数 countdown 秒 ─▶ 开始计时
├─ 自动开始的触发组 / 任务组 / 怪物组
└─ start.yml
开始前这段时间

before.yml 与倒数期间副本还没「正式开始」:

  • 触发组都还没生效(踩区域、点方块都不会触发),计时也还没开始;
  • 玩家可以走动,但不会受到时限压力;
  • 想在剧情期间不让玩家乱跑,可以在 before.yml 用 effect SLOWNESS 或先把门关着(obstacle close)。

什么放哪里​

想做的事放在例子
开场标题、剧情对话before.ymltitle、message、delay
生成 NPC、全息字before.ymlnpc spawn …、hologram create …
关门、布置场景before.ymlobstacle close 大门
叫出第一个怪物组start.ymlmonstergroup 怪物组1
设置计分板目标start.yml(或怪物组的 objective)objective &f击败前厅卫兵
开始一个没设 auto-start 的任务start.ymltask start 时间提醒
打开一个没设 auto-start 的触发组start.yml 或之后任何脚本trigger enable 启动祭坛

常见流程:先播开场,再出第一组怪​

最常见的写法:before.yml 播开场的消息,跑完倒数,start.yml 的最后一行(通常也是唯一一行)叫出 怪物组1。

before.yml
script:
- "title &b&l霜烬古殿||&7寒气从四面八方涌来"
- "sound ENTITY_ELDER_GUARDIAN_CURSE 0.6 1"
- "npc spawn 长老 长老 minecraft:villager &e古殿长老"
- "hologram create 祭坛字 祭坛 &b冰之祭坛||&7打倒前厅卫兵后才能启动"
- "delay 2"
- "message &7长老:「霜烬守卫就在最深处……」"
- "delay 2"
- "message &7长老:「先打倒前厅的卫兵,大门才会打开。」"
- "delay 1"
start.yml
script:
- "objective &f击败前厅卫兵"
- "monstergroup 怪物组1"

不想要倒数的话,config.yml 写 countdown: 0:before.yml 最后一行跑完就立刻执行 start.yml, 效果就是「先播放开始前的消息,最后一行 monstergroup 怪物组1」。

不建议把 monstergroup 写在 before.yml

before.yml 里也能叫怪物组,但那时计时还没开始、触发组也还没生效,而且倒数会和打怪同时进行。 出怪请放在 start.yml(或在怪物组设 auto-start: true)。

before.yml 里的 stop 与 fail

在 before.yml 执行 stop(或 return)只是提前结束 before.yml,后面的行不执行,倒数和正式开始照常进行。 要取消这一场(不让它开始),请用 fail 原因。

before.yml​

before.yml
# 开始前脚本:进场后马上执行,跑完才倒数
script:
- "title &b副本名称||&7副标题"
- "delay 2"
- "message &7很久很久以前……"

# 额外的开始条件(选用):队长开始时检查,不符合就不会开始
condition:
- "$team-condition{team=true;min=2;max=4;message=&c要 2~4 人组队(目前 <size> 人)} @system"
键别名说明
scriptdungeon-init-script、actions开始前脚本(写法见 脚本写法)
conditionconditions额外的开始条件,在队长开始时(传送之前)检查

condition:开始条件​

这里的条件在副本还没建立时检查,所以只能判断队伍人数与每位队员自己的条件:

写法意思
players min=2 max=4人数要在 2 到 4 之间(也可以写 players >= 2)
level 30每位队员的原版经验等级至少 30
permission vip.dungeon每位队员都要有这个权限
$team-condition{team=true;min=2;max=4;message=…} @system人数要在 min 到 max 之间;team=true 且 min 大于 1 时一定要组队。message 里 <size> = 目前人数
$js-condition{text=%player_level% >= 10;message=&c<player> 等级不够} @system每位队员都要符合;message 里 <player> / {player} = 不符合的人
%player_level% >= 10其他任何一行都当成运算式,对每位队员各代入一次 PlaceholderAPI(没有自定义消息)
  • 前面加 ! = 反过来,例如 !permission dungeon.banned。
  • 人数不符合、条件又没写自己的 message 时,提示语言文件的 start.condition-players({size} = 目前人数)。
  • 详细说明见 条件判断。
提示

一般的门槛(等级、权限、PlaceholderAPI 变量)建议写在 config.yml 的 requirements, 那里每一条都能写自己的消息,而且会和冷却、次数一起列给队长看。before.yml 的 condition 主要是给从 DungeonPlus 搬过来的设置用。

start.yml​

start.yml
# 开始后脚本:倒数结束、正式开始计时时执行
script:
- "objective &f击败前厅卫兵"
- "task start 时间提醒"
- "monstergroup 怪物组1"
键别名说明
scriptaction-script、actions开始后脚本

start.yml 与自动开始的怪物组 / 任务组 / 触发组是同一刻开始的:自动开始的会先启动,接着才跑 start.yml。

与 DungeonPlus 对照​

DungeonPlus 把开头写在 option.yml 里;云副本拆成两个文件,键名照样能读:

DungeonPlus(option.yml)云副本
dungeon-init-scriptbefore.yml 的 script(也可以直接用 dungeon-init-script 这个键)
dungeon-start.conditionbefore.yml 的 condition
dungeon-start.action-scriptstart.yml 的 script(也可以直接用 action-script 这个键)
dungeon-reward-scriptend.yml 的 clear,见 通关组与奖励
$setmap不需要:地图在 config.yml 的 map 设置,开场前就已经贴好
$setspawn / $setting / $revive-setting一样可以写在 before.yml;大部分也能直接在 config.yml 设置

DungeonPlus 进场后马上执行 action-script;云副本多了「before.yml → 倒数」这一段,剧情不会和打怪抢时间。