PRD-046 赛马竞速
文档编号:PRD-046
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/activity/horse_race.lua
1. 背景与目标
赛马提供轻竞技与外观展示。赛道、检查点、加速道具、排名结算适合用 Lua 编排,可扩展节日赛道。
目标
- 每日固定场次,玩家骑乘统一赛马参赛。
- 赛道检查点、加速带、障碍、随机事件由脚本配置。
- 按到达顺序发奖,支持观战与回放。
2. 核心规则
- 每日 3 场,每场最多 20 人,报名费金币/道具。
- 赛马属性统一,只受赛道道具与技能影响。
- 赛道设 5 个检查点,必须按顺序通过。
- 加速带 +30% 速度 3 秒,障碍减速 50% 2 秒。
- 第一名到达后 60 秒结束,未完成按检查点进度排名。
- 禁止使用传送/坐骑技能/攻击道具。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/activity/horse_race.lua
Race = {
checkpoints = { {x=100,y=100}, {x=200,y=120}, {x=300,y=200} },
boost_zones = { {x=150,y=110,r=5,rate=1.3,time=3} },
obstacle_zones = { {x=250,y=160,r=4,rate=0.5,time=2} },
}
function OnRaceStart(ctx)
for _, role in ipairs(ctx:GetRacers()) do
ctx:TeleportToStart(role)
ctx:SetRoleVar(role, "checkpoint", 0)
ctx:SetRoleVar(role, "race_state", "running")
end
ctx:StartTimer("race_tick", 1, OnRaceTick)
end
function OnCheckpoint(ctx, role, index)
local current = ctx:GetRoleVar(role, "checkpoint")
if index ~= current + 1 then return ctx:Fail(role, "检查点顺序错误") end
ctx:SetRoleVar(role, "checkpoint", index)
if index == #Race.checkpoints then
ctx:FinishRace(role)
end
end
function OnRaceTick(ctx)
for _, role in ipairs(ctx:GetRacers()) do
ctx:ApplyZoneEffects(role, Race.boost_zones, Race.obstacle_zones)
end
end
- 检查点、加速/障碍区域由 C++ 触发器检测,脚本判定顺序与效果。
- 赛马速度、状态由服务端计算,客户端只表现。
- 排名按完成时间/检查点进度,服务端记录。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_RaceEnter | 报名 |
| S→C | SC_RaceState | 倒计时/检查点/排名 |
| S→C | SC_RaceCheckpoint | 通过检查点 |
| S→C | SC_RaceResult | 排名/奖励 |
3.3 防作弊
- 禁止传送/加速外挂,速度异常记录并取消成绩。
- 检查点必须按顺序,跳点无效。
- 赛道内禁止 PK/交易/邮件。
4. 客户端设计
- 报名面板:场次、人数、奖励、赛道预览。
- 比赛 HUD:检查点进度、排名、速度、加速/减速提示。
- 赛道指引箭头、加速带/障碍高亮。
- 观战模式:跟随第一名/自由视角。
- 结算:排名、用时、奖励。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
checkpoints | 检查点 |
boost_zones | 加速区 |
obstacle_zones | 障碍区 |
max_racers | 人数 |
reward_group | 排名奖励 |
Lua 接口:GetRacers、TeleportToStart、ApplyZoneEffects、FinishRace、GetRank、GrantReward。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 比赛中掉线 | 保留 30 秒,超时按当前进度排名 |
| 检查点漏过 | 必须返回补过 |
| 所有人未完成 | 按进度排名 |
| 服务器重启 | 本场取消,退还报名费 |
| 脚本异常 | 结束比赛,按当前排名发奖 |
7. 验收标准
- 报名/倒计时/检查点/加速/障碍/排名正确。
- 统一属性、禁用道具、防作弊生效。
- 掉线/重启/异常有处理。
- 客户端排名与服务端一致。
- 节日赛道可通过脚本扩展。