2e1b58bada
添加游戏设计文档、技术架构文档、数值经济文档等内容 新增Mermaid图表文件描述系统架构和流程 包含README说明文档结构和阅读顺序
8.5 KiB
8.5 KiB
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/RemoveItemAddStatus(可正可负)AddBuff/RemoveBuffSetFlag(任务/世界标记)UnlockRecipe/UnlockTech/UnlockPlaceServiceStartCombatTeleportLog
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/damageMaxrangehitBonusammoType(可空:近战)critChance/critMult
- 护甲:
armordodgeBonusradiationResist(可选)
4.3.3 物品效果(使用)
食物/药品/饮水等用 effects 表达,避免写死:
{
"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或atOrAboveapplyBuff/removeBuffuiHint(用于提示玩家原因)
4.5 Buff/Debuff(Buff)
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 | 是 | 0–10 |
| 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/namerefreshMin:刷新/生长间隔maxStock:最大存量growsPerRefresh:每次生长数量harvestCost:时间/精力/工具outputs:产出物品权重表
4.7.4 垃圾节点 TrashNode
refreshMinrisk:触发负面事件概率加成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[] | 否 | 选项列表(0–4) |
Option:
textconditionscheck(属性检定配置,可选)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 支持目标:
ReachPlaceCollectItemDefeatEnemyCraftRecipeTriggerEventSurviveDays
4.11 日志(Log)与可观测性
为了让系统可解释、可测试、可回放:
- 所有关键变化都写日志:
- 状态变化(原因、数值)
- 战斗结果(命中/伤害/距离)
- 事件结果(选项、成功/失败、消耗/获得)
- 任务推进(步骤变化)
- 日志结构化,支持筛选与上报:
timestampcategorymessagepayload(可选)