AutoMagic.txt 与 StaffMods 未接入掉落链 #129

Closed
opened 2026-09-19 10:10:56 +00:00 by troytt · 1 comment
Owner

问题描述 (Issue B1 & B6)

  1. AutoMagic.txt 处于孤儿状态 (B1):

    • src/game/automagic.ts (445 行) 已经完整实现了 AutoMagic.txt 的解析与按 autoModCode (base.autoPrefix / group) + alvl 筛选、按 frequency 加权抽取并 roll 具体数值的算法(loadAutoMagic, rollAutoMagic)。
    • 但 src/game/drop-pipeline.ts 从未导入或调用 automagic.ts,导致圣骑士专用盾(pala / ashd 四抗/ED+AR)、女巫法珠(orb 生命/法力)、亚玛逊弓/标枪/长矛(abow/ajav/aspe +1..3 弓/标枪技能)在掉落时完全缺失 AutoMod 固有词缀。
  2. StaffMods 缺失 (B6):

    • ItemTypes.txt 的 StaffMods 列(如 staf/orb → 'sor', wand/head → 'nec', scep → 'pal', phlm → 'bar', pelt → 'dru', h2h2 → 'ass')已经在 item-types.ts 中解析为 def.staffMods,但掉落生成时未按 1.13c 规则(D2Common!ITEMMOD_ApplyStaffMods,基于 ilvl 分层 1..11, 12..18, 19..24, 25..36, 37+ 抽取 0..3 个单技能 +1..+3 to [Skill] ([Class] Only))注入 skill 属性。

解决方案

  1. 在 DropTables (src/game/drop-pipeline.ts) 中新增 readonly autoMagic?: AutoMagicTable,并在 loadDropTables 中调用 loadAutoMagic(archives) 加载。
  2. 在 src/game/drop-pipeline.ts 新增 rollStaffMods(base, ilvl, itemTypes, rng) 实现 1.13c StaffMods 生成(按 staffMods 职业代码与 ilvl 阶梯抽取最多 3 个不重复的职业技能,+1..+3 skill)。
  3. 在 executeDropPipeline 与 createDroppedItem 中对非 Unique/Set 的装备(Normal / Superior / Low / Magic / Rare)注入 autoMagic 词缀与 staffMods 单技能加成,写入 rolledProps 与 stats。
## 问题描述 (Issue B1 & B6) 1. **`AutoMagic.txt` 处于孤儿状态 (B1)**: - `src/game/automagic.ts` (445 行) 已经完整实现了 `AutoMagic.txt` 的解析与按 `autoModCode` (`base.autoPrefix` / group) + `alvl` 筛选、按 `frequency` 加权抽取并 roll 具体数值的算法(`loadAutoMagic`, `rollAutoMagic`)。 - 但 `src/game/drop-pipeline.ts` 从未导入或调用 `automagic.ts`,导致圣骑士专用盾(`pala` / `ashd` 四抗/ED+AR)、女巫法珠(`orb` 生命/法力)、亚玛逊弓/标枪/长矛(`abow`/`ajav`/`aspe` +1..3 弓/标枪技能)在掉落时完全缺失 AutoMod 固有词缀。 2. **`StaffMods` 缺失 (B6)**: - `ItemTypes.txt` 的 `StaffMods` 列(如 `staf`/`orb` → `'sor'`, `wand`/`head` → `'nec'`, `scep` → `'pal'`, `phlm` → `'bar'`, `pelt` → `'dru'`, `h2h2` → `'ass'`)已经在 `item-types.ts` 中解析为 `def.staffMods`,但掉落生成时未按 1.13c 规则(`D2Common!ITEMMOD_ApplyStaffMods`,基于 `ilvl` 分层 1..11, 12..18, 19..24, 25..36, 37+ 抽取 0..3 个单技能 `+1..+3 to [Skill] ([Class] Only)`)注入 `skill` 属性。 ## 解决方案 1. 在 `DropTables` (`src/game/drop-pipeline.ts`) 中新增 `readonly autoMagic?: AutoMagicTable`,并在 `loadDropTables` 中调用 `loadAutoMagic(archives)` 加载。 2. 在 `src/game/drop-pipeline.ts` 新增 `rollStaffMods(base, ilvl, itemTypes, rng)` 实现 1.13c StaffMods 生成(按 `staffMods` 职业代码与 `ilvl` 阶梯抽取最多 3 个不重复的职业技能,`+1..+3` `skill`)。 3. 在 `executeDropPipeline` 与 `createDroppedItem` 中对非 Unique/Set 的装备(Normal / Superior / Low / Magic / Rare)注入 `autoMagic` 词缀与 `staffMods` 单技能加成,写入 `rolledProps` 与 `stats`。
Author
Owner

Fixed in commit 6d2de24 (merged into main). Verified with tests/parity-1.13c.test.ts (14 passed), tests/automagic.test.ts (15 passed), and tests/drop-pipeline.test.ts (19 passed).

Fixed in commit 6d2de24 (merged into main). Verified with tests/parity-1.13c.test.ts (14 passed), tests/automagic.test.ts (15 passed), and tests/drop-pipeline.test.ts (19 passed).
Sign in to join this conversation.
No Label
No Milestone
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#129
No description provided.