Skip to content

属性衰减曲线

属性衰减曲线用于限制高数值膨胀。当某个属性超过指定阈值后,超过部分会按曲线折算,既保留成长价值,又避免后期装备、宝石、强化和套装叠加后破坏战斗平衡。

适用场景

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

  • 主输出属性:physical_attackprojectile_attackspell_attack
  • 防御属性:physical_defenseprojectile_defensespell_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(默认)、sqrtpiecewise_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,防御与概率属性适合用 sqrtpiecewise_linear
  • 不建议同时对同一属性配置多条衰减规则,避免排查困难。
  • 调整曲线后,应测试低配、中配、毕业、极限堆叠四档角色。
  • 如果属性来自多个模块,先确认最终快照再调整衰减曲线。

排查建议

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