Skip to content

权重

权重工具用于随机池、品质池、奖励池和保底逻辑。它让配置者可以用"相对概率"描述结果,而不是手写固定百分比。

权重是什么

权重是一种描述相对概率的方式。每个结果分配一个数值,抽取时按数值占总和的比例决定概率。

如果一个池中有三个结果:

yaml
pool:
  common: 80
  rare: 15
  epic: 5

总权重是 100。抽取时:

  • common 约 80%。
  • rare 约 15%。
  • epic 约 5%。

如果写成:

yaml
pool:
  common: 8
  rare: 1.5
  epic: 0.5

比例仍然一样(总权重 10,common 80%、rare 15%、epic 5%)。权重看的是相对关系,不要求总和为 100。

概率计算公式

单个结果的实际概率:

text
概率 = 该结果权重 / 所有结果权重之和

例如:

yaml
pool:
  common: 700
  uncommon: 200
  rare: 80
  epic: 18
  legendary: 2

总权重 = 1000

结果权重概率
common70070%
uncommon20020%
rare808%
epic181.8%
legendary20.2%

使用场景

场景示例
锻造品质普通、优秀、稀有、史诗、传说。
奖励池完成烹饪后随机给副产物。
宝石升级成功、失败、降级、保护。
强化结果成功、失败、破裂、保底成功。
技能奖励随机解锁某一类技能。
材料贡献不同材料对品质的贡献权重。
掉落表怪物击杀后的随机掉落。

权重池配置

基础格式

最简单的权重池是一个 key-value map:

yaml
quality:
  enabled: true
  custom_pool:
    common: 70
    rare: 25
    epic: 5

带条件的权重池

部分模块支持根据条件动态调整权重:

yaml
quality:
  enabled: true
  custom_pool:
    common: 70
    rare: 25
    epic: 5
  material_bonus:
    rare_material:
      rare: 10
      epic: 5

含义:使用稀有材料时,rare 权重从 25 提升到 35,epic 从 5 提升到 10。

权重表达式

部分模块允许权重值使用表达式:

yaml
quality:
  custom_pool:
    common: '100 - %material_score%'
    rare: '%material_score% * 0.5'
    epic: '%material_score% * 0.2'

这样品质概率可以随材料分数动态变化。具体是否支持表达式取决于调用模块的实现。

保底逻辑

保底用于防止玩家长期没有正反馈。连续失败或连续低品质达到阈值后,系统会提高最低结果或强制成功。

保底配置

yaml
quality:
  enabled: true
  custom_pool:
    common: 70
    rare: 25
    epic: 5
  guarantee:
    enabled: true
    attempts: 10
    minimum: rare
字段类型默认值说明
guarantee.enabledbooleanfalse是否启用保底。
guarantee.attemptsinteger连续多少次未达到 minimum 后触发保底。
guarantee.minimumstring保底触发后的最低结果 ID。

保底工作原理

  1. 每次抽取结果低于 minimum 时,计数器 +1。
  2. 计数器达到 attempts 时,下一次抽取强制从 minimum 及以上的结果中选择。
  3. 抽取到 minimum 或更高结果时,计数器重置为 0。

保底示例

yaml
# 强化保底:连续失败 5 次后必定成功
strengthen:
  guarantee:
    enabled: true
    attempts: 5
    minimum: success

# 品质保底:连续 10 次普通后至少给稀有
quality:
  guarantee:
    enabled: true
    attempts: 10
    minimum: rare

多池与嵌套

部分模块支持多个权重池嵌套或分层:

yaml
# 先抽大类,再在大类内抽具体结果
reward:
  category_pool:
    equipment: 30
    material: 50
    currency: 20
  equipment_pool:
    sword: 40
    armor: 35
    accessory: 25
  material_pool:
    common_ore: 60
    rare_ore: 30
    gem_fragment: 10

嵌套池的具体支持方式取决于调用模块。

概率验证方法

如果你想验证配置的实际概率分布:

  1. 在测试服使用模块提供的批量测试命令(如果有)。
  2. 或者写一个简单脚本模拟抽取:
yaml
# 假设总权重 100
# common=70, rare=25, epic=5
# 抽取 1000 次,预期:
#   common ≈ 700 次
#   rare ≈ 250 次
#   epic ≈ 50 次
  1. 实际结果会有波动,这是正常的随机行为。样本量越大,越接近理论概率。