跳到主要内容

货币

星月市集可以同时开放好几种货币,玩家上架时自己选(上架菜单的 货币 按钮,或指令最后加货币 ID)。每件商品只用一种货币,买家用同一种货币付款。

设定​

currencies:
default: money
money:
type: vault
name: '金币'
format: '<gold>{amount}</gold> 金币'
decimals: 2
icon: GOLD_INGOT
points:
type: playerpoints
name: '点券'
format: '<aqua>{amount}</aqua> 点券'
icon: EMERALD
diamond:
enabled: false
type: item
name: '钻石'
material: DIAMOND
format: '<aqua>{amount}</aqua> 钻石'

currencies 下面每一段是一种货币,段名就是货币 ID(money、points、diamond),用在指令、price-range、price-limits 与变量里。default 是默认货币。

键默认作用
typevault货币类型,见下表
name货币 ID名称(上架菜单、提示里显示)
format{amount} 名称金额的显示格式。{amount} = 数字(千位加逗号),{name} = 名称。支持颜色与 MiniMessage
decimals2小数位数(0 ~ 4),只有 vault 使用;其他类型一律是整数
icon依类型这种货币的图示(1.0.x 的领取箱菜单使用;1.1.0 起货币随邮件寄出,由星月邮箱显示)
permission空有这个权限才能用这种货币上架(空 = 所有人)。没有权限时提示「你不能用这种货币交易」;购买与出价不受影响
enabledtruefalse = 停用这种货币
materialDIAMONDtype: item 用:物品 ID
item空type: item 用:完整物品数据(Base64),由 /sa currencyitem 自动写入。有写时优先于 material

货币类型​

type是什么需要小数单笔上限
vault金币(Vault 经济)Vault + 任一经济插件decimals 位10,000,000,000,000(10 万亿)
playerpoints(或 points)点券PlayerPoints 3.x整数2,147,483,647
item物品当货币:在背包里数,付款时扣物品无整数2,147,483,647
exp(或 level、levels)经验等级无整数2,147,483,647

开服时控制台会列出「可用货币」;对应插件没装(或还没载入)的货币会列在「这些货币的插件没有装或还没载入,暂时不能用」,这时:

  • 不能用这种货币上架、购买、出价(提示「这种货币现在不能用(服务器没有装对应的插件)」)。
  • 已经上架的商品照常显示;要寄出的这种货币先留在待寄清单,等能用的子服寄出(邮件里的金币 / 点券也要在装了插件的子服才领得到)。

默认货币不能用时,自动改用第一种能用的货币。

单笔金额上限​

每一笔金额(一口价的整批总价、起拍价、一口价、保留价、出价、收购单的总预付、改价后的总价、每次购买的花费)都不能超过货币的单笔上限,超过时提示「金额太大了」,不会成交。

  • 整数货币(点券、物品、经验)的上限是 2147483647:这是这些插件与游戏本身能处理的最大整数,超过就会溢出成负数。
  • 金币的上限是 10 万亿,足够任何服务器使用,同时避免小数运算失准。
  • 金额也必须大于 0,NaN、Infinity 这类输入一律视为价格不正确。

小数与四舍五入​

  • 金币按 decimals 四舍五入(默认两位:23.4375 → 23.44);整数货币四舍五入到整数。
  • 起拍价、出价、收购单价、改价都会先按货币四舍五入。
  • 一口价的单价可以比货币更细(例如 3 个卖 10 金币),付款时按累计总额四舍五入,见 一口价 · 零买;单价比最小单位还小时会自动改成只能整批买,见 单价太小时。
  • 交易税与手续费也按货币四舍五入。

物品货币​

把钻石、服务器代币、某个自定义物品当成钱:

currencies:
diamond:
type: item
name: '钻石'
material: DIAMOND
format: '<aqua>{amount}</aqua> 钻石'
  • 余额 = 背包 36 个主格子里完全相同的物品数量(装备栏、副手不算)。
  • 付款时从背包扣除;收到的物品货币(卖出收入、退款)以物品寄到星月邮箱,领取时放进背包。
  • 想用带名称、自定义模型或其他插件数据的物品(例如服务器代币),用下面的指令把手上那一件完整保存下来。

/sa currencyitem​

手上拿着要当货币的物品,输入:

/sa currencyitem coin
  • 把手上的物品(完整物品数据,自定义物品也可以)存成货币 coin:写入 config.yml 的 currencies.coin.type: item 与 currencies.coin.item,名称没写时用物品的名字,然后自动重载。
  • 货币 ID 只能用小写字母、数字、_、-(最多 32 个字)。
  • 已经有这个 ID 的货币时会改成物品货币。
  • 需要 starauction.admin.reload 权限。

之后可以在 config.yml 里调整它的 name、format、permission。

经验等级​

currencies:
levels:
type: exp
name: '经验等级'
format: '<green>{amount}</green> 级'

付款扣等级、收款加等级(不是经验点数)。图示默认是附魔之瓶。 收到的经验等级(卖出收入、退款)寄到星月邮箱时,是一条领取时执行的指令(experience add <玩家> N levels),附件说明显示「N 级经验」,领取的那一刻加上等级。

货币怎么寄到星月邮箱​

1.1.0 起卖出收入、退回的出价与预付款、退款都寄到玩家的 星月邮箱,不同的货币用不同的附件:

type邮件附件
vault邮件金币(领取时存进那个子服的 Vault 帐户)
playerpoints邮件点券(领取时存进 PlayerPoints)
item那个物品本身,数量 = 金额
exp领取时执行的指令,加上经验等级

跨服时的货币​

钱只在玩家自己在线的子服、由玩家自己的经济帐户扣除或存入:买家在 B 服付款;卖家的收入寄到他的星月邮箱,卖家在哪个子服领取,就存进他在那个子服的帐户。

所以:

  • 各子服的经济不需要互通,各用各的经济插件也不会出错;
  • 不需要经济插件支持「给离线玩家加钱」;
  • 每个子服都要能用那种货币(装好 Vault 经济插件 / PlayerPoints),否则那个子服不能用它交易。

详见 跨服设置。

限制某种货币的价格​

每种货币可以设单价上下限,个别物品也可以,见 价格与黑名单:

price-range:
money: {min: 0.01, max: 0}
points: {min: 1, max: 0}