快捷栏与技能槽原版 1.13c 机制复刻:冷却中红色遮罩、光环技能黄色标识、充能技能数字显示、被动技能禁入快捷栏 #382

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

问题背景与需求概述

目前在客户端中,底部控制条的左右技能槽(Left/Right Skill Slot)以及快捷技能选择展开菜单(Skill Select Speedbar,位于 src/ui/hotkeys.ts 与 src/ui/hud-manager.ts)存在以下偏离暗黑破坏神 2(Diablo II v1.13c)原版规则的问题:

  1. CD 冷却期无红色不可用视觉提示:当角色施放带施法延迟(Casting Delay,如暴风雪 Blizzard、陨石 Meteor、冰封球 Frozen Orb 等)的技能后,快捷栏技能图标依然保持常态亮度,玩家无法直观感知技能是否进入冷却。
  2. 光环技能缺乏黄色专属视觉标识:圣骑士进攻/防御光环及装备附带的光环技能未做特殊样式区分,且缺少“光环仅可装备至右键技能槽”的原版限制。
  3. 充能类聚气技能(Charges)未展示剩余次数:由装备附带的充能技能(如聚气传送杖 Teleport Charges、聚气偷取生命杖 Life Tap 等)未在图标右下角显示充能数字。
  4. 被动技能误入快捷栏列表:部分被动技能(如各类武器精通 Masteries、暖气 Warmth、女武神/亚马逊被动等)未在技能选择菜单中被严格剔除,存在可被分配到快捷栏的隐患。

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

1. 施法延迟与 CD 状态红色遮罩(Casting Delay & Red Overlay)

  • 触发机制:由 Skills.txt 中 delay 字段(单位为 ticks/frames,25 fps)定义。施放延迟技能后触发全局/共享施法冷却(如暴风雪 45 ticks / 1.8s,冰封球 25 ticks / 1.0s,陨石 30 ticks / 1.2s)。
  • 视觉反馈:
    • 在 CD 剩余时间(player.cooldown > 0)内,受到 Casting Delay 限制的所有技能在左右快捷槽及展开的选择菜单中,图标表面覆盖半透明红色滤镜/遮罩(如 rgba(220, 20, 20, 0.5)),并呈现暗红不可用状态。
    • 冷却归零后自动移除红色遮罩,恢复正常高亮。

2. 光环技能规范(Aura Skills - Golden / Yellow Styling)

  • 数据依据:Skills.txt 中的 aura = 1(如力量 Might、神圣之火 Holy Fire、狂热 Fanaticism、圣王灵气等)。
  • 槽位限制:
    • 光环技能绝不能分配给左键(Left Slot),leftUsable 必须严格为 false,仅能在右键(Right Slot)装备并生效。
  • 视觉特征:
    • 在技能选择展开菜单和右键槽位中,光环类技能具有独特的金黄色装饰边框(#ffd700 / #ffe46b)或光晕底框,与普通的瞬发施法技能明显区分。

3. 充能类技能数字徽标(Charged Skills & Remaining Charges)

  • 数据来源:来自装备属性 item_charged_skill(包含 level、currentCharges、maxCharges)。
  • UI 显示:
    • 充能技能在图标右下角(或底部)以白色/淡金色字体(font8,带 1px 黑色投影)渲染当前剩余充能次数(例如 20 或 20/20)。
    • 当充能耗尽(currentCharges === 0)时,图标呈红色不可用状态,提示玩家前往营地铁匠处修理充能。

4. 被动技能彻底禁入快捷栏(Passive Skills Exclusion)

  • 数据依据:Skills.txt 中的 passive = 1。
  • 包含范围:
    • 亚马逊:Critical Strike (9), Dodge (13), Avoid (18), Penetrate (23), Evade (28), Pierce (33)
    • 野蛮人:Sword/Axe/Mace/Polearm/Throwing/Spear Mastery (127~129, 134~136), Increased Stamina (141), Iron Skin (145), Increased Speed (148), Natural Resistance (153)
    • 巫师:Warmth (37), Fire Mastery (61), Lightning Mastery (63), Cold Mastery (65)
    • 死灵法师:Skeleton Mastery (69), Golem Mastery (79), Summon Resist (89)
    • 刺客:Claw Mastery (252), Weapon Block (263)
    • 德鲁伊:Lycanthropy (224)
  • 过滤原则:
    • 被动技能仅在加点后提供常驻属性增益(passiveStat / passiveCalc),严禁出现在 getAvailableSkillsForSide()、SkillHotkeysHud.availableSkills 以及任何左右按键选择菜单中。

改造与验收标准

  1. 技能绘制函数 drawSkillButton 改造(src/ui/hotkeys.ts):
    • 增加冷却状态参数 isCoolingDown: boolean:为 true 时在技能图标上方绘制红色滤镜(ctx.fillStyle = 'rgba(200, 20, 20, 0.45)',并填充图标区域)。
    • 增加光环状态参数 isAura: boolean:为 true 时使用明亮金黄色高光边框(#ffd700,2px)或专属金色光环标识。
    • 增加充能次数参数 charges?: { current: number; max: number }:有充能时在右下角渲染数字徽章。
  2. 状态联动与管线同步(src/ui/hud-manager.ts & src/scene/act-scene.ts):
    • 将主循环中的 player.cooldown 实时同步至 SkillHotkeysHud。
    • 保证左右技能槽以及展开的 Speedbar 弹窗实时响应 CD 变化变红。
  3. 被动技能硬性剔除:
    • 在角色加载、职业切换及技能列表初始化时,根据 Skills.txt 的 passive === 1 全局过滤掉所有被动技能,确保 Speedbar 弹窗仅展示合法的可主动施放技能与光环技能。
  4. 单测与回归验证:
    • 增加针对 getAvailableSkillsForSide 的单元测试,确保无被动技能渗漏。
    • 测试 CD 期间图标变红、CD 结束后恢复常态的逻辑断言。
## 问题背景与需求概述 目前在客户端中,底部控制条的左右技能槽(Left/Right Skill Slot)以及快捷技能选择展开菜单(Skill Select Speedbar,位于 `src/ui/hotkeys.ts` 与 `src/ui/hud-manager.ts`)存在以下偏离暗黑破坏神 2(Diablo II v1.13c)原版规则的问题: 1. **CD 冷却期无红色不可用视觉提示**:当角色施放带施法延迟(Casting Delay,如暴风雪 Blizzard、陨石 Meteor、冰封球 Frozen Orb 等)的技能后,快捷栏技能图标依然保持常态亮度,玩家无法直观感知技能是否进入冷却。 2. **光环技能缺乏黄色专属视觉标识**:圣骑士进攻/防御光环及装备附带的光环技能未做特殊样式区分,且缺少“光环仅可装备至右键技能槽”的原版限制。 3. **充能类聚气技能(Charges)未展示剩余次数**:由装备附带的充能技能(如聚气传送杖 Teleport Charges、聚气偷取生命杖 Life Tap 等)未在图标右下角显示充能数字。 4. **被动技能误入快捷栏列表**:部分被动技能(如各类武器精通 Masteries、暖气 Warmth、女武神/亚马逊被动等)未在技能选择菜单中被严格剔除,存在可被分配到快捷栏的隐患。 --- ## 原版 Diablo II v1.13c 核心机制规范(Ground Truth) ### 1. 施法延迟与 CD 状态红色遮罩(Casting Delay & Red Overlay) - **触发机制**:由 `Skills.txt` 中 `delay` 字段(单位为 ticks/frames,25 fps)定义。施放延迟技能后触发全局/共享施法冷却(如暴风雪 45 ticks / 1.8s,冰封球 25 ticks / 1.0s,陨石 30 ticks / 1.2s)。 - **视觉反馈**: - 在 CD 剩余时间(`player.cooldown > 0`)内,受到 Casting Delay 限制的所有技能在左右快捷槽及展开的选择菜单中,图标表面覆盖半透明红色滤镜/遮罩(如 `rgba(220, 20, 20, 0.5)`),并呈现暗红不可用状态。 - 冷却归零后自动移除红色遮罩,恢复正常高亮。 ### 2. 光环技能规范(Aura Skills - Golden / Yellow Styling) - **数据依据**:`Skills.txt` 中的 `aura = 1`(如力量 Might、神圣之火 Holy Fire、狂热 Fanaticism、圣王灵气等)。 - **槽位限制**: - **光环技能绝不能分配给左键(Left Slot)**,`leftUsable` 必须严格为 `false`,仅能在右键(Right Slot)装备并生效。 - **视觉特征**: - 在技能选择展开菜单和右键槽位中,光环类技能具有独特的金黄色装饰边框(`#ffd700` / `#ffe46b`)或光晕底框,与普通的瞬发施法技能明显区分。 ### 3. 充能类技能数字徽标(Charged Skills & Remaining Charges) - **数据来源**:来自装备属性 `item_charged_skill`(包含 `level`、`currentCharges`、`maxCharges`)。 - **UI 显示**: - 充能技能在图标右下角(或底部)以白色/淡金色字体(`font8`,带 1px 黑色投影)渲染当前剩余充能次数(例如 `20` 或 `20/20`)。 - 当充能耗尽(`currentCharges === 0`)时,图标呈红色不可用状态,提示玩家前往营地铁匠处修理充能。 ### 4. 被动技能彻底禁入快捷栏(Passive Skills Exclusion) - **数据依据**:`Skills.txt` 中的 `passive = 1`。 - **包含范围**: - 亚马逊:Critical Strike (9), Dodge (13), Avoid (18), Penetrate (23), Evade (28), Pierce (33) - 野蛮人:Sword/Axe/Mace/Polearm/Throwing/Spear Mastery (127~129, 134~136), Increased Stamina (141), Iron Skin (145), Increased Speed (148), Natural Resistance (153) - 巫师:Warmth (37), Fire Mastery (61), Lightning Mastery (63), Cold Mastery (65) - 死灵法师:Skeleton Mastery (69), Golem Mastery (79), Summon Resist (89) - 刺客:Claw Mastery (252), Weapon Block (263) - 德鲁伊:Lycanthropy (224) - **过滤原则**: - 被动技能仅在加点后提供常驻属性增益(`passiveStat` / `passiveCalc`),**严禁出现在 `getAvailableSkillsForSide()`、`SkillHotkeysHud.availableSkills` 以及任何左右按键选择菜单中**。 --- ## 改造与验收标准 1. **技能绘制函数 `drawSkillButton` 改造(`src/ui/hotkeys.ts`)**: - 增加冷却状态参数 `isCoolingDown: boolean`:为 `true` 时在技能图标上方绘制红色滤镜(`ctx.fillStyle = 'rgba(200, 20, 20, 0.45)'`,并填充图标区域)。 - 增加光环状态参数 `isAura: boolean`:为 `true` 时使用明亮金黄色高光边框(`#ffd700`,2px)或专属金色光环标识。 - 增加充能次数参数 `charges?: { current: number; max: number }`:有充能时在右下角渲染数字徽章。 2. **状态联动与管线同步(`src/ui/hud-manager.ts` & `src/scene/act-scene.ts`)**: - 将主循环中的 `player.cooldown` 实时同步至 `SkillHotkeysHud`。 - 保证左右技能槽以及展开的 Speedbar 弹窗实时响应 CD 变化变红。 3. **被动技能硬性剔除**: - 在角色加载、职业切换及技能列表初始化时,根据 `Skills.txt` 的 `passive === 1` 全局过滤掉所有被动技能,确保 Speedbar 弹窗仅展示合法的可主动施放技能与光环技能。 4. **单测与回归验证**: - 增加针对 `getAvailableSkillsForSide` 的单元测试,确保无被动技能渗漏。 - 测试 CD 期间图标变红、CD 结束后恢复常态的逻辑断言。
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#382
No description provided.