PRD-056 装备洗练与词条重铸
文档编号:PRD-056
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/numeric/reforge.lua
1. 背景与目标
洗练/重铸提供装备词条的二次追求。词条池、锁定、保底、消耗适合用 Lua 配置,便于赛季调数值。
目标
- 每件装备 2–4 条随机词条,可单条洗练或整件重铸。
- 锁定词条增加消耗,结果可预览/对比。
- 词条品质、数值区间、同词条互斥可配置。
2. 核心规则
2.1 词条
| 品质 | 数值区间 | 出现权重 |
|---|---|---|
| 普通 | 50%–70% | 50 |
| 精良 | 70%–85% | 30 |
| 史诗 | 85%–95% | 15 |
| 传说 | 95%–100% | 5 |
- 同件装备不允许重复词条。
- 词条类型受装备部位限制。
- 词条数值 = 区间内随机 × 装备等级系数。
2.2 洗练方式
- 单条洗练:选择 1 条词条,消耗洗练石,重新随机类型与数值。
- 整件重铸:重置全部未锁定词条,消耗更高。
- 锁定:每条锁定额外消耗锁定符,最多锁 2 条。
- 保底:连续 10 次未出史诗,下一次必出史诗(可配置)。
2.3 替换与保留
- 洗练结果先进入“待替换”状态,玩家选择替换/放弃。
- 放弃不返还材料,保留原词条。
- 替换后旧词条进入历史记录,可查看最近 5 次。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/numeric/reforge.lua
Reforge = {
max_affix = 4,
lock_cost = { item=7101, count=1 },
pity_threshold = 10,
pools = {
weapon = { {id="atk",w=30}, {id="crit",w=20}, {id="pierce",w=15} },
},
}
function OnReforge(ctx, role, item_uid, lock_indexes, mode)
local equip = ctx:GetEquip(item_uid)
if not equip then return ctx:Fail(role, "装备不存在") end
local cost = ctx:CalcReforgeCost(mode, #lock_indexes)
if not ctx:Consume(role, cost) then return ctx:Fail(role, "材料不足") end
local new_affixes = {}
for i, affix in ipairs(equip.affixes) do
if ctx:IsLocked(i, lock_indexes) then
new_affixes[i] = affix
else
new_affixes[i] = ctx:RollAffix(Reforge.pools[equip.type], equip.level)
end
end
ctx:SetPendingReforge(role, item_uid, new_affixes)
end
- 洗练结果不立即写入装备,进入待替换,避免误操作。
- 锁定索引由客户端提交,服务端校验数量与合法性。
- 保底计数按角色 + 装备槽位记录。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_Reforge | 洗练/重铸 |
| C→S | CS_ReforgeConfirm | 替换/放弃 |
| S→C | SC_ReforgePreview | 新旧词条对比 |
| S→C | SC_ReforgeResult | 结果/保底 |
3.3 数值与竞技
- 词条总战力纳入战力公式,设单件上限。
- 竞技场装备模板会归一化词条,避免碾压。
- 异常高数值词条触发日志,可回滚。
4. 客户端设计
- 洗练面板:装备词条列表、锁定勾选、消耗预览。
- 新旧对比:绿色提升/红色下降,可逐条查看。
- 替换/放弃二次确认。
- 保底进度与历史记录。
- 一键洗练到目标品质(可选)。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
affix_id | 词条 |
pool | 部位词条池 |
quality_range | 品质区间 |
lock_cost | 锁定消耗 |
pity_threshold | 保底次数 |
Lua 接口:GetEquip、CalcReforgeCost、Consume、RollAffix、SetPendingReforge、ConfirmReforge。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 装备已锁定/交易中 | 拒绝 |
| 锁定数量超限 | 拒绝 |
| 待替换状态下线 | 保留 10 分钟,超时放弃 |
| 重复确认 | 幂等 |
| 词条池为空 | 返回失败,不扣材料 |
| 热更词条池 | 下次洗练生效 |
7. 验收标准
- 单条/整件洗练、锁定、保底、替换/放弃正确。
- 词条互斥、部位限制、数值区间正确。
- 材料扣除与结果事务一致。
- 待替换/断线/重复请求处理正确。
- 客户端对比与服务端一致。