通关组与奖励 end.yml
end.yml 管副本的结局:通关时执行什么、失败时执行什么、通关发什么奖励。
end.yml
clear:
- "title &6&l通关!||&7评价 {rank} ‧ {elapsed}"
- "message &a恭喜通关霜烬古殿,奖励已发放。"
fail:
- "message &c挑战失败:{reason}"
rewards:
clear:
- name: "&f经验瓶 ×8"
items:
- { material: EXPERIENCE_BOTTLE, amount: 8 }
first-clear:
- name: "&6首通礼:钻石 ×3"
items:
- { material: DIAMOND, amount: 3 }
什么时候算通关、什么时候算失败
| 结局 | 怎么发生 |
|---|---|
| 通关 | 任何脚本执行 clear(通常写在最后一个怪物组的 end);或 end clear、DungeonPlus 的 $end{…;reward=true} |
| 失败 | 见下表 |
失败原因({reason}) | 怎么发生 |
|---|---|
| 时间到 | 超过 config.yml 的 time-limit |
| 全员阵亡 | 所有人都出局(lives.wipe-retries 用完) |
| 「组名」没有在时限内打完 | 怪物组的 time-limit 到了、而且没写 timeout |
| 所有人都离开了 | 全员 /cd leave 或掉线逾时 |
| 全员掉线太久 | 全队掉线超过 disconnect.all-offline-timeout |
| 自己写的文字 | 脚本执行 fail 原因(例如 fail &c水晶被摧毁了) |
| 挑战失败 | 脚本执行 fail 没写原因 |
clear 与 fail 动作见 动作:流程。
clear:通关组
通关的那一刻依序发生:
- 副本进入结算:计时停止、算出评价(
{rank})、清掉所有怪物、停止所有任务、取消所有还在delay的脚本。 - 播放
clear音效。 - 执行
end.yml的clear。 - 每位玩家各自发奖励(见下方)。
- 内建提示:通关大字(
notify.clear-title)、聊天栏结算(notify.clear-summary)、2 秒后打开结算菜单(notify.result-menu)。 - 停留
end-delay秒(默认 20)后全员送回原处。这段时间可以开 宝箱 组 的宝箱,触发组不再生效。
end.yml
clear:
- "title &6&l通关!||&7评价 {rank} ‧ 用时 {elapsed}"
- "sound UI_TOAST_CHALLENGE_COMPLETE 1 1"
- "message &a恭喜通关!王座宝箱的寒冰融化了,记得在结算时间内打开。"
- "broadcast &e{leader} &7的队伍通关了 &b霜烬古殿&7,评价 &6{rank}"
| 键 | 别名 | 说明 |
|---|---|---|
clear | dungeon-reward-script | 通关时执行的脚本(DungeonPlus 的键名也能读) |
- 这里没有触发者;消息类动作默认对副本里所有人。要每个人各做一次(例如
{self}要是自己),用script 名称 @player。 - 可以用
{rank}(评价)、{elapsed}(用时)、{dungeon}、{mode}、{players}等变量,见 变量。
fail:失败组
失败的那一刻:计时停止、清掉所有怪物、停止所有任务、取消所有还在 delay 的脚本 → 播放 fail 音效 → 执行 fail →
ticket.refund-on-fail: true 时退还门票 → 失败大字(notify.fail-title,显示原因)→ 停留 fail-end-delay 秒(默认 8)后送回原处。
end.yml
fail:
- "title &c挑战失败||&7{reason}"
- "message &7别灰心,下次带上更多药水。"
| 变量 | 内容 |
|---|---|
{reason} | 失败原因(见上表),只有 fail 里读得到 |
内建提示
插件默认会显示一些提示,都可以在副本 config.yml 的 notify 关掉,改在 clear / fail 里写自己的:
notify 键 | 默认 | 内容 |
|---|---|---|
clear-title | false | 通关大字(评价与用时) |
clear-summary | false | 通关时聊天栏结算:用时、评价、每人伤害 / 承伤 / 击杀 / 死亡,以及获得的奖励 |
result-menu | true | 通关 2 秒后打开结算菜单(列出获得的奖励) |
fail-title | true | 失败大字(显示 {reason}) |
fail-summary | false | 失败时聊天栏结算 |
默认的效果:通关时没有大字(请自己在 clear 写),只会打开结算菜单;失败时显示失败大字与原因。
所以 clear 里一般会放一个 title,fail 里放不放都可以。全部 notify 见 副本设置。
奖励 rewards
end.yml
rewards:
clear: [] # 通关就给
first-clear: [] # 第一次通关这个副本才给
rank: {} # 依评价给
bonus: [] # 达成额外条件才给
- 奖励在通关时、每位玩家各自计算:每一笔的概率各自掷,所以同一队的人拿到的可能不一样。
- 还在副本里的人都有份,包括已经倒下、出局在旁观的人;中途
/cd leave离开的人没有。 - 通关时掉线中(还在保留时间内)的人:指令与物品会存起来,下次登录时补发;金钱直接存进他的账户。
- 难度模式(
config.yml的modes)里写的rewards也会一起发。 - 用
/cd admin test测试时完全不发奖励(通关、首通、评价、额外条件、难度模式奖励都不发),也不会留下首通记录。
一笔奖励的写法
每一笔可以同时给物品、指令、金钱:
| 键 | 类型 | 默认 | 说明 |
|---|---|---|---|
chance | 0 – 100 | 100 | 概率(%),每个人各自掷 |
name | 文字 | 空 | 结算菜单、结算消息里显示的名称;空 = 不显示(东西照发) |
items | 物品清单 | 空 | 直接给原版物品;背包满了会掉在脚边 |
commands | 指令清单 | 空 | 以控制台身份执行 |
money | 小数 | 0 | 金钱(需要 Vault) |
items 的每一项:
| 键 | 说明 |
|---|---|
material | 物品种类(必填) |
amount | 数量,默认 1 |
name | 物品名称 |
lore | 说明行 |
item-model | 1.21.4+ 物品模型 |
custom-model-data | CustomModelData |
glow | true = 附魔光泽 |
commands 里可以用:
| 变量 | 内容 |
|---|---|
{player} | 玩家名称 |
{uuid} | 玩家 UUID |
{dungeon} | 副本 ID |
{rank} | 这场的评价 |
自定义物品插件(MMOItems、CloudItems……)的道具用 commands 发:
rewards:
clear:
- name: "&b冰晶碎片 ×3"
chance: 100
commands:
- "ci give {player} 冰晶碎片 3"
- name: "&e金币 ×200"
money: 200
- name: "&f经验瓶 ×8"
items:
- { material: EXPERIENCE_BOTTLE, amount: 8 }
- name: "&d稀有:寒冰之心"
chance: 5
commands:
- "mi give MATERIAL FROST_HEART {player} 1"
clear:通关奖励
通关就给(依各自的 chance)。
first-clear:首通奖励
这位玩家第一次通关这个副本才给(不分难度模式):
rewards:
first-clear:
- name: "&6首通礼:钻石 ×3"
items:
- { material: DIAMOND, amount: 3 }
- name: "&6首通称号"
commands:
- "lp user {player} permission set title.frost_conqueror true"
rank 依评价
依这场的评价给,评价的门槛在 config.yml 的 ranks 设置(都没达到是 C)。
只会给刚好那个评价的那一份;想要「A 以上都给」,在 S 与 A 都写上,或用 bonus 的 rank:。
rewards:
rank:
S:
- name: "&dS 评价:附魔金苹果"
items:
- { material: ENCHANTED_GOLDEN_APPLE, amount: 1 }
A:
- name: "&bA 评价:金苹果 ×3"
items:
- { material: GOLDEN_APPLE, amount: 3 }
bonus:额外条件
达成 when 的条件才给,可以写好几笔:
when | 什么时候达成 |
|---|---|
no-death | 整场全队没有人倒下过 |
full-party | 通关时 人数是满的(等于 players.max) |
solo | 单人挑战 |
under:5m | 用时在 5 分钟以内(时间格式同其他地方:90、3m30s……) |
rank:S | 评价是 S |
| 运算式 | 对每位玩家各自判断,例如 %player_level% >= 50。写法同 运算式:可以用 && ||、+ - * /、括号、PlaceholderAPI,以及副本变量({deaths}、{v:名称}……),例如 {deaths} <= 1 && {v:碎片} >= 3 |
| 键 | 说明 |
|---|---|
when | 条件(必填,没写的那一笔会被略过) |
label | 这一笔额外奖励的名称,会显示在发给玩家的奖励清单里(例如「无伤通关」) |
rewards | 奖励清单,写法同上 |
rewards:
bonus:
- when: no-death
label: "无伤通关"
rewards:
- name: "&a无伤奖励:绿宝石 ×5"
items:
- { material: EMERALD, amount: 5 }
- when: "under:5m"
label: "速通"
rewards:
- name: "&e速通奖励:金币 ×500"
money: 500
- when: solo
label: "单人挑战"
rewards:
- name: "&6独行者徽章"
commands:
- "ci give {player} 独行者徽章 1"
- when: "%mmocore_class% == 法师"
label: "法师专属"
rewards:
- name: "&9法力药水"
commands:
- "mi give CONSUMABLE MANA_POTION {player} 2"
发放顺序
每位玩家的奖励依这个顺序合在一起,再一笔一笔掷概率、发放:
rewards.clear- 难度模式的
rewards rewards.first-clear(第一次通关时)rewards.rank里这场评价的那一份rewards.bonus里达成条件的每一笔
完整示例
end.yml
# 通关时执行(没有触发者,消息对所有 人)
clear:
- "title &6&l通关!||&7评价 {rank} ‧ {elapsed}"
- "sound UI_TOAST_CHALLENGE_COMPLETE 1 1"
- "message &a恭喜通关霜烬古殿,奖励已发放。"
- "message &7王座宝箱可以在结算时间内打开。"
# 失败时执行({reason} = 失败原因)
fail:
- "message &c挑战失败:{reason}"
rewards:
clear:
- name: "&f经验瓶 ×8"
items:
- { material: EXPERIENCE_BOTTLE, amount: 8 }
- name: "&b冰晶碎片"
chance: 50
items:
- { material: PRISMARINE_CRYSTALS, amount: 3 }
first-clear:
- name: "&6首通礼:钻石 ×3"
items:
- { material: DIAMOND, amount: 3 }
rank:
S:
- name: "&dS 评价奖励:附魔金苹果"
items:
- { material: ENCHANTED_GOLDEN_APPLE, amount: 1 }
bonus:
- when: no-death
label: "无伤通关"
rewards:
- name: "&a无伤奖励:绿宝石 ×5"
items:
- { material: EMERALD, amount: 5 }
与 DungeonPlus 对照
| DungeonPlus | 云副本 |
|---|---|
option.yml 的 dungeon-reward-script | end.yml 的 clear(dungeon-reward-script 键也能读) |
$end{type=title;text=…;reward=true} | clear($end 原样可用;reward=false = 失败) |
$end{…;end-type=COMPLETE / FAIL} | 同上 |
$command{…;death-player=true} 决定死掉的人要不要给 | 奖励默认就会发给倒下 / 出局的人 |
| 没有失败脚本 | end.yml 的 fail,{reason} 是失败原因 |
| 奖励都要写成指令 | rewards 可以直接给物品、金钱、指令,有概率、首通、评价、无伤等条件,掉线也会补发 |