|
| 1 | +--- |
| 2 | +title: 经济模块 |
| 3 | +description: MatrixShop 的统一货币定义、优先级规则和模块配置方式。 |
| 4 | +--- |
| 5 | + |
| 6 | +# 经济模块 |
| 7 | + |
| 8 | +MatrixShop 当前已经引入独立的经济模块,用来统一管理货币定义和交易动作。 |
| 9 | + |
| 10 | +它和旧版“每个商店自己随便写货币逻辑”的思路不同,当前版本采用的是: |
| 11 | + |
| 12 | +1. 统一定义货币 |
| 13 | +2. 模块、商店或商品只引用货币 key |
| 14 | +3. 未定义时默认回退到 `vault` |
| 15 | + |
| 16 | +## 核心结论 |
| 17 | + |
| 18 | +- `Economy` 是核心模块,始终启用,不支持关闭。 |
| 19 | +- 默认货币定义文件是 `plugins/MatrixShop/Economy/currency.yml` |
| 20 | +- 支持的货币模式: |
| 21 | + - `vault` |
| 22 | + - `playerpoints` |
| 23 | + - `PlaceholderAPI` 占位符货币 |
| 24 | +- `Cart` 和 `Record` 不提供独立经济配置 |
| 25 | + |
| 26 | +## 默认文件 |
| 27 | + |
| 28 | +```text |
| 29 | +plugins/MatrixShop/Economy/currency.yml |
| 30 | +``` |
| 31 | + |
| 32 | +默认资源示例: |
| 33 | + |
| 34 | +```yml |
| 35 | +vault: |
| 36 | + Mode: vault |
| 37 | + Display-Name: "金币" |
| 38 | + Symbol: "$" |
| 39 | + Decimal: true |
| 40 | + |
| 41 | +playerpoints: |
| 42 | + Mode: playerpoints |
| 43 | + Display-Name: "点券" |
| 44 | + Symbol: "点" |
| 45 | + Decimal: false |
| 46 | + |
| 47 | +custom_points: |
| 48 | + Mode: "%custom_points%" |
| 49 | + Display-Name: "自定义积分" |
| 50 | + Symbol: "" |
| 51 | + Decimal: false |
| 52 | + Actions: |
| 53 | + Take: |
| 54 | + - "console: custompoints take {player} {amount}" |
| 55 | + Give: |
| 56 | + - "console: custompoints give {player} {amount}" |
| 57 | + Deny: |
| 58 | + - "tell:&c货币不足,需要 &e{need} &c,当前为 &e{balance}" |
| 59 | +``` |
| 60 | +
|
| 61 | +## 货币定义字段 |
| 62 | +
|
| 63 | +| 字段 | 说明 | |
| 64 | +| --- | --- | |
| 65 | +| `Mode` | 货币类型。可写 `vault`、`playerpoints` 或 PlaceholderAPI 占位符。 | |
| 66 | +| `Display-Name` | 菜单和提示中显示的货币名。 | |
| 67 | +| `Symbol` | 可选符号。当前主要用于展示,不直接控制结算。 | |
| 68 | +| `Decimal` | 是否允许小数。`playerpoints` 一般应设为 `false`。 | |
| 69 | +| `Actions.Take` | 自定义货币扣除动作。 | |
| 70 | +| `Actions.Give` | 自定义货币发放动作。 | |
| 71 | +| `Actions.Deny` | 余额不足时执行的提示动作。 | |
| 72 | + |
| 73 | +说明: |
| 74 | + |
| 75 | +- `vault` 和 `playerpoints` 模式优先走插件 API |
| 76 | +- 自定义占位符货币主要依赖 `Actions.Take / Give / Deny` |
| 77 | +- 如果没有定义动作,就只能用于读取余额,不能安全完成结算 |
| 78 | + |
| 79 | +## 配置优先级 |
| 80 | + |
| 81 | +当前版本的货币 key 解析优先级是: |
| 82 | + |
| 83 | +1. 商品级 |
| 84 | +2. 商店级 |
| 85 | +3. 模块级 |
| 86 | +4. 默认回退 `vault` |
| 87 | + |
| 88 | +### 商品级 |
| 89 | + |
| 90 | +当前主要体现在 `SystemShop`: |
| 91 | + |
| 92 | +```yml |
| 93 | +goods: |
| 94 | + diamond_sword: |
| 95 | + material: 'DIAMOND_SWORD' |
| 96 | + price: 420 |
| 97 | + currency: playerpoints |
| 98 | +``` |
| 99 | + |
| 100 | +### 商店级 |
| 101 | + |
| 102 | +适用于带 `shops/*.yml` 的模块,例如: |
| 103 | + |
| 104 | +- `SystemShop` |
| 105 | +- `PlayerShop` |
| 106 | +- `GlobalMarket` |
| 107 | +- `Auction` |
| 108 | +- `Transaction` |
| 109 | + |
| 110 | +示例: |
| 111 | + |
| 112 | +```yml |
| 113 | +Currency: |
| 114 | + Key: vault |
| 115 | +``` |
| 116 | + |
| 117 | +### 模块级 |
| 118 | + |
| 119 | +适用于: |
| 120 | + |
| 121 | +- 没有 `shops/*.yml` 的模块 |
| 122 | +- 或作为带 `shops/*.yml` 模块的兜底值 |
| 123 | + |
| 124 | +示例: |
| 125 | + |
| 126 | +```yml |
| 127 | +Currency: |
| 128 | + Key: vault |
| 129 | +``` |
| 130 | + |
| 131 | +## 各模块当前支持方式 |
| 132 | + |
| 133 | +| 模块 | 支持方式 | |
| 134 | +| --- | --- | |
| 135 | +| `SystemShop` | 商品级 `currency` > 商店级 `Currency.Key` > 模块级 `SystemShop/settings.yml` | |
| 136 | +| `PlayerShop` | 商店级 `Currency.Key` > 模块级 `PlayerShop/settings.yml` | |
| 137 | +| `GlobalMarket` | 商店级 `Currency.Key` > 模块级 `GlobalMarket/settings.yml` | |
| 138 | +| `Auction` | 商店级 `Currency.Key` > 模块级 `Auction/settings.yml` | |
| 139 | +| `Transaction` | 商店级 `Currency.Key` > 模块级 `Transaction/settings.yml` | |
| 140 | +| `ChestShop` | 模块级 `ChestShop/settings.yml` | |
| 141 | +| `Cart` | 不配置经济 | |
| 142 | +| `Record` | 不配置经济 | |
| 143 | + |
| 144 | +## 当前不建议的写法 |
| 145 | + |
| 146 | +当前 MatrixShop 不建议把完整货币动作直接内联在商店配置里。 |
| 147 | + |
| 148 | +推荐做法是: |
| 149 | + |
| 150 | +1. 在 `Economy/currency.yml` 里统一定义货币 |
| 151 | +2. 在模块、商店或商品里只写 key |
| 152 | + |
| 153 | +也就是说,优先写: |
| 154 | + |
| 155 | +```yml |
| 156 | +Currency: |
| 157 | + Key: playerpoints |
| 158 | +``` |
| 159 | + |
| 160 | +而不是在每个商店文件里重复写整段货币动作。 |
| 161 | + |
| 162 | +## 管理与排查 |
| 163 | + |
| 164 | +建议先执行: |
| 165 | + |
| 166 | +```text |
| 167 | +/matrixshopadmin status |
| 168 | +``` |
| 169 | + |
| 170 | +重点看: |
| 171 | + |
| 172 | +- `Economy provider` |
| 173 | +- 启动摘要中的经济系统信息 |
| 174 | + |
| 175 | +如果某种货币不可用,通常有三类原因: |
| 176 | + |
| 177 | +1. 对应依赖插件没装 |
| 178 | +2. `currency.yml` 里写的模式或占位符不正确 |
| 179 | +3. 自定义货币动作只定义了读取,没有定义 `Take / Give / Deny` |
0 commit comments