PRD-051 资源点争夺
文档编号:PRD-051
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
脚本挂载:lua/world/resource_point.lua
1. 背景与目标
资源点争夺提供帮会/阵营间的野外冲突目标。占领、产出、税收、争夺时间适合用 Lua 编排,可复用为跨服资源战。
目标
- 地图上分布资源点,帮会可占领并持续产出。
- 占领需读条/清场,其他帮会可争夺。
- 产出按帮会贡献分配,部分进入帮会资金。
2. 核心规则
- 每张资源地图 3–5 个资源点,等级 1–3。
- 占领需在范围内人数 ≥ 3 且无敌人,读条 60 秒。
- 占领后每 10 分钟产出资源,存入资源点仓库。
- 其他帮会可攻击守卫/玩家,清场后重新占领。
- 资源点有保护期 15 分钟,保护期内不可被争夺。
- 每日 22:00 结算,按占领时长发放帮会奖励。
3. 服务端设计
3.1 Lua 脚本设计
-- lua/world/resource_point.lua
ResourcePoint = {
capture_time = 60,
min_players = 3,
produce_interval = 600,
protect_time = 900,
}
function OnCaptureStart(ctx, guild, point)
if ctx:GetPointOwner(point) and ctx:InProtect(point) then
return ctx:Fail(guild, "资源点保护中")
end
if ctx:CountGuildInRange(guild, point) < ResourcePoint.min_players then
return ctx:Fail(guild, "占领人数不足")
end
ctx:StartCapture(guild, point, ResourcePoint.capture_time)
end
function OnCaptureDone(ctx, guild, point)
ctx:SetPointOwner(point, guild)
ctx:SetProtect(point, ResourcePoint.protect_time)
ctx:StartTimer("produce_" .. point.id, ResourcePoint.produce_interval, function()
ctx:ProduceResource(point)
end)
end
- 资源点归属、保护期、仓库由 C++/DB 维护,脚本控制规则。
- 产出定时器按资源点创建,归属变更时重建。
- 结算按占领时长/产出统计,脚本发奖。
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_ResourceCapture | 发起占领 |
| S→C | SC_ResourcePointInfo | 归属/保护/产出 |
| S→C | SC_ResourceCapture | 占领进度 |
| S→C | SC_ResourceSettle | 结算奖励 |
3.3 争夺与保护
- 占领期间受到攻击/离开范围打断。
- 保护期内其他帮会不能发起占领,但可PK。
- 资源点守卫由脚本配置,死亡后 5 分钟刷新。
4. 客户端设计
- 地图资源点图标:归属帮会颜色、保护倒计时、产出。
- 占领进度条、人数要求提示。
- 资源点面板:产出、仓库、守卫。
- 争夺提示/帮会召集。
- 每日结算邮件。
5. 配置与 Lua 接口
| 配置 | 说明 |
|---|---|
point_id / map_id | 资源点 |
capture_time | 占领时间 |
min_players | 最少人数 |
produce_interval | 产出间隔 |
protect_time | 保护期 |
Lua 接口:GetPointOwner、CountGuildInRange、StartCapture、SetPointOwner、SetProtect、ProduceResource。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 占领中帮会解散 | 取消占领 |
| 归属帮会长期无人 | 产出暂停/自动释放 |
| 服务器重启 | 归属/保护期从 DB 恢复 |
| 跨服争夺 | 由 MiniServer 映射,按配置开启 |
| 脚本异常 | 停止产出,保留归属 |
7. 验收标准
- 占领/保护/产出/争夺/结算全流程正确。
- 人数、范围、保护期校验完整。
- 产出与帮会分红正确。
- 重启/解散/跨服处理正确。
- 脚本可调整资源点规则。