Skip to content

经济桥接 ​

CoreLib 统一对接服务器上的经济插件: Forge, Strengthen, Gem, Skills 等模块用同一套配置就能扣费, 收费, 发奖励和算价格, 不用为每一个经济插件单独适配

支持的经济 Provider ​

Provider ID对应插件注册条件说明
vaultVaultVault 插件已启用借 Vault 的接口对接任何兼容 Vault 的经济插件
excellenteconomyExcellentEconomyExcellentEconomy 插件已启用支持多货币系统

服务器上装了哪些插件, 就有哪些 provider 可用. CoreLib 启动时会自动检测并注册可用的 provider

自动选择逻辑 ​

配置里 provider 留空或填 auto 时, CoreLib 按下面的规则自动挑一个:

条件选择结果
provider 为空或 auto, 且 currency 非空优先选择 ExcellentEconomy (支持多货币)
provider 为空或 auto, 且 currency 为空选择 Vault (默认货币)
指定了具体 provider直接按 ID 查找, 不可用则返回失败

auto 模式不会自动去找 ExcellentEconomy 的默认货币. 要用 ExcellentEconomy, 你就得明确指定 currency

常见配置字段 ​

业务模块里常见的经济字段:

字段类型默认值说明
economy.enabledbooleantrue是否启用经济消耗或奖励
economy.providerstringauto使用哪个经济来源. 可选值: auto, vault, excellenteconomy
economy.currencystring""货币 ID. Vault 默认货币留空; ExcellentEconomy 必须指定
economy.base_costnumber—基础价格, 用来算最终花费
economy.cost_formulastring—动态算价格的公式, 里面可以用表达式变量

基础配置示例 ​

yaml
economy:
  enabled: true
  provider: vault
  base_cost: 100

动态价格公式 ​

yaml
economy:
  enabled: true
  provider: vault
  cost_formula: '100 + %star% * 50'

公式里的变量由调用模块注入, 例如强化模块会注入 %star% (当前星级), %level% (目标等级) 等

ExcellentEconomy 多货币 ​

yaml
economy:
  enabled: true
  provider: excellenteconomy
  currency: gems
  cost_formula: '50 + %level% * 10'

多货币消耗 ​

部分模块支持同时消耗多种货币:

yaml
economy:
  enabled: true
  currencies:
    - provider: vault
      currency: ''
      amount: 500
    - provider: excellenteconomy
      currency: gems
      amount: 10

也就是: 同时消耗 500 金币 (Vault 默认货币) 和 10 宝石 (ExcellentEconomy gems 货币)

物品货币 ​

有些模块还支持用物品当货币:

yaml
economy:
  enabled: true
  currencies:
    - provider: vault
      amount: 1000
    - provider: item
      item:
        type: vanilla
        id: EMERALD
      amount: 3

物品货币具体支不支持, 看模块实现

扣费时机 ​

不同业务流程扣费时机不同:

模块扣费时机说明
EmakiStrengthen尝试开始前无论成功失败都扣费 (可配置)
EmakiForge确认执行时点击确认按钮后扣除
EmakiSkills释放前满足条件后消耗, 释放失败不退还
EmakiGem操作确认时开孔, 镶嵌, 提取, 升级分别配置费用

配置时想清楚这三点:

  • 玩家失败是否也要付费
  • 取消操作是否返还
  • 余额不足时是否阻止操作 (多数模块会阻止, 具体看模块和配置)

经济动作 ​

CoreLib 动作系统给你提供了三个经济动作:

动作 ID参数说明
give_moneyamount (必填), provider (默认 auto), currency (默认空)给玩家加上一笔余额
take_moneyamount (必填), provider (默认 auto), currency (默认空)从玩家余额里扣掉一笔
set_moneyamount (必填), provider (默认 auto), currency (默认空)把玩家余额直接设成指定数值

直接照抄:

yaml
actions:
  - 'give_money amount=100 provider=vault'
  - 'take_money amount=25.5 provider=excellenteconomy currency=gems'
  - 'set_money amount=0 provider=vault'

价格公式写法 ​

yaml
# 线性增长 (温和)
cost_formula: '100 + %star% * 50'

# 多项式增长 (中等)
cost_formula: '100 + pow(%star%, 1.5) * 20'

# 指数增长 (激进, 慎用)
cost_formula: '100 * pow(1.5, %star%)'
  • 考虑服务器经济通胀: 价格应与玩家收入水平匹配
  • 测试极端值: 检查 star=0 和 star=max 时的价格是否合理

不想让价格出现负数, 可以用 max 留个备用下限:

yaml
cost_formula: 'max(10, 100 + %star% * 50 - %bonus%)'

生产服不建议允许负数价格, 以免被玩家利用刷钱

常见问题 ​

ExcellentEconomy 报错 ​

ExcellentEconomy 必须提供非空 currency. currency 为空时 CoreLib 会报错. 在配置里明确指定货币 ID 即可:

yaml
economy:
  provider: excellenteconomy
  currency: coins  # 必须指定

动作中经济操作失败但没有提示 ​

动作里的经济操作失败却没有提示? 管道里没有"忽略失败"这类开关, 一次失败算不算失败由每个段自己决定, 按下面的表对号入座排查:

情况段的结果
当前目标不是玩家跳过, 不是失败
经济服务不可用失败 (MISSING_CONTEXT)
provider 找不到, currency 不存在, 参数非法失败 (INVALID_CONFIG)
余额不足失败 (REJECTED)

"跳过"不会阻断整条管道, 目标不是玩家时最容易看起来"什么都没发生". 先确认目标流里确实是玩家, 再核对 provider 与 currency