货币与价格
货币设定
货币在 config.yml 的 currencies,每一段是一种货币,段落名称就是货币 ID(价格里写的 points、money)。
config.yml
currencies:
default: money # 价格只写数字时用的货币
money:
type: vault
name: 金币
format: '{amount} 金币'
decimals: 2
icon: GOLD_INGOT
points:
type: playerpoints
name: 点券
format: '{amount} 点券'
icon: EMERALD
exp:
type: exp
name: 经验等级
format: '{amount} 级经验'
icon: EXPERIENCE_BOTTLE
| 键 | 说明 |
|---|---|
type | 货币类型,见下表 |
name | 名称(管理介面、网页编辑器、云界面余额显示) |
format | 金额显示格式,{amount} 金额、{name} 名称;留空 = {amount} 名称 |
decimals | 小数位(只有 vault 与 placeholder 可设,0 – 4;其他类型一律整数) |
icon | 图示材质(网页编辑器的价格编辑器使用) |
enabled | false = 暂时停用这个货币 |
货币类型
type | 来源 | 说明 |
|---|---|---|
vault | Vault + 任意经济插件 | 默认 2 位小数。经济插件比云商城晚载入也没关系,每次使用时才查找 |
playerpoints | PlayerPoints | 整数 |
exp | 经验等级 | 整数,扣的是等级不是经验值 |
item | 背包里的物品 | 用 item: 指定物品(写法同 物品来源),用同样的 ID 辨认计算数量;整数 |
placeholder | 其他货币插件 | 用 PlaceholderAPI 变量读余额,用指令扣款 / 退款,见下方 |
物品货币
config.yml
currencies:
coin:
type: item
item: 'ci:商城代币' # 也可以写 DIAMOND、mmoitems:MATERIAL:COIN、ce:default:coin ……
name: 代币
format: '{amount} 枚代币'
- 只计算背包主栏位(不含盔甲栏与副手)。插件物品用 ID 辨认,原版物品只认没有自订资料的同材质物品。
- 回收价用物品货币时,付款就是把物品放进背包;放不下时这次出售取消(物品不会被拿走)。
其他货币插件(PlaceholderAPI + 指令)
config.yml
currencies:
gems:
type: placeholder
name: 宝石
format: '{amount} 宝石'
decimals: 0
balance: '%coinsengine_balance_raw_gems%' # 读余额的变量(要输出纯数字)
take: 'coins take {player} gems {amount}' # 扣款指令(控制台执行)
give: 'coins give {player} gems {amount}' # 给钱 / 退款指令
指令可用 {player}、{uuid}、{amount}。需要安装 PlaceholderAPI,且 balance 与 take 都要填。
警告
这种货币靠指令扣款,指令本身无法回报「扣款失败」。云商城会先用变量确认余额足够才执行,但最终是否扣成功取决于那个插件的指令。能用 vault 的货币请优先用 vault。
开服时控制台会列出每种货币的状态:
[CloudShop] 可用货币:money(Vault:EssentialsX Economy)、exp、coin(ci:商城代币)
[CloudShop] 没有安装对应插件、也没有商品使用的货币(不影响使用):points
[CloudShop] 这些货币的插件没有装或还没载入,用到它们的商品暂时不能买卖:gems
- 灰字(INFO):插件没装、但也没有任何商品用它标价,不影响使用,不必处理。
- 黄字(WARN):缺少的是默认货币,或有商品正在用它标价;或商品标价用了
currencies里根本没有设定的货币。这些才需要服主处理。
价格写法
商品的 buy / sell 可以写成:
| 写法 | 意思 |
|---|---|
buy: 100 | 100 默认货币 |
buy: 20 points | 20 点券(也可以写 20points、points 20) |
buy: 500 money + 20 points | 组合价格 |
buy: [500 money, 20 points] | 组合价格(列表写法) |
buy: {money: 500, points: 20} | 组合价格(段落写法) |
buy: {price: 20, currency: points} | 20 点券 |
buy: 0、buy: false、不写 | 不出售(sell 同理 = 不回收) |
价格里写了 config.yml 没有的货币 ID 时,这件商品会提示「货币 xxx 目前无法使用」;在 游戏内管理介面 输入时会直接拒绝。
组合价格

beacon:
slot: 25
item: BEACON
buy: [5000 money, 50 points]
- 购买时每一种都要付:先检查全部余额,再依序扣除;其中一种扣不到,已经扣掉的全部退回,不会只扣一半。
- 回收价也可以是组合价格,卖出时每一种货币都会给。
- 商品说明显示「5,000 金币 + 50 点券」。
- 出售箱与一键卖出 比较不同商店的回收价时,用的是第一种货币的金额。
小数与四舍五入
- 每种货币依自己的
decimals四舍五入:金币默认 2 位,点券、经验、物品一律整数。 - 折扣、动态价格算出来的价格先四舍五入成「一份」的价格,再乘以份数。
- 整数货币打折后不会变成 0:至少 1(有小数的货币至少 0.01)。例如 1 点券打五折仍然是 1 点券。
- 金额显示时加千分位(
5,000 金币)。
余额显示
菜单文字里可以写 {balance_<货币ID>} 显示玩家余额,例如主菜单的钱包:
menu.yml
balance:
slot: 4
icon:
material: GOLD_INGOT
name: '&6我的钱包'
lore:
- '&7金币:&f{balance_money}'
- '&7点券:&f{balance_points}'
PlaceholderAPI 变量 %cloudshop_balance_<货币ID>% 输出纯数字,见 变量。