跳到主要内容

货币与价格

货币设定​

货币在 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图示材质(网页编辑器的价格编辑器使用)
enabledfalse = 暂时停用这个货币

货币类型​

type来源说明
vaultVault + 任意经济插件默认 2 位小数。经济插件比云商城晚载入也没关系,每次使用时才查找
playerpointsPlayerPoints整数
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: 100100 默认货币
buy: 20 points20 点券(也可以写 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 目前无法使用」;在 游戏内管理介面 输入时会直接拒绝。

组合价格​

信标:5000 金币 + 50 点券,每周限购

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>% 输出纯数字,见 变量。