跳到主要内容

结算与奖励 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 finishrewards.clear(含首通、评价、加成、难度模式奖励)+ rewards.end不退
撤退成功无限层走进撤退之门;或无限层的 rogue finishrewards.retreat + rewards.end不退
挑战失败有限层团灭、时间到、所有人离开、脚本 failrewards.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 可以关掉):突破几层、清除几间房、评价、时间、种子、你拿到的奖励、你的祝福、每位队员的伤害 / 击杀 / 死亡 / 赚到的魂晶。
  • 「再挑战一次」:只有队长能按,按了之后全队回去时自动用同一个模式重新开始;「立即返回」不用等结算倒数。

通关时间排行、通关次数只有「通关」才算;层数记录与无限层的层数排行榜见 排行榜与个人最佳。