权重
权重工具用于随机池、品质池、奖励池和保底逻辑。它让配置者可以用"相对概率"描述结果,而不是手写固定百分比。
权重是什么
权重是一种描述相对概率的方式。每个结果分配一个数值,抽取时按数值占总和的比例决定概率。
如果一个池中有三个结果:
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
| 结果 | 权重 | 概率 |
|---|---|---|
| common | 700 | 70% |
| uncommon | 200 | 20% |
| rare | 80 | 8% |
| epic | 18 | 1.8% |
| legendary | 2 | 0.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.enabled | boolean | false | 是否启用保底。 |
guarantee.attempts | integer | — | 连续多少次未达到 minimum 后触发保底。 |
guarantee.minimum | string | — | 保底触发后的最低结果 ID。 |
保底工作原理
- 每次抽取结果低于
minimum时,计数器 +1。 - 计数器达到
attempts时,下一次抽取强制从minimum及以上的结果中选择。 - 抽取到
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嵌套池的具体支持方式取决于调用模块。
概率验证方法
如果你想验证配置的实际概率分布:
- 在测试服使用模块提供的批量测试命令(如果有)。
- 或者写一个简单脚本模拟抽取:
yaml
# 假设总权重 100
# common=70, rare=25, epic=5
# 抽取 1000 次,预期:
# common ≈ 700 次
# rare ≈ 250 次
# epic ≈ 50 次- 实际结果会有波动,这是正常的随机行为。样本量越大,越接近理论概率。