feat(drop): 接入全量怪物与暗金怪真实 TreasureClass 映射及 1.13c 掉落管线 (Monster & SuperUnique TC Resolution & 1.13c Drop Pipeline) #405

Closed
opened 2026-09-24 03:22:49 +00:00 by troytt · 1 comment
Owner

问题背景与现状分析

目前在 src/game/embedded-drop-tables.ts 第 108–109 行中,getEmbeddedDropTables() 返回的 monsterKinds 与 superUniques 均为空表 new Map();同时 MonsterStats 未携带怪物的 treasureClasses 定义。
这导致 src/game/engine.ts 第 859–871 行在查询被击杀怪物的 TreasureClass 时永远查不到匹配项,全游戏所有怪物(包括各幕普通怪、蓝色头目 Champion、金色精英 Unique、固定暗金怪 SuperUniques 以及关底 Boss)全部退化为硬编码兜底 "Act 1 H2H A",严重违反 AGENTS.md 原版权威与反静默降级铁律。


原版 Diablo II v1.13c 核心机制规范(Ground Truth)

1. MonStats.txt 四级 TreasureClass 选择规范

  • 依据 1.13c MonStats.txt,每类怪物在普通/噩梦(N)/地狱(H)难度下分别定义 4 列 TC:
    • TreasureClass1:普通怪物(Normal, monsterType = 1)
    • TreasureClass2:蓝色头目怪(Champion, monsterType = 2,mlvl = AreaLevel + 2)
    • TreasureClass3:金色随机精英怪(Unique, monsterType = 3,mlvl = AreaLevel + 3)
    • TreasureClass4:关底首领任务首杀(Quest drop, monsterType = 4)
  • 精英怪随从(rank === "minion")等级为 AreaLevel + 3,但其掉落 TC 使用普通怪 TreasureClass1(monsterType = 1)。

2. SuperUniques.txt 固定暗金怪专属 TC 规范

  • 依据 1.13c SuperUniques.txt,固定暗金怪(如毕须博须 Bishibosh -> Act 1 Super A、拉卡尼休 Rakanishu -> Act 1 Super A、血鸟 Blood Raven -> Blood Raven、女伯爵 The Countess -> Countess、骨灰 Bone Ash、树头木拳 Treehead WoodFist、格瑞斯华尔德 Griswold、督瑞尔/墨菲斯托/暗黑破坏神/巴尔等)优先使用其 SuperUniques.txt 中对应难度的 TC / TC(N) / TC(H) 列。

3. TC 等级组自动升级 (resolveTreasureClassGroup)

  • 依据 D2Game.dll (0x6FC32D60),普通怪与随机精英怪的基础 TC 若属于带 group 的递进组,需根据怪物实际 mlvl 自动向上匹配同组中 level <= mlvl 的对应阶级 TC。

改造与验收标准

  1. 在 embedded-drop-tables.ts 与 MonsterStats 中完整注入 1.13c MonStats.txt 与 SuperUniques.txt 的真实 monsterKinds 及 superUniques TC 映射表。
  2. 移除静默掩盖缺失数据的 Act 1 H2H A 盲目降级,严格按怪物 subjectId、superUniqueId、rank(normal/champion/unique/minion)与 difficulty 解析真实 TC 与 mlvl(普通怪 mlvl、蓝怪 +2、金怪/随从 +3)。
  3. 支持将玩家角色的装备 MF(Magic Find)与金币加成(Gold Find)传入 executeDropPipeline。
  4. 单测验证普通怪、Champion、Unique、Minion、SuperUnique(如女伯爵符文掉落、毕须博须、安达利尔等)均解析至精确的 1.13c TC。
## 问题背景与现状分析 目前在 [`src/game/embedded-drop-tables.ts`](https://git.projectdiablo2.cn/troytt/diablo2-web/src/branch/main/src/game/embedded-drop-tables.ts) 第 108–109 行中,`getEmbeddedDropTables()` 返回的 `monsterKinds` 与 `superUniques` 均为空表 `new Map()`;同时 `MonsterStats` 未携带怪物的 `treasureClasses` 定义。 这导致 [`src/game/engine.ts`](https://git.projectdiablo2.cn/troytt/diablo2-web/src/branch/main/src/game/engine.ts) 第 859–871 行在查询被击杀怪物的 TreasureClass 时永远查不到匹配项,**全游戏所有怪物(包括各幕普通怪、蓝色头目 Champion、金色精英 Unique、固定暗金怪 SuperUniques 以及关底 Boss)全部退化为硬编码兜底 `"Act 1 H2H A"`**,严重违反 `AGENTS.md` 原版权威与反静默降级铁律。 --- ## 原版 Diablo II v1.13c 核心机制规范(Ground Truth) ### 1. `MonStats.txt` 四级 TreasureClass 选择规范 - 依据 1.13c `MonStats.txt`,每类怪物在普通/噩梦`(N)`/地狱`(H)`难度下分别定义 4 列 TC: - `TreasureClass1`:普通怪物(Normal, `monsterType = 1`) - `TreasureClass2`:蓝色头目怪(Champion, `monsterType = 2`,`mlvl = AreaLevel + 2`) - `TreasureClass3`:金色随机精英怪(Unique, `monsterType = 3`,`mlvl = AreaLevel + 3`) - `TreasureClass4`:关底首领任务首杀(Quest drop, `monsterType = 4`) - 精英怪随从(`rank === "minion"`)等级为 `AreaLevel + 3`,但其掉落 TC 使用普通怪 `TreasureClass1`(`monsterType = 1`)。 ### 2. `SuperUniques.txt` 固定暗金怪专属 TC 规范 - 依据 1.13c `SuperUniques.txt`,固定暗金怪(如毕须博须 `Bishibosh` -> `Act 1 Super A`、拉卡尼休 `Rakanishu` -> `Act 1 Super A`、血鸟 `Blood Raven` -> `Blood Raven`、女伯爵 `The Countess` -> `Countess`、骨灰 `Bone Ash`、树头木拳 `Treehead WoodFist`、格瑞斯华尔德 `Griswold`、督瑞尔/墨菲斯托/暗黑破坏神/巴尔等)优先使用其 `SuperUniques.txt` 中对应难度的 `TC` / `TC(N)` / `TC(H)` 列。 ### 3. TC 等级组自动升级 (`resolveTreasureClassGroup`) - 依据 `D2Game.dll` (`0x6FC32D60`),普通怪与随机精英怪的基础 TC 若属于带 `group` 的递进组,需根据怪物实际 `mlvl` 自动向上匹配同组中 `level <= mlvl` 的对应阶级 TC。 --- ## 改造与验收标准 1. 在 `embedded-drop-tables.ts` 与 `MonsterStats` 中完整注入 1.13c `MonStats.txt` 与 `SuperUniques.txt` 的真实 `monsterKinds` 及 `superUniques` TC 映射表。 2. 移除静默掩盖缺失数据的 `Act 1 H2H A` 盲目降级,严格按怪物 `subjectId`、`superUniqueId`、`rank`(normal/champion/unique/minion)与 `difficulty` 解析真实 TC 与 `mlvl`(普通怪 `mlvl`、蓝怪 `+2`、金怪/随从 `+3`)。 3. 支持将玩家角色的装备 MF(Magic Find)与金币加成(Gold Find)传入 `executeDropPipeline`。 4. 单测验证普通怪、Champion、Unique、Minion、SuperUnique(如女伯爵符文掉落、毕须博须、安达利尔等)均解析至精确的 1.13c TC。
troytt added this to the 实现打怪掉落物品 milestone 2026-09-24 03:22:49 +00:00
Author
Owner

Milestone M11.2 (Issue #405) Gate 2 Verification: 100% PASS

All 5 Gate subagents voted unanimously APPROVE / CLEAN:

  • Reviewer 1: APPROVE (MonStats 735 rows & SuperUniques 67 rows ground truth verified, TC resolution per rank/difficulty accurate)
  • Reviewer 2: APPROVE (npm run verify:monsters 74/74 pass, clean memoization < 30ms, 0 TS errors)
  • Challenger 1: APPROVE (272/272 adversarial probes passed, Group 18 ascending sequence check verified)
  • Challenger 2: APPROVE (19/19 new tests passed, 130/130 related tests passed, production build pass)
  • Forensic Auditor: CLEAN (Worktree isolation strictly maintained, main repository 100% clean, zero leaks)

Merged to main at commit 3aae6d1 and pushed to origin/main.
Worktree .worktrees/issue-405 pruned cleanly.

### Milestone M11.2 (Issue #405) Gate 2 Verification: 100% PASS All 5 Gate subagents voted unanimously **APPROVE** / **CLEAN**: - **Reviewer 1**: APPROVE (MonStats 735 rows & SuperUniques 67 rows ground truth verified, TC resolution per rank/difficulty accurate) - **Reviewer 2**: APPROVE (npm run verify:monsters 74/74 pass, clean memoization < 30ms, 0 TS errors) - **Challenger 1**: APPROVE (272/272 adversarial probes passed, Group 18 ascending sequence check verified) - **Challenger 2**: APPROVE (19/19 new tests passed, 130/130 related tests passed, production build pass) - **Forensic Auditor**: CLEAN (Worktree isolation strictly maintained, main repository 100% clean, zero leaks) Merged to `main` at commit `3aae6d1` and pushed to `origin/main`. Worktree `.worktrees/issue-405` pruned cleanly.
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#405
No description provided.