Files
TinyWaste/docs/04-内容与数据字典.md
virtheart 2e1b58bada docs: 添加项目文档和图表文件
添加游戏设计文档、技术架构文档、数值经济文档等内容
新增Mermaid图表文件描述系统架构和流程
包含README说明文档结构和阅读顺序
2026-04-28 19:19:20 +08:00

273 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 04 内容与数据字典
本文档定义新项目的“数据驱动内容”规范:字段含义、约束与复用策略。目标是让内容策划能够在不改代码的情况下扩展大部分内容,同时让程序具备稳定、可验证的数据接口。
## 4.1 总体约束
- 所有配置都必须有 `id`(稳定、不可随意改名),并且支持本地化 `name/desc`
- 配置要可增量加载:按“基础数据 → 扩展包(DLC/活动)”分层,不互相覆盖时尽量追加。
- 任何“逻辑分支”都尽量用配置表达(条件表达式、标签、权重表、效果链),避免硬编码。
## 4.2 通用结构
### 4.2.1 标签(Tags
标签用于跨系统复用与筛选,避免重复字段:
- 物品标签:`food`, `water`, `medicine`, `scrap`, `tool`, `weapon`, `armor`, `ammo`, `quest`
- 地点标签:`home`, `settlement`, `ruins`, `tunnel`, `forest`, `vault`, `radiated`, `safe`
- 事件标签:`combat`, `trade`, `moral`, `hazard`, `story`
- 敌人标签:`human`, `mutant`, `insect`, `beast`, `robot`
### 4.2.2 条件(Condition
用于事件/任务/配方/解锁等系统的统一条件表达:
- 状态阈值:`status.hunger >= 20`
- 物品拥有:`inventory.has("water_purified", 1)`
- 科技完成:`tech.has("water_filter_1")`
- 地点/标记:`world.flag("met_mysterious_trader") == true`
- 时间:`time.day >= 5 && time.hour >= 18`
实现建议:条件采用受限表达式语言(DSL)或 JSON 结构化条件,避免 `eval`
### 4.2.3 效果(Effect
所有可配置结果尽量拆成原子效果并支持链式组合:
- `AddItem/RemoveItem`
- `AddStatus`(可正可负)
- `AddBuff/RemoveBuff`
- `SetFlag`(任务/世界标记)
- `UnlockRecipe/UnlockTech/UnlockPlaceService`
- `StartCombat`
- `Teleport`
- `Log`
## 4.3 物品(Item
### 4.3.1 字段定义(建议)
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id | string | 是 | 稳定唯一 ID |
| name | string | 是 | 显示名 |
| desc | string | 否 | 描述文本 |
| type | string | 是 | `food/material/tool/weapon/armor/ammo/quest/medicine` |
| tags | string[] | 否 | 标签,用于筛选与规则复用 |
| rarity | string | 否 | `common/uncommon/rare/epic` |
| stackLimit | number | 否 | 堆叠上限,默认 1 |
| volume | number | 否 | 占用体积,默认 1 |
| durability | {max:number} | 否 | 耐久,存在则可损耗 |
| effects | Effect[] | 否 | 使用后效果链(食物/药品等) |
| equipSlot | string | 否 | `weapon/head/body/foot` 等 |
| combat | object | 否 | 武器/护甲战斗参数 |
| baseValue | number | 否 | 基础交易价值 |
| craftable | boolean | 否 | 是否可制作(方便筛选 UI) |
### 4.3.2 武器/护甲 combat 字段(建议)
- 武器:
- `damageMin/damageMax`
- `range`
- `hitBonus`
- `ammoType`(可空:近战)
- `critChance/critMult`
- 护甲:
- `armor`
- `dodgeBonus`
- `radiationResist`(可选)
### 4.3.3 物品效果(使用)
食物/药品/饮水等用 `effects` 表达,避免写死:
```json
{
"id": "water_purified",
"name": "净水",
"type": "water",
"stackLimit": 10,
"volume": 1,
"effects": [
{"type": "AddStatus", "status": "thirst", "value": 25},
{"type": "AddStatus", "status": "radiation", "value": -2}
]
}
```
## 4.4 状态(Status)与阈值
### 4.4.1 字段定义
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id | string | 是 | `hunger/thirst/energy/life/san/radiation` 等 |
| name | string | 是 | 显示名 |
| desc | string | 否 | 说明 |
| min/max | number | 是 | 上下限 |
| value | number | 否 | 默认初值 |
| decayPerMin | number | 否 | 每分钟自然变化(负数表示下降) |
| thresholds | Threshold[] | 否 | 阈值效果表 |
### 4.4.2 Threshold 定义
- `atOrBelow``atOrAbove`
- `applyBuff` / `removeBuff`
- `uiHint`(用于提示玩家原因)
## 4.5 Buff/DebuffBuff
### 4.5.1 字段定义
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id | string | 是 | 稳定唯一 ID |
| name/desc | string | 是 | 显示 |
| type | string | 是 | `good/bad/neutral` |
| durationMin | number | 否 | 持续分钟数,空表示永久直到清除 |
| stack | object | 否 | 堆叠规则(maxStacks/refreshPolicy |
| tickIntervalMin | number | 否 | 结算间隔 |
| effects | Effect[] | 否 | 结算效果(例如每 10 分钟掉理智) |
| modifiers | object | 否 | 属性修正(命中/速度/消耗倍率) |
## 4.6 配方与科技(Recipe / Tech
### 4.6.1 配方(Recipe
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id/name | string | 是 | 标识 |
| workbenchType | string | 是 | `hand/workshop/forge/cook/filter/med/lab` |
| requirements | Condition[] | 否 | 条件集合 |
| inputs | {itemId:string,count:number}[] | 是 | 消耗 |
| outputs | {itemId:string,count:number,weight?:number}[] | 是 | 产出(可做权重表) |
| timeCostMin | number | 是 | 耗时 |
| energyCost | number | 否 | 精力消耗 |
| sideEffects | Effect[] | 否 | 副作用(辐射、疲劳等) |
### 4.6.2 科技(Tech
科技节点建议用“解锁能力”表达:
- 解锁配方:`unlockRecipes`
- 解锁地点服务:`unlockServices`
- 永久修正:`modifiers`(例如制作耗时倍率 -10%
- 前置:`requires`(其他科技、状态阈值、完成任务)
## 4.7 地图与地点(Map / Place
### 4.7.1 地点 Place
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id/name | string | 是 | 标识 |
| tags | string[] | 否 | `home/ruins/vault` 等 |
| dangerLevel | number | 是 | 010 |
| services | string[] | 否 | `trade/rest/craft/heal/info` |
| resourceNodes | ResourceNode[] | 否 | 可采集资源 |
| trashNodes | TrashNode[] | 否 | 垃圾池 |
| encounterTable | EncounterEntry[] | 否 | 遭遇权重表 |
| eventPools | string[] | 否 | 事件池 ID(通用+地点专属) |
| questHooks | QuestHook[] | 否 | 任务触发钩子 |
### 4.7.2 路径 Edge
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| from/to | string | 是 | 起终点地点 ID |
| travelTimeMin | number | 是 | 基础耗时 |
| risk | number | 否 | 途中风险修正(影响遭遇概率) |
| conditions | Condition[] | 否 | 需要某工具/科技才能通行 |
### 4.7.3 资源节点 ResourceNode
- `id/name`
- `refreshMin`:刷新/生长间隔
- `maxStock`:最大存量
- `growsPerRefresh`:每次生长数量
- `harvestCost`:时间/精力/工具
- `outputs`:产出物品权重表
### 4.7.4 垃圾节点 TrashNode
- `refreshMin`
- `risk`:触发负面事件概率加成
- `lootTable`:掉落权重表
## 4.8 敌人(Enemy
### 4.8.1 字段定义
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id/name | string | 是 | 标识 |
| tags | string[] | 否 | 类别标签 |
| level | number | 否 | 用于难度缩放 |
| life | number | 是 | 生命 |
| attack | {min:number,max:number} | 是 | 攻击 |
| armor | number | 否 | 护甲 |
| range | number | 否 | 射程 |
| hitRate | number | 否 | 命中 |
| skills | string[] | 否 | 技能 ID 列表 |
| lootTable | LootEntry[] | 否 | 掉落表 |
## 4.9 事件(Event
### 4.9.1 字段定义
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id | string | 是 | 事件 ID |
| tags | string[] | 否 | `combat/story/hazard` 等 |
| conditions | Condition[] | 否 | 触发条件 |
| weight | number | 否 | 权重,默认 1 |
| text | string | 是 | 主文本 |
| options | Option[] | 否 | 选项列表(04 |
Option
- `text`
- `conditions`
- `check`(属性检定配置,可选)
- `effects`(成功/失败效果链)
## 4.10 任务(Quest
### 4.10.1 字段定义
| 字段 | 类型 | 必填 | 说明 |
|---|---:|:---:|---|
| id/title | string | 是 | 标识 |
| type | string | 是 | `main/side/dynamic` |
| desc | string | 否 | 描述 |
| prereq | Condition[] | 否 | 前置条件 |
| steps | QuestStep[] | 是 | 阶段目标 |
| rewards | Effect[] | 否 | 完成奖励 |
| failConditions | Condition[] | 否 | 失败条件(可选) |
QuestStep 支持目标:
- `ReachPlace`
- `CollectItem`
- `DefeatEnemy`
- `CraftRecipe`
- `TriggerEvent`
- `SurviveDays`
## 4.11 日志(Log)与可观测性
为了让系统可解释、可测试、可回放:
- 所有关键变化都写日志:
- 状态变化(原因、数值)
- 战斗结果(命中/伤害/距离)
- 事件结果(选项、成功/失败、消耗/获得)
- 任务推进(步骤变化)
- 日志结构化,支持筛选与上报:
- `timestamp`
- `category`
- `message`
- `payload`(可选)