跳到主要内容

PRD-057 附魔与铭文

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

1. 背景与目标​

附魔/铭文提供装备的额外词条与套装效果,是数值追求与材料消耗点。附魔等级、成功率、套装组合适合用 Lua 配置。

目标

  • 每件装备 1–2 个附魔槽,使用卷轴附加属性。
  • 同套附魔激活 2/4/6 件套装效果。
  • 支持覆盖、移除、保护符。

2. 核心规则​

2.1 附魔槽​

  • 精良及以上装备有 1 槽,史诗 2 槽,传说 2 槽(可打孔第 3 槽)。
  • 附魔卷轴分 1–5 级,等级越高属性越高、成功率越低。
  • 同槽新附魔覆盖旧附魔,旧附魔不返还。
  • 附魔绑定装备,不可转移到其他装备。

2.2 成功率​

  • 1–3 级 100%,4 级 70%,5 级 45%。
  • 失败只扣卷轴,不损坏装备;保护符保证失败不降级(附魔有等级时)。
  • 连续失败 5 次后,下一次成功率 +20%(保底)。

2.3 套装​

  • 附魔分 6 套:烈焰、寒冰、雷霆、大地、光明、暗影。
  • 同套 2/4/6 件激活不同效果。
  • 套装效果只按当前装备的附魔统计,不按背包。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/numeric/enchant.lua
Enchant = {
max_slots = 3,
scrolls = { [1]={rate=1.0,attr=10}, [4]={rate=0.7,attr=40}, [5]={rate=0.45,attr=60} },
sets = {
flame = { [2]={atk=30}, [4]={atk=80}, [6]={atk=150, crit=0.05} },
},
}

function OnEnchant(ctx, role, item_uid, slot, scroll_id)
local equip = ctx:GetEquip(item_uid)
local scroll = Enchant.scrolls[scroll_id]
if not equip or not scroll or slot > Enchant.max_slots then
return ctx:Fail(role, "参数不合法")
end
if not ctx:ConsumeItem(role, scroll_id, 1) then
return ctx:Fail(role, "卷轴不足")
end
if ctx:Random() <= scroll.rate then
ctx:SetEnchant(equip, slot, scroll_id)
ctx:RecalcAttributes(role)
end
ctx:AddFailCount(role, equip, slot)
end
  • 附魔槽、套装统计由脚本计算,C++ 存槽位数据。
  • 覆盖/移除走同一接口,保证属性重算。
  • 套装效果在每次附魔变化后重新汇总。

3.2 协议​

方向协议说明
C→SCS_Enchant附魔
C→SCS_EnchantRemove移除
S→CSC_EnchantInfo槽位/套装/成功率
S→CSC_EnchantResult成功/失败/属性

3.3 数值约束​

  • 附魔属性计入战力,设单件上限。
  • 套装效果与装备套装(PRD-025)分开计算,避免重复。
  • 竞技模板可关闭附魔或归一化。

4. 客户端设计​

  • 附魔面板:装备槽位、卷轴选择、成功率、属性预览。
  • 套装提示:当前件数/下一档效果。
  • 覆盖/移除二次确认。
  • 失败动画与保底计数。
  • 属性对比。

5. 配置与 Lua 接口​

配置说明
scroll_id卷轴
level / rate等级/成功率
attr属性
set_id套装
set_bonus套装效果
slot_limit槽位上限

Lua 接口:GetEquip、ConsumeItem、SetEnchant、RemoveEnchant、RecalcAttributes、AddFailCount。

6. 边界与异常​

场景处理
装备不可附魔拒绝
槽位未解锁拒绝
卷轴不足拒绝,不扣
覆盖传说附魔二次确认
装备被交易先移除附魔或禁止交易
热更套装下次重算生效

7. 验收标准​

  • 附魔/覆盖/移除/套装/保底正确。
  • 成功率、消耗、属性预览一致。
  • 套装件数统计正确,不与装备套装混淆。
  • 交易/删除装备时附魔处理正确。
  • 客户端槽位/套装显示一致。