掉落模拟器的怪物tc不对 #121

Closed
opened 2026-09-19 03:44:50 +00:00 by troytt · 1 comment
Owner

所有怪物都用了baal的tc

所有怪物都用了baal的tc
Author
Owner

已在 Commit c9a9a55 修复并推送到 main 分支。

根因分析:
原 src/loot.ts 中 getEffectiveTcName() 采用 tcInput.value.trim() !== currentMonster.tc[currentDifficulty] 判断用户是否手动指定了自定义 TC。因为初始值为 Baal (H),当用户点击列表中的任何怪物(如崔凡克议会 Council、安达利尔等)或切换难度时,tcInput.value 的旧值均与新怪物的 TC 不等,导致逻辑误判为「用户手动输入了覆盖值」,将全局 TC 死锁覆盖为 Baal (H)。

解决方案:

  1. 引入独立的 customTcOverride 状态变量,仅在用户显式点击「应用自定义 TC」或从预设下拉框选择时生效;
  2. 点击怪物列表、切换难度或切换任务首杀时自动重置 customTcOverride 为 null,确保使用当前选定怪物在对应难度的真实 1.13c TC;
  3. 导出 getMonsterPresetTc 工具函数,并补充了全套单元测试 tests/loot.test.ts(20/20 项测试全部通过)。
已在 Commit `c9a9a55` 修复并推送到 main 分支。 **根因分析**: 原 `src/loot.ts` 中 `getEffectiveTcName()` 采用 `tcInput.value.trim() !== currentMonster.tc[currentDifficulty]` 判断用户是否手动指定了自定义 TC。因为初始值为 `Baal (H)`,当用户点击列表中的任何怪物(如崔凡克议会 Council、安达利尔等)或切换难度时,`tcInput.value` 的旧值均与新怪物的 TC 不等,导致逻辑误判为「用户手动输入了覆盖值」,将全局 TC 死锁覆盖为 `Baal (H)`。 **解决方案**: 1. 引入独立的 `customTcOverride` 状态变量,仅在用户显式点击「应用自定义 TC」或从预设下拉框选择时生效; 2. 点击怪物列表、切换难度或切换任务首杀时自动重置 `customTcOverride` 为 `null`,确保使用当前选定怪物在对应难度的真实 1.13c TC; 3. 导出 `getMonsterPresetTc` 工具函数,并补充了全套单元测试 `tests/loot.test.ts`(20/20 项测试全部通过)。
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#121
No description provided.