跳到主要内容

PRD-068 1v1 擂台切磋

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

1. 背景与目标​

擂台切磋提供低门槛的即时 1v1 对抗与连胜追求。匹配、连胜、让分、观战适合用 Lua 编排,与排位赛区分。

目标

  • 玩家可在擂台 NPC 处发起/接受切磋,不消耗装备耐久。
  • 连胜记录、擂台榜、每日奖励。
  • 支持等级/战力让分,避免一边倒。

2. 核心规则​

2.1 切磋规则​

  • 双方等级 ≥ 20,非战斗/非副本状态。
  • 切磋不死亡、不掉装备、不消耗耐久,血量最低保留 1。
  • 限时 5 分钟,时间到按剩余血量百分比判定。
  • 允许使用技能/药剂,禁止外部 Buff/宠物(可配置)。

2.2 匹配与让分​

  • 可自由挑战或快速匹配同分段对手。
  • 战力差 > 20% 时,低战力方获得伤害/减伤让分。
  • 让分系数由脚本配置,最高 15%。
  • 连胜 3 场后匹配更高分段对手。

2.3 连胜与榜单​

  • 胜利 +1 连胜,失败清零;连胜 5/10/20 场有额外奖励。
  • 每日前 10 场有奖励,后续只有荣誉。
  • 擂台榜按连胜/胜率排序,每周重置。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/arena/duel.lua
Duel = {
min_level = 20,
duration = 300,
handicap_threshold = 0.2,
handicap_max = 0.15,
streak_rewards = { 5, 10, 20 },
}

function OnDuelStart(ctx, role, target)
if ctx:InCombat(role) or ctx:InDungeon(role) then return ctx:Fail(role, "当前状态不可切磋") end
if math.abs(ctx:GetLevel(role) - ctx:GetLevel(target)) > 10 then
return ctx:Fail(role, "等级差过大")
end
local arena = ctx:CreateDuelScene(role, target)
ctx:ApplyHandicap(arena, Duel.handicap_threshold, Duel.handicap_max)
ctx:SetTimer("duel_end_" .. arena.id, Duel.duration, function() ctx:JudgeByHp(arena) end)
end

function OnDuelEnd(ctx, arena, winner, loser)
ctx:AddStreak(winner, 1)
ctx:ResetStreak(loser)
ctx:GrantStreakReward(winner, Duel.streak_rewards)
ctx:RestoreState(winner, loser)
ctx:UpdateDuelRank(winner, loser)
end
  • 切磋场景独立,结束恢复双方位置/状态/HP。
  • 让分/连胜/奖励由脚本计算。
  • 结果幂等,按 duel_id 唯一。

3.2 协议​

方向协议说明
C→SCS_DuelRequest发起切磋
C→SCS_DuelReply接受/拒绝
S→CSC_DuelState倒计时/血量/让分
S→CSC_DuelResult胜负/连胜

3.3 竞技公平​

  • 切磋不影响排位积分/PK 值。
  • 同一对手连续切磋 3 次后奖励递减。
  • 让分只影响伤害/减伤,不改属性面板。

4. 客户端设计​

  • 擂台 NPC/入口、快速匹配、挑战列表。
  • 切磋确认:对手信息、战力、让分。
  • 战斗 HUD:双方血量、倒计时、连胜。
  • 结算:胜负、连胜、奖励、再战。
  • 擂台榜与观战入口。

5. 配置与 Lua 接口​

配置说明
duration时限
handicap_threshold让分阈值
handicap_max最大让分
streak_rewards连胜奖励

Lua 接口:CreateDuelScene、ApplyHandicap、JudgeByHp、AddStreak、ResetStreak、GrantStreakReward。

6. 边界与异常​

场景处理
一方掉线30 秒未回判负
双方同时死亡按剩余血量/伤害判定
战斗中使用外部 Buff清除/判负
重复请求幂等
场景创建失败退还消耗,提示

7. 验收标准​

  • 发起/接受/战斗/判定/结算正确。
  • 切磋不死亡/不掉耐久/恢复状态正确。
  • 让分/连胜/奖励/榜单正确。
  • 掉线/同时死亡/异常处理正确。
  • 客户端血量/倒计时一致。