Skip to content

属性衰减曲线 ​

属性衰减曲线要配清的内容: 超过阈值的那部分怎么折算, 三种曲线各适合什么属性, 阈值和系数怎么调

属性衰减曲线用来压住高数值膨胀. 一个属性超过你指定的阈值后, 超出的部分会按曲线折算. 这样既保留成长价值, 又避免后期装备, 宝石, 强化和套装一叠加就把战斗平衡打破

适用场景 ​

建议优先给以下属性配置衰减:

  • 主输出属性: physical_attack, projectile_attack, spell_attack
  • 防御属性: physical_defense, projectile_defense, spell_defense
  • 概率属性: 暴击率, 闪避率, 吸血率
  • 资源上限: 生命, 法力或其他会被装备大幅叠加的资源
  • 穿透, 减伤, 冷却缩减等容易接近硬上限的属性

配置位置 ​

衰减曲线位于 config.yml:

yaml
scaling_curves:
  physical_attack_cap:
    attribute: "physical_attack"
    threshold: 500
    curve_type: "logarithmic"
    factor: 100

每个条目的 key 只当规则 ID 用, 方便阅读和排查; 真正被衰减的是 attribute 指定的属性. 你省略 attribute 时, key 本身会被当作属性 ID, 所以也可以直接写成:

yaml
scaling_curves:
  physical_attack:
    threshold: 500
    factor: 100

字段说明 ​

字段类型说明
attributestring被衰减的属性 ID
thresholdnumber衰减开始的阈值. 低于或等于这个值时保持原值; 负值按 0 处理
curve_typestring衰减函数类型: logarithmic (默认), sqrt, piecewise_linear (别名 linear). 填了识别不了的值按 logarithmic 处理, 并在配置预检时告警
factornumber衰减系数, 不同曲线含义不同. logarithmic / sqrt 拿它当除数, 小于等于 0 时按 1 处理; piecewise_linear 拿它当保留比例, 0 是合法值, 表示超出部分全部作废

最终值可以理解为:

text
最终值 = threshold + 衰减后的超出部分

曲线类型 ​

logarithmic ​

对数衰减适合主输出和防御属性. 超过阈值后数值仍然会涨, 只是涨得越来越慢

yaml
scaling_curves:
  physical_attack_cap:
    attribute: "physical_attack"
    threshold: 500
    curve_type: "logarithmic"
    factor: 100

特点:

  • 成长体验平滑
  • 不会突然让高阶装备失去价值
  • 适合大多数核心属性

sqrt ​

平方根衰减的增速同样越来越慢, 适合防御, 减伤, 资源上限这类属性

CAUTION

两点注意:

  1. 同一个 factor 下, 平方根衰减实际弱于对数衰减 (例如 factor: 100, 超出 500 时, 对数得 179, 平方根得 224). 需要更强的压制就改用对数, 或显著降低 factor
  2. 实现为 sqrt(factor × 超出量), 因此当超出量小于 factor 时, 结果大于超出量, 也就是这一段会放大而不是衰减. 下例 factor: 80 时, 原始值 440 (超出 40) 会被算成 400 + 56.6 = 456.6. 要避开这一段, 应让 factor 小于关注的最小超出量
yaml
scaling_curves:
  physical_defense_cap:
    attribute: "physical_defense"
    threshold: 400
    curve_type: "sqrt"
    factor: 80

特点:

  • 超出阈值后收益明显降低
  • 适合限制坦度堆叠
  • 配置前应先测试高端装备的实际承伤

piecewise_linear ​

超出部分按固定比例保留, 适合概率属性或想直观控制的属性

NOTE

名称虽然叫 piecewise_linear, 实现其实是"超出部分乘以 factor"的单一折扣, 不支持配置多个分段. 保留这个名字是为了兼容既有配置

yaml
scaling_curves:
  crit_rate_cap:
    attribute: "physical_crit_rate"
    threshold: 80
    curve_type: "piecewise_linear"
    factor: 0.3

这个例子的意思是: 暴击率超过 80 后, 超出部分只保留 30%. 原始值为 100 时, 最终值约为 80 + (20 × 0.3) = 86

与属性值域限制的关系

衰减曲线先生效, 属性定义里的 min_value / max_value / allow_negative 后生效. 完整顺序是: 所有来源聚合 → 衰减曲线 → 派生属性 → 值域限制

所以曲线折算后的结果仍会被属性自己的区间约束. 上例算出 86 落在 physical_crit_rate 的 [0, 100] 内, 不受影响; 但若曲线参数放得很宽, 折算后仍超过 max_value, 最终值会被压回 max_value. 这两层是互补的: 曲线负责让成长平滑, 值域负责压住硬上限

调参建议 ​

  • 阈值应接近当前版本毕业装备的合理上限, 而不是新手装备数值
  • 输出属性适合用 logarithmic, 防御与概率属性适合用 sqrt 或 piecewise_linear
  • 不建议给同一个属性同时配多条衰减规则, 避免以后排查困难
  • 调整曲线后, 应测试低配, 中配, 毕业, 极限堆叠四档角色
  • 如果属性来自多个模块, 先确认最终快照再调整衰减曲线

排查建议 ​

  • 属性面板低于预期: 检查是否触发了衰减曲线
  • 配置无效: 检查 attribute 是否为真实属性 ID; curve_type 拼错会在服务端启动或 reload 的配置预检中告警, 可以据此定位
  • 后期成长过弱: 提高 threshold 或增大 factor
  • 后期成长过强: 降低 threshold, 降低 factor, 或改用更强的曲线类型