PRD-060 图鉴收集与属性加成
文档编号:PRD-060
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/numeric/codex.lua
1. 背景与目标
图鉴提供长线收集与永久属性。收集项、里程碑、属性汇总适合用 Lua 配置,便于扩展新版本图鉴。
目标
- 图鉴分怪物、装备、坐骑、宠物、称号 5 类。
- 首次解锁记录,重复获取转为图鉴积分。
- 每类收集达到 10/30/50/80% 解锁永久属性。
2. 核心规则
2.1 解锁
- 击杀怪物、获得装备/坐骑/宠物/称号时自动解锁对应图鉴。
- 限时物品解锁图鉴后过期仍保留图鉴。
- 图鉴解锁不可逆,不因物品删除而失效。
2.2 积分与里程碑
- 重复获取同一图鉴 +5 积分,每日上限 100。
- 图鉴积分用于兑换收集奖励。
- 里程碑按收集百分比解锁,属性全角色生效。
- 收集度按已解锁数/总数计算,保留两位小数。
2.3 属性
- 图鉴属性只计算一次,不随装备/背包变化。
- 同类属性与其他系统加法汇总,百分比单独乘区。
- 图鉴战力计入总战力,竞技模板可关闭。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/numeric/codex.lua
Codex = {
categories = { "monster", "equip", "mount", "pet", "title" },
milestones = { 0.1, 0.3, 0.5, 0.8 },
milestone_attr = { atk=10, def=10, hp=100 },
duplicate_score = 5,
daily_score_cap = 100,
}
function OnUnlock(ctx, role, category, entry_id)
if ctx:IsUnlocked(role, category, entry_id) then
ctx:AddCodexScore(role, Codex.duplicate_score, Codex.daily_score_cap)
return
end
ctx:UnlockCodex(role, category, entry_id)
local pct = ctx:GetCollectRate(role, category)
for _, m in ipairs(Codex.milestones) do
if pct >= m then ctx:TryGrantMilestone(role, category, m) end
end
ctx:RecalcCodexAttributes(role)
end
- 图鉴解锁事件由 C++ 在获得物品/击杀时触发。
- 里程碑幂等,按
role + category + milestone唯一。 - 属性重算只汇总已解锁图鉴。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| S→C | SC_CodexList | 分类/条目/收集度 |
| S→C | SC_CodexUnlock | 新解锁 |
| C→S | CS_CodexReward | 领取里程碑 |
| S→C | SC_CodexAttr | 属性加成 |
3.3 收集与竞技
- 图鉴属性为永久成长,竞技场可配置是否生效。
- 收集度过低的新服可开启追赶加成(可配置)。
- 图鉴积分兑换不产出战斗道具,避免经济冲击。
4. 客户端设计
- 图鉴分类页:已解锁/未解锁剪影、收集度。
- 条目详情:来源、首次解锁时间、故事。
- 里程碑进度条与奖励领取。
- 图鉴积分/兑换商店。
- 收集度总览与属性加成。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
category | 分类 |
entry_id | 条目 |
milestones | 里程碑 |
milestone_attr | 属性 |
duplicate_score | 重复积分 |
Lua 接口:IsUnlocked、UnlockCodex、GetCollectRate、TryGrantMilestone、AddCodexScore、RecalcCodexAttributes。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 重复解锁 | 转积分,不重复加属性 |
| 物品过期 | 图鉴保留 |
| 里程碑重复领取 | 幂等 |
| 分类新增条目 | 收集度重算,不回收已发奖励 |
| 脚本异常 | 解锁成功但属性延迟重算,记录日志 |
7. 验收标准
- 5 类图鉴解锁/重复积分/收集度正确。
- 里程碑属性/奖励幂等。
- 图鉴属性重算正确,不重复叠加。
- 过期/新增条目处理正确。
- 客户端收集度显示一致。