跳到主要内容

商店 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 }

商店设置​

键默认说明
slots6每间店摆几样(不重复,照商品的 weight 抽)
stockpersonalpersonal:每个人看到自己的一份货、各自的库存;shared:全队共用一份,先买先得
currencyrun商品没写 currency 时的付款方式,见 付款方式
refresh-cost20重新摆货的价格;0 = 不能刷新
refresh-cost-step10每刷新一次,下一次再贵多少
price-per-floor10每往下一层,价格 +这个 %
discount-chance15每一格商品有这个 % 概率特价
discount30特价打掉几 %(30 = 七折)
confirm-above50价格 ≥ 这个数要点两下才买(防误点)

价格 = 商品的 price × (1 + price-per-floor% × (层数 − 1)) ×(特价时 1 − discount%),四舍五入、最少 0。

刷新的价格 = refresh-cost + refresh-cost-step × 已经刷新过的次数(每人各算;shared 时全队一起算)。

商品​

键默认说明
name商品 ID显示名称
iconPAPER商品的物品
description空说明文字
price0价格,可以写运算式,见下方
currency商店的 currency这一样商品的付款方式
weight10被摆出来的权重;0 = 不会出现
stock1每间店这一样有几个(买完显示「已售完」)
max-per-run0每人每场最多买几次(跨所有商店房),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 都用同一组效果,可以混着写,依下面的顺序套用在买的人 / 选的人身上:

键默认效果
heal0回复最大生命的这个 %(0~100,可以写 50 或 "50%")
revive-deadfalse正在等复活、已经出局的队友全部站起来
card无给一张祝福,写法见 祝福的写法
rerolls0多几次免费重抽
upgrade0打开「选一张祝福 +1 层」的菜单,选几次
remove-curse0打开「选一张诅咒」的菜单,每选一次那张诅咒 −1 层;写几就能选几次(叠了 3 层的诅咒要 3 次才会整张消失)
coins0给多少魂晶(负数 = 扣)
lives0加几条命(负数 = 扣)
items无给物品,物品区块清单,例如 [{ material: DIAMOND, amount: 1 }]
boundtrue给的物品加上「副本绑定」说明(主配置 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:左边是商品清单,右边是详情(价格、剩余、每场限购、付款方式),下面是购买与刷新按钮;同一场的商店画面会一起更新。