跳到主要内容

PRD-053 属性与战力系统

文档编号:PRD-053
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/numeric/attribute.lua

1. 背景与目标​

属性与战力是所有数值玩法的公共底座。当前存在同类属性重复加成、战力公式与实战不符、竞技匹配按虚假战力分层等问题。本 PRD 统一一级/二级属性、战力公式、收益递减与快照机制。

目标

  • 一级属性(力量/敏捷/智力/体质/精神)到二级属性的映射可配置。
  • 战力评分与实战强度偏差可控,用于匹配/榜单/门槛。
  • 所有加成按固定顺序汇总,支持审计与回放。

2. 核心规则​

2.1 属性分层​

层级属性来源
一级力量、敏捷、智力、体质、精神等级、装备、天赋
二级攻击、防御、生命、命中、闪避、暴击、抗暴、穿透、韧性、格挡、破格一级转换、装备、Buff
三级元素攻击、元素抗性、伤害加成、伤害减免、治疗加成宝石、神器、图鉴

2.2 汇总顺序​

基础值 → 一级属性 → 二级属性转换 → 固定加成 → 百分比加成 → 上限裁剪
  • 同来源同属性只取最高/叠加按来源配置。
  • 百分比加成基于“固定加成后”的数值计算。
  • 最终值受 attr_cap 限制,超出部分转为战力但不参与实战。

2.3 战力公式​

战力 = Σ(二级属性 × 权重) + 技能战力 + 收集战力
  • 权重表可配置,按职业/版本调整。
  • 战力只用于展示/匹配,不直接参与伤害结算。
  • 战力变化超过 5% 时记录日志,防止异常刷战力。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/numeric/attribute.lua
Attr = {
primary_to_secondary = {
str = { atk = 2.0, hp = 5.0 },
agi = { dodge = 1.5, crit = 0.5 },
int = { matk = 2.0, mp = 3.0 },
con = { hp = 10.0, def = 1.0 },
spr = { mdef = 1.5, mp_regen = 1.0 },
},
power_weight = { atk=2.0, def=1.2, hp=0.2, crit=8.0, tenacity=6.0 },
caps = { crit=0.8, dodge=0.6, damage_reduce=0.8 },
}

function Recalc(ctx, role)
local attrs = ctx:CollectSources(role) -- 装备/天赋/图鉴/Buff
for primary, mapping in pairs(Attr.primary_to_secondary) do
for sec, rate in pairs(mapping) do
attrs[sec] = (attrs[sec] or 0) + (attrs[primary] or 0) * rate
end
end
for k, cap in pairs(Attr.caps) do
if attrs[k] and attrs[k] > cap then attrs[k] = cap end
end
attrs.power = ctx:CalcPower(attrs, Attr.power_weight)
ctx:ApplyAttributes(role, attrs)
ctx:CacheSnapshot(role, attrs)
end
  • 属性重算只在装备/Buff/天赋变化时触发,不在每次伤害时跑 Lua。
  • 战斗读取 C++ 快照,保证同一次结算属性一致。
  • 权重/上限热更后,下次重算生效。

3.2 协议​

方向协议说明
S→CSC_AttrDetail一级/二级/三级属性
S→CSC_PowerChange战力变化与来源
C→SCS_AttrQuery查询他人面板

3.3 审计​

  • 每次重算记录来源快照 hash,便于复现。
  • 战力异常波动(单次 > 10%)触发告警。
  • 竞技/排行榜使用服务端战力,不读客户端。

4. 客户端设计​

  • 角色面板:一级属性、二级属性、战力、来源明细。
  • 属性详情:点击显示基础/装备/天赋/Buff 分项。
  • 对比:与目标装备/天赋的属性差。
  • 战力变化飘字与来源提示。
  • 竞技匹配界面显示战力区间。

5. 配置与 Lua 接口​

Attr.xml:primary、secondary、weight、cap、convert_rate。
Lua 接口:CollectSources、CalcPower、ApplyAttributes、CacheSnapshot、GetSnapshot。

6. 边界与异常​

场景处理
属性溢出按上限裁剪,记录原始值
来源被删除登录重算,清理失效来源
战力异常告警并冻结排行榜更新
热更权重下次重算生效,不追溯
战斗中断线以最后快照为准,重连重算

7. 验收标准​

  • 一级→二级转换、固定/百分比加成、上限裁剪正确。
  • 战力与实际伤害偏差在配置容差内。
  • 同来源不重复计算,装备切换即时重算。
  • 客户端分项与服务端一致。
  • 战力异常可审计、可回滚。