PRD-001 国战与攻城战
文档编号:PRD-001
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:MiniServer、ScenesServer/War.cpp、tbl/CountryWar.xml
1. 背景与目标
国战/攻城战是服务器级的大规模 PvP 玩法,承载阵营荣誉与资源分配。当前存在报名人数超限、城门耐久不同步、大将军死亡后结算重复等问题。本 PRD 统一报名、战场、城门/将军、积分、结算与补偿。
2. 核心规则
2.1 报名与分组
- 以帮会为单位报名,帮主/副帮主发起,成员确认。
- 单场最多 200 人(按服务器承载配置),分攻/守两方。
- 报名截止前可取消,开战后不可退出。
- 匹配按帮会战力/上周战绩分组,避免一边倒。
2.2 战场目标
| 目标 | 说明 | 积分 |
|---|---|---|
| 城门 | 攻方摧毁城门进入内城 | 500 |
| 守护塔 | 攻方摧毁 2 座塔 | 每座 200 |
| 大将军 | 击杀守方大将军 | 1000 |
| 坚守 | 守方守住大将军至结束 | 1500 |
- 攻方需依次摧毁城门 → 守护塔 → 大将军。
- 守方可修复城门/塔,消耗战场资源。
- 战场时间 60 分钟,提前达成目标结束。
2.3 积分与胜负
- 击杀玩家 +5,助攻 +2,摧毁建筑按上表。
- 时间结束未击杀大将军,守方胜。
- 积分相同按大将军剩余血量/城门剩余耐久判定。
2.4 奖励
- 胜方:国家声望、帮会资金、限定称号、拍卖分红。
- 负方:参与奖、少量声望。
- MVP 按击杀/治疗/建筑伤害评选,额外奖励。
- 奖励邮件发放,赛季结束统一结算排名奖励。
3. 服务端设计
3.1 数据结构
struct WarMatch {
uint64_t war_id;
uint32_t country_a, country_b;
std::vector<uint64_t> attackers, defenders;
uint32_t gate_hp, gate_max;
uint32_t tower_hp[2];
uint64_t general_id;
uint32_t start_time, end_time;
uint8_t state;
};
struct WarScore {
uint64_t guild_id;
uint32_t kill_score;
uint32_t building_score;
uint32_t total;
};
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_WarRegister | 报名 |
| C→S | CS_WarEnter | 进入战场 |
| C→S | CS_WarRepair | 修复城门/塔 |
| S→C | SC_WarState | 比分/城门/塔/倒计时 |
| S→C | SC_WarScore | 帮会/个人积分 |
| S→C | SC_WarResult | 胜负/奖励 |
3.3 战场同步
- 战场由
MiniServer创建独立场景,跨服帮会通过映射进入。 - 城门/塔血量以服务端为准,客户端只做表现。
- 建筑伤害按技能/普攻统一结算,禁止客户端上报伤害。
- 每 5 秒广播一次战场状态,关键事件立即广播。
3.4 结算与补偿
- 结算幂等键
war_id,只发一次奖励。 - 掉线玩家保留积分,奖励邮件补发。
- 服务器崩溃按战场快照恢复或判定守方胜,补偿参与奖。
- 战场内禁止交易/邮件附件/商店购买。
4. 客户端设计
- 国战面板:报名、阵营、战场时间、奖励预览。
- 战场地图:城门/塔/大将军位置、血量、归属。
- 比分板:双方积分、帮会排名、个人贡献。
- 建筑目标血条、摧毁/修复提示。
- 结算:胜负、MVP、奖励、战场回顾。
5. 配置
CountryWar.xml:max_players、war_duration、gate_hp、tower_hp、general_hp、repair_cost、score_rules、reward_group。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 报名人数超限 | 按帮会战力/报名顺序截断 |
| 开战后退出 | 禁止,掉线保留积分 |
| 城门/塔被同时攻击 | 服务端串行扣耐久 |
| 大将军被击杀瞬间结算 | 锁定战场状态,只结算一次 |
| 跨服帮会 | MiniServer 映射,失败提示 |
| 服务器崩溃 | 快照恢复/守方胜 + 补偿 |
7. 验收标准
- 报名/分组/进入/战场目标/结算全流程正确。
- 城门/塔/大将军耐久与伤害服务端权威。
- 200 人同场同步流畅,关键事件不丢失。
- 结算奖励幂等,掉线可补发。
- 跨服帮会进入与积分统计正确。