跳到主要内容

PRD-061 等级封印与世界等级

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

1. 背景与目标​

等级封印用于控制服务器成长节奏、保护新手与延长版本生命周期。封印等级、解锁条件、追赶加成适合用 Lua 编排。

目标

  • 服务器有世界等级与角色等级上限,按开服天数/进度解锁。
  • 达到封印等级后经验转为封印经验,解锁后返还。
  • 低等级玩家获得追赶加成,缩小差距。

2. 核心规则​

2.1 世界等级​

  • 开服第 1 天上限 40,之后按配置逐日/逐周提升。
  • 世界等级由运营配置 + 全服进度共同决定(可配置权重)。
  • 达到上限后角色经验不再提升等级,转为封印经验池。
  • 封印经验池上限 = 当前等级升级经验 × 3。

2.2 解锁​

  • 时间解锁:到达配置日期自动解锁。
  • 进度解锁:全服达到指定人数/击杀世界 BOSS 后解锁。
  • 解锁全服公告,封印经验按 100% 返还(可配置)。

2.3 追赶​

  • 低于世界等级 10 级的角色获得经验 +50%、掉落 +20%。
  • 低于 20 级获得 +100% 经验,并解锁新手保护。
  • 追赶加成不影响副本/竞技奖励上限。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/numeric/world_level.lua
WorldLevel = {
start_day = 1,
schedule = { [1]=40, [3]=45, [7]=50, [14]=55, [30]=60 },
seal_exp_cap_rate = 3.0,
catchup = { [10]={exp=0.5, drop=0.2}, [20]={exp=1.0, drop=0.0} },
}

function OnExpGain(ctx, role, exp)
local cap = ctx:GetWorldLevel()
if ctx:GetLevel(role) >= cap then
ctx:AddSealExp(role, exp, ctx:GetLevelExp(role) * WorldLevel.seal_exp_cap_rate)
return 0
end
local bonus = ctx:GetCatchupRate(role, WorldLevel.catchup)
return ctx:ApplyExp(role, exp * (1 + bonus.exp))
end

function OnWorldLevelUp(ctx, new_level)
for _, role in ipairs(ctx:GetSealedRoles()) do
ctx:ReleaseSealExp(role)
end
ctx:Broadcast("world", "世界等级提升至 " .. new_level)
end
  • 世界等级由脚本按开服天数计算,运营可手动覆盖。
  • 封印经验独立存储,解锁时批量返还。
  • 追赶加成在经验/掉落结算时读取。

3.2 协议​

方向协议说明
S→CSC_WorldLevel世界等级/封印/倒计时
S→CSC_SealExp封印经验池
S→CSC_WorldLevelUp解锁公告

3.3 竞技与榜单​

  • 等级榜按真实等级,不按封印经验。
  • 竞技场分级按世界等级分段。
  • 世界等级提升后,低等级保护延迟 24 小时生效。

4. 客户端设计​

  • 主界面显示世界等级、封印进度、解锁倒计时。
  • 经验条满时显示“封印中”,封印经验池。
  • 追赶加成图标与说明。
  • 世界等级提升全屏公告。
  • 等级榜/匹配分段说明。

5. 配置与 Lua 接口​

配置说明
schedule开服天数→上限
seal_exp_cap封印经验上限
catchup追赶档位
unlock_condition时间/进度

Lua 接口:GetWorldLevel、GetLevelExp、AddSealExp、ReleaseSealExp、GetCatchupRate、ApplyExp。

6. 边界与异常​

场景处理
封印经验溢出按上限截断,提示
手动调整世界等级记录操作人/原因
解锁时角色离线登录返还
世界等级回退禁止,需走运营流程
脚本异常保持当前等级,记录日志

7. 验收标准​

  • 世界等级按计划提升,封印/返还正确。
  • 追赶加成按等级差生效。
  • 榜单/竞技分段正确。
  • 手动调整/离线/异常有兜底。
  • 客户端封印状态与服务端一致。