属性衰减曲线
属性衰减曲线用于限制高数值膨胀。当某个属性超过指定阈值后,超过部分会按曲线折算,既保留成长价值,又避免后期装备、宝石、强化和套装叠加后破坏战斗平衡。
适用场景
建议优先为以下属性配置衰减:
- 主输出属性:
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字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
attribute | string | 被衰减的属性 ID。 |
threshold | number | 衰减开始阈值。低于或等于该值时保持原值;负值按 0 处理。 |
curve_type | string | 衰减函数类型:logarithmic(默认)、sqrt、piecewise_linear(别名 linear)。无法识别的取值按 logarithmic 处理,并在配置预检中告警。 |
factor | number | 衰减系数,不同曲线含义不同。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
两点注意:
- 同一
factor下,平方根衰减实际弱于对数衰减(例如factor: 100、超出 500 时,对数得 179,平方根得 224)。需要更强压制应改用对数,或显著降低factor。 - 实现为
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,或改用更强的曲线类型。