PRD-004 情缘与结婚系统
文档编号:PRD-004
版本:v1.0
状态:已通过
适用端:服务端 / 客户端
关联模块:SessionServer/Marriage.cpp、RecordServer、tbl/Marriage.xml
1. 背景与目标
情缘/结婚系统承载社交与外观付费。当前存在求婚重复扣费、婚礼场景掉线后无法重进、夫妻技能属性叠加异常等问题。本 PRD 统一求婚、婚礼、夫妻技能、纪念日与离婚。
2. 核心规则
2.1 前置条件
- 双方等级 ≥ 30,单身,亲密度 ≥ 1000。
- 亲密度通过组队、赠礼、共同副本获得,每日上限。
- 求婚需消耗戒指/道具,对方 72 小时内答复。
- 已婚/冷却期内不可再次求婚。
2.2 婚礼
| 类型 | 花费 | 宾客 | 奖励 |
|---|---|---|---|
| 简约 | 金币 | 10 | 称号、纪念品 |
| 豪华 | 元宝 | 50 | 外观、双人坐骑 |
| 限定 | 活动道具 | 100 | 限时场景、全服公告 |
- 婚礼场景独立实例,宾客可传送进入。
- 婚礼持续 30 分钟,可提前结束。
- 掉线可重进,婚礼结束后传出。
2.3 夫妻权益
- 夫妻技能:传送、复活、属性加成,需双方在线。
- 夫妻任务:每日/周常,奖励共享。
- 纪念日:结婚周年邮件奖励。
- 离婚后技能/称号/任务失效。
2.4 离婚
- 协议离婚:双方确认,无冷却。
- 单方强制:消耗道具,7 天冷却。
- 离婚后亲密度保留 50%,称号回收,婚礼外观保留(可配置)。
3. 服务端设计
3.1 数据结构
struct Marriage {
uint64_t role_a, role_b;
uint32_t marry_time;
uint32_t intimacy;
uint8_t wedding_type;
uint8_t state; // proposing/married/divorced
};
struct Proposal {
uint64_t from_id, to_id;
uint32_t expire_ms;
uint32_t item_uid;
};
3.2 协议
| 方向 | 协议 | 说明 |
|---|---|---|
| C→S | CS_Propose | 求婚 |
| C→S | CS_ProposeReply | 答复 |
| C→S | CS_WeddingCreate | 创建婚礼 |
| C→S | CS_WeddingEnter | 进入婚礼 |
| C→S | CS_Divorce | 离婚 |
| S→C | SC_MarriageInfo | 夫妻信息/亲密度 |
| S→C | SC_WeddingState | 婚礼状态 |
3.3 事务与一致性
- 求婚扣戒指与创建提案在同一事务;拒绝/过期退还(可配置)。
- 结婚写双方关系、发称号、公告,必须原子完成。
- 婚礼场景由
MiniServer创建,结束后销毁。 - 离婚清理夫妻技能、任务、称号,保留亲密度按配置。
4. 客户端设计
- 求婚:选择目标、赠送戒指、写寄语、确认。
- 婚礼:场景入口、宾客列表、仪式流程、红包/礼物。
- 夫妻面板:亲密度、纪念日、夫妻技能、任务。
- 夫妻技能快捷栏,传送需对方确认。
- 离婚:协议/强制页签,显示冷却与后果。
5. 配置
Marriage.xml:min_level、intimacy_max、propose_expire、wedding_types、divorce_cooldown、skill_ids。
6. 边界与异常
| 场景 | 处理 |
|---|---|
| 对方已婚 | 拒绝 |
| 求婚重复 | 幂等,返回已有提案 |
| 婚礼中掉线 | 可重进,结束传出 |
| 一方删除角色 | 自动解除,邮件通知 |
| 离婚时婚礼进行中 | 禁止,需结束婚礼 |
| 亲密度异常 | 以服务端记录为准 |
7. 验收标准
- 求婚/答复/婚礼/夫妻技能/离婚全流程正确。
- 亲密度、冷却、等级校验生效。
- 婚礼场景掉线重进、结束清理正确。
- 离婚后技能/称号/任务失效。
- 扣费与关系变更事务一致。
相关阅读: