切换职业时全套档案联动切换(装备/仓库/天赋树/属性),且初始装备统一重构为全职业专属绿色套装 #379

Closed
opened 2026-09-22 08:59:38 +00:00 by troytt · 0 comments
Owner

1. 需求背景与核心目标

在 acts.html 及各游戏场景中支持切换 7 大职业(亚马逊、法师、死灵法师、圣骑士、野蛮人、德鲁伊、刺客)。
当前切换职业时仅更新了角色动画模型(DCC)与基础属性名,身上的穿戴装备、私人储藏箱(Stash)、技能天赋树(SkillTree)加点及快捷键配置仍残留上一职业的状态。

本次核心目标:

  1. 全套档案联动切换:切换职业时,角色的装备栏、背包、储藏箱、技能树、属性值、技能快捷键全部隔离并无缝联动切换。
  2. 初始穿戴专属绿色套装:重构 7 大职业的初始装备,角色的穿戴装备栏仅穿戴该职业的原版经典专属绿色套装(套装全件齐备)。
  3. 储藏箱初始物资重构:每个职业的私人储藏箱中预先放入常用珠宝(Jewels / 彩虹刻面等)、各类完美宝石(Perfect Gems)、以及高级符文(High Runes,如 Ber、Jah、Zod、Lo、Ohm 等),便于测试符文之语与装备镶嵌。

2. 暗黑破坏神 2 v1.13c 七大职业专属绿色套装规范 (Ground Truth)

职业 (Class) 专属绿色套装名称 (Set Name) 套装部件清单 (Set Components) 穿戴槽位 (Slot)
亚马逊 (Amazon) 马维娜的战斗诗歌
(M'avina's Battle Hymn)
• 马维娜的真实之眼 (权冠 / Diadem)
• 马维娜的拥抱 (海妖壳甲 / Kraken Shell)
• 马维娜的施展 (大院长之弓 / Grand Matron Bow)
• 马维娜的冰冷之握 (战场手套 / Battle Gauntlets)
• 马维娜的教义 (鲨皮腰带 / Sharkskin Belt)
头部 (Helm)
衣服 (Armor)
主武器 (Weapon1, 双手弓)
手套 (Gloves)
腰带 (Belt)
法师 (Sorceress) 塔·拉夏的包装
(Tal Rasha's Wrappings)
• 塔·拉夏的赫拉迪克纹章 (死亡面具 / Death Mask)
• 塔·拉夏的守护 (漆甲 / Lacquered Plate)
• 塔·拉夏的无目之眼 (涡流水晶 / Swirling Crystal)
• 塔·拉夏的精织腰带 (织网腰带 / Mesh Belt)
• 塔·拉夏的判决 (项链 / Amulet)
头部 (Helm)
衣服 (Armor)
主武器 (Weapon1, 单手杖)
腰带 (Belt)
项链 (Amulet)
死灵法师 (Necromancer) 塔格奥的化身
(Trang-Oul's Avatar)
• 塔格奥的外貌 (骸骨面罩 / Bone Visage)
• 塔格奥的鳞片 (混沌战甲 / Chaos Armor)
• 塔格奥之翼 (领唱者之印 / Cantor Trophy)
• 塔格奥之爪 (重型手镯 / Heavy Bracers)
• 塔格奥的束带 (洞穴巨魔腰带 / Troll Belt)
头部 (Helm)
衣服 (Armor)
副手/盾 (Weapon2)
手套 (Gloves)
腰带 (Belt)
圣骑士 (Paladin) 格里斯瓦德的遗产
(Griswold's Legacy)
• 格里斯瓦德的勇气 (头冠 / Corona)
• 格里斯瓦德的心脏 (华丽战甲 / Ornate Plate)
• 格里斯瓦德的救赎 (神使之杖 / Caduceus)
• 格里斯瓦德的荣耀 (旋风盾 / Vortex Shield)
头部 (Helm)
衣服 (Armor)
主武器 (Weapon1)
副手/盾 (Weapon2)
野蛮人 (Barbarian) 不朽之王
(Immortal King)
• 不朽之王的意志 (复仇者护额 / Avenger Guard)
• 不朽之王的精神牢笼 (神圣战甲 / Sacred Armor)
• 不朽之王的碎石者 (食人魔之槌 / Ogre Maul)
• 不朽之王的细节 (战场腰带 / War Belt)
• 不朽之王的熔炉 (战场手套 / War Gauntlets)
• 不朽之王的支柱 (战场之靴 / War Boots)
头部 (Helm)
衣服 (Armor)
主武器 (Weapon1, 双手槌)
腰带 (Belt)
手套 (Gloves)
鞋子 (Boots)
德鲁伊 (Druid) 艾尔多的高塔
(Aldur's Watchtower)
• 艾尔多的冷酷目光 (猎人的伪装 / Hunter's Guise)
• 艾尔多的欺瞒 (阴影战甲 / Shadow Plate)
• 艾尔多的律动 (锯齿之星 / Jagged Star)
• 艾尔多的行进 (战场之靴 / Battle Boots)
头部 (Helm)
衣服 (Armor)
主武器 (Weapon1)
鞋子 (Boots)
刺客 (Assassin) 娜塔亚的仇恨
(Natalya's Odium)
• 娜塔亚的图腾 (严酷之盔 / Grim Helm)
• 娜塔亚的影子 (铠甲 / Loricated Mail)
• 娜塔亚的标记 (近身剪 / Scissors Suwayyah)
• 娜塔亚的灵魂 (织网之靴 / Mesh Boots)
头部 (Helm)
衣服 (Armor)
主武器 (Weapon1)
鞋子 (Boots)

(注:身上的穿戴栏严格保持原汁原味,仅穿戴上述专属套装部件,其余未涵盖的空槽位保持留空。)


3. 储藏箱(Stash)初始物资配置

每个职业初始化生成的储藏箱(Stash 6×8 空间)中,整齐陈列下列基础实验物资:

  1. 珠宝 (Jewels):
    • 彩虹刻面 (Rainbow Facet - 冰冷、火焰、闪电、毒素暗金珠宝)。
    • 常用暗金/亮金攻速增伤珠宝 (如 15% IAS / 40% ED 红白珠)。
  2. 宝石 (Gems):
    • 7 种完美宝石各 1~2 颗:完美红宝石 (P-Ruby)、完美紫宝石 (P-Amethyst)、完美蓝宝石 (P-Sapphire)、完美黄宝石 (P-Topaz)、完美绿宝石 (P-Emerald)、完美钻石 (P-Diamond)、完美骷髅 (P-Skull)。
  3. 符文 (Runes):
    • 高级符文 (High Runes):Ber (30#), Jah (31#), Cham (32#), Zod (33#), Vex (26#), Ohm (27#), Lo (28#), Sur (29#) 等核心符文语底材。

4. 职业切换全套档案联动架构 (Architecture)

4.1 独立职业上下文容器 (HeroProfileState)

每个职业维护独立的状态对象:

interface HeroProfileState {
  classCode: CharacterClassCode; // 'ama' | 'sor' | 'nec' | 'pal' | 'bar' | 'dru' | 'ass'
  level: number;
  unspentStatPoints: number;
  unspentSkillPoints: number;
  charStats: CharacterClassStats;
  equipped: Partial<Record<EquipSlotId, UiInventoryItem>>;
  inventoryGrid: GridPlacement[];
  stashItems: GridPlacement[];
  stashGold: number;
  playerGold: number;
  skillTreeState: {
    hardPoints: Map<number, number>;
    activeTab: 0 | 1 | 2;
  };
  hotkeys: {
    leftSkillId: number;
    rightSkillId: number;
    boundKeys: Record<string, number>;
  };
}

4.2 联动切换流程 (switchHero)

在触发职业切换时:

  1. 自动暂存:将当前职业的所有装备、背包、仓库、技能加点与快捷键序列化保存至当前职业 Profile 字典。
  2. 加载目标职业:
    • 若首次选择该职业:加载其专属绿色套装、预制珠宝/宝石/符文仓库、专属 30 个技能树背景与天赋、以及推荐默认左右技能。
    • 若非首次选择:恢复用户上次对该职业所作的加点与物品变更。
  3. 全组件状态同步:
    • HudManager.charSheet 属性面板更新(生命、法力、力量、敏捷、体力、精力)。
    • HudManager.inventory 纸娃娃装备槽与背包网格立即刷新。
    • HudManager.worldPanels 储藏箱物资与金币刷新。
    • HudManager.skillTree 加载对应职业背景与技能节点列表。
    • HudManager.hotkeys 更新左右技能图标及技能选择弹窗(只展示该职业可用技能)。

5. 验收标准 (Acceptance Criteria)

  1. 在 acts.html 顶部切换任意职业时,背包、身上的装备栏、储藏箱、人物属性与技能面板同步无缝切换,无旧职业数据残留。
  2. 7 个职业默认均只穿戴该职业专属的暗黑 2 绿色套装(马维娜/塔拉夏/塔格奥/格里斯瓦德/不朽之王/艾尔多/娜塔亚)。
  3. 储藏箱内整齐摆放彩虹刻面珠宝、各类完美宝石以及高级符文。
  4. 切换职业后打开技能面板(T),显示该职业正确的 3 个技能系背景(bg_<cls>_<tab>.png)与技能图标。
  5. 自动化测试(npm run typecheck, npm test)全量通过。
## 1. 需求背景与核心目标 在 `acts.html` 及各游戏场景中支持切换 7 大职业(亚马逊、法师、死灵法师、圣骑士、野蛮人、德鲁伊、刺客)。 当前切换职业时仅更新了角色动画模型(DCC)与基础属性名,**身上的穿戴装备、私人储藏箱(Stash)、技能天赋树(SkillTree)加点及快捷键配置仍残留上一职业的状态**。 **本次核心目标**: 1. **全套档案联动切换**:切换职业时,角色的**装备栏、背包、储藏箱、技能树、属性值、技能快捷键**全部隔离并无缝联动切换。 2. **初始穿戴专属绿色套装**:重构 7 大职业的初始装备,角色的穿戴装备栏**仅穿戴该职业的原版经典专属绿色套装**(套装全件齐备)。 3. **储藏箱初始物资重构**:每个职业的私人储藏箱中预先放入常用**珠宝(Jewels / 彩虹刻面等)、各类完美宝石(Perfect Gems)、以及高级符文(High Runes,如 Ber、Jah、Zod、Lo、Ohm 等)**,便于测试符文之语与装备镶嵌。 --- ## 2. 暗黑破坏神 2 v1.13c 七大职业专属绿色套装规范 (Ground Truth) | 职业 (Class) | 专属绿色套装名称 (Set Name) | 套装部件清单 (Set Components) | 穿戴槽位 (Slot) | | :--- | :--- | :--- | :--- | | **亚马逊 (Amazon)** | **马维娜的战斗诗歌<br>(M'avina's Battle Hymn)** | • 马维娜的真实之眼 (权冠 / Diadem)<br>• 马维娜的拥抱 (海妖壳甲 / Kraken Shell)<br>• 马维娜的施展 (大院长之弓 / Grand Matron Bow)<br>• 马维娜的冰冷之握 (战场手套 / Battle Gauntlets)<br>• 马维娜的教义 (鲨皮腰带 / Sharkskin Belt) | 头部 (Helm)<br>衣服 (Armor)<br>主武器 (Weapon1, 双手弓)<br>手套 (Gloves)<br>腰带 (Belt) | | **法师 (Sorceress)** | **塔·拉夏的包装<br>(Tal Rasha's Wrappings)** | • 塔·拉夏的赫拉迪克纹章 (死亡面具 / Death Mask)<br>• 塔·拉夏的守护 (漆甲 / Lacquered Plate)<br>• 塔·拉夏的无目之眼 (涡流水晶 / Swirling Crystal)<br>• 塔·拉夏的精织腰带 (织网腰带 / Mesh Belt)<br>• 塔·拉夏的判决 (项链 / Amulet) | 头部 (Helm)<br>衣服 (Armor)<br>主武器 (Weapon1, 单手杖)<br>腰带 (Belt)<br>项链 (Amulet) | | **死灵法师 (Necromancer)** | **塔格奥的化身<br>(Trang-Oul's Avatar)** | • 塔格奥的外貌 (骸骨面罩 / Bone Visage)<br>• 塔格奥的鳞片 (混沌战甲 / Chaos Armor)<br>• 塔格奥之翼 (领唱者之印 / Cantor Trophy)<br>• 塔格奥之爪 (重型手镯 / Heavy Bracers)<br>• 塔格奥的束带 (洞穴巨魔腰带 / Troll Belt) | 头部 (Helm)<br>衣服 (Armor)<br>副手/盾 (Weapon2)<br>手套 (Gloves)<br>腰带 (Belt) | | **圣骑士 (Paladin)** | **格里斯瓦德的遗产<br>(Griswold's Legacy)** | • 格里斯瓦德的勇气 (头冠 / Corona)<br>• 格里斯瓦德的心脏 (华丽战甲 / Ornate Plate)<br>• 格里斯瓦德的救赎 (神使之杖 / Caduceus)<br>• 格里斯瓦德的荣耀 (旋风盾 / Vortex Shield) | 头部 (Helm)<br>衣服 (Armor)<br>主武器 (Weapon1)<br>副手/盾 (Weapon2) | | **野蛮人 (Barbarian)** | **不朽之王<br>(Immortal King)** | • 不朽之王的意志 (复仇者护额 / Avenger Guard)<br>• 不朽之王的精神牢笼 (神圣战甲 / Sacred Armor)<br>• 不朽之王的碎石者 (食人魔之槌 / Ogre Maul)<br>• 不朽之王的细节 (战场腰带 / War Belt)<br>• 不朽之王的熔炉 (战场手套 / War Gauntlets)<br>• 不朽之王的支柱 (战场之靴 / War Boots) | 头部 (Helm)<br>衣服 (Armor)<br>主武器 (Weapon1, 双手槌)<br>腰带 (Belt)<br>手套 (Gloves)<br>鞋子 (Boots) | | **德鲁伊 (Druid)** | **艾尔多的高塔<br>(Aldur's Watchtower)** | • 艾尔多的冷酷目光 (猎人的伪装 / Hunter's Guise)<br>• 艾尔多的欺瞒 (阴影战甲 / Shadow Plate)<br>• 艾尔多的律动 (锯齿之星 / Jagged Star)<br>• 艾尔多的行进 (战场之靴 / Battle Boots) | 头部 (Helm)<br>衣服 (Armor)<br>主武器 (Weapon1)<br>鞋子 (Boots) | | **刺客 (Assassin)** | **娜塔亚的仇恨<br>(Natalya's Odium)** | • 娜塔亚的图腾 (严酷之盔 / Grim Helm)<br>• 娜塔亚的影子 (铠甲 / Loricated Mail)<br>• 娜塔亚的标记 (近身剪 / Scissors Suwayyah)<br>• 娜塔亚的灵魂 (织网之靴 / Mesh Boots) | 头部 (Helm)<br>衣服 (Armor)<br>主武器 (Weapon1)<br>鞋子 (Boots) | *(注:身上的穿戴栏严格保持原汁原味,仅穿戴上述专属套装部件,其余未涵盖的空槽位保持留空。)* --- ## 3. 储藏箱(Stash)初始物资配置 每个职业初始化生成的储藏箱(Stash 6×8 空间)中,整齐陈列下列基础实验物资: 1. **珠宝 (Jewels)**: - 彩虹刻面 (Rainbow Facet - 冰冷、火焰、闪电、毒素暗金珠宝)。 - 常用暗金/亮金攻速增伤珠宝 (如 15% IAS / 40% ED 红白珠)。 2. **宝石 (Gems)**: - 7 种完美宝石各 1~2 颗:完美红宝石 (P-Ruby)、完美紫宝石 (P-Amethyst)、完美蓝宝石 (P-Sapphire)、完美黄宝石 (P-Topaz)、完美绿宝石 (P-Emerald)、完美钻石 (P-Diamond)、完美骷髅 (P-Skull)。 3. **符文 (Runes)**: - 高级符文 (High Runes):Ber (30#), Jah (31#), Cham (32#), Zod (33#), Vex (26#), Ohm (27#), Lo (28#), Sur (29#) 等核心符文语底材。 --- ## 4. 职业切换全套档案联动架构 (Architecture) ### 4.1 独立职业上下文容器 (`HeroProfileState`) 每个职业维护独立的状态对象: ```typescript interface HeroProfileState { classCode: CharacterClassCode; // 'ama' | 'sor' | 'nec' | 'pal' | 'bar' | 'dru' | 'ass' level: number; unspentStatPoints: number; unspentSkillPoints: number; charStats: CharacterClassStats; equipped: Partial<Record<EquipSlotId, UiInventoryItem>>; inventoryGrid: GridPlacement[]; stashItems: GridPlacement[]; stashGold: number; playerGold: number; skillTreeState: { hardPoints: Map<number, number>; activeTab: 0 | 1 | 2; }; hotkeys: { leftSkillId: number; rightSkillId: number; boundKeys: Record<string, number>; }; } ``` ### 4.2 联动切换流程 (`switchHero`) 在触发职业切换时: 1. **自动暂存**:将当前职业的所有装备、背包、仓库、技能加点与快捷键序列化保存至当前职业 Profile 字典。 2. **加载目标职业**: - 若首次选择该职业:加载其专属绿色套装、预制珠宝/宝石/符文仓库、专属 30 个技能树背景与天赋、以及推荐默认左右技能。 - 若非首次选择:恢复用户上次对该职业所作的加点与物品变更。 3. **全组件状态同步**: - `HudManager.charSheet` 属性面板更新(生命、法力、力量、敏捷、体力、精力)。 - `HudManager.inventory` 纸娃娃装备槽与背包网格立即刷新。 - `HudManager.worldPanels` 储藏箱物资与金币刷新。 - `HudManager.skillTree` 加载对应职业背景与技能节点列表。 - `HudManager.hotkeys` 更新左右技能图标及技能选择弹窗(只展示该职业可用技能)。 --- ## 5. 验收标准 (Acceptance Criteria) 1. 在 `acts.html` 顶部切换任意职业时,背包、身上的装备栏、储藏箱、人物属性与技能面板同步无缝切换,无旧职业数据残留。 2. 7 个职业默认均只穿戴该职业专属的暗黑 2 绿色套装(马维娜/塔拉夏/塔格奥/格里斯瓦德/不朽之王/艾尔多/娜塔亚)。 3. 储藏箱内整齐摆放彩虹刻面珠宝、各类完美宝石以及高级符文。 4. 切换职业后打开技能面板(`T`),显示该职业正确的 3 个技能系背景(`bg_<cls>_<tab>.png`)与技能图标。 5. 自动化测试(`npm run typecheck`, `npm test`)全量通过。
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#379
No description provided.