1 - Don't replace unique abilities with replacement abilities

What is the enhancement in mind? How should it look and feel?
Unique abilities shouldn't be replaced by replacement abilities on action bars. Instead they should just be removed.

Please provide any additional information below.
The Paladin talent Repentance shouldn't be replaced by Fist of Justice because Fist of Justice just replaces Hammer of Justice so you will already have Hammer of Justice on the action bars even when Repentance is used.

User When Change
cremor Jun 03, 2013 at 16:44 UTC Changed status from Waiting to Replied
Road_Block Jun 03, 2013 at 16:05 UTC Changed status from New to Waiting
cremor Jun 01, 2013 at 10:51 UTC Create

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

  • Avatar of cremor cremor Jun 04, 2013 at 05:49 UTC - 0 likes

    Fair enough, thank you.

  • Avatar of Road_Block Road_Block Jun 03, 2013 at 22:07 UTC - 0 likes

    I either tested this when developing and it didn't work (spellid wasn't the same), or it did work but was making assumptions about typical player usage I wasn't comfortable with.

    (for example some may want to have duplicate spells on buttons, even on non-visible actionbars for a number of reasons)

    Whether I opt to remove the base spell from the actionbutton that hosts it, or 'ignore' the talented version from the actionbutton that holds the tierX talents there's a good chance it will also feel unintuitive or piss some users off. I'm not sure I want to start going down the road of offering user options for x or y behavior and complicating the addon further.

    I'd rather it has 'sane defaults' and just works.

    That said I'll take a look again "later" as I'm busy with a fairly extensive rewrite of another project atm and would rather not jump ship before I reach a milestone of sorts, or I risk losing my momentum and not remembering what I had planned when I get back to it. :P

    If my code is not too confusing, feel free to experiment.

  • Avatar of cremor cremor Jun 03, 2013 at 18:32 UTC - 0 likes

    I think you didn't understand me this time :)

    I know that the replacing of abilities like Hammer of Justice is done by WoW itself.
    Would you really still need a mapping table with the workflow I suggested in the comment? When you loop over all action buttons after a talent swap, can't you then compare the spell of the current button with the spell of the active talents to identify buttons that already hold the new spell (because the WoW code replaced some other spell with it)? Something like that:

    addon.ActionbarScan = function()
    -- New loop.
    for button=1,120 do
        -- Assume "activeSpells" is a table like the "inactive" table that has spellIds as keys.
        if activeSpells[id] then
            alreadyThere[id] = true
    -- Your existing loop.
    for button=1,120 do
        if inactive[id] then
            if active[tier] and not alreadyThere[id] then -- Second condition is new.
                pending[button] = 0
    Last edited Jun 03, 2013 by cremor
  • Avatar of Road_Block Road_Block Jun 03, 2013 at 17:46 UTC - 0 likes

    @cremor: Go

    Yea that goes back to having to maintain a list of linked abilites, I'm not inclined to do that sorry :/
    Cannot escape the fact that I'd have to somehow put <Hammer of Justice> that's not a talent but a skill affected by a talent into the processing loop, and I can't do that without maintaining a list of similar abilities across the classes.

    What I didn't make clear probably is that the switch you see on your bars when a pre-existing base spell is replaced by its talented equivalent is not actually done by TalentSwap, it's a Blizzard thing and the relations are maintained in the .dbc(s) ie not accessible by the lua environment.

    I can perfectly understand why this confuses people as it's common to have the base spell on your actionbars before you acquire the talent (either through re-talenting at max level or through learning it for the first time as you level)

    You can think of TalentSwap as an addon to handle 'talent buttons' (ie actionbuttons that hold a talent).
    Two scenarios for the addon:

    • A 'talent button' (an actionbutton that you have dragged a talent on) changes, TalentSwap handles it (removing the skill if it went from active -> passive but remembering what was there if you go back to an active talent later on; or just swapping one active skill for another.
      At the same time the game client replaces the base ability on an unrelated button with the talented version.
    • TalentSwap doesn't know or care about that second replacement, for me to handle it I would have to keep a list of linked spells and process regular actionbuttons (holding base spells or their talented replacements) in addition to 'talent buttons'.

    Whether I use that list to (a) manage the unrelated actionbutton holding the base spell or (b) change the logic for the 'talent button' I'm already handling - to remove the talent spell regardless if it's active or passive doesn't change that fact.

    I've tried to minimize processing as possible by separating the scanning logic from the replacement one (addon initially just identifies the buttons that hold talent skills only, to look for replacements and only processes those flagged buttons on a re-talent).
    It's also coded to be talent-agnostic (doesn't care what the talent is other than if it's a passive or active ability) or even how many talents are there, it's all derived from globals (it just assumes the general structure of x tiers by y columns as they are in MoP) and I'd like to keep it that way.

    This unfortunately means that if you want access to the base spell when its talented equivalent is removed (through re-talenting) you'll need 2 buttons:

    • one holding the base spell <Hammer of Justice> (which blizzard will be replacing c-side when you talent <Fist of Justice> and is not touched by TalentSwap)
    • one holding <Active Tier2 Talent> (which will be handled by TalentSwap replacing which ever talent you have selected that's an active spell in that tier)
    Last edited Jun 03, 2013 by Road_Block
  • Avatar of cremor cremor Jun 03, 2013 at 16:44 UTC - 0 likes

    Thanks for the detailed reply. I think you did understand me correctly but let me rephrase my request to be simpler:
    TalentSwap should treat talent spells that replace some other spell like a passive talent if the replaced spell is already somewhere on the action bars.

    I assumed that there is some API to check if some spell replaces some other spell but if I understand you correctly there isn't? I can understand that you don't want to maintain such a mapping table yourself.

    Would the following be possible?
    1. User switches from Repentance to Fist of Justice.
    2. TalentSwap sees that Fist of Justice is already on the action bars (because the Blizzard system replaced Hammer of Justice with it) and therefore treats it like a passive talent which means Repentance is removed from the bars and the slot stays empty.
    3. User switches back to Repentance.
    4. TalentSwap still has the saved info that the last Fist of Justice was treated like a passive and therefore restores Repentance at its old position.

  • Avatar of Road_Block Road_Block Jun 03, 2013 at 08:26 UTC - 0 likes

    I'll link the dialog I've had on wowinterface for this issue (I'm assuming it's the same one) a couple weeks ago.

    If I misunderstood the issue or my reply is not clear please post back.

    Quote from Redielin:

    Swapping from Rushing Jade Wind to Xuen, The White Tiger --> Works fine. Swapping from RJW to Chi Torpedo-->Replaces RJW with Chi Torpedo, and when you swap back to RJW it replaces RJW with Roll (because CT replaces Roll in the spellbook)


    Quote from Dridzt:

    I don't have a monk at 90 yet but tested with equivalent talents on warrior (mass spell reflect, safeguard - replaces intervene, vigilance) Button starts with Mass Spell Reflect. Mass spell reflect > safeguard = safeguard on button Safeguard > Vigilance = Vigilance on button Vigilance > Safeguard = Safeguard on button.

    Only thing I can suggest is 'link' another tier6 talent with your button manually (not Chi Torpedo) and TalentSwap should do updates for that tier properly from that point onwards.

    What I mean to say is that replacement spells are done by the WoW client c-side and that's what causes the confusion.
    In order to have TalentSwap work properly with your tier2 paladin talents you need to drag Repentance or Burden of Guilt to the actionbutton where you want to have your tier2 talent ability and TalentSwap will work properly from that point on.

    Working around the client's automatic substitution of base skills by their talented replacements would require me to keep a database of linked abilities and I see that as being outside the scope of this addon (furthermore I don't want to incur the maintenance cost for spell changes).

    In its current form I expect TalentSwap to keep working until/unless the talent system is completely overhauled (as was my goal).

    Think of the base skill as a separate entity from the talented replacement.
    TalentSwap cannot (and will not) handle the base skill (which is what is still on your actionbars when you talent into Fist of Justice)


    1. Leave your Hammer of Justice on your actionbars (or not as you please)
    2. Set aside an actionbutton for your Tier2 talent (whichever that might be)
    3. Drag Repentance to your Tier2 talent actionbutton to initialize it.
    4. TalentSwap will propery replace the active talent on your Tier2 talent actionbutton for any subsequent talent changes - including switching to Fist of Justice

      (and leave the separate Hammer of Justice button alone for WoW to handle - as it should since that is not a talented ability)


Last updated
Jun 03, 2013
Jun 01, 2013
Replied - Someone has replied after waiting for more information.
Enhancement - A change which is intended to better the project in some way
Medium - Normal priority.

Reported by

Possible assignees