# PRD-03 热更新与活动系统需求文档

> **文档类型**：产品需求文档（Product Requirements Document）  
> **版本**：v1.1  
> **日期**：2026-07-06  
> **关联文档**：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.5（Asset 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 核心约束——无任务系统、无赛季重置、概率/机遇驱动、降低官方存在感。所有活动内容均通过固定副本、随机世界事件、玩家发起事件与天启分红自然轮换；官方仅提供规则、基础设施、反作弊与动态调参能力。
