lawless/docs/需求文档/PRD-03-热更新与活动系统需求文档.md

301 行
18 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# PRD-03 热更新与活动系统需求文档
> **文档类型**产品需求文档Product Requirements Document
> **版本**v1.0
> **日期**2026-06-30
> **关联文档**TDD-00《挂机手游技术栈方案.md》、GDD-06《经济系统设计》、GDD-08《大陆地图与区域开放系统》、GDD-18《世界地图副本遗迹生成引擎》、GDD-22《开放世界随机事件与玩家可交互内容层》、GDD-21《数值平衡与联调参数总表》、PRD-01《核心玩法与系统需求文档》、PRD-02《境界隔离系统需求文档》
---
## 1. 需求背景
《洪荒大陆》不做赛季重置,也不通过官方任务链驱动内容。世界节奏由四类来源共同构成:
1. **固定副本**(常驻/轮换的资源与挑战副本,GDD-18 §三);
2. **随机世界事件**外神入侵、天材地宝、妖兽潮等,GDD-22 §四);
3. **玩家发起事件**(消耗道具/资源开启秘境、召唤帮派 Boss、举行仪式等,GDD-22 §4.4);
4. **破界分红**(高境界玩家破界后,原门派/帮派不可携带资源转为阵营/帮派每日分红,GDD-06 §13.5 / GDD-08 §3.8)。
为了在不发版的前提下持续轮换上述内容、快速修正经济/战斗参数、响应线上异常,必须同时具备:
- **客户端热更新能力**:基于 Cocos Creator 3.x Asset Bundle + CDN,覆盖活动 UI、战报文案、事件配置、资源等;
- **服务器动态参数能力**:基于 Nacos 配置中心,对战斗、经济、事件、地图等关键参数进行热更,无需停服。
> 核心设计约束来源PRD-01无赛季/无任务系统/概率机遇驱动、GDD-06 §13.5活动轮换原则、GDD-22开放世界随机事件层、TDD-00 §2.3/§3.5Asset Bundle 热更 / Nacos 配置中心)。
---
## 2. 客户端热更新
### 2.1 热更范围
| 类型 | 可热更内容 | 不可热更内容(必须整包/商店发版) |
|------|-----------|--------------------------------|
| **Asset Bundle** | 活动玩法 UI 与逻辑脚本、战报文案/i18n、事件配置表、场景/地图资源、图集、音效、角色立绘 | 引擎版本升级、原生插件/SDK 变更、操作系统权限配置、核心网络协议版本变更 |
| **配置 JSON** | 数值配置(掉落、技能生成参数、事件权重)、活动开关、版本号 | 客户端底层协议结构不兼容变更 |
| **H5 小程序活动** | 通过 WebView 加载的 H5 活动页、运营页面 | WebView 容器本身版本 |
> 来源TDD-00 §2.3;GDD-18 §7.1(权重/掉落配置可热更)。
### 2.2 版本号与 Manifest
**版本号规则**`主版本.次版本.热更版本.资源版本`,例如 `1.2.3.4`
| 位 | 含义 | 触发场景 |
|----|------|---------|
| 主版本 | 大版本/商业资料片 | 整包发版 |
| 次版本 | 中型玩法/系统上线 | 整包或大型 Bundle 发版 |
| 热更版本 | 脚本/逻辑/配置热更 | Asset Bundle 热更即可 |
| 资源版本 | 纯美术/音效/文案替换 | Asset Bundle 热更即可 |
**Manifest 字段**
```json
{
"packageUrl": "https://cdn.example.com/bundles/",
"remoteManifestUrl": "https://cdn.example.com/project.manifest",
"remoteVersionUrl": "https://cdn.example.com/version.manifest",
"version": "1.2.3.4",
"minEngineVersion": "3.8.0",
"assets": {
"bundles/event_summer": { "md5": "a1b2c3", "size": 2048, "compressed": true },
"config/event_pool.json": { "md5": "d4e5f6", "size": 12 }
},
"searchPaths": ["hotupdate"],
"signature": "base64(RSA-SHA256)"
}
```
- 客户端本地保存 `project.manifest`;启动时拉取远程 `version.manifest` 做快速比对;有差异时再拉完整 `project.manifest`
- Manifest 必须带服务端私钥签名,客户端用内置公钥校验,防止篡改/中间人攻击。
### 2.3 差分包机制
1. 服务端按版本维护完整 `project.manifest`;CDN 同时存放按 Bundle 切分的压缩包(`.zip`/`.zip.*`)。
2. 客户端比对本地与远程 `assets` 字典,生成 **Added / Modified / Deleted** 列表。
3. 优先下载 Bundle 级差异:若某 Bundle 内任一文件变更,则下载该 Bundle 的整包差分(避免万级小文件逐个请求)。
4. 支持断点续传、失败重试、CDN 自动切换。
5. 下载完成后按文件 MD5/SHA-256 校验;校验不通过则重试,最多 3 次后标记失败。
### 2.4 灰度策略
| 维度 | 说明 |
|------|------|
| **分组灰度** | 按账号 hash、设备 ID、渠道包、地区、测试白名单分组 |
| **百分比灰度** | 通过 Nacos 配置 `hotupdate.gray.{version}.percent` 控制,例如 5% → 20% → 100% |
| **频道隔离** | 保留 `test` / `staging` / `production` 三套 manifest/CDN 路径,互不干扰 |
| **强制/屏蔽** | 可对特定用户段强制推送或强制屏蔽某版本 |
灰度期间实时监控崩溃率、启动失败率、校验失败率;任一指标超过阈值自动暂停灰度并触发回滚。
### 2.5 回滚策略
- **自动回滚**:客户端应用新 Bundle 后,若连续 2 次启动异常(崩溃/校验失败/关键接口报错),自动回退到上一版本备份。
- **手动回滚**:运营后台通过 Nacos 设置 `hotupdate.rollback_target=1.2.3.3`,客户端拉取到该标记后跳过新版本并恢复旧 manifest。
- **双版本备份**:客户端本地保留当前版本与上一稳定版本两份资源,回滚无需重新下载。
- **服务端回滚**:服务器侧关闭新活动入口/新配置,确保旧版本客户端仍可正常游戏。
### 2.6 异常处理
| 异常 | 处理策略 |
|------|---------|
| 下载失败 | 自动重试 3 次、切换 CDN、延迟到 Wi-Fi 环境继续;最终失败提示玩家稍后重试 |
| 校验失败 | 重下对应文件 → 仍失败则回滚 |
| 存储不足 | 计算所需空间并提示清理;允许玩家跳过非紧急资源(低优先级音频/图集) |
| 网络中断 | 断点续传;恢复后从断点继续下载 |
| 版本不兼容 | 若 `minEngineVersion` 高于当前引擎,跳转商店强制整包更新 |
| Manifest 签名失败 | 禁止应用,上报安全告警 |
---
## 3. 服务器动态参数Nacos
### 3.1 配置项分类
| 分类 | 示例参数 | 影响范围 | 来源 |
|------|---------|---------|------|
| **经济 economy** | `economy.faucet.travel.rare_event_rate``economy.faucet.afk.output_rate``economy.tax.trade_rate``economy.exchange.rate_fluctuation_max``economy.sink.repair.cost_rate` | 产出/消耗/税率/汇率 | GDD-06 §14.3 |
| **战斗 combat** | `combat.atb.tick_ms``combat.damage.formula.*``combat.element.reaction.*``combat.cap.crit``combat.cap.dodge` | ATB 节奏、伤害公式、元素反应、硬顶 | GDD-03 / GDD-21 |
| **事件 event** | `event.world.trigger_interval``event.world.weights.*``event.player_initiated.costs.*``event.破界遗迹.generation_rate``event.encounter.cooldown` | 随机事件触发频率/权重、玩家发起事件成本、遗迹生成概率 | GDD-18 / GDD-22 |
| **地图 map** | `map.cross_layer.cost_rate``map.降维护佑.damage_cap``map.layer_unlock.realm_tier``map.realm_tier.pvp_rule` | 跨层代价、降维护佑、地图准入 | GDD-08 / PRD-02 |
> 所有数值最终以 GDD-21《数值平衡与联调参数总表》为准,PRD-03 不另起炉灶。
### 3.2 热更触发流程
```
运营后台编辑配置 → 审批流(双人确认)→ 发布到 Nacos
→ Nakama / Gin 服务监听配置变更
→ 本地配置快照原子替换
→ 写变更审计日志
→ 向在线客户端推送配置版本号WS 广播或响应头)
→ 客户端按需拉取新配置
```
- 变更生效不重启服务;战斗公式等关键参数使用不可变快照,避免运行时读到中间态。
- 配置变更后全服公告(视影响范围而定,如税率/产出倍率变更需公告)。
### 3.3 版本一致性
| 机制 | 说明 |
|------|------|
| **服务端配置版本** | Nacos 中维护 `server.config.version`(如 `20260630-001`),每次发布递增 |
| **客户端携带版本** | 客户端每次请求附带 `X-Config-Version`;服务端发现低于当前版本时,在响应中返回最新完整配置或强制刷新指令 |
| **实例一致性** | 所有 Nakama/Gin 实例通过 Nacos 长轮询监听同一 `dataId`;告警监控各实例当前配置版本,发现 skew 立即告警 |
| **审计与追溯** | 配置变更记录保存操作人、变更原因、旧值、新值、生效时间、关联 Git commit hash |
### 3.4 安全与兜底
- **合法性校验**Nacos 配置发布前经 JSON Schema + 数值范围校验,非法配置拒绝发布并保留旧值。
- **紧急回滚**:运营后台一键回滚到上一个稳定配置版本;客户端在 10 秒内收到旧版本号。
- **默认值**服务启动时加载本地默认配置兜底;Nacos 不可用时继续服务并告警。
---
## 4. 随机事件系统
### 4.1 事件池维护
事件池按作用域与类型维护,支持服务端配置热更与客户端 Asset Bundle 文案热更:
| 事件类型 | 作用域 | 示例 | 维护方式 |
|----------|--------|------|---------|
| **个人遭遇** | 单玩家 | 灵气异动、心魔来袭、古修残魂、顿悟征兆 | 配置表 + 客户端文案 Bundle |
| **区域事件** | 同区域/同层 | 天材地宝出世、妖兽异动、副本入口刷新 | 服务端事件池配置 |
| **世界事件** | 全服 | 外神入侵、神兽现世、灵气潮汐 | 服务端事件池配置 |
| **玩家发起事件** | 全服/区域 | 召唤秘境、帮派 Boss、仪式召集、悬赏追杀 | 玩家消耗 + 服务端校验 |
事件池条目包含ID、触发条件、权重、冷却、 layer 限制、参与人数上限、奖励池、分支/链式后续事件。
### 4.2 触发与刷新
- **时间刷新**:以现实时间 `08:00` 为每日基准GDD-02 ✅87,重置个人/区域事件冷却。
- **行为触发**游历、挂机、突破、交易、PVP 等行为按概率触发对应事件。
- **世界事件调度**:服务端调度器按权重随机抽取,通过 Kafka 广播给所有在线玩家,并在「世界脉动」面板展示GDD-22 §4
- **防重复**:同类型事件对同一玩家/区域有现实时间冷却;同区域同时存在世界事件数量上限防止信息过载。
### 4.3 玩家发起事件
| 入口 | 触发条件 | 消耗 | 广播与参与 |
|------|---------|------|-----------|
| 地图面板「召唤秘境」 | 持有对应道具、达到 layer/境界 | 道具 + 货币sink | 区域广播,其他玩家可进入;超过时限或人数上限后入口关闭 |
| 帮派「召唤帮派 Boss」 | 帮派资金/权限 | 帮派资金 + 材料 | 帮派/势力频道广播,成员可参与 |
| 仪式召集 | 道侣/结义/师徒关系 | 关系值 + 道具 | 关系链广播 |
| 发布悬赏 | 持有货币 | 赏金 + 平台抽成 | 佣兵大厅/世界脉动展示GDD-13 |
- 所有消耗必须服务端校验,防止客户端篡改。
- 玩家发起事件产生的奖励/风险由事件设计决定,不得凭空创造官方增发资源。
### 4.4 事件链与分支
- 部分事件具备多阶段状态机:例如「外神入侵」分为「征兆 → 降临 → 抵御 → 封印/失控」四阶段,玩家/社区选择影响下一阶段事件池与奖励。
- 分支状态存储于 PostgreSQL + Valkey,支持跨玩家协作/竞争。
- 事件链中的选择结果对参与玩家分别结算,稀有分支受概率与玩家机缘属性影响。
### 4.5 事件奖励
- 奖励类型:货币/材料、技能玉简/拓本、稀有线索、情报凭证、声望、称号/外观。
- 奖励严格按事件触发层级与参与玩家境界投放,高境界玩家进入低层级事件时适用跨境界产出衰减GDD-06 §13.2)。
- 具体数值引用 GDD-21;奖励概率与倍数可通过 Nacos 热更。
---
## 5. 活动轮换
### 5.1 无赛季原则
- 不存在官方赛季重置、段位清空、排行榜清零。
- 活动内容随时间自然轮换,玩家进度、领地、称号、资源永久保留。
### 5.2 四类活动来源
| 来源 | 说明 | 周期/触发 | 运营干预方式 |
|------|------|-----------|-------------|
| **固定副本** | 常驻副本 + 主题副本轮换(如「百炼塔」「古战场」) | 每日/每周进入次数限制GDD-18 §7.3.3 | Nacos 调整掉落倍率、次数、主题 |
| **随机世界事件** | 外神入侵、天材地宝、妖兽潮等 | 服务端按权重随机触发 | Nacos 调整权重、间隔、奖励倍率 |
| **玩家发起事件** | 玩家消耗资源开启秘境/Boss/仪式 | 由玩家行为驱动 | Nacos 调整消耗、冷却、参与上限 |
| **破界分红** | 高境界玩家破界后,原门派/帮派资源转为阵营/帮派每日分红 | 长期持续 | Nacos 调整分红比例与上限 |
### 5.3 活动日历
服务端维护一个「活动日历」服务,将上述四类来源合并为玩家可见的近期动态:
- 固定副本按日/周排程;
- 随机世界事件按概率预告(如「近日洪荒边境灵气躁动」暗示事件发生概率上升);
- 玩家发起事件实时加入日历;
- 破界分红按日发放并展示。
运营可通过 GM 后台在不发版的情况下调整活动日历权重与参数。
---
## 6. 数据埋点
### 6.1 经济监控
| 指标 | 用途 | 来源 |
|------|------|------|
| 各货币日净产出/消耗比 | 识别通胀/通缩 | GDD-06 §14.1 |
| 交易行均价趋势 | 识别操纵/洗钱 | GDD-06 §14.1 |
| 死亡修复 sink / 总 faucet | 验证高惩罚经济回收 | GDD-06 §14.1 |
| 鸿蒙紫气净增发/充值额 | 监控偷渡补贴 | GDD-06 §7.2 |
### 6.2 事件参与度
| 指标 | 用途 |
|------|------|
| 各类型事件触发次数、参与人次、完成率 | 评估事件吸引力 |
| 玩家发起事件数 / 成功率 / 参与转化率 | 评估玩家驱动内容健康度 |
| 事件分支选择分布 | 验证分支设计 |
| 世界事件对在线时长/留存影响 | 验证世界事件价值 |
### 6.3 热更成功率
| 指标 | 用途 |
|------|------|
| manifest 拉取成功率、下载成功率、校验成功率 | 验证热更链路 |
| 版本覆盖率 / 版本 adoption 曲线 | 验证灰度效果 |
| 热更后崩溃率 / 回滚率 | 验证版本质量 |
| 灰度组与全量组关键指标对比 | 验证灰度安全 |
---
## 7. 非功能性需求
| 类别 | 需求 | 备注 |
|------|------|------|
| **兼容性** | 客户端保持对至少前两个 manifest 版本的向后兼容;服务端配置 schema 升级时旧字段保留默认值 | 避免强制更新造成用户流失 |
| **可回滚** | 客户端与服务端均可在 5 分钟内回滚到上一稳定版本/配置 | 自动 + 手动双保险 |
| **灰度策略** | 支持百分比、分组、地区、渠道多维度灰度;可随时暂停/全量/回退 | 来源 TDD-00 §2.3 |
| **监控告警** | Prometheus/Grafana 监控热更成功率、Nacos 配置版本一致性、事件参与度、经济指标;P0 告警:热更失败率 > 5%、配置版本 skew > 1%、异常经济波动 > 50% | |
| **安全** | Manifest 与资源签名、传输 HTTPS/WSS、Nacos 鉴权、客户端公钥内置、防篡改校验 | |
| **性能** | 启动热更检查 P99 < 3s普通 Bundle 差分包下载 P99 < 30s服务端配置全局生效 P99 < 10s | |
| **审计** | 所有配置变更活动开关灰度调整记录操作人/原因/旧值/新值 | 满足运营合规 |
---
## 8. 验收标准
| # | 验收条目 | 测试方法 |
|---|----------|----------|
| 1 | 客户端启动时能在 3 秒内完成 manifest 比对并仅下载变更的 Asset Bundle 差分包 | 抓包/日志统计下载文件数与耗时验证未变更文件不再下载 |
| 2 | Manifest 被篡改或签名不匹配时客户端拒绝应用新资源并触发告警 | 替换 CDN manifest 签名观察客户端是否拦截并上报 |
| 3 | Nacos 修改 `economy.faucet.afk.output_rate` 服务端在 10 秒内生效且所有 Nakama/Gin 实例配置版本一致 | 修改参数后调用各实例接口返回的配置版本号检查是否一致 |
| 4 | 灰度发布新版本后仅指定百分比/分组用户进入新版本其余用户保持旧版本灰度期间崩溃率超过阈值自动暂停 | 构造灰度计划抽样用户版本号模拟新版本崩溃样本观察是否自动回滚 |
| 5 | 玩家发起召唤秘境事件时服务端校验道具/货币消耗后才生成入口并在区域频道与世界脉动广播 | 尝试客户端篡改消耗数量验证服务端拒绝检查广播与入口生成 |
| 6 | 高境界玩家参与低层级世界事件时奖励按跨境界衰减规则结算不会破坏低层经济 | 记录不同境界角色参与同一事件的产出核对衰减系数 |
| 7 | 热更失败下载/校验/应用失败客户端能自动回滚到上一稳定版本并正常进入游戏 | 模拟 CDN 返回错误文件/断网观察回滚与启动结果 |
| 8 | 事件系统每日 08:00 重置个人/区域冷却且同类型事件在冷却期内不会重复触发同一玩家 | 调整系统时间/等待刷新验证冷却逻辑 |
---
## 9. 版本记录
| 版本 | 日期 | 修订内容 | 作者 |
|------|------|----------|------|
| v1.0 | 2026-06-30 | 初始版本客户端热更新服务器动态参数随机事件系统活动轮换数据埋点非功能需求与验收标准 | Kimi Code CLI |
---
> **设计原则重申**:本文档继承 PRD-01 核心约束——无任务系统、无赛季重置、概率/机遇驱动、降低官方存在感。所有活动内容均通过固定副本、随机世界事件、玩家发起事件与破界分红自然轮换;官方仅提供规则、基础设施、反作弊与动态调参能力。