1. #1

    Cancelaura for priests

    The macro command "/cancelaura" has stopped working for us with the latest patch.
    It still works for other classes such as warlocks (e.g. "/cancelaura demonic circle"), but for priests "/cancelaura levitate" and "/cancelaura spirit of redemption" broke.

    As far as I can tell what happened is the following:

    Blizzard changed how their spell system works from names to ids internally (finally!).
    However, macros still require us to specify buffs and spells by name.
    The UI then tries to find the respective ID by searching a local databank and returns the first match.
    In the past that created problems in some localisations when classes like paladins had multiple buffs and multiple spells all using the same name, but those issues were only between spells, or between buffs.

    With these new changes they have to find the ID first before checking if something is a buff or a spell.
    Thus, searching for "Levitate" on a warrior who wants to cancel Levitate using "/cancelaura levitate" will find the id of the buff which is 111759 (or something) and everything works out fine. If you try the same on a priest however it will find the id of the spell which is 1706 and useless to cancel the buff with id 111759.

    In some cases the id of the buff and the id of the spell of the same name match--by coincidence. In such cases "/cancelaura" still works which hides this issue.

    I propose that the finally allow us to call spells and buffs in macros using ids, which would solve this issue and get rid of localisation imbalcance, too.
    Some langauges have horrid spell names because the translation is so bad--or worse they get the same name for multiple spells for the same class.
    Beign able to just pass ids would be a nice fallback and allow mor communication between languages, too.

    If you have the ID it is no problem to look up the corresponding spell or buff ingame, neither is the reverse.
    Addons do this all the time.

    It isn't hard to implement something that skips the id lookup if something is already a number, either.
    Just use not string:match("%D") to make sure something contains only digits.
    The only problem is that we cannot fix the "/cancelaura" command, because if we do it it won't work in combat.
    Blizzard has to do it. (It took me minutes to write something that cancels spells by id, but I cannot make it secure.)

    It is not like this would allow us to automate anything, it would only allow us to declare precisely what we mean instead of using some imprecise alias that might be misleading depending on circumstances.
    Last edited by Noradin; 2018-07-20 at 09:42 AM.

  2. #2
    Deleted
    Blizzard is small indie company without a QA department to test for regressions, it's normal they have these issues </ironic>

  3. #3
    When I use Weak aura, I can see a LOT of different ID for the same spell. I fear that it may also be confusing.

  4. #4
    I did write a simple addon to test ingame that the id you need to cast the Levitate is 1706 the one you need to cancel the buff is 111759.

    Unfortunately knowing the right id to cancel does not help (infight) because blizzard does not allow us to cancel by id either, we have to search for a match to find the buff slot it occupies on our char and use that to cancel--but seaching for a match makes it not-secure.

    If only cancleaura would accept buff ids...
    Last edited by Noradin; 2018-07-20 at 10:41 AM.

  5. #5
    Didn't try, but please tell me we can still cancelaura the Dispersion

    or riot

  6. #6
    Quote Originally Posted by Ophenia View Post
    Didn't try, but please tell me we can still cancelaura the Dispersion

    or riot
    Cancelling Dispersion still works.
    You can use
    Code:
    /script local z=0; for i=1,40 do if UnitAura("player", i)=="Levitate" then z = i end end; CancelUnitBuff("player", z);
    for cancelling Levitate until Blizzard gets their act together.

  7. #7
    Deleted
    and for Spirit of Redemption ?

  8. #8
    Quote Originally Posted by platti View Post
    and for Spirit of Redemption ?
    Replace the "Levitate" with "Spirit of Redemption" and it should work.

  9. #9
    Deleted
    Quote Originally Posted by mccord View Post
    Replace the "Levitate" with "Spirit of Redemption" and it should work.
    not working
    /script local z=0; for i=1,40 do if UnitAura("player", i)=="Geist der Erlösung" then z = i end end; CancelUnitBuff("player", z);

  10. #10
    Deleted
    Try this:
    Code:
    /script local n=AuraUtil.FindAuraByName(auraName, "player"); CancelUnitBuff("player", n)
    Link:
    wow.gamepedia.com/API_AuraUtil.FindAuraByName

  11. #11
    Quote Originally Posted by platti View Post
    not working
    Works fine here with both English and German client, so it has to be something on your end.
    Last edited by mccord; 2018-07-21 at 06:58 PM.

  12. #12
    Quote Originally Posted by mccord View Post
    Cancelling Dispersion still works.
    You can use
    Code:
    /script local z=0; for i=1,40 do if UnitAura("player", i)=="Levitate" then z = i end end; CancelUnitBuff("player", z);
    for cancelling Levitate until Blizzard gets their act together.
    Does not work in combat.

    - - - Updated - - -

    Quote Originally Posted by mccord View Post
    Works fine here with both English and German client, so it has to be something on your end.
    You tried it out of combat, didn't you?

  13. #13
    Quote Originally Posted by Noradin View Post
    You tried it out of combat, didn't you?
    Yeah that'd be the problem then :P

  14. #14
    Quote Originally Posted by Sylenx View Post
    Try this:
    Code:
    /script local n=AuraUtil.FindAuraByName(auraName, "player"); CancelUnitBuff("player", n)
    Link:
    wow.gamepedia.com/API_AuraUtil.FindAuraByName
    Did you ever even look at that link you provided?
    That cannot ever work at all.

    The function returns the aura name (not the id) as first value.
    That means your call of the function using the name of the buff does nothing but waste time.
    Last edited by Noradin; 2018-07-22 at 06:07 PM.

  15. #15
    Deleted
    I did look at it. As far as i understood your problem, there are two different Levitates in the game. 1. The spell itself, 2. the buff players acutally recieve. Both have different spell ids and using "/cancelaura Levitate" on a priest led to the game trying to cancel an aura that uses the spellid of the spell itself, therefore it doesn't work. The idea with the code i provided was to just look at your current active buffs and try to find Levitate (with the right spellId) among them and try to cancel it that way. I did not test the code myself, so it might need more checks, e.g. check for right spellId aswell.
    Nevertheless it looks like Blizzard fixed it, as i can cancelaura Levitate in and out combat without problems using the standad "/cancelaura Levitate".

  16. #16
    Apparently the old macros work again
    Pixl Returned! Holy Priest

  17. #17
    Quote Originally Posted by Mazi View Post
    Apparently the old macros work again
    They do. Thank you for the heads up, there was no bluepost, was there?

  18. #18
    Quote Originally Posted by Noradin View Post
    They do. Thank you for the heads up, there was no bluepost, was there?
    Not that I saw - just saw someone post in discord that it seemed to be fixed
    Pixl Returned! Holy Priest

  19. #19
    Quote Originally Posted by Sylenx View Post
    I did look at it. As far as i understood your problem, there are two different Levitates in the game. 1. The spell itself, 2. the buff players acutally recieve. Both have different spell ids and using "/cancelaura Levitate" on a priest led to the game trying to cancel an aura that uses the spellid of the spell itself, therefore it doesn't work. The idea with the code i provided was to just look at your current active buffs and try to find Levitate (with the right spellId) among them and try to cancel it that way. I did not test the code myself, so it might need more checks, e.g. check for right spellId aswell.
    Nevertheless it looks like Blizzard fixed it, as i can cancelaura Levitate in and out combat without problems using the standad "/cancelaura Levitate".
    So you did notice that calling AuraUtil.FindAurasByName(auraName, "player") returns the name of the aura (as first return value) if the player has it and nil otherwise.
    Never ever does it return the aura slot (not the buff id) that you need to cancel buffs using "CancelUnitBuff("player", auraSlot)".
    It doesn't even give you the buff id.
    Thus my assessment that said first call is a waste of time and the second call always fails as a consequence.

    You did link what "FindAurasByName" does, why didn't you check your own source?

    I do appreciate that you did take time to try and address the problem, but I did look up those functions myself already and saw that they were useless as expected
    Last edited by Noradin; 2018-07-30 at 11:32 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •