PRD-054 天赋树与属性点
文档编号:PRD-054
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/numeric/talent.lua
1. 背景与目标
天赋树提供职业内的数值分支与 Build 差异。节点效果、前置、重置成本适合用 Lua 配置,便于赛季调整。
目标
- 每职业 3 系天赋,每系 5 层,节点主动/被动混合。
- 天赋点来自等级与成就,重置有成本。
- 支持双天赋预设,脱战切换。
2. 核心规则
2.1 点数与层级
- 角色 10 级起每级 1 点,满级 60 点,额外 10 点来自成就。
- 每系第 N 层需在该系投入 5×N 点才能解锁。
- 终极天赋需该系投入 40 点。
- 单个节点最多 5 级,效果线性/阶梯配置。
2.2 重置与预设
- 重置消耗金币/道具,返还全部点数。
- 脱战可切换预设,战斗中禁止。
- 预设 2 套,解锁第二套需道具。
- 重置/切换后立即重算属性与技能。
2.3 数值约束
- 天赋提供的百分比加成与其他来源乘算,设总上限。
- 同一效果不叠加,取最高值。
- 天赋不得提供无敌/免控等破坏竞技的效果(特殊节点需评审)。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/numeric/talent.lua
Talent = {
trees = { "arms", "fury", "protection" },
max_points = 70,
reset_cost = { gold = 100000 },
presets = 2,
}
function OnLearn(ctx, role, node_id)
local node = ctx:GetTalentNode(node_id)
if not ctx:CanLearn(role, node_chain(node)) then
return ctx:Fail(role, "前置/点数不足")
end
if ctx:GetSpent(role) + 1 > Talent.max_points then
return ctx:Fail(role, "天赋点不足")
end
ctx:AddTalent(role, node_id, 1)
ctx:RecalcAttributes(role)
end
function OnReset(ctx, role)
if ctx:InCombat(role) then return ctx:Fail(role, "战斗中无法重置") end
if not ctx:Consume(role, Talent.reset_cost) then
return ctx:Fail(role, "资源不足")
end
ctx:ClearTalents(role)
ctx:RecalcAttributes(role)
end
- 前置链、层级、点数由脚本校验;C++ 只存节点等级。
- 重置/切换事务:清点/扣费/重算/持久化。
- 热更节点效果后,登录重算。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_TalentLearn | 学习/升级 |
| C→S | CS_TalentReset | 重置 |
| C→S | CS_TalentPreset | 切换预设 |
| S→C | SC_TalentTree | 树/点数/节点 |
| S→C | SC_TalentResult | 结果/属性变化 |
3.3 竞技约束
- 竞技场/战场内禁止重置/切预设。
- 匹配按当前预设战力计算。
- 赛季天赋调整需公告,必要时提供免费重置。
4. 客户端设计
- 天赋树三列布局,连线显示前置。
- 节点悬停显示效果、消耗、下一级。
- 点数/已投入/剩余显示。
- 预设保存/切换/命名。
- 重置确认与返还预览。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
node_id | 节点 |
tree / tier | 系/层 |
max_level | 最大等级 |
require_points | 层级要求 |
effect | 属性/技能效果 |
reset_cost | 重置成本 |
Lua 接口:GetTalentNode、CanLearn、AddTalent、ClearTalents、RecalcAttributes、InCombat。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 点数不足/前置不满足 | 拒绝 |
| 战斗中重置 | 拒绝 |
| 节点被删除 | 登录返还点数 |
| 预设引用失效节点 | 清理并提示 |
| 热更后超上限 | 保留但效果截断,邮件说明 |
7. 验收标准
- 三系天赋、层级、前置、点数上限正确。
- 学习/重置/预设切换/属性重算正确。
- 竞技场内禁止切换/重置。
- 节点删除/热更有兜底。
- 客户端树状态与服务端一致。