486
docs/prd/RUNTIME_ITEM_GENERATION_CURRENT_SYSTEM_DESIGN.md
Normal file
486
docs/prd/RUNTIME_ITEM_GENERATION_CURRENT_SYSTEM_DESIGN.md
Normal file
@@ -0,0 +1,486 @@
|
||||
# 当前运行时物品生成系统设计整理
|
||||
|
||||
更新时间:`2026-04-02`
|
||||
|
||||
## 0. 目标
|
||||
|
||||
这份文档只回答一个问题:
|
||||
|
||||
**当前仓库里,运行时物品是怎么被“定义、生成、发放、使用、转化、进入 build 结算”的。**
|
||||
|
||||
它不是未来方案,而是对现状的结构化整理,方便后续继续扩展 AI 原生玩法。
|
||||
|
||||
## 1. 当前系统的总体判断
|
||||
|
||||
当前仓库里的运行时物品系统,不是“纯 AI 生成”,而是一个 **本地规则驱动 + 局部程序化生成 + AI 负责叙事文本** 的体系。
|
||||
|
||||
它大体由 5 层组成:
|
||||
|
||||
1. **物品骨架层**
|
||||
- 用 `InventoryItem`、`ItemStatProfile`、`ItemUseProfile`、`ItemBuildProfile` 承载运行时能力。
|
||||
2. **基础生成层**
|
||||
- 用 `src/data/itemCatalog.ts` + `src/data/itemDesign.ts` 从素材路径推导出物品目录与设计元数据。
|
||||
3. **运行时发放层**
|
||||
- 在初始背包、NPC 库存、宝藏奖励、怪物掉落、拆解/锻造/重铸、自定义世界运行时生成等入口,把物品真正放进 `GameState`。
|
||||
4. **战斗/背包生效层**
|
||||
- 装备通过 `equipmentEffects.ts` 生效,消耗品通过 `inventoryEffects.ts` 生效,build 标签通过 `buildTags.ts` + `buildDamage.ts` 生效。
|
||||
5. **叙事包装层**
|
||||
- AI 负责把这些本地规则已经确定的结果写成剧情、聊天、宝藏描述、选项文案,但 **AI 当前并不直接产出结构化运行时物品**。
|
||||
|
||||
一句话概括:
|
||||
|
||||
**当前系统已经有“运行时物品玩法骨架”,但还没有“与具体背景 / 当前 NPC / 当前事件强绑定的 AI 原生物品导演层”。**
|
||||
|
||||
## 2. 当前核心数据结构
|
||||
|
||||
### 2.1 `InventoryItem`
|
||||
|
||||
运行时所有物品最终都落到 `InventoryItem`:
|
||||
|
||||
- 基础身份:`id`、`category`、`name`、`quantity`、`rarity`
|
||||
- 通用标签:`tags`
|
||||
- 世界/表现:`iconSrc`、`description`、`worldAffinity`、`worldProfiles`
|
||||
- 装备信息:`equipmentSlotId`
|
||||
- 数值能力:`statProfile`
|
||||
- 使用能力:`useProfile`
|
||||
- build 能力:`buildProfile`
|
||||
- 经济能力:`value`
|
||||
|
||||
这意味着当前系统已经允许同一个物品同时具备:
|
||||
|
||||
- 装备加成
|
||||
- 消耗品效果
|
||||
- build 标签
|
||||
- 世界观文案
|
||||
- 经济价值
|
||||
|
||||
### 2.2 `ItemStatProfile`
|
||||
|
||||
当前可直接进入数值结算的字段主要是:
|
||||
|
||||
- `maxHpBonus`
|
||||
- `maxManaBonus`
|
||||
- `outgoingDamageBonus`
|
||||
- `incomingDamageMultiplier`
|
||||
|
||||
这套结构已经足够支撑“少量直接数值提升”的物品设计。
|
||||
|
||||
### 2.3 `ItemUseProfile`
|
||||
|
||||
当前消耗品/可使用物品可提供:
|
||||
|
||||
- `hpRestore`
|
||||
- `manaRestore`
|
||||
- `cooldownReduction`
|
||||
- `buildBuffs`
|
||||
|
||||
这意味着当前系统已经具备“限时 build 标签道具”的基础承载能力。
|
||||
|
||||
### 2.4 `ItemBuildProfile`
|
||||
|
||||
当前 build 相关物品数据包括:
|
||||
|
||||
- `role`
|
||||
- `tags`
|
||||
- `setId`
|
||||
- `setName`
|
||||
- `pieceName`
|
||||
- `synergy`
|
||||
- `craftTags`
|
||||
- `forgeRank`
|
||||
|
||||
这说明当前物品系统已经不仅仅是“数值装备”,而是已经向 **build / 套装 / 锻造** 方向扩展。
|
||||
|
||||
## 3. 当前物品是如何被生成出来的
|
||||
|
||||
## 3.1 素材目录 -> 物品目录
|
||||
|
||||
`src/data/itemCatalog.ts` 负责把素材路径转成 `ItemCatalogEntry`:
|
||||
|
||||
- 先从素材路径推导:
|
||||
- `category`
|
||||
- `rarity`
|
||||
- `tags`
|
||||
- `name`
|
||||
- 再调用 `src/data/itemDesign.ts` 补充更完整的设计:
|
||||
- `statProfile`
|
||||
- `useProfile`
|
||||
- `buildProfile`
|
||||
- `value`
|
||||
- 世界观名称/描述
|
||||
|
||||
也就是说,当前项目里相当一部分物品,不是手工逐个写死的,而是 **“素材驱动 + 规则推导”**。
|
||||
|
||||
## 3.2 `itemDesign.ts` 的设计角色
|
||||
|
||||
`src/data/itemDesign.ts` 是当前最重要的“物品规则设计器”。
|
||||
|
||||
它会按素材族系推导出不同风格物品:
|
||||
|
||||
- `Armory` 系列
|
||||
- 生成武器/护甲
|
||||
- 自动带 `buildProfile`
|
||||
- 自动挂 `setId / setName / pieceName / synergy`
|
||||
- `Jewelry` 系列
|
||||
- 生成饰品
|
||||
- 偏向 `relic` 与 build 补位
|
||||
- `Potions` 系列
|
||||
- 生成消耗品
|
||||
- 可恢复 HP / Mana / 冷却
|
||||
- 部分药剂会生成 `buildBuffs`
|
||||
- `Gems` / `Skills` / `Librarium` 系列
|
||||
- 生成稀有品、法器、技能相关物品
|
||||
- 部分带 build 倾向
|
||||
|
||||
这层已经是“半程序化设计”,不是纯静态表。
|
||||
|
||||
## 3.3 自定义世界运行时程序化生成
|
||||
|
||||
`src/data/customWorldRuntime.ts` 提供了另一条明显不同的生成链:
|
||||
|
||||
- 输入:
|
||||
- `CustomWorldProfile`
|
||||
- `seedKey`
|
||||
- 查询条件:`categories / preferredTags / keywords / rarityFloor / count`
|
||||
- 输出:
|
||||
- 运行时即时程序化物品
|
||||
|
||||
它的特点是:
|
||||
|
||||
- 基于世界档案与种子稳定生成
|
||||
- 可以按角色、用途、标签、关键词筛选
|
||||
- 能生成:
|
||||
- 武器
|
||||
- 护甲
|
||||
- 饰品
|
||||
- 消耗品
|
||||
- 材料
|
||||
- 稀有品
|
||||
- 专属物品
|
||||
|
||||
当前它已经被用于:
|
||||
|
||||
- 自定义世界角色初始装备
|
||||
- 自定义世界角色初始背包
|
||||
- 自定义世界 NPC 角色库存
|
||||
|
||||
但这条链目前更像 **“主题化程序物品池”**,还不是“事件级、NPC级、场景级实时定制物品”。
|
||||
|
||||
## 4. 当前运行时有哪些物品发放入口
|
||||
|
||||
## 4.1 玩家初始物品
|
||||
|
||||
玩家开局物品主要来自两条链:
|
||||
|
||||
1. `buildInitialPlayerInventory`
|
||||
- 来自 `npcInteractions.ts`
|
||||
- 普通世界走角色预设背包
|
||||
- 自定义世界走 `buildCustomWorldStarterInventoryItems`
|
||||
2. `buildInitialEquipmentLoadout`
|
||||
- 来自 `equipmentEffects.ts`
|
||||
- 根据角色预设初始装备,转成可装备的 `InventoryItem`
|
||||
|
||||
这说明玩家初始 build 其实已经部分依赖物品体系,而不是只靠角色裸属性。
|
||||
|
||||
## 4.2 NPC 库存
|
||||
|
||||
`buildInitialNpcState` 会给每个 NPC 建立运行时库存:
|
||||
|
||||
- 角色型 NPC:
|
||||
- 从角色装备 + 角色背包推导
|
||||
- 怪物型 encounter:
|
||||
- 从怪物 preset 的 `lootTable` 推导
|
||||
- 普通场景 NPC:
|
||||
- 从职业/身份模板库存推导
|
||||
- 自定义世界 NPC:
|
||||
- 可走 `buildRuntimeCustomWorldInventoryItems`
|
||||
|
||||
因此当前 NPC 交易、赠礼、击败掉落,已经都能围绕同一套 `InventoryItem[]` 进行。
|
||||
|
||||
## 4.3 宝藏奖励
|
||||
|
||||
`src/data/treasureInteractions.ts` 负责宝藏奖励:
|
||||
|
||||
- 根据世界类型选择奖励池
|
||||
- 根据 encounter 信息和 action 做 seed
|
||||
- 产出:
|
||||
- 稀有品
|
||||
- 消耗品
|
||||
- 材料
|
||||
- HP / Mana 恢复
|
||||
- 货币
|
||||
|
||||
这条链已经是运行时生成,但目前仍然是 **世界模板池级别**,不是“根据当前场景背景 / 当前 NPC / 最近事件”深度定制。
|
||||
|
||||
## 4.4 怪物掉落 / NPC 击败掉落
|
||||
|
||||
当前掉落主要有两种:
|
||||
|
||||
1. 怪物 preset 自带 `lootTable`
|
||||
2. NPC 击败后,从 `npcState.inventory` 里按玩家收益排序取高价值物品
|
||||
|
||||
这里的核心是:
|
||||
|
||||
**当前系统已经把“掉落”统一成库存消费问题,而不是单独的一套特殊奖励系统。**
|
||||
|
||||
## 4.5 拆解 / 合成 / 锻造 / 重铸
|
||||
|
||||
`src/data/forgeSystem.ts` 已经形成第二类运行时物品生成入口:
|
||||
|
||||
- `executeDismantleItem`
|
||||
- 把装备拆成基础材料 + 标签精粹
|
||||
- `executeForgeRecipe`
|
||||
- 消耗材料生成成品装备
|
||||
- `executeReforgeItem`
|
||||
- 保留原物品基础上重投 build 标签并增强数值
|
||||
|
||||
这说明运行时物品系统已经不只是“掉落 -> 使用”,而是进入了:
|
||||
|
||||
**掉落 -> 持有 -> 拆解 -> 再生产 -> build 迭代**
|
||||
|
||||
的循环。
|
||||
|
||||
## 5. 当前物品如何进入玩法结算
|
||||
|
||||
## 5.1 装备生效
|
||||
|
||||
`src/data/equipmentEffects.ts` 会把 `EquipmentLoadout` 汇总为:
|
||||
|
||||
- `maxHpBonus`
|
||||
- `maxManaBonus`
|
||||
- `outgoingDamageMultiplier`
|
||||
- `incomingDamageMultiplier`
|
||||
|
||||
当前实现已经会优先读取 `statProfile`,没有时才走 rarity fallback。
|
||||
|
||||
这意味着:
|
||||
|
||||
- 装备的直接数值提升已经真实生效
|
||||
- 不是只在 UI 显示
|
||||
|
||||
## 5.2 build 标签生效
|
||||
|
||||
`src/data/buildTags.ts` + `src/data/buildDamage.ts` 已经形成完整 build 入口:
|
||||
|
||||
- 角色 `combatTags`
|
||||
- 装备 `buildProfile.tags`
|
||||
- 套装标签
|
||||
- 限时 `TimedBuildBuff`
|
||||
|
||||
会被统一整理为激活标签集,再计算 build 伤害乘区。
|
||||
|
||||
当前 build 标签来源已经包括:
|
||||
|
||||
- 角色
|
||||
- 怪物
|
||||
- 装备
|
||||
- 套装
|
||||
- 消耗品/技能 buff
|
||||
|
||||
## 5.3 消耗品生效
|
||||
|
||||
`src/data/inventoryEffects.ts` + `src/hooks/useInventoryFlow.ts` 会在使用物品时:
|
||||
|
||||
- 恢复 HP
|
||||
- 恢复 Mana
|
||||
- 推进技能冷却
|
||||
- 追加 `activeBuildBuffs`
|
||||
|
||||
这意味着当前系统已经存在:
|
||||
|
||||
- **直接恢复型物品**
|
||||
- **节奏调整型物品**
|
||||
- **限时 build 强化型物品**
|
||||
|
||||
三种雏形。
|
||||
|
||||
## 6. 当前 AI 在物品系统里的角色
|
||||
|
||||
当前 AI 与物品系统的关系主要有两种:
|
||||
|
||||
## 6.1 自定义世界“离线式”生成
|
||||
|
||||
`src/services/customWorld.ts` + `src/services/customWorldBuilder.ts` 会让 AI 生成:
|
||||
|
||||
- 世界名
|
||||
- playable NPC
|
||||
- story NPC
|
||||
- 关键物品样本
|
||||
- 地标
|
||||
|
||||
然后本地再把这些骨架扩展成更大的世界档案。
|
||||
|
||||
这时 AI 的角色是:
|
||||
|
||||
**提供世界观语义骨架,而不是直接在单次 encounter 里临场造出一个可结算物品。**
|
||||
|
||||
## 6.2 运行时叙事包装
|
||||
|
||||
`prompt.ts` 和相关 story flow 里,AI 主要负责:
|
||||
|
||||
- 剧情文本
|
||||
- 对话
|
||||
- 选项文案
|
||||
- 氛围描述
|
||||
|
||||
但当前 AI 不负责:
|
||||
|
||||
- 直接返回结构化物品
|
||||
- 决定物品数值是否合法
|
||||
- 决定 build 标签是否合法
|
||||
- 决定库存如何变更
|
||||
|
||||
这与仓库已有开发经验文档里的原则一致:
|
||||
|
||||
**AI 负责解释世界,本地规则负责改动世界。**
|
||||
|
||||
## 7. 当前系统的优点
|
||||
|
||||
## 7.1 已有统一物品骨架
|
||||
|
||||
`InventoryItem` 已经足够承载:
|
||||
|
||||
- 永久装备
|
||||
- 消耗品
|
||||
- build 标签
|
||||
- 世界观描述
|
||||
- 经济系统
|
||||
|
||||
后续不需要另起一套物品结构。
|
||||
|
||||
## 7.2 已有 build 玩法骨架
|
||||
|
||||
当前系统已经支持:
|
||||
|
||||
- 装备 build 标签
|
||||
- 套装 build 标签
|
||||
- 消耗品限时 build buff
|
||||
- 角色/怪物 combatTags
|
||||
|
||||
这让“物品影响 build”不再只是概念。
|
||||
|
||||
## 7.3 已有多个运行时入口
|
||||
|
||||
当前物品已经能从这些入口进入游戏:
|
||||
|
||||
- 初始背包
|
||||
- 初始装备
|
||||
- NPC 库存
|
||||
- 宝藏
|
||||
- 怪物掉落
|
||||
- 击败 NPC
|
||||
- 合成
|
||||
- 拆解
|
||||
- 锻造
|
||||
- 重铸
|
||||
- 自定义世界程序化生成
|
||||
|
||||
系统入口已经比较完整。
|
||||
|
||||
## 7.4 本地规则边界明确
|
||||
|
||||
当前实现最大的稳定性来源,是物品最终由本地规则落库和结算:
|
||||
|
||||
- 可测试
|
||||
- 可复现
|
||||
- 可存档兼容
|
||||
- 不依赖模型临场稳定性
|
||||
|
||||
这非常适合继续向 AI 原生玩法演化。
|
||||
|
||||
## 8. 当前系统的主要缺口
|
||||
|
||||
## 8.1 非自定义世界的运行时发放仍偏模板池
|
||||
|
||||
当前普通世界的宝藏、NPC 库存、基础奖励,更多还是:
|
||||
|
||||
- 世界模板
|
||||
- 身份模板
|
||||
- 怪物 preset
|
||||
|
||||
而不是根据以下上下文动态拼装:
|
||||
|
||||
- 当前场景背景
|
||||
- 当前 NPC 动机
|
||||
- 当前事件阶段
|
||||
- 最近剧情行为
|
||||
- 玩家当前 build 缺口
|
||||
|
||||
## 8.2 宝藏与物品的叙事绑定不够深
|
||||
|
||||
当前宝藏奖励会根据世界类型变化,但还没有强绑定:
|
||||
|
||||
- 地标
|
||||
- scene preset
|
||||
- treasure hint
|
||||
- 相关 NPC
|
||||
- 最近发生的事件
|
||||
|
||||
所以“玩法可用”,但“故事贴脸感”还不够强。
|
||||
|
||||
## 8.3 自定义世界运行时物品偏“主题生成”,还不是“关系生成”
|
||||
|
||||
`customWorldRuntime.ts` 已经能做:
|
||||
|
||||
- 世界主题相关
|
||||
- 标签/关键词相关
|
||||
- 角色用途相关
|
||||
|
||||
但还没有直接把以下关系结构编进物品:
|
||||
|
||||
- 这个物品和哪个 NPC 有关系
|
||||
- 为什么在这个时刻出现
|
||||
- 它与哪个任务/线索绑定
|
||||
- 它是否属于某个 faction / 场景 / 地标
|
||||
|
||||
## 8.4 一些运行时奖励没有补足完整 build 元数据
|
||||
|
||||
例如部分宝藏奖励和 NPC 模板奖励,当前只是简单 `InventoryItem`:
|
||||
|
||||
- 有 `category / rarity / tags`
|
||||
- 但未必有完整 `statProfile / useProfile / buildProfile`
|
||||
|
||||
这会导致它们更像资源或商品,而不是强 build 物品。
|
||||
|
||||
## 8.5 缺少“物品生成导演层”
|
||||
|
||||
当前系统缺的不是单个函数,而是一层明确的运行时物品导演:
|
||||
|
||||
- 输入当前上下文
|
||||
- 决定掉落/奖励/商店/赠礼候选
|
||||
- 决定叙事来源
|
||||
- 决定 build 倾向
|
||||
- 决定是永久收益还是限时收益
|
||||
- 决定数值预算
|
||||
|
||||
这层目前分散在:
|
||||
|
||||
- `treasureInteractions.ts`
|
||||
- `npcInteractions.ts`
|
||||
- `customWorldRuntime.ts`
|
||||
- `forgeSystem.ts`
|
||||
|
||||
之间,还没有统一起来。
|
||||
|
||||
## 9. 对当前系统的结论
|
||||
|
||||
当前仓库里的“运行时物品生成系统”已经不是空白,反而已经具备了很好的扩展前提:
|
||||
|
||||
- 有统一物品数据结构
|
||||
- 有 build 标签体系
|
||||
- 有限时 buff 体系
|
||||
- 有装备/消耗品/材料/稀有品的分类
|
||||
- 有宝藏、NPC、掉落、锻造等运行时入口
|
||||
- 有自定义世界程序化物品能力
|
||||
- 有明确的“AI 叙事、本地规则结算”边界
|
||||
|
||||
但它现在更像:
|
||||
|
||||
**“规则系统已经就位,AI 原生上下文驱动物品导演还没补上。”**
|
||||
|
||||
后续如果要继续往 AI 原生游戏推进,最值得补的不是推翻现有系统,而是:
|
||||
|
||||
1. 在现有 `InventoryItem` 体系上增加上下文生成层。
|
||||
2. 让物品生成同时读取场景、NPC、剧情、build 缺口。
|
||||
3. 让 AI 负责物品语义与叙事来源,本地规则负责编译成可结算物品。
|
||||
4. 把宝藏、NPC 交易、任务奖励、掉落统一接入同一套“运行时物品导演”。
|
||||
Reference in New Issue
Block a user