# 03 系统设计

本文档以“可实现、可平衡、可扩展”为目标，对核心系统做可落地的规格定义。所有系统尽量以统一的“条件/消耗/产出/冷却/概率/标记”表达，便于数据驱动与复用。

## 3.1 时间系统

### 3.1.1 时间推进来源

- 被动流逝：玩家停留在地点、整理背包、阅读日志
- 行为推进：制作、采集、移动、休息、治疗、战斗
- 加速推进：长行为可在 UI 显示进度条并快速推进

### 3.1.2 时间推进的副作用（统一执行顺序）

一次时间推进 `advanceTime(Δt)` 必须按固定顺序执行，避免“先后顺序导致结果不可解释”：

1. 计算状态消耗（饥饿/口渴/精力/理智/辐射等）
2. 计算 Buff/Debuff 结算（按 interval 或按时间累计）
3. 地点资源刷新与生长
4. 敌人刷新窗口推进（遭遇表/权重）
5. 灾害计时与效果更新
6. 触发“基于时间”的任务/事件检查
7. 写入日志与可视化提示

```mermaid
flowchart TD
  A[advanceTime Δt] --> B[状态消耗]
  B --> C[Buff结算]
  C --> D[资源生长]
  D --> E[遭遇/敌人刷新]
  E --> F[灾害结算]
  F --> G[任务/事件检查]
  G --> H[日志与提示]
```

对应源文件：[time-pipeline.mmd](./diagrams/time-pipeline.mmd)

### 3.1.3 可测试性要求

- `advanceTime(Δt)` 必须是纯逻辑可重放：输入（状态/地点/随机种子）确定，输出确定
- 所有随机必须可注入 seed，避免线上“无法复现”的 bug

## 3.2 状态系统（生存/精神/污染）

### 3.2.1 核心状态列表（建议）

- 生命（HP）：硬失败边界
- 饥饿：低饥饿降低恢复、降低命中/逃跑等
- 口渴：比饥饿更急迫，强约束出行时长
- 精力：约束连续行动；低精力叠加负面 Buff
- 理智：驱动叙事与事件；低理智引发幻觉/误判/不可控选择（可选）
- 辐射/污染：长期压力；影响上限、引发变异与负面状态

### 3.2.2 状态表示与阈值

每个状态至少包含：

- `value` 当前值
- `min/max` 上下限（或软上限）
- `regen/decay` 每分钟变化或由公式计算
- `thresholds` 阈值效果表（进入阈值时添加/移除 Buff）

阈值效果建议优先“软惩罚”，例如：

- 饥饿过低：移动耗时增加、制作速度降低、战斗命中降低
- 口渴过低：理智下降加快、出行事件风险上升
- 辐射过高：最大生命/精力上限下降，物品治疗效率降低

### 3.2.3 Buff/Debuff 设计

Buff 必须具备可解释来源与可清除/可缓解路径：

- 来源：事件、食物、药物、环境、灾害、装备、技能
- 结算：按时间间隔（interval）或按行动（onAction）触发
- 堆叠：定义 stack 规则（叠加、刷新时长、取最大/取和）

## 3.3 物品、背包与容器

### 3.3.1 物品分类

- 食物：恢复饥饿/精力，可能增加辐射或降低理智
- 饮水：恢复口渴，可能增加辐射
- 材料：用于制作、交易、修理
- 工具：提高采集/制作效率，通常有耐久
- 武器/护甲：战斗相关
- 药品：治疗/解毒/抗辐射
- 任务物品：推动剧情，通常不可丢弃或有提示

### 3.3.2 容量模型（推荐：体积）

- `volume`：物品占用体积
- `stackLimit`：最大堆叠
- 背包容量 `bagCapacity`：体积上限
- 容器（箱子/仓库）容量 `storageCapacity`：体积上限

当前实现采用：

- `Field Bag`：在线行动时唯一权威随身背包
- `Shelter Storage`：避难所内的长期仓储层
- 主 HUD 只摘要显示随身容量，完整整理在独立背包弹层完成

设计理由：

- 体积比“格子”更适合废土资源管理的“取舍”表达
- 体积比“重量”更少涉及物理与移动速度耦合，平衡更稳定

### 3.3.3 耐久与损耗

- 工具/装备耐久下降来源：使用、战斗、环境事件
- 耐久影响方式：
  - 低耐久降低效率/命中/防护
  - 耐久为 0 时失效或损坏
- 修理策略：
  - 基地可修理（消耗材料 + 时间）
  - 野外可应急修理（更高成本/更低效率）

### 3.3.4 仓储访问规则

- 仓储不是全地图随时可开，而是地点约束能力
- 当前版本仅在 `home / Shelter-7` 允许取放仓储
- 配方在避难所内可以读取仓储材料，避免“物资明明囤着却不能做”的违和感

## 3.4 制作、烹饪、锻造与科研

### 3.4.1 配方数据结构（通用）

每条配方至少包含：

- `id/name`
- `workbenchType`（手工/工坊/锻造/烹饪/过滤/医疗/科研）
- `requirements`：科技/设施/属性阈值/工具条件
- `inputs`：消耗物品与数量
- `outputs`：产出物品与数量（支持概率）
- `timeCost`：时间消耗（分钟）
- `energyCost`：精力消耗（可选）
- `byproducts`：副产物（垃圾、污染等）

### 3.4.2 科技树（能力导向）

科技树节点建议分为三类：

- 解锁类：解锁制作台/地点能力/新区域
- 优化类：降低时间成本、降低材料损耗、提高成功率
- 风险类：引入强力收益同时引入副作用（辐射、灾害触发概率等）

### 3.4.3 制作失败与变体（提升可玩性）

可选机制：

- 失败：按成功率产生损耗/产出降低/副产物增加
- 变体：同一配方可因材料替代产生不同品质/副作用
- 品质：普通/良好/精良（品质影响耐久/效果/价值）

## 3.5 地图、地点与移动

### 3.5.1 地点图（Graph）结构

- 节点：地点（基地、路口、资源点、剧情点）
- 边：路径（时间成本、风险等级、交通方式）

### 3.5.2 移动消耗

移动的成本由三部分组成：

- 时间成本（基础时间 * 路径系数）
- 状态消耗（按时间推进的消耗 + 额外精力消耗）
- 风险成本（途中遭遇概率、受伤概率、资源损耗）

### 3.5.3 地点模板（用于内容生产）

每个地点应配置：

- `tags`：地洞/村庄/废墟/丛林/避难所等
- `dangerLevel`：风险等级（用于 UI 提示与遭遇权重）
- `resourceNodes`：可采集资源与刷新规则
- `trashNodes`：随机垃圾池与刷新规则
- `encounterTable`：敌人/事件权重表
- `services`：交易/休息/制作/治疗/情报
- `questHooks`：进入/停留/条件触发的任务节点

## 3.6 采集、垃圾与资源刷新

### 3.6.1 资源节点（可预测收益）

资源节点用于提供“可规划收益”：

- 刷新规则：按时间增长（线性/分段）、上限、特殊条件（肥料/净水）
- 采集成本：工具、时间、精力
- 产出：固定 + 少量随机波动

### 3.6.2 垃圾节点（高随机收益）

垃圾节点用于提供“惊喜与赌博”：

- 产出：低价值材料为主，少量稀有掉落
- 风险：可能触发负面事件（感染/辐射/敌人）

### 3.6.3 风险收益标注（UI 需求）

每个采集/垃圾行为都要显示：

- 预估耗时（分钟）
- 预估消耗（口渴/精力）
- 风险提示（可能战斗/可能辐射/可能受伤）

## 3.7 事件系统（详细）

### 3.7.1 事件结构

事件由三部分构成：

- `trigger`：触发条件（地点/时间/状态/物品/任务进度）
- `content`：文本与选项（可插入变量）
- `effects`：结果链（消耗/获得/状态变化/标记/战斗/跳转）

### 3.7.2 选项与概率

选项结果支持：

- 固定结果
- 概率结果（权重表）
- 属性检定（属性→成功率→不同结果）
- 资源检定（消耗某物品才可选）

### 3.7.3 事件结果链（可组合）

结果链建议采用“原子效果”组合：

- `addItem/removeItem`
- `addStatus`
- `addBuff/removeBuff`
- `setFlag`（任务标记、世界标记）
- `startCombat`
- `teleport`（移动到新地点）
- `unlockRecipe/unlockPlace`
- `log`（统一日志格式）

## 3.8 战斗系统（详细）

### 3.8.1 战斗定位

战斗用于表达风险，避免成为主玩法；战斗时间应可控，且“逃跑始终可行但有代价”。

### 3.8.2 战斗模型（距离 + 回合）

关键变量：

- `distance`：双方距离（离散或连续）
- `range`：武器有效射程
- `hitRate`：命中率（基于距离、状态、装备、掩体）
- `damage`：伤害（基础值 * 修正）
- `armor`：减伤/免伤机制
- `stamina/energy`：战斗行动消耗

玩家动作：

- 进攻：消耗弹药/耐久，可能造成伤害
- 防御：降低被命中或降低伤害
- 前进/后退：改变距离，影响下一回合命中率与逃跑
- 逃跑：成功则结束战斗并触发“撤离成本”（掉落/受伤/时间损失）

```mermaid
stateDiagram-v2
  [*] --> Init
  Init --> PlayerTurn
  PlayerTurn --> Resolve
  Resolve --> EnemyTurn
  EnemyTurn --> Resolve
  Resolve --> CheckEnd
  CheckEnd --> PlayerTurn: 未结束
  CheckEnd --> Escape: 逃跑成功
  CheckEnd --> Win: 敌人死亡
  CheckEnd --> Lose: 玩家死亡/崩溃
  Escape --> [*]
  Win --> [*]
  Lose --> [*]
```

对应源文件：[combat-state.mmd](./diagrams/combat-state.mmd)

### 3.8.3 战斗掉落与后果

- 掉落不只是奖励，也是内容容器（任务物品、线索、稀有材料）
- 战斗后果必须可见：
  - 伤口/感染（持续性 debuff）
  - 辐射暴露
  - 装备耐久下降
  - 弹药消耗与补给压力

## 3.9 任务系统（详细）

### 3.9.1 任务状态机

任务建议包含：

- `NotStarted` 未触发
- `Active` 进行中
- `Completed` 完成（领取奖励）
- `Failed` 失败（可选）
- `Locked` 锁定（条件不足）

### 3.9.2 任务目标类型

- 拥有/交付物品
- 到达地点/探索次数
- 击败敌人
- 制作某物
- 触发某事件/做出某选择
- 生存到某天/某时间窗口

### 3.9.3 奖励设计

奖励优先给“能力”而非单纯资源：

- 解锁新配方、新地点服务、新设施槽位
- 给关键工具/装备（降低后续成本）
- 给叙事线索与地图标记

## 3.10 灾害系统（详细）

灾害由三段组成：

- 预警期：给玩家准备窗口（提示与倒计时）
- 爆发期：改变规则（消耗曲线、遭遇权重、资源刷新）
- 残留期：提供短期机会（灾后掉落、特殊事件）

灾害必须满足：

- 可配置开始条件（天数区间、概率、任务触发）
- 可配置影响范围（全局/特定区域）
- 对 UI 有清晰展示（倒计时、当前影响）

## 3.11 交易与经济系统（简化版）

交易系统建议为“基于稀缺度的动态标价”：

- 基础价：物品配置中的 `baseValue`
- 地点修正：不同地点对物品类别有偏好（倍率）
- 供需修正：根据玩家近期交易记录做轻微浮动，避免刷钱
- 风险定价：高风险区域的补给更贵、材料更便宜

经济更完整设计见：[05-数值与经济.md](./05-%E6%95%B0%E5%80%BC%E4%B8%8E%E7%BB%8F%E6%B5%8E.md)
