targetAssist buttons


Anyone else miss MainAssist? targetAssist is my attempt to recreate the basic functionality of that wonderful addon.

targetAssist provides unit frames that track tanks and main assists in your party or raid, along with their current targets. You can position the frames by dragging the header bar. Targeting buttons can be arranged above or below the header (see the Appearance section of the configuration options):

targetAssist window

Right click on the header bar to bring up a context menu that will allow you to select the tracked party/raid members and configure the addon:

targetAssist context menu

Left click on party/raid members or their targets to target those units. Right clicking on the party/raid member buttons brings up a menu that allows you to change the order in which they appear:

targetAssist unit order

Right click on a party/raid member target to change the raid icon on that unit:

targetAssist raid icon

The interface options panel allows you to customize the visual appearance and behavior of the addon:

targetAssist interface panel

In addition to setting up the addon to automatically track tanks and main assists set through the default UI, you can also broadcast your current settings to other members of your party/raid who are running the addon:

targetAssist broadcast

Bug Reports and Feature Requests

Please submit bug reports here: Feature requests are also welcome. If you are interested in helping to develop this mod, or if you would like to help with localization efforts, please contact me here via PM or at [email protected]

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of Sonora Sonora Jul 26, 2016 at 00:54 UTC - 0 likes

    It's back! Working for me in 7.0 with version 1.4.11. Please file tickets if you find bugs.

  • Avatar of SassieVixen SassieVixen Jul 22, 2016 at 15:04 UTC - 1 like

    @GozerForscherliga: Go

    I really miss this addon, helps so much hoping someone will pick it up again.

  • Avatar of GozerForscherliga GozerForscherliga Jul 20, 2016 at 07:23 UTC - 1 like

    is anyone able to port/update this one for legion?

  • Avatar of Morgalm Morgalm Dec 30, 2011 at 00:01 UTC - 0 likes

    Not sure what has changed but tank behavior seems to be broken atm. It isnt (always) detecting when I add/remove tanks using the blizz tanks (ie promote them to tank) Also I had 2 tanks up then one just disappeared. I checked and under custom tanks it had tank1 and tank2 both checked but only tank1 was showing. If I unchecked tank2 tank1 disappeared. Could never get tank2 to appear. Seems to be new behavior in last month or so.

  • Avatar of Sonora Sonora Apr 27, 2011 at 21:57 UTC - 0 likes

    @Morgalm: Go

    Just caught that - fixed in 1.4.1.

    Last edited Apr 27, 2011 by Sonora
  • Avatar of Morgalm Morgalm Apr 27, 2011 at 00:38 UTC - 0 likes

    Your comm name is too long can only be 16 chars now.

  • Avatar of Sonora Sonora Dec 06, 2010 at 03:01 UTC - 0 likes

    More great suggestions!

    (a) patch included in 1.2 (b) patch included in 1.2 (thanks, I hadn't stumbled on these API calls before) (c) Most flickering and blinking should be fixed in 1.2. Your suggestions for replacing the previous kludge with a cleaner implementation inspired me to take a larger pass over the drawing/updating functions.

  • Avatar of Road_Block Road_Block Nov 30, 2010 at 12:36 UTC - 0 likes

    You shouldn't encourage me... but you just did so.. :-P

    A couple last things if I may.

    a. One more convenience key-bind for "Clear All"
    Use case: Works nicely as a quick refresh when you have "automatically add tanks".
    Setting a tank through oRA or Blizzard interface adds it to targetAssist targets.
    Removing it (because next encounter doesn't need 2 or 3 or because it was a ranged tank for particular encounter etc) doesn't also remove it from targetAssist.
    A quick "clear all" refreshes the list since current tanks are automatically re-added.

    BINDING_NAME_TACLEARTARGETS = "Clear all targets"
    <Binding name = "TACLEARTARGETS">

    There's also a little typo in the print for combat lockdown in add target binding ('durring' instead of 'during')

    b. In gui.lua a small typo in broadcasts menu item:
    'Recieved broadcasts' instead of 'Received broadcasts'.
    In the same section the functions for broadcasting to raid/party/guild need some checks in place so you don't get the dreaded "player x / you are not in a raid/party/guild" system message spam.

    -- 'RAID'
    if GetRealNumRaidMembers()>0 then
    -- 'PARTY'
    if GetRealNumPartyMembers()>0 then
    -- 'GUILD'
    if IsInGuild() then

    Using the GetRealNum* function variants as the plain GetNumParty|RaidMembers() versions will return true in BGs but trying to sendcomm in 'RAID' or 'PARTY' distribution will fail and produce the usual system error messages.
    The GetRealNum* functions only return true party/raid members.

    c. Finally.
    Tested the disable functionality.
    It is working better than before i.e no stuck assistbuttons but they do occasionally 'flicker' in existence briefly and immediately hide again.
    I'm thinking this flickering will be more noticeable the slower frequency updates the user has selected (barely noticeable at 0.1 the default, more visible at 0.2 that I have it set, quite visible at 0.5)
    It would help down the road if you made use of AceAddon-3.0 :OnEnable() and :OnDisable() api to split your initialization to SV stuff in OnInit and event registration/callbacks etc in OnEnable so OnDisable can shut the addon down cleanly.
    Same if you decide to make 'disable' a persistent value instead of a session variable.
    (although I think it makes perfect sense as you have it not persisting a reload)

    Anyway getting carried away :)
    That would require some refactoring.
    The next best thing and quite simple is with these minimal changes:
    1. In core.lua in OnInitialize() function storing the timer handle when it's created

    self.timerhandle = self:ScheduleRepeatingTimer('onUpdate', self.config.updateInterval)

    2. In core.lua again a new function added

    function targetAssist:disable(disabled)
        if disabled then
            if self.headerFrame then
                for targetName, buttonFrame in pairs(self.targetButtons or {}) do
            self:RegisterComm('targetAssist.broadcastTargets', 'targetReceiver')
            self.timerhandle = self:ScheduleRepeatingTimer('onUpdate', self.config.updateInterval)
            -- onUpdate will take care of showing header/buttons

    I put it just under OnInitialize() block.
    3. A little further down core.lua remove that workaround from onUpdate() as it's no longer needed and just leave the original hide check.

    if self.hide and self.headerFrame then
        -- etc

    4. In gui.lua updating the 'Disable' gui option and the '/ta hide' '/ta show' respectively to:
    gui options

    set = function(info, value) self.disabled = value; self:disable(self.disabled) end,

    /ta hide

    self.disabled = true

    /ta show

    self.disabled = false
    -- etc

    Sorry for the humongous wall of text.
    Went to the source to find the reason for the flickering so I don't keep bothering you for the same thing with no new info and kinda bumped into these :)

  • Avatar of Sonora Sonora Nov 30, 2010 at 02:03 UTC - 0 likes

    @Dridzt - another great suggestion! Fixed in 1.1.2.

    Feature suggestions, accompanied by clean & simple implementations? Feel free to bug me all you want!

  • Avatar of Road_Block Road_Block Nov 29, 2010 at 05:00 UTC - 0 likes

    Great, I'll get back to you after I've tested :)

    I have another little suggestion.
    It's never been an issue on my tank but noticed it on the healer.

    I'm using Clique for click-casting.
    There's a small non-breaking problem in that targetAssist doesn't check for modifiers
    so you can only use modified-leftclick and middle or modified-middle click to click cast.

    Doing a shift-right click or ctrl-right click will do the cast but will also popup the targetAssist menu.

    Maybe checking IsModifierKeyDown() in OnMouseUp handler to avoid popping up the menu and only do it on plain right click.

    Sorry to keep bugging you :P

    Last edited Nov 29, 2010 by Road_Block


Date created
Nov 12, 2010
Last update
Aug 05, 2016
Development stage
  • enUS
GNU General Public License version 3 (GPLv3)
Curse link
Recent files