From aeed2036d093e4d7809086431790a4494b973f10 Mon Sep 17 00:00:00 2001 From: en Date: Tue, 15 Sep 2026 18:02:32 +0200 Subject: [PATCH] Switch interact keybind to Alt+J; rewrite MACROS.md for current retail; clarify Auto-Interact --- CHANGELOG.md | 2 ++ docs/MACROS.md | 52 ++++++++++++++++++++++++++++--------------- docs/NOTES.md | 10 +++++---- examples/profile.yaml | 14 +++++++++++- 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5680fd2..d8128a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,3 +25,5 @@ - T13: mirror-mode mouse click broadcast — `hypr::deliver_click` posts compositor pointer events to every non-leader captured slot; press-and-hold guard deferred - T14: round-robin bind target (`round_robin` / `rr`) — rotates through ALL slots including the leader, in slot-number order, wrapping; per-map cursor - T15: Teams + Lutris launcher. `src/team.rs` (Team, list_teams, teams_dir, current_team), `src/lutris.rs` (LutrisGame parser, `load_all` with bad-YAML tolerance), `src/launcher.rs` (SpawnPlan merging Lutris config with per-character wine-prefix override). GUI: Teams menu (New / Switch / Refresh / Show / Delete) and Launch menu (per-character + Launch all); Lutris picker visible only in the New-team flow. Direct Wine spawn — never calls `lutris` CLI +- `game_binds.interact` example uses **Alt+J** (Master's request). Interact with Target is a built-in WoW keybind; enBoxer just routes the keystroke. +- `docs/MACROS.md` rewritten for current retail (The War Within era, 2026): rename "CTM" → Auto-Interact (the CVar), document Alt+J for Interact with Target, document per-character Assist / Follow macro override, add optional Pet Attack / Target Last Target keybinds. diff --git a/docs/MACROS.md b/docs/MACROS.md index 87a6073..f93761d 100644 --- a/docs/MACROS.md +++ b/docs/MACROS.md @@ -1,10 +1,22 @@ -# In-game macros (no addon) +# In-game macros (no addon, retail-shaped) -enBoxer only sends keystrokes. Bind these in WoW on **every** account. Forever is not out; these are **retail-shaped**. If Interact with Target is missing on that client, the loot map will not walk or loot until a later helper (not shipped). +enBoxer only sends keystrokes. Bind these in WoW on **every** account. **The example profile targets retail (The War Within era, 2026).** Forever is not out yet, so the macro set is whatever current retail uses. If Interact with Target is missing on a client, the loot map will not walk or loot until a later helper (not shipped). Match keys to `game_binds` in the profile. -## Click to Move +## Interact with Target (keybind, no macro needed) + +In WoW: **Key Bindings → Targeting → Interact with Target**. Bind it on every account to the same key (the example uses **Alt+J**). enBoxer routes the keystroke to every captured slot — no macro needed. + +> Do not bind Interact Target to a mouse button; that is unreliable while enBoxer is routing mouse clicks. + +Turn **Auto Loot** on in-game so the corpse is looted when the alts arrive. + +## Auto-Interact (the legacy "CTM") + +"Click to Move" was removed in Warlords of Draenor (2014). What multibox guides still call CTM is the `autoInteract` CVar: when on, your character walks up to the target and interacts automatically instead of needing a separate walk + interact sequence. enBoxer turns it on for the duration of an interact/loot map and turns it off afterwards. + +CVars are not keybindable, so these need to be macros. **CTM On** — `game_binds.ctm_on` (example Shift+F3): @@ -18,7 +30,7 @@ Match keys to `game_binds` in the profile. /console autoInteract 0 ``` -If `/console autoInteract` is rejected: +If `/console autoInteract` is rejected (some protected profiles, a SecureCVar-protected client), the equivalent is: ``` /run C_CVar.SetCVar("autoInteract", "1") @@ -26,38 +38,42 @@ If `/console autoInteract` is rejected: and `"0"` for off. -## Assist / Follow +## Assist and Follow (per-character macros) -Replace `MainName` with the character you play from. When you swap who is primary, update the names (no-addon tradeoff). +The example profile stores a default key under `game_binds.assist` and `game_binds.follow`, and **overrides them per character** under `characters[].assist_key` and `characters[].follow_key`. The override is what every account actually binds in-game (so swap-to-slot-N retargets the bind automatically). -**Per-character bind keys (already wired):** set `assist_key` and `follow_key` on each `Character` in the profile — those are the in-game macros every account should bind to `/assist ThisName` / `/follow ThisName`. A map using `bind: assist` (or `bind: follow`) resolves to the current main's key, so swap-to-slot-N automatically retargets the bind without re-editing YAML. +Pick a different in-game macro **per character** that targets the leader's name. For a Main named Eisheth: -**Assist** — `game_binds.assist` (example Shift+F2): +**Assist** — bind to whatever you set on the character: ``` -/assist MainName +/assist Eisheth ``` -**Follow** — `game_binds.follow` (example Shift+F1): +**Follow** — bind to whatever you set on the character: ``` -/follow MainName +/follow Eisheth ``` -## Interact with Target +If you swap leaders, edit the `assist` / `follow` macros on each client to match the new main's name, or just swap which client is the leader. -Key Bindings → Targeting → Interact with Target. No default. Example: `G`. Put the same combo in `game_binds.interact`. +Built-in keybinds `Targets → Assist Target` / `Follow Target` only assist or follow the **current target**, which is not what multiboxing wants when the alts need to name-target the main. That's why enBoxer ships the per-character macro override. -Do not bind it to a mouse button; that is unreliable while routing clicks. +## Optional, class-dependent (in-game keybinds, no macro) -Turn **auto loot** on in the game if you want a corpse looted when they arrive. +- **Pet Attack** — Key Bindings → Pet Actions → Attack. Useful for Hunter / Warlock / DK / Demon Hunter. Wire it through enBoxer with `game_binds.pet_attack`. +- **Target Last Target** — Key Bindings → Targeting → Target Last Target. Useful as a "retry" if the first interact was on cooldown. Wire it with `game_binds.target_last`. -## One loot press +Both are pure in-game keybinds; enBoxer just routes the keystroke. + +## One loot press (the `loot` map) 1. Target the corpse or NPC on the primary. 2. Press the loot hotkey (example Alt+G). That key is consumed; the primary does not interact unless the map targets `current`. -3. Alts assist, CTM on, Interact with Target once, walk, interact or loot, CTM off after `interact.walk_delay_ms`. +3. Alts assist, Auto-Interact on, Interact with Target once, walk `walk_delay_ms`, interact or loot, Auto-Interact off. +4. enBoxer's `interact.style` controls how aggressively Auto-Interact stays on: `standard` (on, then off), `auto` (stays on after the press), `hold` (on while the hotkey is down, off on release). Do not mash. A second interact while they are still pathing is how characters run circles. -If they stop short, raise `walk_delay_ms` (2500–4000), use `interact.style: auto` (CTM stays on), or `interact.style: hold` (CTM on until you release the hotkey). +If they stop short, raise `walk_delay_ms` (2500–4000), or use `interact.style: auto` (CTM stays on), or `interact.style: hold`. diff --git a/docs/NOTES.md b/docs/NOTES.md index ca4cbdc..baeb05b 100644 --- a/docs/NOTES.md +++ b/docs/NOTES.md @@ -2,17 +2,19 @@ ## Interact with Target -The game bind does what a right-click on the current target would do: attack, loot, gossip. With Click to Move (`autoInteract`), the character faces and walks to the target. They stop if the interact happens. They do not stop if they miss. Spamming the bind makes them circle. That is the game, not a timer in enBoxer. +The game bind does what a right-click on the current target would do: attack, loot, gossip. With Auto-Interact (`autoInteract` CVar), the character faces and walks to the target. They stop if the interact happens. They do not stop if they miss. Spamming the bind makes them circle. That is the game, not a timer in enBoxer. -Walking is the client. `walk_delay_ms` only holds Click to Move on long enough to arrive, then turns it off so a stray click does not send people running. +Walking is the client. `walk_delay_ms` only holds Auto-Interact on long enough to arrive, then turns it off so a stray click does not send people running. + +The example binds Interact with Target to **Alt+J** on every account; see `docs/MACROS.md`. Styles: -| Style | Click to Move | Interact | +| Style | Auto-Interact | Interact with Target | | --- | --- | --- | | standard | on, then off after the delay | once | | auto | left on | once | -| hold | on while the hotkey is down | on press; CTM off on release | +| hold | on while the hotkey is down | on press; off on release | Macros: `docs/MACROS.md`. diff --git a/examples/profile.yaml b/examples/profile.yaml index 1c1f530..7fa2f7a 100644 --- a/examples/profile.yaml +++ b/examples/profile.yaml @@ -25,11 +25,23 @@ repeater: keys: [] game_binds: - interact: "g" + # Interact with Target is a built-in WoW keybind (Key Bindings > Targeting > + # Interact Target). Bind it on every account to the same key; enBoxer just + # routes the keystroke. Alt+J was requested explicitly. + interact: "Alt+J" + # /console is not keybindable; CTM on / off must be macros. ctm_on: "Shift+F3" ctm_off: "Shift+F4" + # Per-character macro: the slot's character name is filled in by + # Character.assist_key / Character.follow_key, so swap-to-slot-N retargets + # the bind without re-editing YAML. assist: "Shift+F2" follow: "Shift+F1" + # Optional, class-dependent (Hunter / Warlock / DK / Demon Hunter). + # Built-in keybind Targets > Pet Actions > Attack. + # pet_attack: "F" + # Optional "try again" after a missed interact. Targets > Target Last Target. + # target_last: "Ctrl+L" interact: # standard: CTM on → IWT → wait → CTM off