商店 shop.yml
商店房每次进去,会从 shop.yml 的商品里照权重抽几样摆出来。价格随楼层上涨,偶尔特价。
shop.yml 是选用的:没有这个文件时使用内置的 8 样商品(就是范例「深渊回廊」那一份)。
shop.yml
slots: 6 # 每间商店摆几样
stock: personal # personal 每人看到自己的一份 / shared 全队共用库存
currency: run # 默认付款:run(魂晶)/ vault(服务器金钱,需要 Vault)/ ticket:<门票ID>
refresh-cost: 20 # 花多少重新摆货(0 = 不能刷新)
refresh-cost-step: 10 # 每刷新一次再贵多少
price-per-floor: 10 # 每往下一层价格 +10%
discount-chance: 15 # 每样商品 15% 概率特价
discount: 30 # 特价打几 %(30 = 七折)
confirm-above: 50 # 价格 ≥ 50 要点两下确认
goods:
potion: { name: "&a回复药水", icon: { material: POTION }, price: 15, weight: 30, stock: 2, description: ["&7立刻回复 50% 生命"], actions: ["rogue heal 50% @self"] }
card: { name: "&f随机祝福", icon: { material: PAPER }, price: 40, weight: 20, description: ["&7随机获得一张祝福"], card: random }
rare: { name: "&9稀有祝福", icon: { material: BOOK }, price: "60 + 5 * {floor}", weight: 10, description: ["&7获得一张稀有以上的祝福"], card: "random:rare+" }
life: { name: "&c额外生命", icon: { material: TOTEM_OF_UNDYING }, price: 60, weight: 8, max-per-run: 2, description: ["&7多 1 条生命", "&8每场最多买 2 次"], actions: ["lives +1 @self"] }
reroll: { name: "&e重抽券", icon: { material: ENDER_EYE }, price: 20, weight: 10, description: ["&7选祝福时多 1 次免费重抽"], rerolls: 1 }
cleanse: { name: "&b净化", icon: { material: MILK_BUCKET }, price: 30, weight: 8, description: ["&7移除一个诅咒"], remove-curse: 1, requires: ["{curses} >= 1"] }
temper: { name: "&6淬炼", icon: { material: ANVIL }, price: 45, weight: 8, description: ["&7选一张祝福 +1 层"], upgrade: 1 }
diamond: { name: "&b钻石", icon: { material: DIAMOND }, price: 500, currency: vault, weight: 3, description: ["&7用服务器金钱购买,带得出副本"], items: [{ material: DIAMOND, amount: 1 }], bound: false }
商店设置
| 键 | 默认 | 说明 |
|---|---|---|
slots | 6 | 每间店摆几样(不重复,照商品的 weight 抽) |
stock | personal | personal:每个人看到自己的一份货、各自的库存;shared:全队共用一份,先买先得 |
currency | run | 商品没写 currency 时的付款方式,见 付款方式 |
refresh-cost | 20 | 重新摆货的价格;0 = 不能刷新 |
refresh-cost-step | 10 | 每刷新一次,下一次再贵多少 |
price-per-floor | 10 | 每往下一层,价格 +这个 % |
discount-chance | 15 | 每一格商品有这个 % 概率特价 |
discount | 30 | 特价打掉几 %(30 = 七折) |
confirm-above | 50 | 价格 ≥ 这个数要点两下才买(防误点) |
价格 = 商品的 price × (1 + price-per-floor% × (层数 − 1)) ×(特价时 1 − discount%),四舍五入、最少 0。
刷新的价格 = refresh-cost + refresh-cost-step × 已经刷新过的次数(每人各算;shared 时全队一起算)。
商品
| 键 | 默认 | 说明 |
|---|---|---|
name | 商品 ID | 显示名称 |
icon | PAPER | 商品的物品 |
description | 空 | 说明文字 |
price | 0 | 价格,可以写运算式,见下方 |
currency | 商店的 currency | 这一样商品的付款方式 |
weight | 10 | 被摆出来的权重;0 = 不会出现 |
stock | 1 | 每间店这一样有几个(买完显示「已售完」) |
max-per-run | 0 | 每人每场最多买几次(跨所有商店房),0 = 不限 |
requires | 空 | 出现条件(脚本条件写法,对象 = 看商店的人),例如 ["{curses} >= 1"] |
| 效果 | — | 买了之后发生什么,见 效果区块 |
price 的运算式可以用 {floor}(第几层)、{floors}(总层数,无限层 = -1)、{players}(在场人数)、{room_index}(这一层的第几间):
rare: { name: "&9稀有祝福", price: "60 + 5 * {floor}", card: "random:rare+" }
运算式在读取时会先试算一次,算不出数字的商品会被略过(后台提示)。
付款方式
| 写法 | 付什么 |
|---|---|
run | 这一场的魂晶(默认) |
vault | 服务器金钱(需要 Vault + 经济插件)。服务器没有经济插件时,这种商品不会出现,validate 会提醒 |
ticket:<门票ID> | 背包里的门票(tickets.yml 的 ID),price = 要几张 |
买东西
- 打开商店:右键商人、点进房间时聊天栏的按钮、
/cd shop(只有在商店房里能用)。脚本shop open在任何房间都能打开(摆这一层的货,换房间就丢掉)。 - **点一下买一个,按住 Shift 点一下一直买到卖完(或钱不够)。**价格 ≥
confirm-above时要点第二下确认。 - 买了但效果一个都没生效(例如那张祝福已经叠满、没有能淬炼的祝福)会自动退钱。
- 买到东西时会触发
shop-buy(可以在trigger.yml指定商品),见 触发种类。
效果区块
商店商品、休息处与事件房的选项、宝藏房的 reward.effects 都用同一组效果,可以混着写,依下面的顺序套用在买的人 / 选的人身上:
| 键 | 默认 | 效果 |
|---|---|---|
heal | 0 | 回复最大生命的这个 %(0~100,可以写 50 或 "50%") |
revive-dead | false | 正在等复活、已经出局的队友全部站起来 |
card | 无 | 给一张祝福,写法见 祝福的写法 |
rerolls | 0 | 多几次免费重抽 |
upgrade | 0 | 打开「选一张祝福 +1 层」的菜单,选几次 |
remove-curse | 0 | 打开「选一张诅咒」的菜单,每选一次那张诅咒 −1 层;写几就能选几次(叠了 3 层的诅咒要 3 次才会整张消失) |
coins | 0 | 给多少魂晶(负数 = 扣) |
lives | 0 | 加几条命(负数 = 扣) |
items | 无 | 给物品,物品区块清单,例如 [{ material: DIAMOND, amount: 1 }] |
bound | true | 给的物品加上「副本绑定」说明(主配置 rules.bound-item-lore),离开副本时收回;false = 带得出去 |
actions | 无 | 脚本(对象 = 买的人 / 选的人),例如 ["rogue heal 50% @self"] |
商品的 actions 整场有效;休息处、事件选项与宝藏房的 actions 只在那间房里有效。
内置的 8 样商品
| 商品 | 价格 | 付款 | 效果 |
|---|---|---|---|
potion 回复药水 | 15 | 魂晶 | 回复 50% 生命(每间店 2 个) |
card 随机祝福 | 40 | 魂晶 | 随机一张祝福 |
rare 稀有祝福 | 60 + 5 × 层数 | 魂晶 | 一张稀有以上的祝福 |
life 额外生命 | 60 | 魂晶 | 多 1 条生命(每场最多 2 次) |
reroll 重抽券 | 20 | 魂晶 | 多 1 次免费重抽 |
cleanse 净化 | 30 | 魂晶 | 选一张诅咒 −1 层(有诅咒才会出现) |
temper 淬炼 | 45 | 魂晶 | 选一张祝福 +1 层 |
diamond 钻石 | 500 | 服务器金钱 | 1 颗钻石,带得出副本 |
价格都还会再照 price-per-floor 随楼层上涨。
菜单
- 箱子菜单:
plugins/CloudDungeon/gui/shop.yml,见 菜单与界面。 - 装了云界面 CloudUI 时改用云界面画面
clouddungeon_shop:左边是商品清单,右边是详情(价格、剩余、每场限购、付款方式),下面是购买与刷新按钮;同一场的商店画面会一起更新。