[P2][T08] 加载 AutoMagic.txt(36 行) #96

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

问题

AutoMagic.txt 是给怪物身上的装备和自动附魔用的隐藏词缀池。.d2s 为它留了专门的 11 bit 字段(见 T-17 的 autoAffix id),所以不能不做。

金标准数据

36 行 × 38 列,全部 spawnable=1,无分隔行,来自 d2exp.mpq。

列头(比 MagicPrefix 少一个 classspecific):

Name | version | spawnable | rare | level | maxlevel | levelreq | class | classlevelreq |
frequency | group | mod1code..mod3max | transform | transformcolor |
itype1..itype7 | etype1..etype3 | divide | multiply | add

真实样例:

Fletcher's version=100 spawnable=1 rare=1 level=1  levelreq=15 frequency=3 group=300
           mod1code=skilltab 1/1 itype1=armo itype2=weap
Bowyer's   version=100 spawnable=1 rare=1 level=40 levelreq=30 frequency=2 group=300
           mod1code=skilltab 2/2
Wyrm's     version=100 spawnable=1 rare=1 level=56 levelreq=48 frequency=1 group=303
           mod1code=mana 41/60 transform=1 transformcolor=cblu

实现要求

  1. 加载 data\global\excel\AutoMagic.txt(来自 d2exp.mpq)。
  2. 复用 T-06 的 Affix 结构,但注意没有 classspecific 列,解析器不能无脑共用。
  3. 建索引供 .d2s 的 autoAffix id(11 bit)按序号引用 —— 序号就是行号,所以不能重排。

陷阱

[!WARNING]
与 MagicPrefix 的列不完全相同(38 vs 41,少 classspecific,etype 只有 3 个)。共用解析器时要按实际列头取值,不能按固定索引。

[!CAUTION]
.d2s 用行号引用 AutoMagic,所以加载后不能对行重排或过滤,否则存档读写会串。

验收标准

  • 36 行全部解析,全部 spawnable=1
  • 行号索引稳定(与文件顺序一致)
  • mod1-3code 全部能在 Properties 里解析到
  • skilltab 这类带 param 的 mod 能正确保留 param
  • npm run typecheck 0 error
  • npx vitest run 全绿
  • npx tsx scripts/verify-items.ts 新增断言通过

溯源

金标准(数据) 1.13c MPQ data\global\excel\ 下的 AutoMagic.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 复核后再落地。

## 问题 `AutoMagic.txt` 是给**怪物身上的装备**和自动附魔用的隐藏词缀池。`.d2s` 为它留了专门的 11 bit 字段(见 T-17 的 `autoAffix id`),所以不能不做。 ## 金标准数据 **36 行 × 38 列**,**全部 `spawnable=1`**,**无分隔行**,来自 **d2exp.mpq**。 列头(比 MagicPrefix 少一个 `classspecific`): ``` Name | version | spawnable | rare | level | maxlevel | levelreq | class | classlevelreq | frequency | group | mod1code..mod3max | transform | transformcolor | itype1..itype7 | etype1..etype3 | divide | multiply | add ``` 真实样例: ``` Fletcher's version=100 spawnable=1 rare=1 level=1 levelreq=15 frequency=3 group=300 mod1code=skilltab 1/1 itype1=armo itype2=weap Bowyer's version=100 spawnable=1 rare=1 level=40 levelreq=30 frequency=2 group=300 mod1code=skilltab 2/2 Wyrm's version=100 spawnable=1 rare=1 level=56 levelreq=48 frequency=1 group=303 mod1code=mana 41/60 transform=1 transformcolor=cblu ``` ## 实现要求 1. 加载 `data\global\excel\AutoMagic.txt`(来自 d2exp.mpq)。 2. 复用 T-06 的 `Affix` 结构,但注意**没有 `classspecific` 列**,解析器不能无脑共用。 3. 建索引供 `.d2s` 的 `autoAffix id`(11 bit)按序号引用 —— **序号就是行号**,所以不能重排。 ## 陷阱 > [!WARNING] > 与 MagicPrefix 的列**不完全相同**(38 vs 41,少 `classspecific`,etype 只有 3 个)。共用解析器时要按实际列头取值,不能按固定索引。 > [!CAUTION] > `.d2s` 用**行号**引用 AutoMagic,所以加载后**不能对行重排或过滤**,否则存档读写会串。 ## 验收标准 - [ ] 36 行全部解析,全部 `spawnable=1` - [ ] 行号索引稳定(与文件顺序一致) - [ ] `mod1-3code` 全部能在 Properties 里解析到 - [ ] `skilltab` 这类带 param 的 mod 能正确保留 param - [ ] `npm run typecheck` 0 error - [ ] `npx vitest run` 全绿 - [ ] `npx tsx scripts/verify-items.ts` 新增断言通过 --- ### 溯源 | | | |---|---| | 金标准(数据) | 1.13c MPQ `data\global\excel\` 下的 `AutoMagic.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:47 +00:00
Author
Owner

已完成并通过 1.13c d2exp 真实表验证(36 行全 spawnable=1,0..35 行号索引对齐 .d2s autoAffixId),合并入 main (commit 0602911)。

已完成并通过 1.13c d2exp 真实表验证(36 行全 spawnable=1,0..35 行号索引对齐 .d2s autoAffixId),合并入 main (commit 0602911)。
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#96
No description provided.