动态价格
开启动态价格的商品,买越多越贵、卖越多越便宜,没人交易时慢慢回到原价。适合矿物、农作物这类玩家会大量刷的回收品,防止一种东西被无限卖钱。

设定
shops/ores.yml
items:
diamond:
slot: 16
item: DIAMOND
buy: 200
sell: 60
dynamic:
step: 0.02 # 每份涨跌 2%
min: 0.4 # 最低 = 原价 × 0.4
max: 2.5 # 最高 = 原价 × 2.5
recover: 24h # 回复半衰期:每 24 小时,偏离的幅度减半
gold_ingot:
slot: 12
item: GOLD_INGOT
amount: 8
buy: 240
sell: 72
dynamic: true # 用默认值
| 键 | 默认 | 说明 |
|---|---|---|
step | 0.01 | 每买一份涨多少、每卖一份跌多少(0.01 = 1%) |
min | 0.5 | 价格最低是原价的几倍 |
max | 2.0 | 价格最高是原价的几倍 |
recover | 12h | 回复半衰期:每过这么久,累积的买卖量剩一半(30m、6h、2d……) |
cross-server | false | true = 所有子服共用一个行情(需要 MySQL) |
enabled | true | false = 暂时关闭(保留设定) |
dynamic: true 等于 step: 0.01、min: 0.5、max: 2.0、recover: 12h。
价格怎么算
- 每件商品记一个「净买卖量」:每买一份 +1,每卖一份 −1。
- 这个数字会随时间衰减:每过
recover的时间就剩一半,所以没人交易时会慢慢回到 0。 - 价格倍数 = 1 +
step× 净买卖量,再限制在min与max之间。 - 买价与回收价都乘上这个倍数,再依货币的小数位四舍五入。
例子(钻石,step: 0.02、min: 0.4):玩家一口气卖了 30 份,净买卖量 −30,倍数 = 1 − 0.6 = 0.4,回收价从 60 跌到 24 金币,说明显示「行情:▼ -60%」。之后没人再卖的话,24 小时后净买卖量剩 −15(倍数 0.7),48 小时后剩 −7.5(倍数 0.85)……
商品说明
| 状态 | 显示 |
|---|---|
| 涨价 | 行情:▲ +12%(红色) |
| 跌价 | 行情:▼ -8%(绿色) |
| 接近原价 | 不显示 |
文字在 messages.yml 的 lore.trend-up / lore.trend-down。PlaceholderAPI 变量 %cloudshop_trend_<商店>_<商品>% 输出同样的 +12% / -8%。
和折扣、特卖的关系
- 买价 = 原价 × 行情倍数 × 折扣。特卖显示的删除线原价是「已经算上行情」的价格。
- 回收价只乘行情倍数,折扣与特卖不影响回收价。
写入与跨子服
- 行情在每次交易时累积在内存里,第一笔交易后 5 秒批次写进数据库,之后才开始下一批。没人交易时不会写入。
cross-server: true时,所有子服的买卖量记在同一行;其他子服的变化每 30 秒同步一次。- 不开
cross-server时,每个子服各自有自己的行情。
重置
/cs reset ores 整个商店的行情(连同限购、库存)回到原价
/cs reset ores diamond 只重置钻石
在 游戏内管理介面 左键「动态价格」开 / 关(开启用默认值),Shift+点击可以输入自订值:0.01 0.5 2 12h(每份涨幅、最低倍、最高倍、回复时间),加上 cross 就跨子服共用。