简体中文
属性衰减曲线
属性衰减曲线要配清的内容: 超过阈值的那部分怎么折算, 三种曲线各适合什么属性, 阈值和系数怎么调
属性衰减曲线用来压住高数值膨胀. 一个属性超过你指定的阈值后, 超出的部分会按曲线折算. 这样既保留成长价值, 又避免后期装备, 宝石, 强化和套装一叠加就把战斗平衡打破
适用场景
建议优先给以下属性配置衰减:
- 主输出属性:
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, 或改用更强的曲线类型