Skip to content

Repository files navigation

🛡️ HandGuard

WoW Version Lua License

One-click paladin externals for your whole raid. Any raid member requests Blessing of Protection, Blessing of Freedom or Divine Intervention with a single click — HandGuard finds the best available paladin, alerts them with a glowing button, and casts on the requester without the paladin ever losing their current target.

Built for vanilla 1.12 clients (OctoWow 1.18) with first-class support for SuperWoW, UnitXP SP3 and Nampower, and pure-1.12 fallbacks for everything.

📸 Preview

HandGuard in action

The paladin alert with its pulsing CAST button, the requester tooltip with live per-paladin cooldowns, the 3-icon request bar with ready-count badges, and the options panel showing the detected client extensions.


✨ Features

For everyone (requester side)

  • 🎯 Floating request bar — three icons (BoP / BoF / DI) with a live badge showing how many paladins have each spell ready right now
  • 🖱️ One click = one request, routed to the best paladin: your priority list first, then the closest one in range
  • 🔁 Automatic rerouting — if a paladin declines, dies, or doesn't answer within seconds, the request instantly moves to the next available paladin
  • 📊 Hover tooltip — every paladin in the raid with per-spell state: READY, exact cooldown remaining, no reagent, no addon
  • 🗣️ Full chat feedback — accepted / denied (with the reason) / received, you always know what happened
  • ⌨️ Key bindings for emergency requests, DI protected by a confirmation popup

For paladins (provider side)

  • 🚨 Glowing alert frame — requester name in class color, spell icon, pulsing CAST button, expiry bar, raid-warning sound
  • 🎯 Cast without retargeting (SuperWoW): the blessing lands on the requester while you keep your current target — tanks love this
  • Semi-auto mode (opt-in): the request arms itself and fires on your very next input — action key, mouse click, camera turn. No aiming needed
  • 🧠 Smart auto-deny with reasons: on cooldown, dead, out of range, no line of sight, target has Forbearance, no Symbol of Divinity…
  • 📿 Forbearance tracking (60 s) and reagent counting for DI
  • 💀 Divine Intervention is never auto-cast — it sacrifices you; it always requires a deliberate click, with a big red warning
  • 📢 Optional whisper to the protected player and party/raid announce
  • 🕐 Request queue when several people ask at once

Under the hood

  • 📡 HGRD sync protocol — paladins broadcast their cooldowns (debounced, resync every 60 s); requests are ACK/DENY/CASTED-confirmed end to end
  • 🔍 Cast detection for paladins without the addon — their BoP/BoF/DI casts are seen via UNIT_CASTEVENT and their cooldowns estimated
  • 🏷️ Rename & custom-ID proof — spells are matched by alias list and by asking the client (SpellInfo), so TBC-style renames like Hand of Protection and custom spell IDs are handled automatically
  • 🧯 Cast verification — every cast is confirmed by cast event or by the spell's own cooldown starting; failures produce an instant cast failed answer instead of a silent hang

📥 Installation

  1. Download the latest release (green Code button → Download ZIP)
  2. Extract the HandGuard folder into Interface\AddOns\
  3. Make sure the folder is named exactly HandGuard (not HandGuard-main)
  4. Enable it on the character screen — done!

Every raid member who wants to request or provide blessings should install it. Paladins without the addon are still tracked (estimated cooldowns) but cannot receive requests.

🕹️ Usage

Command Effect
/hg Open the options panel (General / Paladin / Requests tabs)
/hg unlock · /hg lock Move the bar & alert frame, then lock them
/hg bop · /hg bof · /hg di Request a spell from the command line / macros
/hg auto Toggle semi-auto cast (paladins, BoP/BoF only)
/hg test Preview the paladin alert frame
/hg status Extensions, group state, your spells, every paladin's cooldowns
/hg spells Debug: show how your spellbook was matched
/hg debug Log every HGRD message sent/received
/hg reset Reset frame positions

⚙️ Client extensions (auto-detected)

Extension What HandGuard uses it for
SuperWoW Exact raid-wide cast tracking (UNIT_CASTEVENT), casting by GUID without retargeting, Forbearance by spell ID, custom spell-ID resolution
UnitXP SP3 Exact 30-yard range checks and line-of-sight tests before routing (each subcommand is self-tested at load)
Nampower Instant spell queueing in semi-auto mode

No extensions? HandGuard falls back to combat-log parsing, CheckInteractDistance and target/cast/retarget. Everything keeps working.

❓ FAQ

Why "semi"-auto and not fully automatic? The client only accepts spell casts made during real player input (anti-bot protection — verified: every programmatic cast path is silently dropped). Semi-auto mode arms the request and fires it on your next click, key press or camera turn, which in actual gameplay means near-instantly. A paladin who touches nothing for 8 seconds lets the request expire, and it reroutes.

Does the requester need to be in range? The router prefers in-range paladins (exact distance with UnitXP). An out-of-range paladin denies with you are out of range and the request reroutes automatically.

What about Forbearance? Tracked for 60 s on everyone (and read directly from debuffs with SuperWoW). You can't request a BoP while you have it, and paladins auto-deny it.

🧩 Architecture

HandGuard/
├── HandGuard.toc      # 1.12 addon manifest
├── Bindings.xml       # key bindings (BoP / BoF / DI requests)
├── utils.lua          # chat-safe printing, timers, unit helpers, distance/LoS
├── core.lua           # init, capability detection, events, roster, slash
├── cdtracker.lua      # spellbook scan, cooldowns, reagents, cast detection
├── sync.lua           # HGRD protocol + request routing state machine
├── ui_requester.lua   # floating request bar + tooltip
├── ui_paladin.lua     # alert frame, cast cascade, semi-auto arming
└── options.lua        # tabbed options panel

The HGRD protocol carries a spell field (BOP/BOF/DI), so more externals can be added without breaking compatibility.


🇫🇷 En bref

Addon de coordination des CDs externes paladin pour WoW 1.12 (OctoWow) : un membre du raid clique une icône → le meilleur paladin disponible reçoit une alerte avec un bouton lumineux → un clic (ou sa prochaine action en mode semi-auto) pose la bénédiction sur le demandeur sans changer de cible. Refus motivés, re-routage automatique, suivi de Forbearance et des réagents, /hg pour les options. Installez-le sur tous les personnages du raid.

📜 License

MIT — see LICENSE.

Built with ❤️ (and a lot of in-game testing) by Shikawa & Claude.

About

One-click paladin externals (BoP/BoF/DI) for WoW 1.12 - smart routing, glowing alerts, semi-auto cast. Built for OctoWow with SuperWoW/UnitXP/Nampower support.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages