S4-07 process 3

- 组件 Tag 数量预算不再写死在 ResolveTagBudget(...) 里,而是走 RarityTagBudget.txt -> DRRarityTagBudget -> RarityTagBudgetRuleRegistry -> InventoryTagRuleService 这条表驱动链。
- TagBudget.txt:1 新增了按品质的 MinCount/MaxCount,预算缓存和加载入口分别在 RarityTagBudgetRuleRegistry.cs:7 和 ProcedurePreload.cs:18。
- 生成逻辑已经接到新规则,InventoryTagRuleService.cs:10 现在会先按 Tag.txt 过滤/加权,再按 RarityTagBudget 决定抽几个 Tag。
This commit is contained in:
SepComet
2026-03-11 13:16:33 +08:00
parent b1b68ebde5
commit 515fe95441
14 changed files with 303 additions and 39 deletions
+4 -3
View File
@@ -188,7 +188,8 @@
- `BurnSpread`、`IgniteBurst`、`FreezeMask`、`Pierce`、`Overpenetrate` 已进入分类与配置骨架,但仍属于后续扩展,不计入当前 `S4` 的完成标准。
- `S4-07` 已进入第一阶段实现。当前仓库已具备 `TagConfig.txt -> DRTagConfig -> TagConfigRegistry -> ItemDescForm` 的消费闭环,首发 7 个 Tag 的触发阶段、描述与核心参数已可由表覆盖。
- `S4-07` 已推进到第二阶段。当前仓库同时具备 `Tag.txt -> DRTag -> TagGenerationRuleRegistry -> InventoryTagRuleService` 与 `TagConfig.txt -> DRTagConfig -> TagConfigRegistry -> ItemDescForm` 两条消费闭环,首发 7 个 Tag 的生成规则、触发阶段、描述与核心参数都已开始由表驱动。
- `S4-07` 仍未完成最终收口。当前采用的是 `Tag.txt + TagConfig.txt` 的分层方案,而不是文档原方案里的单独 `TagRule`;更深的规则字段与完整命名口径仍待后续决定是否继续统一。
- `S4-07` 已推进到第三阶段。当前仓库新增 `RarityTagBudget.txt -> DRRarityTagBudget -> RarityTagBudgetRuleRegistry -> InventoryTagRuleService`,组件 Tag 数量预算不再写死在 `ResolveRarityTagBudget(...)` 的 `switch` 中,而是按品质从表驱动;至此生成链的候选过滤、权重抽取、数量预算三段都已进入 DataTable 消费闭环。
- `S4-07` 仍未完成最终收口。当前采用的是 `Tag.txt + RarityTagBudget.txt + TagConfig.txt` 的分层方案,而不是文档原方案里的单独 `TagRule`;更深的元数据字段与完整命名口径仍待后续决定是否继续统一。
### S4-06 当前代码状态
@@ -206,8 +207,8 @@
### S4 后续执行计划
1. 继续推进 `S4-07`:在现有 `Tag.txt + TagConfig.txt` 分层方案基础上,决定是否补成文档中的完整 `TagRule`,或明确当前双表就是本阶段的等价收口方案。
2. `S4-07` 完成标准仍以“表字段被实际消费、参数可解释、运行时与文档口径一致”为准;当前已完成首发 7 个 Tag 的生成规则、参数和说明配置化,后续重点转向是否还要继续配置化更深层的规则字段。
1. 继续推进 `S4-07`:在现有 `Tag.txt + RarityTagBudget.txt + TagConfig.txt` 分层方案基础上,决定是否补成文档中的完整 `TagRule`,或明确当前三表就是本阶段的等价收口方案。
2. `S4-07` 完成标准仍以“表字段被实际消费、参数可解释、运行时与文档口径一致”为准;当前已完成首发 7 个 Tag 的生成规则、数量预算、参数和说明配置化,后续重点转向是否还要继续配置化更深层的元数据字段。
3. `BurnSpread`、`IgniteBurst`、`FreezeMask`、`Pierce`、`Overpenetrate` 继续留在后续扩展阶段,不因为 `S4-06` 完成而提前进入当前迭代。
## 阶段 S5 - 收口耐久规则
+14 -15
View File
@@ -77,24 +77,23 @@ Tag 系统需要同时满足四个目标:
### 4.1 配置层
后续配置层固定采用“`Tag.txt` 基础字典 + `TagRule` 规则表”两层结构,而不是继续把所有规则硬塞进现有 `Tag.txt`。
当前实现固定采用“`Tag.txt + RarityTagBudget.txt + TagConfig.txt`”三层结构,而不是继续把所有规则硬塞进现有 `Tag.txt`。
- `Tag.txt`
- 保留 `TagType`、`Name` 等基础字典信息
- `TagRule`
- 承载运行规则字段,至少包括以下内容:
- `MinRarity`
- `Weight`
- `MaxComponentStack`
- `TriggerPhase`
- `Description`
- `ParamJson` 或等价参数字段
- 保留 `TagType`、`Name` 等基础字典与按 Tag 的生成规则
- 当前实际承载:`MinRarity`、`Weight`
- `RarityTagBudget.txt`
- 承载按品质的数量预算
- 当前实际承载:`Rarity`、`MinCount`、`MaxCount`
- `TagConfig.txt`
- 承载战斗与展示相关配置
- 当前实际承载:`TriggerPhase`、`Description`、`ParamJson`
用途:
- `MinRarity`:该 Tag 最低可出现品质
- `Weight`:同一候选池内抽取权重
- `MaxComponentStack`:单组件允许的最大层数
- `MinCount / MaxCount`:该品质组件本次可抽取的 Tag 数量预算
- `TriggerPhase`:用于战斗结算路由
- `ParamJson`:承载伤害倍率、持续时间、范围等效果参数
@@ -159,7 +158,7 @@ Tag 随机应发生在“组件实例创建时”,而不是组塔时。
### 5.3 Tag 数量预算
每个品质都保留独立的 Tag 数量预算,而不是按概率硬编码在代码里。
每个品质都保留独立的 Tag 数量预算,并由 `RarityTagBudget.txt` 驱动,而不是按概率硬编码在代码里。
推荐默认值:
@@ -448,7 +447,7 @@ Tag 触发阶段固定拆成四段:
## 11. 后续文档与代码动作
1. 先基于本设计回写 `docs/CodeX-TODO.md` 的 `S4-03` 边界
2. 在 `S4-07` 中新增并消费 `TagRule` 表,保留 `Tag.txt` 作为基础字典
2. 在 `S4-07` 中补齐并消费 `Tag.txt + RarityTagBudget.txt + TagConfig.txt` 三层表结构
3. 新增 `TagGenerationService`,先收口实例生成
4. 新增 `TowerTagAggregationService`,替换当前简单并集逻辑
5. 评估 `AttackPayload` 是否并入现有 `BulletData`,还是单独引入
@@ -461,7 +460,7 @@ Tag 触发阶段固定拆成四段:
- Tag 在组件实例创建时随机,不在组塔时随机
- `PossibleTag` 是候选池,不是最终实例值
- 塔级 Tag 汇总保留 `Stack`
- 配置层采用 `Tag.txt + TagRule` 双表结构
- 配置层采用 `Tag.txt + RarityTagBudget.txt + TagConfig.txt` 分层结构
- 第一批战斗效果优先做状态类与数值修正类,不优先做穿透 / 爆炸 / 传播
- MVP 正式首发集合固定为 `Fire`、`Ice`、`Crit`、`Execution`、`Shatter`、`Inferno`、`AbsoluteZero`
- `BurnSpread` 明确后移,不作为当前首发集合成员
@@ -666,4 +665,4 @@ Execution 斩杀强化
BurnSpread 最多传播 3 次。
否则后期怪物多时会帧率爆炸。
否则后期怪物多时会帧率爆炸。