跳到主要内容

PRD-066 伤害挑战与木桩测试

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

1. 背景与目标​

伤害挑战用于数值验证、职业平衡与玩家炫技。战斗时长、木桩属性、统计口径、排行榜适合用 Lua 编排。

目标

  • 提供 30/60/120 秒木桩挑战,统计 DPS/总伤害/技能占比。
  • 按职业/等级段排名,赛季发奖。
  • 统一 Buff/药剂规则,保证可比性。

2. 核心规则​

2.1 挑战规则​

  • 玩家进入独立场景,木桩无限血量、不还手。
  • 可选 30/60/120 秒,开始后倒计时,结束结算。
  • 允许使用自身技能/药剂,禁止外部 Buff、组队、宠物(可配置)。
  • 每人每日 5 次,取最高成绩。

2.2 统计口径​

  • DPS = 总有效伤害 / 实际战斗时长。
  • 有效伤害排除溢出、免疫、护盾吸收。
  • 记录技能伤害占比、暴击率、命中率。
  • 异常伤害(超过理论上限)标记无效。

2.3 排名​

  • 按职业 + 等级段分组,避免跨职业比较。
  • 赛季 30 天,结束时发奖。
  • 前 100 名展示伤害构成,供平衡参考。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/arena/dps_challenge.lua
DPS = {
durations = { 30, 60, 120 },
daily_limit = 5,
dummy_id = 99001,
allow_pet = false,
}

function OnChallengeStart(ctx, role, duration)
if ctx:GetDailyCount(role, "dps") >= DPS.daily_limit then
return ctx:Fail(role, "今日次数已用完")
end
local dummy = ctx:SpawnDummy(DPS.dummy_id)
ctx:SetRoleVar(role, "dps_start", ctx:Now())
ctx:SetRoleVar(role, "dps_damage", 0)
ctx:SetTimer("dps_end", duration, function() OnChallengeEnd(ctx, role, duration) end)
end

function OnDamage(ctx, role, damage, skill_id)
ctx:AddRoleVar(role, "dps_damage", damage)
ctx:RecordSkillDamage(role, skill_id, damage)
end

function OnChallengeEnd(ctx, role, duration)
local total = ctx:GetRoleVar(role, "dps_damage")
local score = total / duration
ctx:SubmitDpsScore(role, duration, score, ctx:GetSkillBreakdown(role))
ctx:AddDailyCount(role, "dps", 1)
end
  • 木桩/场景由 C++ 创建,伤害事件转发脚本统计。
  • 统计只认服务端结算后的有效伤害。
  • 异常伤害/速度/技能 CD 触发校验,成绩作废。

3.2 协议​

方向协议说明
C→SCS_DpsStart开始挑战
S→CSC_DpsState倒计时/实时 DPS
S→CSC_DpsResult总伤害/DPS/占比
S→CSC_DpsRank职业榜

3.3 平衡与反作弊​

  • 统一禁用外部 Buff/队友/宠物(可配置)。
  • 校验技能 CD、攻速、伤害上限。
  • 同一角色成绩异常波动记录日志。
  • 赛季奖励按职业分组,避免强势职业垄断。

4. 客户端设计​

  • 挑战面板:时长选择、规则说明、木桩预览。
  • 战斗 HUD:倒计时、实时 DPS、总伤害。
  • 结算:DPS、技能占比饼图、暴击/命中率。
  • 职业榜/好友榜/自己的排名。
  • 一键对比同职业前 10 配装(可选)。

5. 配置与 Lua 接口​

配置说明
durations时长
dummy_id木桩
daily_limit每日次数
allow_pet是否允许宠物
season_days赛季

Lua 接口:SpawnDummy、RecordSkillDamage、SubmitDpsScore、GetSkillBreakdown、GetDpsRank。

6. 边界与异常​

场景处理
挑战中掉线成绩按已造成伤害结算/作废(配置)
木桩被击杀立即重置满血
使用外部 Buff成绩无效
重复提交幂等
脚本异常结束挑战,不记录成绩

7. 验收标准​

  • 30/60/120 秒挑战、统计、结算正确。
  • 有效伤害/DPS/占比/暴击率正确。
  • 职业分组排名与赛季奖励正确。
  • 反作弊校验生效。
  • 客户端实时数据与服务端一致。