PRD-062 转生与轮回
文档编号:PRD-062
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/numeric/rebirth.lua
1. 背景与目标
转生提供满级后的长期成长与数值重置。转生条件、保留项、转生点、专属内容适合用 Lua 编排。
目标
- 100 级可转生,转生后等级重置,获得转生点与专属属性。
- 保留装备/图鉴/坐骑等收集,重置等级/技能点/主线。
- 转生次数越多,成长上限越高。
2. 核心规则
2.1 转生条件
- 等级 ≥ 100,完成转生任务,消耗转生令。
- 无未领取的等级奖励、无进行中的转生任务。
- 转生后 24 小时内可回退(仅限首次/可配置)。
2.2 重置与保留
| 项目 | 处理 |
|---|---|
| 等级/经验 | 重置为 1 级 |
| 技能点/天赋 | 重置并返还 |
| 主线任务 | 保留已完成标记,可跳过 |
| 装备/背包/仓库 | 保留 |
| 图鉴/坐骑/宠物/称号 | 保留 |
| 排行榜 | 转生榜单独统计 |
2.3 转生收益
- 每次转生获得 5 点转生点,可加成分支。
- 转生等级提供全属性 +5%/次,上限 5 次。
- 解锁转生专属副本/商店/称号。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/numeric/rebirth.lua
Rebirth = {
level = 100,
max_times = 5,
points_per = 5,
keep = { "equip", "bag", "codex", "mount", "pet", "title" },
}
function OnRebirth(ctx, role)
if ctx:GetLevel(role) < Rebirth.level then return ctx:Fail(role, "等级不足") end
if ctx:GetRebirthTimes(role) >= Rebirth.max_times then return ctx:Fail(role, "已达上限") end
if not ctx:Consume(role, "rebirth_token", 1) then return ctx:Fail(role, "转生令不足") end
ctx:BackupRole(role)
ctx:ResetLevel(role, 1)
ctx:ResetSkills(role)
ctx:ResetTalents(role, true)
ctx:AddRebirthTimes(role, 1)
ctx:AddRebirthPoints(role, Rebirth.points_per)
ctx:RecalcAttributes(role)
ctx:RefreshRebirthRank(role)
end
- 转生是事务:备份、重置、加点、属性、榜单。
- 保留项按
keep列表处理,未列出的按默认重置。 - 转生点分配走独立接口,可重置。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_Rebirth | 转生 |
| C→S | CS_RebirthPoint | 分配转生点 |
| S→C | SC_RebirthInfo | 次数/点数/加成 |
| S→C | SC_RebirthResult | 结果/重置项 |
3.3 竞技约束
- 转生后 24 小时内不参与跨服联赛(可配置)。
- 竞技场按转生次数分段,避免新转生被碾压。
- 转生榜与等级榜分开。
4. 客户端设计
- 转生面板:条件、保留项、收益、确认。
- 转生动画/全服公告。
- 转生点分配树。
- 转生专属商店/副本入口。
- 回退入口与倒计时。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
level | 转生等级 |
max_times | 最多次数 |
points_per | 转生点 |
attr_bonus | 属性加成 |
keep | 保留项 |
Lua 接口:GetLevel、ResetLevel、ResetSkills、ResetTalents、AddRebirthTimes、AddRebirthPoints、RefreshRebirthRank。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 转生中掉线 | 事务回滚/重连查询 |
| 背包满 | 保留项不涉及背包,正常 |
| 任务链断链 | 转生后按标记跳过/补接 |
| 回退超过时限 | 禁止 |
| 脚本异常 | 回滚到备份 |
7. 验收标准
- 转生条件/重置/保留/收益正确。
- 转生点分配/重置正确。
- 事务失败可回滚。
- 榜单/竞技分段正确。
- 客户端预览与实际一致。