跳到主要内容

通关组与奖励 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:通关组​

通关的那一刻依序发生:

  1. 副本进入结算:计时停止、算出评价({rank})、清掉所有怪物、停止所有任务、取消所有还在 delay 的脚本。
  2. 播放 clear 音效。
  3. 执行 end.yml 的 clear。
  4. 每位玩家各自发奖励(见下方)。
  5. 内建提示:通关大字(notify.clear-title)、聊天栏结算(notify.clear-summary)、2 秒后打开结算菜单(notify.result-menu)。
  6. 停留 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}"
键别名说明
cleardungeon-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-titlefalse通关大字(评价与用时)
clear-summaryfalse通关时聊天栏结算:用时、评价、每人伤害 / 承伤 / 击杀 / 死亡,以及获得的奖励
result-menutrue通关 2 秒后打开结算菜单(列出获得的奖励)
fail-titletrue失败大字(显示 {reason})
fail-summaryfalse失败时聊天栏结算

默认的效果:通关时没有大字(请自己在 clear 写),只会打开结算菜单;失败时显示失败大字与原因。 所以 clear 里一般会放一个 title,fail 里放不放都可以。全部 notify 见 副本设置。

奖励 rewards​

end.yml
rewards:
clear: [] # 通关就给
first-clear: [] # 第一次通关这个副本才给
rank: {} # 依评价给
bonus: [] # 达成额外条件才给
  • 奖励在通关时、每位玩家各自计算:每一笔的概率各自掷,所以同一队的人拿到的可能不一样。
  • 还在副本里的人都有份,包括已经倒下、出局在旁观的人;中途 /cd leave 离开的人没有。
  • 通关时掉线中(还在保留时间内)的人:指令与物品会存起来,下次登录时补发;金钱直接存进他的账户。
  • 难度模式(config.yml 的 modes)里写的 rewards 也会一起发。
  • 用 /cd admin test 测试时完全不发奖励(通关、首通、评价、额外条件、难度模式奖励都不发),也不会留下首通记录。

一笔奖励的写法​

每一笔可以同时给物品、指令、金钱:

键类型默认说明
chance0 – 100100概率(%),每个人各自掷
name文字空结算菜单、结算消息里显示的名称;空 = 不显示(东西照发)
items物品清单空直接给原版物品;背包满了会掉在脚边
commands指令清单空以控制台身份执行
money小数0金钱(需要 Vault)

items 的每一项:

键说明
material物品种类(必填)
amount数量,默认 1
name物品名称
lore说明行
item-model1.21.4+ 物品模型
custom-model-dataCustomModelData
glowtrue = 附魔光泽

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"

发放顺序​

每位玩家的奖励依这个顺序合在一起,再一笔一笔掷概率、发放:

  1. rewards.clear
  2. 难度模式的 rewards
  3. rewards.first-clear(第一次通关时)
  4. rewards.rank 里这场评价的那一份
  5. 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-scriptend.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 可以直接给物品、金钱、指令,有概率、首通、评价、无伤等条件,掉线也会补发