跳到主要内容

PRD-067 副本竞速榜

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

1. 背景与目标​

副本竞速提供高难挑战与队伍排名。计时、检查点、阵容限制、榜单适合用 Lua 编排,可按副本单独配置。

目标

  • 指定副本开启竞速模式,按通关时间排名。
  • 队伍阵容、死亡次数、buff 使用影响成绩有效性。
  • 每周/赛季结算,前 100 名发奖。

2. 核心规则​

2.1 竞速模式​

  • 仅指定副本/难度开启,进入时选择竞速模式。
  • 计时从进入副本开始,到最终 BOSS 死亡结束。
  • 死亡会加罚时:每人次 +10 秒;全灭加 60 秒。
  • 允许复活,但复活次数计入成绩面板。

2.2 成绩有效性​

  • 必须按顺序击杀所有 BOSS,跳怪/卡地形无效。
  • 禁止使用副本外 Buff/药剂(可配置)。
  • 队伍成员中途退出/换人,成绩无效。
  • 服务器校验伤害/治疗/移动日志,异常成绩下榜。

2.3 排名​

  • 按副本 + 难度 + 队伍规模分组。
  • 同成绩按达成时间早者优先。
  • 每周一重置周榜,赛季保留历史最佳。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/arena/speedrun.lua
Speedrun = {
dungeons = { 2601, 2602 },
penalty_death = 10,
penalty_wipe = 60,
min_members = 3,
}

function OnRunStart(ctx, team, dungeon_id)
if not ctx:IsSpeedrunDungeon(dungeon_id) then return end
ctx:SetTeamVar(team, "run_start", ctx:Now())
ctx:SetTeamVar(team, "deaths", 0)
ctx:SetTeamVar(team, "wipes", 0)
ctx:SetTeamVar(team, "valid", true)
end

function OnMemberDeath(ctx, team)
ctx:AddTeamVar(team, "deaths", 1)
end

function OnBossKill(ctx, team, boss_id)
if ctx:IsFinalBoss(boss_id) then
local elapsed = ctx:Now() - ctx:GetTeamVar(team, "run_start")
local penalty = ctx:GetTeamVar(team, "deaths") * Speedrun.penalty_death
+ ctx:GetTeamVar(team, "wipes") * Speedrun.penalty_wipe
ctx:SubmitSpeedrun(team, elapsed + penalty, ctx:GetTeamVar(team, "valid"))
end
end
  • 计时/罚时/有效性由脚本计算,C++ 提供队伍与副本事件。
  • 成绩提交幂等,按 run_id 唯一。
  • 换人/退出事件自动标记成绩无效。

3.2 协议​

方向协议说明
C→SCS_SpeedrunStart开始竞速
S→CSC_SpeedrunState计时/罚时/进度
S→CSC_SpeedrunResult成绩/排名
S→CSC_SpeedrunRank榜单

3.3 反作弊​

  • 校验 BOSS 击杀顺序、伤害来源、移动速度。
  • 禁止副本外 Buff,进入时清除。
  • 异常成绩人工复核,确认后下榜/封禁。

4. 客户端设计​

  • 竞速入口/规则说明、队伍报名。
  • 副本内计时器、罚时提示、BOSS 进度。
  • 结算:总用时、罚时、死亡、排名。
  • 榜单:队伍、阵容、用时、日期。
  • 历史最佳/回放(可选)。

5. 配置与 Lua 接口​

配置说明
dungeon_id副本
penalty_death死亡罚时
penalty_wipe全灭罚时
min_members最少人数
season_days赛季

Lua 接口:IsSpeedrunDungeon、SetTeamVar、AddTeamVar、SubmitSpeedrun、GetSpeedrunRank。

6. 边界与异常​

场景处理
中途换人成绩无效
掉线重连计时继续,可完成
重复提交幂等
服务器重启进行中成绩作废
脚本异常不记录成绩,保留副本奖励

7. 验收标准​

  • 计时/罚时/进度/结算正确。
  • 换人/跳怪/外部 Buff 判定无效。
  • 榜单分组/并列/周重置正确。
  • 反作弊校验与下榜流程可用。
  • 客户端计时与服务端一致。