[P0][D01] 内嵌 MonStats.txt 掉落列并填充 monsterKinds(修复全游戏回落 Act 1 H2H A) #410
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#410
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?
现状(最高优先级缺陷)
src/game/embedded-drop-tables.ts:108硬编码:而
src/data/canonical-drop-data.ts只导出了 14 张表(RAW_TC_EX/RAW_WEAPONS/RAW_ARMOR/RAW_MISC/RAW_ITEM_RATIO/RAW_ITEM_TYPES/RAW_UNIQUE_ITEMS/RAW_SET_ITEMS/RAW_SETS/RAW_MAGIC_PREFIX/RAW_MAGIC_SUFFIX/RAW_RARE_PREFIX/RAW_RARE_SUFFIX),没有RAW_MONSTATS。实机路径是
src/scene/act-scene.ts:5011→getEmbeddedDropTables()→engine.setDropTables()。于是
src/game/engine.ts:864的dropTables.monsterKinds.get(...)永远返回 undefined,流程必然落到
src/game/engine.ts:870的tcName = 'Act 1 H2H A'。后果:从血鸦到巴尔,五幕 × 三难度的每一只怪物,都在用「第一幕普通近战 A」这一张掉落表。
drop-pipeline.ts/treasure-class.ts/treasure-engine.ts里已经写好的 TC 树、难度分层、Champion/Unique 提升链,在实机中一行都没有被真正使用。
1.13c 真实行为
MonStats.txt为每个怪物类型提供 12 个掉落列:TreasureClass1/TreasureClass1(N)/TreasureClass1(H)TreasureClass2/(N)/(H)TreasureClass3/(N)/(H)TreasureClass4/(N)/(H)readMonsterKinds()(drop-pipeline.ts:241)与getMonsterTreasureClass()(monsters.ts:319-332)已经实现了正确的列选择逻辑——唯独没有数据喂进去。
验收标准
/usr/local/google/home/taodao/d2-data/Patch_D2.mpq抽取data\global\excel\MonStats.txt,裁剪出
Id/Level/Level(N)/Level(H)/boss/TreasureClass1..4 × 3 难度等掉落必需列,以与其余 13 张表一致的方式内嵌为
RAW_MONSTATS。getEmbeddedDropTables()用readMonsterKinds(parseTable(...))填充monsterKinds,删除new Map()。scripts/。monsterKinds.size等于 MonStats.txt 中有效怪物行数,且对skeleton1/fallen1/bloodraven/diablo/baalcrab等抽样怪物,三难度 × 四 monsterType 解析出的 TC 名与 1.13c 原表逐字符一致。
monsterKind的怪,命中'Act 1 H2H A'的次数只应来自真正配置了该 TC 的怪物,而非兜底。
依赖
本 issue 是整个 M18 的前置,D04 / D07 / D09 / D19 全部依赖它。
Resolution Summary (Issue #410)
MonStats.txtand embedded insrc/data/canonical-drop-data.tsasRAW_MONSTATS.src/game/embedded-drop-tables.tshydrates all 734 unique monster kinds fromRAW_MONSTATSusingreadMonsterKinds().scripts/pack-canonical-drop-data.tsto enforce offline packing and runtime contract parity against official 1.13c MPQ data (Patch_D2.mpq,d2exp.mpq,d2data.mpq).tests/monster-treasure-class.test.tspasses 19/19 tests (100%), verifying exact 1.13c TC resolution across all 3 difficulties with zero fallbacks.