跳到主要内容

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→SCS_ResourceCapture发起占领
S→CSC_ResourcePointInfo归属/保护/产出
S→CSC_ResourceCapture占领进度
S→CSC_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. 验收标准​

  • 占领/保护/产出/争夺/结算全流程正确。
  • 人数、范围、保护期校验完整。
  • 产出与帮会分红正确。
  • 重启/解散/跨服处理正确。
  • 脚本可调整资源点规则。