PRD-064 元素克制与抗性
文档编号:PRD-064
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/numeric/element.lua
1. 背景与目标
元素系统为数值对抗增加克制维度。元素克制、抗性、穿透、PvE/PvP 系数适合用 Lua 配置,便于赛季平衡。
目标
- 5 元素:火、冰、雷、毒、神圣,互相克制。
- 元素攻击/抗性/穿透参与伤害结算,但不替代主属性。
- PvE 与 PvP 使用不同系数,避免一套数值通吃。
2. 核心规则
2.1 克制关系
| 攻击元素 | 克制 | 被克制 |
|---|---|---|
| 火 | 冰 | 雷 |
| 冰 | 雷 | 火 |
| 雷 | 毒 | 冰 |
| 毒 | 神圣 | 雷 |
| 神圣 | 火 | 毒 |
- 克制伤害 ×1.2,被克制 ×0.85,其余 ×1.0。
- 双元素技能按主元素计算,副元素提供 30% 加成。
2.2 抗性与穿透
有效抗性 = max(-50%, 抗性 - 穿透)
元素伤害 = 基础伤害 × 元素系数 × (1 - 有效抗性)
- 抗性上限 75%,穿透上限 50%。
- 抗性可为负,负抗性增加伤害。
2.3 PvE/PvP
- PvE 元素系数 ×1.0;PvP 元素系数 ×0.6。
- BOSS 可配置元素免疫/吸收/反射。
- 元素状态(灼烧/冰冻/感电/中毒)由 Buff 系统实现。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/numeric/element.lua
Element = {
counter = { fire="ice", ice="thunder", thunder="poison", poison="holy", holy="fire" },
pvp_rate = 0.6,
resist_cap = 0.75,
pierce_cap = 0.5,
}
function OnCalcElement(ctx, attacker, target, element, base)
local counter = Element.counter[element]
local target_element = ctx:GetElement(target)
local rate = 1.0
if counter == target_element then rate = 1.2
elseif Element.counter[target_element] == element then rate = 0.85 end
local resist = math.max(-0.5, ctx:GetResist(target, element) - ctx:GetPierce(attacker, element))
resist = math.min(resist, Element.resist_cap)
local pvp = ctx:IsPvP(attacker, target) and Element.pvp_rate or 1.0
return base * rate * (1 - resist) * pvp
end
- 元素系数/克制表由脚本加载,C++ 结算时调用一次。
- 抗性/穿透来自属性快照,不在结算中查库。
- 元素状态由 Buff 系统挂载,脚本不直接改 HP。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| S→C | SC_ElementInfo | 元素攻击/抗性/穿透 |
| S→C | SC_ElementDamage | 元素伤害/克制提示 |
3.3 竞技平衡
- 竞技场可禁用元素克制或降低系数。
- 元素抗性装备/宝石计入战力,设上限。
- 新元素上线需提供免费洗点/转换。
4. 客户端设计
- 角色面板显示元素攻击/抗性/穿透。
- 伤害飘字颜色区分元素,克制显示“克制”提示。
- 目标面板显示元素弱点/抗性。
- 元素状态图标与层数。
- 装备/宝石元素属性对比。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
counter | 克制表 |
pvp_rate | PvP 系数 |
resist_cap | 抗性上限 |
pierce_cap | 穿透上限 |
element_status | 元素状态 |
Lua 接口:GetElement、GetResist、GetPierce、IsPvP、CalcElementDamage。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 元素未配置 | 按无元素 1.0 计算 |
| 抗性溢出 | 夹到上限 |
| 穿透超过抗性 | 允许负抗性,夹到 -50% |
| 元素免疫 | 伤害 0,显示“免疫” |
| 脚本异常 | 回退无元素计算,记录日志 |
7. 验收标准
- 五元素克制/被克制/无关系系数正确。
- 抗性/穿透/上限/负抗性计算正确。
- PvE/PvP 系数正确。
- 元素状态与 Buff 联动正确。
- 客户端提示与服务端一致。