Thread Tools Display Modes
07-28-19, 07:49 AM   #1
Yonaz
A Fallenroot Satyr
Join Date: Jul 2016
Posts: 28
Rune of Power doesn't cast

I use this (probably too simple) macro for bursting as fire mage:

/cast Memory of Lucid Dreams
/cast Combustion
/cast Berserking
/cast Rune of Power
/use Ancient Knot of Wisdom
/use Rune of Power

But wherever I put Rune of Power, it refuses to cast. Am I doing something wrong?
__________________
twitch.tv/the_yonaz
  Reply With Quote
07-28-19, 09:21 AM   #2
aallkkaa
A Warpwood Thunder Caller
 
aallkkaa's Avatar
AddOn Author - Click to view addons
Join Date: Jun 2017
Posts: 98
Does it refuse to cast every time?
You are trying to cast a mix of on-GCD and off-GCD spells. You do know you cannot cast all those spells in one single click/keypress, right?

In case you didn't know, aside from the explicit cooldown some spells have (visible on their tooltip), most spells, both instant-cast and those with a cast-time, are also bound to the GCD (Global CoolDown). This is usually 1.5 seconds (usually modified by haste) and, in some cases 1 second (Druid forms for instance).
Once you successfully begin casting a spell (instant or not), the GCD is triggered and you must click a button (same or other) again to cast another spell (same of diferent) AFTER the GCD has elapsed.

The Azerite Essence major power Memory of Lucid Dreams has a GCD of 1 second. That means that unless it is unavailable (under its explicit 2 minutes cooldown), it will be the only GCD spell on that macro that is cast.
Combustion is a rare exception to the rule of all base spells being on the GCD (each class has maybe one or two base spells that aren't on the GCD, all others are). So it will be cast everytime it's off its 2 mins cooldown, regardless of whether or not Memory of Lucid Dreams was successfully cast.
Berserking (as all other Racial spells), if off the GCD. So it will, like Combustion, always be cast if it's not on its explicit 3 minns cooldown.
Rune of Power is a Talent spell and most of those spells are actually off the GCD. Rune of Power is an exception to that rule and aactually has a 1.5 second GCD.
This means that Rune of Power will only be cast by that macro when Memory of Lucid Dreams fails to cast.

Does the above answer your question, or was none of this new to you?
  Reply With Quote
07-28-19, 09:23 AM   #3
Yonaz
A Fallenroot Satyr
Join Date: Jul 2016
Posts: 28
Originally Posted by aallkkaa View Post
Does it refuse to cast every time?
You are trying to cast a mix of on-GCD and off-GCD spells. You do know you cannot cast all those spells in one single click/keypress, right?

In case you didn't know, aside from the explicit cooldown some spells have (visible on their tooltip), most spells, both instant-cast and those with a cast-time, are also bound to the GCD (Global CoolDown). This is usually 1.5 seconds (usually modified by haste) and, in some cases 1 second (Druid forms for instance).
Once you successfully begin casting a spell (instant or not), the GCD is triggered and you must click a button (same or other) again to cast another spell (same of diferent) AFTER the GCD has elapsed.

The Azerite Essence major power Memory of Lucid Dreams has a GCD of 1 second. That means that unless it is unavailable (under its explicit 2 minutes cooldown), it will be the only GCD spell on that macro that is cast.
Combustion is a rare exception to the rule of all base spells being on the GCD (each class has maybe one or two base spells that aren't on the GCD, all others are). So it will be cast everytime it's off its 2 mins cooldown, regardless of whether or not Memory of Lucid Dreams was successfully cast.
Berserking (as all other Racial spells), if off the GCD. So it will, like Combustion, always be cast if it's not on its explicit 3 minns cooldown.
Rune of Power is a Talent spell and most of those spells are actually off the GCD. Rune of Power is an exception to that rule and aactually has a 1.5 second GCD.
This means that Rune of Power will only be cast by that macro when Memory of Lucid Dreams fails to cast.

Does the above answer your question, or was none of this new to you?
So, the best way to "fix" this is to have RoP on manual, and the rest on a macro? It fails like 9/10 times, wich made me confused but when you put it that way, it makes sense.
__________________
twitch.tv/the_yonaz
  Reply With Quote
07-28-19, 06:31 PM   #4
aallkkaa
A Warpwood Thunder Caller
 
aallkkaa's Avatar
AddOn Author - Click to view addons
Join Date: Jun 2017
Posts: 98
Well, in theory, in that macro, RoP should be cast everytime it's OFF its cooldown and Memory of Lucid Dreams is ON its own cooldown.
But yes, my experience, that hardly ever works - your 9/10 fails sounds familiar to me. Possibly some issue related to latency, even if it's very low (mine's usually at around 50ms), or low FPS or whatever.

You could try something like:
Code:
/castsequence reset=40 Rune of Power, Memory of Lucid Dreams, Rune of Power, Rune of Power
/cast Combustion
/cast Berserking
/use Ancient Knot of Wisdom
This will cast RoP on the first click and then MoLD on the second, then RoP and RoP again (3x 40s = 120s, which is MoLD's CD). If you don't click the macro for 40 seconds, it resets to its first spell: RoP.
(You can leave "Ancient Knot of Wisdom" as is because, being a trinket, it doesn't trigger the GCD.)

You could alternative do the castsequence as:
Code:
/castsequence reset=120 Memory of Lucid Dreams, Rune of Power, Rune of Power, Rune of Power
/cast Combustion
/cast Berserking
/use Ancient Knot of Wisdom
The problem is that is tha /castsequence is kind of quirky, in that it starts counting the 40 or 120s to reset from the last time you ran the macro. So if you were to click it twice in a row and then 30s later click it again, the actual reset time would be 150s (30 + 120); note that RoP would not have been off its 40s CD either. In maybe more simple terms: the reset=120 would work fine if you pressed the macro every 40s or so, in which case it would cycle normally to cast MoLD after 120, with no need for the reset.

The first version I wrote would increase the chance of cast RoP everytime it's available, and MoLD as well (no need to wait for the three casts of RoP, as it got reset about the time RoP was off CD).
It still will NOT work everytime, I guarantee you that!

You can increase its reliability of the macro by adding an additional condition for reset, for example you pressing a modifier (one of ctrl, alt or shift) or a combination of those. Something like:
Code:
/castsequence reset=40/ctrl Memory of Lucid Dreams, Rune of Power, Rune of Power, Rune of Power
/cast Combustion
/cast Berserking
/use Ancient Knot of Wisdom
That is the best I can come up to.
AFAIK, the only guaranteed way to have both MoLD and RoP work everytime is, as you said, "to have RoP on manual, and the rest on a macro". Or you can also make two identical macros for both RoP and MoLD, where you macro in all the other spells, the ones that are not bound to the GCD.

Hope that helped.
  Reply With Quote
07-30-19, 05:29 AM   #5
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2006
Posts: 2,313
Originally Posted by aallkkaa View Post
That means that unless it is unavailable (under its explicit 2 minutes cooldown), it will be the only GCD spell on that macro that is cast.
GCD handling in macros is more strict than this. If a macro comes across any ability that triggers the GCD, it simply ignores any other line that also triggers the GCD. It doesn't care about the individual or category-based CD on an ability.



Originally Posted by aallkkaa View Post
You could try something like:
Code:
/castsequence reset=40 Rune of Power, Memory of Lucid Dreams, Rune of Power, Rune of Power
/cast Combustion
/cast Berserking
/use Ancient Knot of Wisdom
This will cast RoP on the first click and then MoLD on the second, then RoP and RoP again (3x 40s = 120s, which is MoLD's CD).
In all technicality, the 3rd Rune of Power never gets cast. The reset timer triggers as soon as the second casting comes off CD and loops around to the first. In all, the last two Rune of Power entries in /castsequence are unnecessary just because of the reset timer.



Originally Posted by aallkkaa View Post
You could alternative do the castsequence as:
Code:
/castsequence reset=120 Memory of Lucid Dreams, Rune of Power, Rune of Power, Rune of Power
/cast Combustion
/cast Berserking
/use Ancient Knot of Wisdom
The problem is that is tha /castsequence is kind of quirky, in that it starts counting the 40 or 120s to reset from the last time you ran the macro. So if you were to click it twice in a row and then 30s later click it again, the actual reset time would be 150s (30 + 120); note that RoP would not have been off its 40s CD either. In maybe more simple terms: the reset=120 would work fine if you pressed the macro every 40s or so, in which case it would cycle normally to cast MoLD after 120, with no need for the reset.
/castsequence actually starts counting from the last time it successfully triggered an ability. If it failed due to cooldown or target constraints, it won't reset its timer. Still, having a higher CD ability first in the list is a bad idea. There will be times where using Rune of Power would be a waste and you may trigger it much later than when it's off its CD. This will throw off the reset timer anyway.



Originally Posted by aallkkaa View Post
You can increase its reliability of the macro by adding an additional condition for reset, for example you pressing a modifier (one of ctrl, alt or shift) or a combination of those. Something like:
Code:
/castsequence reset=40/ctrl Memory of Lucid Dreams, Rune of Power, Rune of Power, Rune of Power
/cast Combustion
/cast Berserking
/use Ancient Knot of Wisdom
/castsequence does support the use of macro conditionals and as such, a better alternative would be to force Memory of Lucid Dreams on modifier, otherwise start with Rune of Power.
Code:
/castsequence [mod] Memory of Lucid Dreams; reset=40 Rune of Power, Memory of Lucid Dreams
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
  Reply With Quote
08-01-19, 09:59 PM   #6
aallkkaa
A Warpwood Thunder Caller
 
aallkkaa's Avatar
AddOn Author - Click to view addons
Join Date: Jun 2017
Posts: 98
Originally Posted by SDPhantom View Post
GCD handling in macros is more strict than this. If a macro comes across any ability that triggers the GCD, it simply ignores any other line that also triggers the GCD. It doesn't care about the individual or category-based CD on an ability.
I didn't mean to make a connection between the GCD and the spell's explicit CD. Matter of fact, if the apropriate Azerite Essence were not active as Major slot, the Memory of Lucid Dreams line should (I believe) be ignored every time, as if it were not there, hence it would not make the next line with a GCD-triggering ability to be ignored.
But I notice you challenged other things I said, which I have for certain. So I might be wrong on this one, but I think not. Anyway, on to those other points, of which I am more certain of than this one.


Originally Posted by SDPhantom View Post
In all technicality, the 3rd Rune of Power never gets cast. The reset timer triggers as soon as the second casting comes off CD and loops around to the first. In all, the last two Rune of Power entries in /castsequence are unnecessary just because of the reset timer.
I disagree on this, but I'll quote you on your next comment, because that's where your error is.


Originally Posted by SDPhantom View Post
/castsequence actually starts counting from the last time it successfully triggered an ability. If it failed due to cooldown or target constraints, it won't reset its timer.
Actually, if "it failed due to cooldown or target constraints, it" WILL reset its timer. I've known this for years and I've seen it again recently with this macro:
Code:
/castsequence reset=2/ctrl Healing Surge, Concentrated Flame
If I repeatedly use this macro (AKA mash it), it will get stuck on the on-cooldown Concentrated Flame (after successfuly casting it the first time around of course) until it's off cooldown or I press Control (to reset the macro).


Originally Posted by SDPhantom View Post
/castsequence does support the use of macro conditionals and as such, a better alternative would be to force Memory of Lucid Dreams on modifier, otherwise start with Rune of Power.
Code:
/castsequence [mod] Memory of Lucid Dreams; reset=40 Rune of Power, Memory of Lucid Dreams
That's a fair alternative too. But, because of what I said above (and because of the possibility that you (or at least I) may unintentionaly recall the macro before its 40 seconds reset timer has elapsed, I'd write it as:
Code:
/castsequence [mod] Memory of Lucid Dreams; reset=40 Rune of Power, Memory of Lucid Dreams, Rune of Power, Rune of Power
  Reply With Quote
08-01-19, 11:13 PM   #7
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2006
Posts: 2,313
Originally Posted by aallkkaa View Post
If I repeatedly use this macro (AKA mash it), it will get stuck on the on-cooldown Concentrated Flame (after successfuly casting it the first time around of course) until it's off cooldown or I press Control (to reset the macro).
When you mash abilities, you can frequently get UNIT_SPELLCAST_SENT events firing for the next cast before the corresponding UNIT_SPELLCAST_* server responses for the previous one. This plays havoc on /castsequence, causing desync issues. Long story short, don't mash /castsequence macros.

The client only fires UNIT_SPELLCAST_SENT events when it thinks it can use an ability. /castsequence listens for that event, which gives it a unique CastID and primes it for the server to respond whether it succeeded or failed. /castsequence only advances the sequence when it receives a UNIT_SPELLCAST_SUCCEEDED event with a matching CastID to what it was primed with. When you mash the macro, under certain circumstances, the CastID gets overwritten before /castsequence can get the server response it's waiting for. If this happens to block the success response, then your macro's stuck until it meets the reset condition or can cast the ability again.

Reference: ChatFrame.lua:872
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)

Last edited by SDPhantom : 08-02-19 at 12:08 AM.
  Reply With Quote
08-02-19, 02:17 AM   #8
aallkkaa
A Warpwood Thunder Caller
 
aallkkaa's Avatar
AddOn Author - Click to view addons
Join Date: Jun 2017
Posts: 98
I wasn't aware of any of that (thanks for the info).
But still, when I tested that macro, Î intentionally mashed the macro for longer than 2 seconds and still the macro only reset when I left it untouched for more than 2 seconds (after my last press on it, not after the last successful cast) or when I pressed the Control key.
FIY, my intention with that test was to get a more accurate feeling for how long I'll have to wait for the macro to reset itself. For my playing style, this macro mostly works without a need for the Control modifier because I usually cast Healing Surge (cast time > 1sec and < 1.5sec) once and then I do something else before touching that macro again. If I "mash" it (within half a second of HS being cast), then I'll cast Consecrated Flame for an extra amount of emergency heal. And if CF is on cooldown, I can hold the Control modifier down and cast two or more consecutive HS.

I'll see the link you provided and try to learn more about this. Thanks again!
  Reply With Quote
08-02-19, 05:57 AM   #9
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2006
Posts: 2,313
Looks like the behavior changed since the last time I looked at it too. This is concerning when the reset timer resets. This is found in the function that's run when the command is executed. I started digging when I didn't see anything referring to the reset timer in the event handler or any of the functions it calls.

Lua Code:
  1. -- Reset the timeout each time the sequence is used
  2. local timeout = strmatch(entry.reset, "(%d+)");
  3. if ( timeout ) then
  4.     entry.timeout = CastSequenceManager.elapsed + tonumber(timeout);
  5. end
ChatFrame.lua:993
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)

Last edited by SDPhantom : 08-02-19 at 06:10 AM.
  Reply With Quote
08-02-19, 09:42 PM   #10
aallkkaa
A Warpwood Thunder Caller
 
aallkkaa's Avatar
AddOn Author - Click to view addons
Join Date: Jun 2017
Posts: 98
Originally Posted by SDPhantom View Post
Looks like the behavior changed since the last time I looked at it too. This is concerning when the reset timer resets. This is found in the function that's run when the command is executed. I started digging when I didn't see anything referring to the reset timer in the event handler or any of the functions it calls.

Lua Code:
  1. -- Reset the timeout each time the sequence is used
  2. local timeout = strmatch(entry.reset, "(%d+)");
  3. if ( timeout ) then
  4.     entry.timeout = CastSequenceManager.elapsed + tonumber(timeout);
  5. end
ChatFrame.lua:993
Yes. Well, I had a look at the code myself and this is what I noticed:
That snippet you quoted is in function ExecuteCastSequence ( ChatFrame.lua:949 ).

In that function, before the snippet you posted, there is this other snippet:
Lua Code:
  1. -- Don't do anything if this entry is still pending
  2. if ( entry.pending ) then
  3.     return;
  4. end
ChatFrame.lua:981

And in function CastSequenceManager_OnEvent ( ChatFrame.lua:872 ), you have this snippet:
Lua Code:
  1. if ( event == "UNIT_SPELLCAST_SENT" ) then
  2.     entry.pending = castID;
  3. elseif ( entry.pending == castID ) then
  4.     entry.pending = nil;
  5.     if ( event == "UNIT_SPELLCAST_SUCCEEDED" ) then
  6.         SetNextCastSequence(sequence, entry);
  7.     end
  8. end
ChatFrame.lua:903
So, UNIT_SPELLCAST_SENT sets entry.pending to a non-nil value, and any one of the other watched events sets it to nil. And only UNIT_SPELLCAST_SUCCEEDED actually advances the sequence to the next entry.
So what you said earlier about UNIT_SPELLCAST_SENT is at least partially true: Calling the macro when the currently active entry is uncastable should act, as far as the timer reset is concerned, as if the macro had never been recalled, because the function exits before the timer reset snippet you posted.

However, there are other events watched, besides UNIT_SPELLCAST_SENT and UNIT_SPELLCAST_SUCCEEDED, that do clear the value of entry.pending, without advancing the sequence's entry.
These are the events that would do that:
Lua Code:
  1. event == "UNIT_SPELLCAST_INTERRUPTED" or
  2. event == "UNIT_SPELLCAST_FAILED" or
  3. event == "UNIT_SPELLCAST_FAILED_QUIET" ) then
ChatFrame.lua:885
The first two events fire when, after a successful casting-start, the cast doesn't complete. In this case, the timer would be reset, but the entry in the castsequence would remain the same.
The last event, UNIT_SPELLCAST_FAILED_QUIET, I'm unfamiliar with. But I'm thinking this may be the server's response to a UNIT_SPELLCAST_SENT of a spell that is not available to be started. And this would explain why the castsequence timer resets on that Consecrated Flame on-CD.
  Reply With Quote
08-03-19, 05:22 PM   #11
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2006
Posts: 2,313
UNIT_SPELLCAST_FAILED_QUIET is functionally equivalent to UNIT_SPELLCAST_FAILED. The only difference is UNIT_SPELLCAST_FAILED_QUIET tells the client to suppress error messages. Otherwise, you get the spell fail sound and occasionally your character saying they can't do something.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
  Reply With Quote
08-03-19, 06:05 PM   #12
aallkkaa
A Warpwood Thunder Caller
 
aallkkaa's Avatar
AddOn Author - Click to view addons
Join Date: Jun 2017
Posts: 98
Oh, I forgot about those failed casts, the ones that fail before they start (heh, that's what happens when you turned off those error messages years ago ).
So, in this case, either UNIT_SPELLCAST_FAILED_QUIET or UNIT_SPELLCAST_FAILED could be fired on those "failed" Consecrated Flame, hence making the timer reset without advancing the castsequence entry.
  Reply With Quote

WoWInterface » AddOns, Compilations, Macros » Macro Help » Rune of Power doesn't cast

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off