diff --git a/assets/templates/ui/skills/blessed_hammer.png b/assets/templates/ui/skills/blessed_hammer.png new file mode 100644 index 0000000..2023602 Binary files /dev/null and b/assets/templates/ui/skills/blessed_hammer.png differ diff --git a/assets/templates/ui/skills/concentration.png b/assets/templates/ui/skills/concentration.png new file mode 100644 index 0000000..0d53a13 Binary files /dev/null and b/assets/templates/ui/skills/concentration.png differ diff --git a/assets/templates/ui/skills/holy_shield.png b/assets/templates/ui/skills/holy_shield.png new file mode 100644 index 0000000..a2957f3 Binary files /dev/null and b/assets/templates/ui/skills/holy_shield.png differ diff --git a/assets/templates/ui/skills/picker_blessed_hammer.png b/assets/templates/ui/skills/picker_blessed_hammer.png new file mode 100644 index 0000000..88a9e65 Binary files /dev/null and b/assets/templates/ui/skills/picker_blessed_hammer.png differ diff --git a/assets/templates/ui/skills/picker_concentration.png b/assets/templates/ui/skills/picker_concentration.png new file mode 100644 index 0000000..e50e6f2 Binary files /dev/null and b/assets/templates/ui/skills/picker_concentration.png differ diff --git a/assets/templates/ui/skills/picker_redemption.png b/assets/templates/ui/skills/picker_redemption.png new file mode 100644 index 0000000..e405ecc Binary files /dev/null and b/assets/templates/ui/skills/picker_redemption.png differ diff --git a/assets/templates/ui/skills/picker_vigor.png b/assets/templates/ui/skills/picker_vigor.png new file mode 100644 index 0000000..54a152c Binary files /dev/null and b/assets/templates/ui/skills/picker_vigor.png differ diff --git a/assets/templates/ui/skills/redemption.png b/assets/templates/ui/skills/redemption.png new file mode 100644 index 0000000..9906947 Binary files /dev/null and b/assets/templates/ui/skills/redemption.png differ diff --git a/assets/templates/ui/skills/teleport.png b/assets/templates/ui/skills/teleport.png new file mode 100644 index 0000000..738a85c Binary files /dev/null and b/assets/templates/ui/skills/teleport.png differ diff --git a/assets/templates/ui/skills/vigor.png b/assets/templates/ui/skills/vigor.png index 7bcf1c6..2ca91ea 100644 Binary files a/assets/templates/ui/skills/vigor.png and b/assets/templates/ui/skills/vigor.png differ diff --git a/src/char/paladin/hammerdin.py b/src/char/paladin/hammerdin.py index b289203..05ba3f5 100644 --- a/src/char/paladin/hammerdin.py +++ b/src/char/paladin/hammerdin.py @@ -35,31 +35,23 @@ class Hammerdin(Paladin): else: aura = None - # D2R: hotkey always puts skill on LEFT click. - # Right-clicking with it selected moves it to RIGHT + activates. - # Sequence: press aura (left) -> right-click (moves to right, activates) - # press hammer (left) -> left-click spam. - # Skip re-selection when the slot already holds the wanted skill - # (tracked in _active_skill; pre_move/_weapon_switch invalidate it) — - # consecutive casts then just hold the aura and spam left-click. + # D2R (verified live 2026-06-12): skill hotkeys select onto the RIGHT + # slot. The LEFT slot permanently holds Blessed Hammer (set once in the + # left-button menu) — pressing the hammer hotkey here would put the + # hammer on the RIGHT slot and REPLACE the just-activated aura, which is + # exactly why fights used to run without Concentration. So: select the + # aura (lands on right, activates), then pure left-click spam. if aura and self._active_skill["right"] != aura: - keyboard.send(self._skill_hotkeys[aura]) # aura goes to left-click + keyboard.send(self._skill_hotkeys[aura]) # aura -> right slot wait(0.15, 0.2) - mouse.click(button="right") # moves aura to right-click + activates it + mouse.click(button="right") # ensure the aura is the active right skill self._set_active_skill("right", aura) - self._set_active_skill("left", "") wait(0.15, 0.2) # Hold stand_still so we don't walk while attacking keyboard.send(Config().char["stand_still"], do_release=False) wait(0.05, 0.1) - # Set Blessed Hammer on LEFT click - if self._skill_hotkeys["blessed_hammer"] and self._active_skill["left"] != "blessed_hammer": - keyboard.send(self._skill_hotkeys["blessed_hammer"]) - self._set_active_skill("left", "blessed_hammer") - wait(0.05, 0.1) - # Spam left-clicks to cast hammers (aura stays active on right-click) start = time.time() while (time.time() - start) < time_in_s: diff --git a/src/utils/skill_preflight.py b/src/utils/skill_preflight.py index 57e6281..6165c95 100644 --- a/src/utils/skill_preflight.py +++ b/src/utils/skill_preflight.py @@ -60,20 +60,24 @@ def get_build_skill_checks(config_instance: Config, char_type: str | None = None checks = [] if char_type == "hammerdin": - char_cfg = config_instance.char + build_cfg = getattr(config_instance, "hammerdin", {}) # blessed hammer lives on left-click; auras/teleport go to right + # hotkeys select onto the RIGHT slot; left holds the hammer permanently checks.append(SkillCheck(char_type, "blessed_hammer", - _configured_hotkey(char_cfg, "blessed_hammer"), - "BLESSED_HAMMER", "left", True)) + _configured_hotkey(build_cfg, "blessed_hammer"), + "BLESSED_HAMMER", "right", True)) checks.append(SkillCheck(char_type, "concentration", - _configured_hotkey(char_cfg, "concentration"), + _configured_hotkey(build_cfg, "concentration"), "CONCENTRATION", "right", True)) for skill, template in [("redemption", "REDEMPTION"), ("vigor", "VIGOR"), - ("conviction", "CONVICTION"), ("holy_shield", "HOLY_SHIELD"), - ("teleport", "TELE_ACTIVE")]: - hotkey = _configured_hotkey(char_cfg, skill) + ("conviction", "CONVICTION"), ("holy_shield", "HOLY_SHIELD")]: + hotkey = _configured_hotkey(build_cfg, skill) if hotkey: checks.append(SkillCheck(char_type, skill, hotkey, template, "right", False)) + # teleport key sits in [char] + tp_key = _configured_hotkey(config_instance.char, "teleport") + if tp_key: + checks.append(SkillCheck(char_type, "teleport", tp_key, "TELE_ACTIVE", "right", False)) return checks if char_type != "blizz_sorc": diff --git a/tools/capture_skill_hotkeys.py b/tools/capture_skill_hotkeys.py index 29b369a..88715ae 100644 --- a/tools/capture_skill_hotkeys.py +++ b/tools/capture_skill_hotkeys.py @@ -48,12 +48,15 @@ def main(): start_detecting_window() wait(0.5) - roi = Config().ui_roi["skill_left"] + # hotkeys select onto the RIGHT slot (verified live 2026-06-12) + roi = Config().ui_roi["skill_right"] results = [] prev_icon = None try: + build_cfg = getattr(Config(), Config().char.get("type", ""), {}) for skill in SKILLS: - hotkey = Config().char.get(skill) + # build skills live in the [hammerdin]-style section; teleport in [char] + hotkey = build_cfg.get(skill) or Config().char.get(skill) if not hotkey: results.append((skill, "-", "no hotkey configured")) continue