[装备/UI] 实现原版 1.13c 人物装备穿戴限制(等级/属性/职业校验与标红显示、单双持与野蛮人武器槽位规则) #506

Closed
opened 2026-09-28 11:26:50 +00:00 by troytt · 1 comment
Owner

背景与需求描述 (Background & Requirements)

严格遵循暗黑破坏神 II v1.13c 原版机制(D2Common.dll ITEMS_CheckItemRequirements #10244 @ 0x6fd76db0、ITEMS_GetClassOfClassSpecificItem #10202 @ 0x6fd74280 与武器/副手穿戴槽位互斥校验),实现完整的人物装备限制与 UI 标红反馈:

1. 等级、属性与职业穿戴限制及词条标红

  • 禁止穿戴不满足条件的装备:人物点击装备槽位(clickEquipSlot)穿戴或替换装备时,必须校验人物当前等级(level)、力量(str)、敏捷(dex)以及职业(classCode):
    • 若人物等级 < reqLevel、力量 < reqStr、敏捷 < reqDex,或装备限定职业 reqClass !== classCode,禁止穿戴入槽。
  • 不满足条件的词条红色高亮:
    • 在物品悬浮提示框(Tooltip)中,凡是当前人物未达到的需要等级(需要等级: X / Required Level: X)、需要力量(需要力量: X / Required Strength: X)、需要敏捷(需要敏捷: X / Required Dexterity: X)以及不匹配的职业限定词条(如 (限野蛮人使用) / (Barbarian Only)),均显示为红色(red)。
    • 背包/储物箱/赫拉迪克方块网格中不满足当前人物穿戴条件的装备背景底色同步渲染为原版红色警示底色(GRID_ITEM_BG_RED)。

2. 单手武器/盾牌与双手武器限制(含野蛮人 1.13c 原版规则)

  • 默认职业规则(非野蛮人):
    • 默认只能装备一件单手武器 + 一个盾牌(或副手),或者一件双手武器。
    • 禁止双持两把武器(当 weapon1 或 weapon2 已有单手武器时,另一手只能装备盾牌/副手,不可装备第二把武器)。
    • 双手武器(twoHanded === true)占用双手:当已装备双手武器时,另一手不可装备盾牌或武器;若当前只在一个槽位装备了单手武器或盾牌,拿双手武器点击任一武器槽可与之交换;若主副手同时装有单手武器和盾牌,则无法直接放入双手武器(除非背包可自动收纳另一手装备或先取下一件)。
  • 野蛮人(bar)原版 1.13c 专属规则:
    • 支持解析 Weapons.txt 中的 1or2handed 列(18 把双手剑 swor:2hs/clm/gis/bsw/flb/gsd 及其扩展/精华级形态均具有 2handed=1, 1or2handed=1)。
    • 野蛮人可双持任意两把单手武器(weapon1 + weapon2)。
    • 野蛮人可将 1or2handed 双手剑作为单手武器使用(可双持两把双手剑、一把双手剑 + 一把单手武器,或一把双手剑 + 一面盾牌)。
    • 严格双手武器(2handed=1 且 1or2handed=0,如双手斧、双手锤/食人魔之槌 7m7、长柄武器、长矛、法杖、弓、十字弓)对野蛮人而言仍需双手持握,不可与第二把武器或盾牌同时装备。
## 背景与需求描述 (Background & Requirements) 严格遵循暗黑破坏神 II v1.13c 原版机制(`D2Common.dll` `ITEMS_CheckItemRequirements` `#10244 @ 0x6fd76db0`、`ITEMS_GetClassOfClassSpecificItem` `#10202 @ 0x6fd74280` 与武器/副手穿戴槽位互斥校验),实现完整的人物装备限制与 UI 标红反馈: ### 1. 等级、属性与职业穿戴限制及词条标红 - **禁止穿戴不满足条件的装备**:人物点击装备槽位(`clickEquipSlot`)穿戴或替换装备时,必须校验人物当前等级(`level`)、力量(`str`)、敏捷(`dex`)以及职业(`classCode`): - 若人物等级 `< reqLevel`、力量 `< reqStr`、敏捷 `< reqDex`,或装备限定职业 `reqClass !== classCode`,禁止穿戴入槽。 - **不满足条件的词条红色高亮**: - 在物品悬浮提示框(Tooltip)中,凡是当前人物未达到的需要等级(`需要等级: X` / `Required Level: X`)、需要力量(`需要力量: X` / `Required Strength: X`)、需要敏捷(`需要敏捷: X` / `Required Dexterity: X`)以及不匹配的职业限定词条(如 `(限野蛮人使用)` / `(Barbarian Only)`),均显示为**红色(`red`)**。 - 背包/储物箱/赫拉迪克方块网格中不满足当前人物穿戴条件的装备背景底色同步渲染为原版红色警示底色(`GRID_ITEM_BG_RED`)。 ### 2. 单手武器/盾牌与双手武器限制(含野蛮人 1.13c 原版规则) - **默认职业规则(非野蛮人)**: - 默认只能装备**一件单手武器 + 一个盾牌(或副手)**,或者**一件双手武器**。 - 禁止双持两把武器(当 `weapon1` 或 `weapon2` 已有单手武器时,另一手只能装备盾牌/副手,不可装备第二把武器)。 - 双手武器(`twoHanded === true`)占用双手:当已装备双手武器时,另一手不可装备盾牌或武器;若当前只在一个槽位装备了单手武器或盾牌,拿双手武器点击任一武器槽可与之交换;若主副手同时装有单手武器和盾牌,则无法直接放入双手武器(除非背包可自动收纳另一手装备或先取下一件)。 - **野蛮人(`bar`)原版 1.13c 专属规则**: - 支持解析 `Weapons.txt` 中的 `1or2handed` 列(18 把双手剑 `swor`:`2hs`/`clm`/`gis`/`bsw`/`flb`/`gsd` 及其扩展/精华级形态均具有 `2handed=1, 1or2handed=1`)。 - 野蛮人可双持任意两把单手武器(`weapon1` + `weapon2`)。 - 野蛮人可将 `1or2handed` 双手剑作为单手武器使用(可双持两把双手剑、一把双手剑 + 一把单手武器,或一把双手剑 + 一面盾牌)。 - 严格双手武器(`2handed=1` 且 `1or2handed=0`,如双手斧、双手锤/食人魔之槌 `7m7`、长柄武器、长矛、法杖、弓、十字弓)对野蛮人而言仍需双手持握,不可与第二把武器或盾牌同时装备。
Author
Owner

已在 commit 4e461e1 中完成原版 1.13c 人物装备限制与词条标红实现并通过全部单元测试:

  1. 等级 / 属性(力量、敏捷)/ 职业限制与标红显示:
    • 在 canPlayerUseUiItem 与 InventoryPanel.canEquipItemInSlot 中对等级 (reqLevel)、力量 (reqStr)、敏捷 (reqDex)、职业专属物品 (reqClass + 原版 111 个职业专属底材 CANONICAL_CLASS_SPECIFIC_ITEM_CODES) 进行严格校验,不满足条件禁止装备。
    • 在 WorldPanelsHud.drawItemTooltip 中将不满足条件的等级、力量、敏捷及职业限制词条渲染为红色 ('red'),满足时渲染为白色 ('white');背包、储物箱、赫拉迪克方块中不满足穿戴条件的物品格显示暗黑原版红色底色 ('rgba(72, 18, 18, 0.50)')。
  2. 单双持与野蛮人(bar)原版 1.13c 武器/盾牌槽位规则:
    • 解析 Weapons.txt 的 2handed 与 1or2handed 字段。
    • 默认非野蛮人角色仅允许 1 件单手武器 + 1 个盾牌/副手,或 1 件双手武器(禁止双持两把武器,禁止双手武器配盾或单手武器)。
    • 野蛮人(bar)支持双持单手武器(1H + 1H),以及单手握持 18 种 1or2handed=1 双手剑(支持 1H + 双手剑、双手剑 + 双手剑、双手剑 + 盾牌),严格双手武器仍需双手握持。
  3. 测试验证:新增 tests/issue-506-equipment-restrictions.test.ts 全部通过。
已在 commit `4e461e1` 中完成原版 1.13c 人物装备限制与词条标红实现并通过全部单元测试: 1. **等级 / 属性(力量、敏捷)/ 职业限制与标红显示**: - 在 `canPlayerUseUiItem` 与 `InventoryPanel.canEquipItemInSlot` 中对等级 (`reqLevel`)、力量 (`reqStr`)、敏捷 (`reqDex`)、职业专属物品 (`reqClass` + 原版 111 个职业专属底材 `CANONICAL_CLASS_SPECIFIC_ITEM_CODES`) 进行严格校验,不满足条件禁止装备。 - 在 `WorldPanelsHud.drawItemTooltip` 中将不满足条件的等级、力量、敏捷及职业限制词条渲染为红色 (`'red'`),满足时渲染为白色 (`'white'`);背包、储物箱、赫拉迪克方块中不满足穿戴条件的物品格显示暗黑原版红色底色 (`'rgba(72, 18, 18, 0.50)'`)。 2. **单双持与野蛮人(`bar`)原版 1.13c 武器/盾牌槽位规则**: - 解析 `Weapons.txt` 的 `2handed` 与 `1or2handed` 字段。 - 默认非野蛮人角色仅允许 **1 件单手武器 + 1 个盾牌/副手**,或 **1 件双手武器**(禁止双持两把武器,禁止双手武器配盾或单手武器)。 - 野蛮人(`bar`)支持双持单手武器(`1H + 1H`),以及单手握持 18 种 `1or2handed=1` 双手剑(支持 `1H + 双手剑`、`双手剑 + 双手剑`、`双手剑 + 盾牌`),严格双手武器仍需双手握持。 3. **测试验证**:新增 `tests/issue-506-equipment-restrictions.test.ts` 全部通过。
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#506
No description provided.