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→S | CS_SpeedrunStart | 开始竞速 |
| S→C | SC_SpeedrunState | 计时/罚时/进度 |
| S→C | SC_SpeedrunResult | 成绩/排名 |
| S→C | SC_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 判定无效。
- 榜单分组/并列/周重置正确。
- 反作弊校验与下榜流程可用。
- 客户端计时与服务端一致。