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→C | SC_AttrDetail | 一级/二级/三级属性 |
| S→C | SC_PowerChange | 战力变化与来源 |
| C→S | CS_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. 验收标准
- 一级→二级转换、固定/百分比加成、上限裁剪正确。
- 战力与实际伤害偏差在配置容差内。
- 同来源不重复计算,装备切换即时重算。
- 客户端分项与服务端一致。
- 战力异常可审计、可回滚。