[P0][T11] 加载 TreasureClassEx.txt(852 行 × 33 列):纯加载与索引,不含算法 #99
Labels
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: troytt/diablo2-web#99
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
这是整个 M10 的核心数据。掉落树的每个节点都在这张表里。
本 issue 只做加载与索引,递归展开算法在 T-13、auto-TC 生成在 T-12。拆开是因为这张表的结构本身就有足够多的坑值得单独一个 issue。
金标准数据
852 真实行(853 原始行 − 1 行空白;注意本表没有
Expansion行)× 33 列。完整列头(严格文件顺序 + 索引)
Item/Prob 恰好 10 对,不多不少。
各控制列的真实取值范围
group1:44 2:36 3:36 4:36 5:15 6:45 7:42 8:42 9:42 10:42 11:42 12:42 13:43 14:42 15:42 16:15 17:6 18:90。150 行无 grouplevelPicks-4:90 -3:48 -2:46 1:515 2:42 3:6 4:45 5:30 7:30UniqueSetRareMagicNoDrop空:224 0:328 5:3 15:18 19:36 75:42 100:180 125:21SumItemsTotalProbDropChanceTerm0,无语义叶子(Item 列)的 5 种形态 —— 575 个不同取值
"Act 1 Equip A""Act 1 Junk""Potion 1""Misc 0""Ammo""Jewelry A""Chipped Gem""Runes 1".."Runes 17""Countess Rune (H)"gld(金币)gldrinamujewcm1-3gcv..gcwskc/skfhp1-5mp1-5rvsrvlvpskeytsciscoplgplaqvcqvr01-33pk1<ItemTypes.Code><qlvl>虚拟 auto-TC(表里没有这些行!)weap3..weap87(29 档)armo3..armo87(29)bow3..bow87(29)mele3..mele39(13)"gld,mul=1280""gld,mul=1536""gld,mul=2048"、Annihilus合计被引用但表中不存在的名字 218 个 = 100 个 auto-TC + 118 个真实物品码。
group / level 的语义
同
group内按level升序构成「随区域等级升级」的链:150 行无 group(
Cow (H)、Act N Junk、Potion N、Runes N、Chipped Gem、Boss 专属 TC),不参与升级。运行期内存布局(反汇编确证,供 T-13 参考)
TC 记录:
+0x04条目数、+0x08TotalProb(classic)、+0x0CTotalProb(expansion)、+0x10Picks(int32 带符号)、+0x14NoDrop(int32)、+0x28条目数组指针。条目数组 stride = 0x1C(28 字节):
+0x00累计概率(classic)、+0x04累计概率(expansion)、+0x08u16 物品/子TC 索引(0xFFFF= 空)、+0x0Au16 参数(unique/set id,或金币倍率)、+0x0C标志(bit0 强制 unique、bit1 强制 set、bit2 子 TC 引用)、+0x0E..+0x186 个 u16 品质因子。实现要求
Treasure Class 名 → row索引。TotalProb(classic / expansion 各一套),供 T-13 二分。group → [按 level 升序的 TC]索引,供 T-13 做 TC 升级。ItemN,分类成上表 5 种形态之一,标记出 218 个悬空引用(其中 100 个交给 T-12 生成,118 个应能在全局物品码表里找到)。gld,mul=N语法(逗号后的mul=参数)。陷阱
验收标准
group → [TC by level]索引建立,18 个 group 的尺寸与上表完全一致gld,mul=1280/1536/2048三种被正确解析出倍率Annihilus被识别为直接指名暗金Magic列的 231 个非空值全部等于 1024(断言,防止数据源被换)npm run typecheck0 errornpx vitest run全绿npx tsx scripts/verify-items.ts新增断言通过溯源
data\global\excel\下的TreasureClassEx.txt(本机/usr/local/google/home/taodao/d2-data,挂载序 d2data → d2exp → Patch_D2,Patch_D2 优先)D2Game!6FC32690(objdump -d,D2Common 基址0x6FD50000、D2Game0x6FC10000)已完成并通过 1.13c MPQ 真实表验证(852 行全量 TC 节点,1..18 group 升序索引,218 悬空引用分类,Magic 1024 断言,前缀和预计算),合并入 main。