Feb 17, 2016

Multi-boxing Healing using ISBoxer

In setting up ISBoxer to run a mixed-class team, I needed the ability to heal my team without actually playing the healer as a primary character. In other words, I'd rather play the tank to ensure that all the aggro is where it should be and control healing from the tank's perspective.

MiRai has several excellent tutorials (here and here) that illustrate how to accomplish this in ISBoxer. Using these as a basis, I then tailored the approach to meet my own needs. So, what are those needs?

Well, they're pretty straight forward.  First and foremost, I wanted to utilize click-to-heal within my active game window. In other words, click on a party member and have the healer cast a spell -- right click on the tank to cast Penance, middle mouse click to cast Power Word: Shield, and, well, you get the idea. Note, this is not limited to the tank -- any member of the party would benefit from this! And, extending further, I wanted distinct sections of the party member's unit frame allocated to the primary healer as well as alternative healers (so in a pinch the Paladin tank can cast Word of Glory or Lay on Hands if the primary healer fell behind).

So what did I need to configure to accomplish this?

User Interface

First, I need a consistent UI within each game client. Central to this, the order of characters in the party needs to be consistent with the game clients. If my team is out of order, I could want to heal Character A in my main screen, but that might be Character B in my healer's screen -- which ain't gonna cut it.  As a base UI, I love ElvUI. Using the configuration options in ElvUI, I changed around the party frames and action bars to arrive at the following layout.
My ElvUI
This works for me because the party frames are front and center and easily visible if any team member starts to take damage. Presenting information is only part of the process; now we need to dig into ISBoxer to configure click-to-heal.

ISBoxer Action Target Groups

In ISBoxer, first set up Action Target Groups (ATGs). ATGs are logical groupings within ISBoxer that can then be used to filter out keystrokes to specific characters based upon the grouping. I used class specific ATGs (like "Paladin" and "Priest") but also role-based grouping (like "Tank", "Primary Healer" and "Alternate Healer") as well as ability-based grouping (like "Interrupter" and "Ground Target AOE".
Once these ATGs are defined within ISBoxer, specific characters may be assigned to these ATGs. For example, the Tank group conly contains my Tank, the Primary Healer group only contains my Priest, but the Alternate Healer contains the Paladin (and if I had a Shaman or a Druid as DPS they would also participate in the Alternate Healer group).
The organization of roles into ATGs is a central organization element to building the following click bar and macros.

ISBoxer Click Bar

ISBoxer offers the ability to create Click Bars (think of this as an overlay defined within ISBoxer that floats on top of the game client).
I set up a multiple Click Bars to capture my mouse-clicks and any modifiers (allowing for the full range of "click binds" like middle mouse press, scroll up, scroll down, and modifer based clicks lift Shift + Right Click). The Click Bar then broadcasts those captured clicks to the correct ATG of either my primary healer OR my alternate healer(s). Huh?
Check this out...
ISBoxer Click Bar Overlay
The magenta boxes (colored for illustration) on the left section of each party member's unit frame is my alternate healer click bar. When I click on that section, ISBoxer sends that click to my group of "Alternate Healer" -- in my case that's only my Paladin, but that could include a Druid, a Shaman, or other DPS class with healing abilities.With this, I can click the left-most section of the Paladin (the selected unit frame) and ISBoxer sends that click command to the Priest (the only member of the Primary Healer ATG). I can do the same on the Hunter, Mage, Warlock or even the Priest.
The white boxers on the right section are my primary healer click bar. When I click that area of a unit frame, ISBoxer sends those clicks to my "Primary Healer" group -- my Priest.
The Click Bars are assigned to only broadcast the captured mouse clicks to specific ATGs in ISBoxer. Moreover, the click bars "activate" based on a mouseover of the Click Bar so that they don't interfere with my normal game mouse clicks (quests, interaction, camera, etc). When my cursor enters the overlay area, the mouse keybinds activate, and when the cursor exits the overlay area, the keybinds deactivate. This allows me to bind my mouse actions within a toggled state rather than a global state.

ISBoxer Key Maps

Key Maps accomplish the heavy lifting in ISBoxer. In my case, I created Key Maps called "Primary Healing Hot Keys" and "Alternate Healing Hot Keys" to handle my healing actions. Key Maps control the broadcast of actions and they may be then assigned to the ATGs. So, the "Primary" healing hot keys broadcast only to the members of the "Primary Healer" ATG and the "Alternate" hot keys broadcast only to the members of the "Alternate Healer" ATG.
ISBoxer Primary Healing Key Map - Heal Mapped Key
For example, within that healing key map, I have a action (called a Mapped Key in ISBoxer) called "Heal" bound to the left mouse click (mouse 1). This mapped key does two things (triggered by the press or release of the hotkey):
ISBoxer Heal Mapped Key: Step 1
Step 1: On press, synchronize the cursor position from the source game client to the other game clients (within that ATG). So, when I press my left click mouse on a unit frame, this sync's the cursor to my current position in the priest's game window.

ISBoxer Heal Mapped Key: Step 2
On Release, call the ISBoxer "Heal" macro. In other words, cast the spell when I let go of the mouse button.
Finally, let's talk about that Heal macro.

ISBoxer Game Helper (Macros)

In review:
we have ATGs for Primary and Secondary healers
we have characters assigned to those ATGs
we have a click bar overlay that will capture specific clicks
we have a key map that broadcast those click actions or performs a macro action to specific ATGs

The final step in this configuration is defining the mouseover macros to respond to the mouse clicks. In a prior post, I described my beneficial healing abilities. These included things like Heal, Heal (Fast), Shield, etc. Again, once we know what we need to cast, then we need to actually cast it.
The class specific character maps assign these abilities to key binds as well as in game macros. The Game Helper functionality ISBoxer sends that action as a World of Warcraft Macro that looks like this:
/run UIErrorsFrame:Hide()
/console Sound_EnableSFX 0
/console Sound_EnableErrorSpeech 0
-- PALADIN
!if (character is in "Paladin") /cast [@mouseover,help,nodead][help,nodead][] Word of Glory
-- PRIEST
!elseif (character is in "Priest") /cast [@mouseover,help,nodead][] /cast [@mouseover,help,nodead][] Heal
/console Sound_EnableSFX 1
/console Sound_EnableErrorSpeech 1
/run UIErrorsFrame:Clear()
/run UIErrorsFrame:Show()

Hold on! That's not a valid WoW macro!  Yep - it's an ISBoxer macro. The beauty of this in my setup is that I have a single macro defined for all of the classes that I play that will cast the Heal ability specific to that class. Another way of looking at that is that I do not need to write in-game macros on each character to handle my mouseover healing. Cool. huh? Well, let's dig into this macro further.
/run UIErrorsFrame:Hide()
/console Sound_EnableSFX 0
/console Sound_EnableErrorSpeech 0
The first three lines are overkill; but in line 1 I want to hide the error frame so I don't see "spell is not ready" errors. Line 2 disables sound effects and line 3 disables the error speech (or when your character tells you they can't cast that yet.)
-- PALADIN
Line 4 is simply a lua comment breaking out the paladin section of the macro for my own peace of mind.
!if (character is in "Paladin") /cast [@mouseover,help,nodead][help,nodead][] Word of Glory
Line 5 uses the ISBoxer conditional !if (character is in "Paladin") to check if casting character is in the ATG of "Paladin". If so, then it sends the in-game /cast [@mouseover,help,nodead][help,nodead][] Word of Glory mouseover healing macro for Word of Glory. That in-game macro further uses three conditionals to check:
  1. [@mouseover,help,nodead]: my current target is my mouseover target AND it is helpful to me (i.e. an ally) AND is not dead or
  2. [help,nodead]: my current target (not a mouseover!) is helpful AND is not dead or
  3. []: a catch all in case my prior logic sucked -- let the game figure out if we can cast the spell!
Lumping the conditonals in serial like that translates to a logical OR check; if condition1 OR condition2 or condition3 then do X. The mouseover condition is first because I want that prioritized, but then the other 2 are refined fallback conditions before the character actual does the ability (in this case to cast a spell).
-- PRIEST
Line 6 is another lua comment breaking out the priest section.
!elseif (character is in "Priest") /cast [@mouseover,help,nodead][] /cast [@mouseover,help,nodead][] Heal
Similar to line 5, line 7 checks if the character is in the ISBoxer ATG of "Priest" and -- if yes -- casts the in-game mouseover healing macro for Heal using the same conditions as before i.e. is our cursor over an ally that is not dead, or is our current target an ally that's not dead or what...
This setup process repeats for each beneficial ability; I have another ISBoxer macro for Fast Heal, for Shield, for Dispel... You get the picture.
The end result? When I click on the right-hand section of any party member's health bar, my Priest casts a beneficial spell on that selected character. Moreover, when I click on the left-hand section of a any party member's health bar, my Paladin casts a beneficial on that character.
This setup allows me to have my main view on the Paladin, but still heal from the Priest as needed, and I think that it's pure awesomesauce.

No comments:

Post a Comment