结算与奖励 end.yml
随机地牢的奖励分两个地方写:
- 根目录的
end.yml:整场的结算(通关、每打完一层、里程碑、撤退、每场结束)。 - 房间的
end.yml:这间房清除时执行的脚本与每人一份的奖励。
根目录 end.yml
end.yml
# 有限层全部打完、或无限层撤退时执行
# (这里的 {floors} = 总层数,无限层 = ∞;打完了几层用 {floors_cleared})
clear:
- "title &6深渊征服者||&7通过 {floors_cleared} 层"
# 团灭 / 时间到({reason} 失败原因、{floor} 倒在第几层)
fail:
- "message &c挑战失败:{reason} &7(倒在第 {floor} 层)"
rewards:
# 有限层全部打完(和一般副本一样:clear + first-clear + rank + bonus + 难度模式的 rewards)
clear:
- name: "&b钻石 ×3"
items:
- { material: DIAMOND, amount: 3 }
# 每打完一层发一次
floor-clear:
- name: "&f经验瓶 ×4"
items:
- { material: EXPERIENCE_BOTTLE, amount: 4 }
# 这一场第一次打完第 N 层时发(无限层的主要奖励)
milestone:
"5":
- name: "&b深渊纪念:钻石 ×2"
items:
- { material: DIAMOND, amount: 2 }
"10":
- name: "&e深渊之星:下界之星"
items:
- { material: NETHER_STAR, amount: 1 }
# 无限层选择撤退时额外给
retreat: []
# 每场结束都发;失败时看 config.yml 的 roguelike.end-rewards-on-fail
end: []
| 键 | 什么时候 |
|---|---|
clear | 脚本:整场赢了(有限层打完最后一层的首领、无限层撤退、rogue finish) |
fail | 脚本:整场输了(团灭、时间到、所有人离开、脚本 fail),可以用 {reason} |
rewards.clear | 有限层通关。一般副本的 rewards.first-clear、rewards.rank、rewards.bonus 与难度模式的 rewards 也照常一起发,见 通关组与奖励 |
rewards.floor-clear | 每打完一层,每位队员各发一份 |
rewards.milestone."N" | 这一场打完第 N 层时发一次 |
rewards.retreat | 无限层走进撤退之门时额外给 |
rewards.end | 每场结束都发(通关、撤退都发;失败与无限层结束时 roguelike.end-rewards-on-fail: true 才发) |
每一项奖励的写法和一般副本的 奖励 一样(name、items、commands、money……)。commands 里可以用 {player}、{uuid}、{dungeon}、{rank}。
rewards.floor-clear、rewards.milestone、rewards.retreat、rewards.end,以及房间 end.yml 的 rewards.clear,在 name 与 commands 里另外还能用:
| 变量 | 内容 |
|---|---|
{floor} | 目前是第几层 |
{floors} | 打完了几层 |
{rooms} | 清除了几间房 |
{coins} | 这位队员目前的魂晶 |
这张表只对上面几种奖励有效
- 根目录的
rewards.clear(以及一起发的first-clear、rank、bonus、难度模式的rewards)不支持这几个变量,写了会照原样留下。 - 这张表的
{floors}是「打完了几层」,只在奖励的name/commands里是这个意思。clear/fail脚本里的{floors}是总层数(无限层 =∞),打完的层数请用{floors_cleared}。
rewards:
end:
- name: "&e深渊积分 ×{floors}"
commands:
- "points give {player} {floors}"
/cd admin test 的测试场不发任何奖励(房间奖励、每层奖励、里程碑、结算奖励都不发)。
房间的 end.yml
rooms/elite_knight/end.yml
clear:
- "sound UI_TOAST_CHALLENGE_COMPLETE 1 1.4"
rewards:
clear:
- name: "&f经验瓶 ×2"
items:
- { material: EXPERIENCE_BOTTLE, amount: 2 }
clear::这间房清除时执行。rewards.clear:这间房清除时,每位队员各发一份。- 房间的
end.yml只读这两个;fail、first-clear、rank、bonus写在房间里不会用到(后台会提示)。
五种结果
| 结果 | 怎么发生 | 发什么 | 门票 |
|---|---|---|---|
| 通关 | 有限层打完最后一层的首领;或 rogue finish、/cd admin rogue finish | rewards.clear(含首通、评价、加成、难度模式奖励)+ rewards.end | 不退 |
| 撤退成功 | 无限层走进撤退之门;或无限层的 rogue finish | rewards.retreat + rewards.end | 不退 |
| 挑战失败 | 有限层团灭、时间到、所有人离开、脚本 fail | rewards.end(end-rewards-on-fail: true 时) | 还没打完 keep-after-floor 层,而且副本设了 ticket.refund-on-fail 才退 |
| 挑战结束 | 无限层的任何失败:团灭、时间到、所有人离开、脚本 fail(一样记下打到第几层) | 同挑战失败 | 同挑战失败 |
| 停止 | 管理员 /cd admin instance stop、停服 | 不发 | 还没打完 keep-after-floor 层才退 |
不管哪种结果,每层奖励与里程碑在打完那一层的当下就已经发了,不会收回。剩下的魂晶在结束时照 currency.convert-to-money 换成金钱。
评价
- 有限层通关:照通关时间,和一般副本的
ranks一样。时间只算在房间里的时间,选祝福、换房间的时间不算。 - 无限层(撤退或结束):照打完的层数,
roguelike.ranks-by-floor(默认 30 层 S、20 层 A、10 层 B,其他 C)。
结算画面
- 大标题:撤退成功 / 挑战失败 / 挑战结束默认会显示;无限层刷新个人最高层数时显示「新纪录!」并播放
new-record音效。 - 有限层通关的内置大标题(
title.clear)和一般副本一样默认不显示(notify.clear-title默认false),通关标题请写在end.yml的clear(范例就是这样);要用内置的就设notify.clear-title: true。 - 约 2 秒后打开结算菜单(
gui/rogue_result.yml,副本notify.result-menu可以关掉):突破几层、清除几间房、评价、时间、种子、你拿到的奖励、你的祝福、每位队员的伤害 / 击杀 / 死亡 / 赚到的魂晶。 - 「再挑战一次」:只有队长能按,按了之后全队回去时自动用同一个模式重新开始;「立即返回」不用等结算倒数。
通关时间排行、通关次数只有「通关」才算;层数记录与无限层的层数排行榜见 排行榜与个人最佳。