[FEATURE] Combining Macro'd CDs?
syrifgit opened this issue ยท 11 comments
Before You Begin
- I confirm that I have downloaded the latest version of the addon.
- I am not playing on a private server.
- I checked for an existing, open ticket for this request and was not able to find one.
- I edited the title of this feature request (above) so that it describes the issue I am reporting.
Feature Request
Just leaving this here as a thought based on a Discord discussion.
Investigate viability of adding spec option support for macroing certain abilities together. Easy example would be fury warrior.
Macroing Thunderous Roar, Avatar and Recklessness together. The spec setting would disable Avatar and Recklessness, but the ability definitions would have a check where if the spec setting is used, their cooldowns and CD remianing are equal to TRs cooldown and CD remaining. TR would also apply any associated buffs/debuffs on cast to lessen the impact on the APL, as the addon would predict them properly.
Could be expanded to other options as well, maybe stuff like shadowpriest PI / voidform macro, marksmanship hunter volley/salvo macro.
Additional Information
No response
Contact Information
Syrif
I think this can be viable, but needs to be have the visual aspect sorted. How do we make it clear to the users that the recommendation does or doesn't apply to the macro? What if your CDs are significantly desynced? Do you wait for them to line up (delaying something that's ready) or default to normal recommendation criteria?
Impacts:
- readyTime, TimeToReady
- Feigned CD
- UI/UX
- RunHandler?
- Spec Options
For case where CDs desync, I think priorities already handle this using the sync=<ability>
modifier. If it's important to use cooldowns at the same time, then the priorities should already use this modifier, although they typically do not because it's usually better to use CDs when they're available instead of holding them.
You could possibly rely on sync=<ability>
to guide the display on whether to allow this sort of several CDs macroed together scenario. If, e.g., you have something like:
actions+=/recklessness,sync=avatar
actions+=/avatar
Then you could maybe show Recklessness as the main texture, and then Avatar in something like the recent caption feature, e.g., +<avatar-texture>
. If there are multiple abilities that share the same sync
then they could be added consecutively.
I was intending for this option to be hand curated, only allowed for options that make sense and have minimal impact.
Examples being
Marksmanship hunter: Volley and Salvo are both 45 second CDs, Salvo is off the GCD, and macroing them together is recommended by the guides and most players already do it.
#showtooltip Volley
/cast Salvo
/cast Volley
Fury Warrior with current meta builds, Thunderous Roar, Avatar and Recklessness (off the GCD) are all 1.5 min CDs and often macro'd together
#showtooltip
/cast Avatar
/cast Recklessness
/cast Thunderous Roar
The addon would make the assumption that casting Thunderous Roar would apply all the effects and buffs that are applied by Avatar and Reck, when using the option. When it needs to know the CD of avatar/reck, it checks the CD of TR instead.
There's precedent for actually providing the macros in the spec options (like Destruction's Havoc, I think).
That said, chaining Avatar / Recklessness / Thunderous Roar's handlers (and triggering CDs) is pretty trivial to do.
Let's say it's put in Avatar's handler:
if settings.use_cd_macro then
if cooldown.recklessness.up then
class.abilities.recklessness.handler()
setCooldown( "recklessness", action.recklessness.cooldown )
end
if cooldown.thunderous_roar.up then
class.abilities.thunderous_roar.handler()
setCooldown( "thunderous_roar", action.thunderous_roar.cooldown )
end
end
That constrains it so that the macro can be assumed when Avatar is used, but if those CDs get slightly out of sync, the addon will recommend them separately as they come available. (One could force all these abilities to use the same keybind text.) It would need a good description for the option (i.e., minimize how many people have to ask in Discord re: what it's for).
Neat, I'll do some testing after the patch next week. I'd probably opt to have the "controller" cooldown be the one that triggers the GCD by default, assuming the macro is 1 to N abilities that are off-gcd and 1 ability that is on-gcd.
And I'll brainstorm a list of reasonable use cases.
Just to add, another good candidate for this is for sub rogue, you always combine Cold Blood / Secret Technique.
I think this can be viable, but needs to be have the visual aspect sorted. How do we make it clear to the users that the recommendation does or doesn't apply to the macro? What if your CDs are significantly desynced? Do you wait for them to line up (delaying something that's ready) or default to normal recommendation criteria?
Impacts:
- readyTime, TimeToReady
- Feigned CD
- UI/UX
- RunHandler?
- Spec Options
Thoughts on some of this.
-
Alias the macro'd abilities together as something like "macro_A_B_C", and the readyTime for every ability would be equal to the greatest remaining cooldown timing of all the alias'd abilities. This would force sync for CDs which all actually share the same cooldown.
-
The CD doesn't need to be feigned, it works correctly as-is using the example you provided. May want something in reset-precast to ensure sync with real game-state though? (maybe this is what you meant)
-
UI/UX: Spec option, if checked, it provides the exact macro. Adding the handler to the primary spell as in your example just straight up removes the spell from the recommendation queue, while still applying all of it's coded effects at the right time. Works better than I expected, honestly. Could add some mini indicator perhaps which indicates additional spells are being cast? see: #3811
-
Not sure what this means in this context.
-
See 3
There's precedent for actually providing the macros in the spec options (like Destruction's Havoc, I think).
That said, chaining Avatar / Recklessness / Thunderous Roar's handlers (and triggering CDs) is pretty trivial to do.
Let's say it's put in Avatar's handler:
if settings.use_cd_macro then if cooldown.recklessness.up then class.abilities.recklessness.handler() setCooldown( "recklessness", action.recklessness.cooldown ) end if cooldown.thunderous_roar.up then class.abilities.thunderous_roar.handler() setCooldown( "thunderous_roar", action.thunderous_roar.cooldown ) end endThat constrains it so that the macro can be assumed when Avatar is used, but if those CDs get slightly out of sync, the addon will recommend them separately as they come available. (One could force all these abilities to use the same keybind text.) It would need a good description for the option (i.e., minimize how many people have to ask in Discord re: what it's for).
Doing some prototyping right now with power infusion + voidform .. working seamlessly.
Snapshot of recommendation after void eruption using the macro
32. use_items ( trinkets - 3 )
Criteria for ??? PASS at +1.35 - ( buff.voidform.up[true] | buff.power_infusion.up[true]
- power_infusion ( cds - 6 )
The action is not ready( 119.45 )
before our maximum delay window ( 1.98 ) for this query.
Void Eruption handler (the - execution time is because as an off-gcd macro, PI will cast right away while you start casting Void Eruption)
handler = function ()
applyBuff( "voidform" )
if talent.ancient_madness.enabled then applyBuff( "ancient_madness", nil, 20 ) end
if settings.macro_pi_voidform then
if cooldown.power_infusion.up then
class.abilities.power_infusion.handler()
setCooldown( "power_infusion", action.power_infusion.cooldown - action.void_eruption.execution_time )
end
end
end,
Part of what I don't like about this approach is how much needs to be hardcoded into the addon, along with the future requests to "please support my macro that also uses this trinket/potion". If the coding burden is acceptable, this is certainly a fine way to implement this feature.
I was thinking more of trying to implement this using existing SimC APL syntax with sync
because that is easier to support more generally without extra options, and the coding burden shifts from the Lua code to the priority.