跳到主要内容

PRD-070 5v5 夺旗战场

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

1. 背景与目标​

5v5 夺旗战场提供团队目标对抗。旗子状态、夺旗/交旗、复活、比分适合用 Lua 编排。

目标

  • 5v5 随机/组队匹配,率先达到 3 面旗或时间结束比分高者胜。
  • 旗手、护卫、拦截形成职业分工。
  • 赛季战场排名与奖励。

2. 核心规则​

2.1 战场​

  • 对称地图,双方基地各 1 面旗,中央 1 面中立旗。
  • 玩家可夺取敌方旗,带回己方基地交旗得分。
  • 旗手移动速度 -15%,受到伤害提高 10%,死亡后旗子掉落。
  • 己方旗被夺时不可交旗,需先夺回。

2.2 得分​

  • 交敌方旗 +1 分,交中立旗 +1 分。
  • 先到 3 分获胜;时间 15 分钟,结束按比分判定。
  • 平局按击杀数 > 伤害量判定。

2.3 复活​

  • 死亡后 10 秒在基地复活,复活点有无敌 3 秒。
  • 旗手死亡后旗子留在原地,30 秒无人拾取自动回基地。

3. 服务端设计​

3.1 Lua 脚本设计​

-- lua/arena/battleground_5v5.lua
BG = {
team_size = 5,
flags_to_win = 3,
duration = 900,
revive_seconds = 10,
flag_drop_ttl = 30,
}

function OnFlagPick(ctx, role, flag)
if ctx:IsCarrying(role) then return ctx:Fail(role, "已携带旗子") end
ctx:AttachFlag(role, flag)
ctx:ApplyCarrierDebuff(role)
ctx:Broadcast(team, "我方已夺取旗帜")
end

function OnFlagCapture(ctx, role, flag)
if not ctx:InBase(role, ctx:GetTeam(role)) then return ctx:Fail(role, "不在基地") end
if ctx:IsOwnFlagStolen(role) then return ctx:Fail(role, "先夺回己方旗") end
ctx:Score(role, 1)
ctx:ResetFlag(flag)
if ctx:GetScore(ctx:GetTeam(role)) >= BG.flags_to_win then ctx:EndMatch() end
end

function OnCarrierDeath(ctx, role, flag)
ctx:DropFlag(flag, role)
ctx:SetTimer("flag_return_" .. flag.id, BG.flag_drop_ttl, function() ctx:ReturnFlag(flag) end)
end
  • 旗子状态、得分、复活由脚本管理,C++ 负责移动/战斗。
  • 旗手 Buff/掉落/回归全部服务端判定。
  • 结束/结算幂等,按 match_id 唯一。

3.2 协议​

方向协议说明
C→SCS_BGEnter进入战场
S→CSC_BGState比分/旗子/倒计时
S→CSC_BGFlag夺旗/掉落/交旗
S→CSC_BGResult胜负/奖励

3.3 竞技公平​

  • 公平模板统一属性,保留职业/技能。
  • 禁止外部 Buff/坐骑/宠物(可配置)。
  • 挂机/消极比赛判定,扣除奖励。
  • 掉线 2 分钟判负,队友可继续。

4. 客户端设计​

  • 战场 HUD:比分、旗子位置、携带者、倒计时。
  • 地图标记:己方/敌方/中立旗、基地、复活点。
  • 旗手标记与护卫提示。
  • 夺旗/交旗交互按钮。
  • 结算:比分、击杀、贡献、奖励。

5. 配置与 Lua 接口​

配置说明
team_size人数
flags_to_win胜利分数
duration时长
revive_seconds复活时间
carrier_debuff旗手减益

Lua 接口:AttachFlag、DropFlag、ReturnFlag、Score、InBase、IsOwnFlagStolen。

6. 边界与异常​

场景处理
双方同时交旗串行结算,先到先得
旗手掉线旗子掉落
平局按击杀/伤害判定
重复交旗幂等
战场人数不足补机器人/判负(配置)

7. 验收标准​

  • 夺旗/掉落/回归/交旗/得分/胜负正确。
  • 旗手减益/复活/无敌/平局判定正确。
  • 公平模板/挂机判定生效。
  • 客户端旗子/比分与服务端一致。
  • 结算奖励可追溯。