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→S | CS_BGEnter | 进入战场 |
| S→C | SC_BGState | 比分/旗子/倒计时 |
| S→C | SC_BGFlag | 夺旗/掉落/交旗 |
| S→C | SC_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. 验收标准
- 夺旗/掉落/回归/交旗/得分/胜负正确。
- 旗手减益/复活/无敌/平局判定正确。
- 公平模板/挂机判定生效。
- 客户端旗子/比分与服务端一致。
- 结算奖励可追溯。