跳到主要内容

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→CSC_CodexList分类/条目/收集度
S→CSC_CodexUnlock新解锁
C→SCS_CodexReward领取里程碑
S→CSC_CodexAttr属性加成

3.3 收集与竞技​

  • 图鉴属性为永久成长,竞技场可配置是否生效。
  • 收集度过低的新服可开启追赶加成(可配置)。
  • 图鉴积分兑换不产出战斗道具,避免经济冲击。

4. 客户端设计​

  • 图鉴分类页:已解锁/未解锁剪影、收集度。
  • 条目详情:来源、首次解锁时间、故事。
  • 里程碑进度条与奖励领取。
  • 图鉴积分/兑换商店。
  • 收集度总览与属性加成。

5. 配置与 Lua 接口​

配置说明
category分类
entry_id条目
milestones里程碑
milestone_attr属性
duplicate_score重复积分

Lua 接口:IsUnlocked、UnlockCodex、GetCollectRate、TryGrantMilestone、AddCodexScore、RecalcCodexAttributes。

6. 边界与异常​

场景处理
重复解锁转积分,不重复加属性
物品过期图鉴保留
里程碑重复领取幂等
分类新增条目收集度重算,不回收已发奖励
脚本异常解锁成功但属性延迟重算,记录日志

7. 验收标准​

  • 5 类图鉴解锁/重复积分/收集度正确。
  • 里程碑属性/奖励幂等。
  • 图鉴属性重算正确,不重复叠加。
  • 过期/新增条目处理正确。
  • 客户端收集度显示一致。