13 KiB
当前运行时物品生成系统设计整理
更新时间:2026-04-02
0. 目标
这份文档只回答一个问题:
当前仓库里,运行时物品是怎么被“定义、生成、发放、使用、转化、进入 build 结算”的。
它不是未来方案,而是对现状的结构化整理,方便后续继续扩展 AI 原生玩法。
1. 当前系统的总体判断
当前仓库里的运行时物品系统,不是“纯 AI 生成”,而是一个 本地规则驱动 + 局部程序化生成 + AI 负责叙事文本 的体系。
它大体由 5 层组成:
- 物品骨架层
- 用
InventoryItem、ItemStatProfile、ItemUseProfile、ItemBuildProfile承载运行时能力。
- 用
- 基础生成层
- 用
src/data/itemCatalog.ts+src/data/itemDesign.ts从素材路径推导出物品目录与设计元数据。
- 用
- 运行时发放层
- 在初始背包、NPC 库存、宝藏奖励、怪物掉落、拆解/锻造/重铸、自定义世界运行时生成等入口,把物品真正放进
GameState。
- 在初始背包、NPC 库存、宝藏奖励、怪物掉落、拆解/锻造/重铸、自定义世界运行时生成等入口,把物品真正放进
- 战斗/背包生效层
- 装备通过
equipmentEffects.ts生效,消耗品通过inventoryEffects.ts生效,build 标签通过buildTags.ts+buildDamage.ts生效。
- 装备通过
- 叙事包装层
- 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
当前可直接进入数值结算的字段主要是:
maxHpBonusmaxManaBonusoutgoingDamageBonusincomingDamageMultiplier
这套结构已经足够支撑“少量直接数值提升”的物品设计。
2.3 ItemUseProfile
当前消耗品/可使用物品可提供:
hpRestoremanaRestorecooldownReductionbuildBuffs
这意味着当前系统已经具备“限时 build 标签道具”的基础承载能力。
2.4 ItemBuildProfile
当前 build 相关物品数据包括:
roletagssetIdsetNamepieceNamesynergycraftTagsforgeRank
这说明当前物品系统已经不仅仅是“数值装备”,而是已经向 build / 套装 / 锻造 方向扩展。
3. 当前物品是如何被生成出来的
3.1 素材目录 -> 物品目录
src/data/itemCatalog.ts 负责把素材路径转成 ItemCatalogEntry:
- 先从素材路径推导:
categoryraritytagsname
- 再调用
src/data/itemDesign.ts补充更完整的设计:statProfileuseProfilebuildProfilevalue- 世界观名称/描述
也就是说,当前项目里相当一部分物品,不是手工逐个写死的,而是 “素材驱动 + 规则推导”。
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 提供了另一条明显不同的生成链:
- 输入:
CustomWorldProfileseedKey- 查询条件:
categories / preferredTags / keywords / rarityFloor / count
- 输出:
- 运行时即时程序化物品
它的特点是:
- 基于世界档案与种子稳定生成
- 可以按角色、用途、标签、关键词筛选
- 能生成:
- 武器
- 护甲
- 饰品
- 消耗品
- 材料
- 稀有品
- 专属物品
当前它已经被用于:
- 自定义世界角色初始装备
- 自定义世界角色初始背包
- 自定义世界 NPC 角色库存
但这条链目前更像 “主题化程序物品池”,还不是“事件级、NPC级、场景级实时定制物品”。
4. 当前运行时有哪些物品发放入口
4.1 玩家初始物品
玩家开局物品主要来自两条链:
buildInitialPlayerInventory- 来自
npcInteractions.ts - 普通世界走角色预设背包
- 自定义世界走
buildCustomWorldStarterInventoryItems
- 来自
buildInitialEquipmentLoadout- 来自
equipmentEffects.ts - 根据角色预设初始装备,转成可装备的
InventoryItem
- 来自
这说明玩家初始 build 其实已经部分依赖物品体系,而不是只靠角色裸属性。
4.2 NPC 库存
buildInitialNpcState 会给每个 NPC 建立运行时库存:
- 角色型 NPC:
- 从角色装备 + 角色背包推导
- 怪物型 encounter:
- 从怪物 preset 的
lootTable推导
- 从怪物 preset 的
- 普通场景 NPC:
- 从职业/身份模板库存推导
- 自定义世界 NPC:
- 可走
buildRuntimeCustomWorldInventoryItems
- 可走
因此当前 NPC 交易、赠礼、击败掉落,已经都能围绕同一套 InventoryItem[] 进行。
4.3 宝藏奖励
src/data/treasureInteractions.ts 负责宝藏奖励:
- 根据世界类型选择奖励池
- 根据 encounter 信息和 action 做 seed
- 产出:
- 稀有品
- 消耗品
- 材料
- HP / Mana 恢复
- 货币
这条链已经是运行时生成,但目前仍然是 世界模板池级别,不是“根据当前场景背景 / 当前 NPC / 最近事件”深度定制。
4.4 怪物掉落 / NPC 击败掉落
当前掉落主要有两种:
- 怪物 preset 自带
lootTable - NPC 击败后,从
npcState.inventory里按玩家收益排序取高价值物品
这里的核心是:
当前系统已经把“掉落”统一成库存消费问题,而不是单独的一套特殊奖励系统。
4.5 拆解 / 合成 / 锻造 / 重铸
src/data/forgeSystem.ts 已经形成第二类运行时物品生成入口:
executeDismantleItem- 把装备拆成基础材料 + 标签精粹
executeForgeRecipe- 消耗材料生成成品装备
executeReforgeItem- 保留原物品基础上重投 build 标签并增强数值
这说明运行时物品系统已经不只是“掉落 -> 使用”,而是进入了:
掉落 -> 持有 -> 拆解 -> 再生产 -> build 迭代
的循环。
5. 当前物品如何进入玩法结算
5.1 装备生效
src/data/equipmentEffects.ts 会把 EquipmentLoadout 汇总为:
maxHpBonusmaxManaBonusoutgoingDamageMultiplierincomingDamageMultiplier
当前实现已经会优先读取 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.tsnpcInteractions.tscustomWorldRuntime.tsforgeSystem.ts
之间,还没有统一起来。
9. 对当前系统的结论
当前仓库里的“运行时物品生成系统”已经不是空白,反而已经具备了很好的扩展前提:
- 有统一物品数据结构
- 有 build 标签体系
- 有限时 buff 体系
- 有装备/消耗品/材料/稀有品的分类
- 有宝藏、NPC、掉落、锻造等运行时入口
- 有自定义世界程序化物品能力
- 有明确的“AI 叙事、本地规则结算”边界
但它现在更像:
“规则系统已经就位,AI 原生上下文驱动物品导演还没补上。”
后续如果要继续往 AI 原生游戏推进,最值得补的不是推翻现有系统,而是:
- 在现有
InventoryItem体系上增加上下文生成层。 - 让物品生成同时读取场景、NPC、剧情、build 缺口。
- 让 AI 负责物品语义与叙事来源,本地规则负责编译成可结算物品。
- 把宝藏、NPC 交易、任务奖励、掉落统一接入同一套“运行时物品导演”。