祝福卡 cards.yml
祝福是这一场限定的强化:首领、精英打完从几张里选一张,一直带到这场结束。同一张可以叠好几层,效果照层数相加。离开副本时全部自动移除,不会带出去。
cards.yml 是选用的:没有这个文件时使用内置的 16 张祝福(就是范例「深渊回廊」那一份,validate 会显示一行提示)。
draft:
choices: 3 # 每次给几张选
when: [boss, elite] # 什么时候选:boss 每层首领打完 / elite 精英房打完 / start 起点房(开场先选一张)
picker: each # each 每人各选 / leader 队长帮全队选 / vote 全队投票(卡片给每个人)
timeout: 40s # 时间到自动帮还没选的人选
auto: random # 超时:random 随机一张 / first 第一张 / skip 不拿(改拿 skip-coins)
rerolls: 1 # 每场每人免费重抽次数
reroll-cost: 15 # 免费次数用完后,每次重抽要多少魂晶(每次再加 reroll-cost-step)
reroll-cost-step: 5
skip-coins: 10 # 略过不拿卡,改拿魂晶
boss-min-rarity: rare # 首领后的选项里至少一张这个稀有度以上(空白 = 不保证)
confirm-click: false # true = 点两下才确定
rarities: # 由低到高(顺序就是稀有度高低)
common: { name: "&f普通", color: "&f", weight: 70, material: PAPER }
rare: { name: "&9稀有", color: "&9", weight: 24, per-floor: 1, material: BOOK }
epic: { name: "&5史诗", color: "&5", weight: 5, per-floor: 0.5, material: ENCHANTED_BOOK, glow: true }
legendary: { name: "&6传说", color: "&6", weight: 1, per-floor: 0.2, material: NETHER_STAR, glow: true }
curse: { name: "&4诅咒", color: "&4", weight: 0, material: FERMENTED_SPIDER_EYE } # 0 = 选卡不会出现,只能由事件 / 脚本给
cards:
sharp_blade:
name: "&c锋利之刃"
rarity: common
weight: 10
max-stacks: 5
icon: { material: IRON_SWORD }
description: ["&7造成的伤害 &c+8%", "&8(目前 {stacks} 层)"]
stats: { damage: 8 }
选祝福 draft
| 键 | 默认 | 说明 |
|---|---|---|
choices | 3 | 每次给几张选,1~3 |
when | [boss, elite] | 什么时候全队选一次:boss 每层首领打完、elite 精英房打完、start 起点房(开场先选一张)。[] = 只有宝藏房、商店、脚本给 |
picker | each | each(每人)每人一组选项各选各的;leader(队长)全队一组,队长选的卡每个人都拿到;vote(投票)全队一组投票,票最多的卡每个人都拿到(平手看队长) |
timeout | 40s | 时间到还没选的人照 auto 自动处理 |
auto | random | 超时怎么处理:random 随机一张 / first 第一张 / skip 不拿(改拿 skip-coins) |
rerolls | 1 | 每场每人免费重抽几次 |
reroll-cost | 15 | 免费次数用完后,重抽一次要多少魂晶 |
reroll-cost-step | 5 | 每付费重抽一次,下一次再贵多少 |
skip-coins | 10 | 略过不拿祝福时改拿多少魂晶 |
boss-min-rarity | rare | 首领打完的选项里至少一张这个稀有度以上;空白 = 不保证(没有 rare 这个稀有度时默认空白) |
confirm-click | false | true = 同一张要点两下才确定 |
选祝福的时候:
- 出现大标题「✦ 选择祝福」与聊天按钮,约 1 秒后自动打开菜单(装了云界面 CloudUI 会用云界面画面)。场上还有怪的时候只发聊天按钮,不会突然打开菜单挡住视线。
- 关掉菜单也没关系:输入
/cd card(或点聊天按钮)重新打开。也可以直接/cd card pick <1-3>、/cd card reroll、/cd card skip。 - 全队一起选(首领、精英、起点)的时候门会等大家选完才出现,这段时间不算进时间、倒下也不扣命;宝藏房的个人选祝福不会挡住门。
- 重抽:先用免费次数(
rerolls+ 商店重抽券 + 脚本给的,有权限clouddungeon.rogue.extra-reroll的人每场再多 1 次),用完后每次reroll-cost + reroll-cost-step × 已付费次数。重抽出来的三张不会和刚才的重复。 - 掉线的人到时间会照
auto自动处理;重新连线时如果还没选,会重新打开菜单。 - 没有任何能选的祝福时(例如全部叠满了),直接改拿
skip-coins。
稀有度 rarities
| 键 | 说明 |
|---|---|
name | 稀有度名称(菜单上显示) |
color | 卡片名称前面的颜色 |
weight | 抽中这个稀有度的权重;0 = 选卡时不会出现,只能由脚本、事件、商店指定给 |
per-floor | 每往下一层权重再加多少(越深越容易抽到高稀有度) |
material | 这个稀有度的卡默认用的物品 |
glow | 默认发光 |
稀有度高低 = 文件里的顺序(越后面越稀有),random:rare+、boss-min-rarity 都照这个顺序判断。没有写 rarities: 时用上面那五个。每张卡的稀有度音效是 card-<稀有度>(没有设置就用 card-common)。
抽卡方式:每一格先照「稀有度权重 + per-floor × (层数 − 1)」抽一个稀有度,再在那个稀有度里照卡片的 weight 抽一张,同一次选项里不会重复。
每张祝福的设置
cards:
berserker:
name: "&4狂战士"
rarity: rare
weight: 10 # 同稀有度之间的权重
max-stacks: 2 # 最多叠几层
icon: { material: NETHERITE_AXE }
description: ["&7造成的伤害 &c+20%", "&7最大生命 &4-2 ❤", "&8(目前 {stacks} 层)"]
floors: all # 第几层起会出现:1-5 / 3+ / all
pools: [main] # main = 一般选卡;也可以自定义(card draft pool=…)
requires: [] # 出现条件(脚本条件写法,对象 = 选卡的人)
exclusive: [iron_skin] # 有这些卡就不会出现
tags: [] # curse 标签 = 诅咒(净化可以移除)
stats: { damage: 20 }
attributes: [{ attribute: max_health, amount: -4, operation: add }]
potions: [] # 例:["SPEED:1"]
potion-level-per-stack: false
on-pick: [] # 选到时执行(对象 = 选卡的人)
on-room-enter: []
on-room-clear: []
on-floor-start: []
on-kill: [] # 击杀时执行({mob} = 怪物 ID)
on-remove: [] # 失去这张卡或离开副本时
undo-commands: [] # 选卡时给了「副本外也有效」的东西:这里写还原用的控制台指令
| 键 | 默认 | 说明 |
|---|---|---|
name | 卡片 ID | 显示名称 |
rarity | rarities 的第一个 | 稀有度 ID;写错 = 提示并改用第一个 |
weight | 10 | 同稀有度之间的权重;0 = 不会被抽到 |
max-stacks | 1 | 最多叠几层;叠满的卡不会再出现在选项里 |
icon | 稀有度的物品 | 卡片的物品(稀有度有 glow 时默认发光) |
description | 空 | 说明文字,{stacks} = 目前层数 |
floors | all | 第几层才会出现:1-5、3+、all |
pools | [main] | 属于哪些卡池。一般选祝福只抽 main;自定义的卡池给脚本 card draft pool=<卡池> 或 random:pool=<卡池> 用 |
requires | 空 | 出现条件,脚本条件写法,例如 ["{floor} >= 2"]、["card sharp_blade 3"] |
exclusive | 空 | 已经有这些卡(卡片 ID)就不会出现 |
tags | 空 | 标签;有 curse 标签(或稀有度是 curse)的卡算诅咒 |
stats | 无 | 数值(每层的量),见下表 |
attributes | 无 | 属性加成(每层的量),见下方 |
potions | 无 | 一直有效的药水效果,写成 SPEED:1 |
potion-level-per-stack | false | true = 每多一层,药水再高一级 |
on-pick 等 | 空 | 脚本,见 祝福的脚本 |
undo-commands | 空 | 还原用的控制台指令,见 还原指令 |
数值 stats
每层的量,叠几层就乘几倍;多张卡的同一种数值会加总。
| 键 | 单位 | 效果 | 上下限 |
|---|---|---|---|
damage | % | 打副本怪物的伤害加成(可以是负数) | 合计最少 −90% |
defense | % | 受到副本怪物的伤害减少 | 合计 0~80% |
lifesteal | % | 造成伤害的这个比例转成自己的生命 | 合计最多 100% |
crit-chance | % | 暴击概率 | 合计 0~100% |
crit-damage | % | 暴击时的伤害倍率 = 1.5 + 这个值 | — |
coin-gain | % | 获得的魂晶增加 | — |
heal-on-kill | 生命点数 | 每击杀一只怪回复(2 = 1 颗心) | — |
heal-on-clear | 生命点数 | 每清除一间房回复 | — |
thorns | % | 被副本怪物打到时,把这个比例的伤害反弹给它 | — |
damage、defense、暴击、吸血、荆棘只作用在副本里的怪物与直接攻击(近战、弹射物、宠物)上,不影响玩家之间、也不影响环境伤害。
属性 attributes
attributes:
- { attribute: max_health, amount: 4, operation: add } # 最大生命 +4(2 颗心)
- { attribute: attack_speed, amount: 0.1, operation: scalar } # 攻击速度 +10%
| 键 | 说明 |
|---|---|
attribute | max_health、movement_speed、attack_damage、attack_speed、armor、armor_toughness、knockback_resistance、luck(前面加不加 generic. 都可以) |
amount | 每层的量 |
operation | add(加数值,默认)/ scalar(加百分比)/ multiply(乘) |
属性加成是暂时的:不会写进玩家数据,离开副本、掉线时移除,当机也不会残留。最大生命变少时血量会跟着降到上限,变多时不会自动补血。
药水 potions
写成 效果:等级,例如 ["SPEED:1", "NIGHT_VISION:1"]。药水在副本里一直有效(每几秒自动续上,喝牛奶也会补回来),离开副本时移除,当机的话最多残留约 30 秒;房间本身给的同种药水不受影响。
诅咒
- 稀有度是
curse,或tags有curse的卡就是诅咒。 - 内置的
curse稀有度权重是0:一般选祝福不会出现,要由事件、脚本给(例如card give random:curse @self)。 - 休息处的「净化」、商店的「净化」商品、脚本
card remove curse都能移除诅咒。净化每次是选一张诅咒拿掉 1 层:叠了 3 层的诅咒要净化 3 次才会整张消失。 {curses}变量 = 诅咒的总层数(一张叠了 3 层的诅咒算 3),常用在条件里(requires: ["{curses} >= 1"])。
祝福的脚本
| 键 | 什么时候执行(每位拥有这张卡的人各执行一次) |
|---|---|
on-pick | 选到(或拿到)这张卡时 |
on-room-enter | 每次进入新房间 |
on-room-clear | 每次房间清除 |
on-floor-start | 每层开始 |
on-kill | 自己击杀副本怪物时({mob} = 怪物 ID) |
on-remove | 失去这张卡,或离开副本时 |
脚本的对象(@self)是拥有这张卡的人,可以用 {card}(卡片 ID)、{stacks}(层数)、{rarity}(稀有度)。祝福的脚本整场有效,换房间不会中断。
second_life:
name: "&d第二条命"
rarity: epic
max-stacks: 1
description: ["&7选到时立刻多 1 条生命", "&8第 2 层以后才会出现"]
requires: ["{floor} >= 2"]
on-pick: ["lives +1 @self"]
还原指令 undo-commands
如果 on-pick 给了「副本外也有效」的东西(例如用控制台指令给权限、称号),在 undo-commands 写还原用的控制台指令(可以用 {player}、{uuid}):
on-pick: ["console lp user {player} permission set vip.fly true"]
undo-commands: ["lp user {player} permission unset vip.fly"]
离开副本、这张卡被移除时执行;就算服务器当机,玩家下次登录时也会补执行。
祝福的写法
| 写法 | 意思 |
|---|---|
sharp_blade | 指定那张卡 |
random | 一般卡池(main)随机一张 |
random:rare | 那个稀有度随机一张 |
random:rare+ | 那个稀有度以上随机一张 |
random:tag=fire | 有这个标签的卡随机一张 |
random:pool=boss | 那个卡池随机一张 |
随机的只会抽到这位玩家这一层拿得到的卡(floors 符合、没叠满、没有互斥、requires 成立)。
内置的 16 张祝福
没有 cards.yml 时使用这一份(/cd admin create --roguelike 建立的 cards.yml 也是这一份):
| 卡片 | 稀有度 | 每层效果 | 最多层 |
|---|---|---|---|
sharp_blade 锋利之刃 | 普通 | 伤害 +8% | 5 |
iron_skin 铁皮 | 普通 | 受到伤害 −6%(和狂战士互斥) | 5 |
swift 迅捷 | 普通 | 速度(每层再快一级) | 2 |
vitality 活力 | 普通 | 最大生命 +2 ❤ | 3 |
greed 贪婪 | 普通 | 魂晶 +25% | 3 |
quick_hands 快手 | 普通 | 攻击速度 +10% | 3 |
berserker 狂战士 | 稀有 | 伤害 +20%、最大生命 −2 ❤(和铁皮互斥) | 2 |
soul_reaper 灵魂收割 | 稀有 | 每击杀回复 1 ❤ | 3 |
thorn_armor 荆棘甲 | 稀有 | 反弹 20% 伤害 | 3 |
keen_eye 锐眼 | 稀有 | 暴击率 +10%、暴击伤害 +25% | 3 |
mender 愈合 | 稀有 | 每清除一间房回复 3 ❤ | 2 |
vampire_fang 吸血獠牙 | 史诗 | 吸血 5% | 2 |
second_life 第二条命 | 史诗 | 选到时多 1 条生命(第 2 层起出现) | 1 |
undying_will 不屈意志 | 传说 | 受到伤害 −20%、最大生命 +4 ❤ | 1 |
weak_curse 虚弱诅咒 | 诅咒 | 伤害 −15% | 3 |
frail_curse 脆弱诅咒 | 诅咒 | 最大生命 −2 ❤ | 3 |
菜单
- 箱子菜单:
plugins/CloudDungeon/gui/draft.yml(选祝福)、gui/cards.yml(我的祝福,也用在淬炼 / 净化选卡),见 菜单与界面。 - 装了云界面 CloudUI 时,选祝福改用云界面画面
clouddungeon_draft。 - 随时查看自己的祝福:
/cd cards(或/cd card list)、副本内菜单的「我的祝福」、/cd run。