[P1][T05] 加载 Misc.txt → ItemBase(151 行 × 168 列) #93

Closed
opened 2026-09-18 10:50:46 +00:00 by troytt · 1 comment
Owner

问题

同 T-03/T-04,杂项侧。药水、卷轴、宝石、符文、护身符、戒指、项链、金币全在这张表。

TC 树的叶子里有大量直接引用 Misc 物品码的(rin amu jew cm1-3 hp1-5 mp1-5 gcv r01-33 gld …),不做这张表,掉落树有一大半叶子解析不了。

金标准数据

151 真实行(152 原始行 − 1 行 Expansion)× 168 列。

完整列头:

name | *name | szFlavorText | compactsave | version | level | levelreq | rarity | spawnable | speed |
nodurability | cost | gamble cost | code | alternategfx | namestr | component | invwidth | invheight |
hasinv | gemsockets | gemapplytype | flippyfile | invfile | uniqueinvfile | special | Transmogrify |
TMogType | TMogMin | TMogMax | useable | throwable | type | type2 | dropsound | dropsfxframe |
usesound | unique | transparent | transtbl | lightradius | belt | autobelt | stackable | minstack |
maxstack | spawnstack | quest | questdiffcheck | missiletype | spellicon | pSpell | state | cstate1 |
cstate2 | len | stat1 | calc1 | stat2 | calc2 | stat3 | calc3 | spelldesc | spelldescstr |
spelldesccalc | durwarning | qntwarning | gemoffset | BetterGem | bitfield1 | <商人 17 组 × 5 列> |
Source Art | Game Art | Transform | InvTrans | SkipName | NightmareUpgrade | HellUpgrade |
mindam | maxdam | PermStoreItem | multibuy | Nameable | *eol

统计:spawnable=1 仅 98/151;rarity 范围 0..999;level 范围 0..90。

物品码分类(TC 叶子会直接引用):

类别 code
药水 hp1..hp5 mp1..mp5 rvs rvl vps
卷轴 / 钥匙 tsc isc key
宝石 gcv gcy gcb gcg gcr gcw(碎裂)+ 各档
头骨 skc skf …
符文 r01..r33
护身符 cm1 cm2 cm3
珠宝 / 戒指 / 项链 jew rin amu
箭袋 aqv cqv
金币 gld(type=gold)

Misc 独有关键列:

列 用途
stackable / minstack / maxstack / spawnstack 堆叠(药水、箭袋)
autobelt 自动进腰带
pSpell + stat1..3 / calc1..3 使用效果(喝药回血等)
BetterGem 宝石升级链
Transmogrify / TMogType / TMogMin / TMogMax 转化
spelldesc / spelldescstr / spelldesccalc 说明文本
quest / questdiffcheck 任务物品

实现要求

  1. 加载 data\global\excel\Misc.txt,剔除 Expansion 行。
  2. 逐列映射,并入全局 code → ItemBase 索引。
  3. gld 要特殊标记 —— TC 叶子里的 gld 和 gld,mul=N 都指向它(T-13 处理倍率)。
  4. 符文 r01..r33 要能被 T-16 按序引用。

陷阱

[!WARNING]
spawnable=1 只有 98/151 —— 一半以上不可自然生成(任务物品、未使用的占位)。但不能因此不加载它们,因为 TC 叶子和配方仍可能引用。

[!WARNING]
rarity 最大到 999(护甲最大 4、武器最大 5)。做 auto-TC 权重计算时如果有上限假设会被这个值打穿 —— 不过 Misc 类型基本不进 auto-TC 桶,属于防御性提醒。

[!NOTE]
有 8 个 code 在 string.tbl 里查不到显示名(hpo mpo hpf mpf rps rpl 等),都是未使用的占位药水。T-20 的覆盖率断言要按 143/151 写,不是 151/151。

验收标准

  • 151 行全部解析,0 个失败
  • 三表合并后 code 全局无重复
  • gld 被正确识别为金币且带 type=gold
  • r01..r33 33 枚符文全部可按序号取到
  • 抽样核对:hp1(level/cost/stackable) / rin / cm1
  • npm run typecheck 0 error
  • npx vitest run 全绿
  • npx tsx scripts/verify-items.ts 新增断言通过

溯源

金标准(数据) 1.13c MPQ data\global\excel\ 下的 Misc.txt(本机 /usr/local/google/home/taodao/d2-data,挂载序 d2data → d2exp → Patch_D2,Patch_D2 优先)
本 issue 结论强度 本机 1.13c 实测确证

[!WARNING]
D2MOO 是 1.10f,不是本项目的金标准。 它只能作线索使用。任何涉及常量、列序、整数截断位置或 RNG 消耗次数的结论,都必须回到 1.13c 的表格或 DLL 复核后再落地。

## 问题 同 T-03/T-04,杂项侧。药水、卷轴、宝石、符文、护身符、戒指、项链、**金币**全在这张表。 TC 树的叶子里有大量直接引用 Misc 物品码的(`rin` `amu` `jew` `cm1-3` `hp1-5` `mp1-5` `gcv` `r01-33` `gld` …),不做这张表,掉落树有一大半叶子解析不了。 ## 金标准数据 **151 真实行**(152 原始行 − 1 行 `Expansion`)× **168 列**。 完整列头: ``` name | *name | szFlavorText | compactsave | version | level | levelreq | rarity | spawnable | speed | nodurability | cost | gamble cost | code | alternategfx | namestr | component | invwidth | invheight | hasinv | gemsockets | gemapplytype | flippyfile | invfile | uniqueinvfile | special | Transmogrify | TMogType | TMogMin | TMogMax | useable | throwable | type | type2 | dropsound | dropsfxframe | usesound | unique | transparent | transtbl | lightradius | belt | autobelt | stackable | minstack | maxstack | spawnstack | quest | questdiffcheck | missiletype | spellicon | pSpell | state | cstate1 | cstate2 | len | stat1 | calc1 | stat2 | calc2 | stat3 | calc3 | spelldesc | spelldescstr | spelldesccalc | durwarning | qntwarning | gemoffset | BetterGem | bitfield1 | <商人 17 组 × 5 列> | Source Art | Game Art | Transform | InvTrans | SkipName | NightmareUpgrade | HellUpgrade | mindam | maxdam | PermStoreItem | multibuy | Nameable | *eol ``` 统计:`spawnable=1` 仅 **98/151**;`rarity` 范围 **0..999**;`level` 范围 **0..90**。 物品码分类(TC 叶子会直接引用): | 类别 | code | |---|---| | 药水 | `hp1..hp5` `mp1..mp5` `rvs` `rvl` `vps` | | 卷轴 / 钥匙 | `tsc` `isc` `key` | | 宝石 | `gcv` `gcy` `gcb` `gcg` `gcr` `gcw`(碎裂)+ 各档 | | 头骨 | `skc` `skf` … | | 符文 | `r01..r33` | | 护身符 | `cm1` `cm2` `cm3` | | 珠宝 / 戒指 / 项链 | `jew` `rin` `amu` | | 箭袋 | `aqv` `cqv` | | **金币** | `gld`(type=gold) | Misc 独有关键列: | 列 | 用途 | |---|---| | `stackable` / `minstack` / `maxstack` / `spawnstack` | 堆叠(药水、箭袋) | | `autobelt` | 自动进腰带 | | `pSpell` + `stat1..3` / `calc1..3` | 使用效果(喝药回血等) | | `BetterGem` | 宝石升级链 | | `Transmogrify` / `TMogType` / `TMogMin` / `TMogMax` | 转化 | | `spelldesc` / `spelldescstr` / `spelldesccalc` | 说明文本 | | `quest` / `questdiffcheck` | 任务物品 | ## 实现要求 1. 加载 `data\global\excel\Misc.txt`,剔除 `Expansion` 行。 2. 逐列映射,并入全局 `code → ItemBase` 索引。 3. **`gld` 要特殊标记** —— TC 叶子里的 `gld` 和 `gld,mul=N` 都指向它(T-13 处理倍率)。 4. 符文 `r01..r33` 要能被 T-16 按序引用。 ## 陷阱 > [!WARNING] > `spawnable=1` 只有 **98/151** —— 一半以上不可自然生成(任务物品、未使用的占位)。但**不能因此不加载它们**,因为 TC 叶子和配方仍可能引用。 > [!WARNING] > `rarity` 最大到 **999**(护甲最大 4、武器最大 5)。做 auto-TC 权重计算时如果有上限假设会被这个值打穿 —— 不过 Misc 类型基本不进 auto-TC 桶,属于防御性提醒。 > [!NOTE] > 有 **8 个 code 在 string.tbl 里查不到显示名**(`hpo` `mpo` `hpf` `mpf` `rps` `rpl` 等),都是未使用的占位药水。T-20 的覆盖率断言要按 143/151 写,不是 151/151。 ## 验收标准 - [ ] 151 行全部解析,0 个失败 - [ ] 三表合并后 `code` 全局无重复 - [ ] `gld` 被正确识别为金币且带 `type=gold` - [ ] `r01..r33` 33 枚符文全部可按序号取到 - [ ] 抽样核对:`hp1`(level/cost/stackable) / `rin` / `cm1` - [ ] `npm run typecheck` 0 error - [ ] `npx vitest run` 全绿 - [ ] `npx tsx scripts/verify-items.ts` 新增断言通过 --- ### 溯源 | | | |---|---| | 金标准(数据) | 1.13c MPQ `data\global\excel\` 下的 `Misc.txt`(本机 `/usr/local/google/home/taodao/d2-data`,挂载序 d2data → d2exp → Patch_D2,**Patch_D2 优先**) | | 本 issue 结论强度 | **本机 1.13c 实测确证** | > [!WARNING] > **D2MOO 是 1.10f,不是本项目的金标准。** 它只能作线索使用。任何涉及常量、列序、整数截断位置或 RNG 消耗次数的结论,都必须回到 1.13c 的表格或 DLL 复核后再落地。
troytt added this to the [M10] 真实物品系统:500 基础物品、1000 词缀、TreasureClassEx 掉落树 milestone 2026-09-18 10:50:46 +00:00
Author
Owner

已完成并通过 1.13c MPQ 真实表验证(151 件真实杂项,33 枚符文索引,金币/药水/护符/珠宝分类),合并入 main (commit 050cb25)。

已完成并通过 1.13c MPQ 真实表验证(151 件真实杂项,33 枚符文索引,金币/药水/护符/珠宝分类),合并入 main (commit 050cb25)。
Sign in to join this conversation.
No Label
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#93
No description provided.