Hekili Priority Helper

Hekili Priority Helper

50M Downloads

[FEATURE] Combining Macro'd CDs?

syrifgit opened this issue ยท 11 comments

commented

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

commented

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
commented

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.

commented

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.

commented

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.

commented

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).

commented

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.

commented

Just to add, another good candidate for this is for sub rogue, you always combine Cold Blood / Secret Technique.

commented

@Hekili

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.

  1. 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.

  2. 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)

  3. 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

  4. Not sure what this means in this context.

  5. See 3

commented

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).

Doing some prototyping right now with power infusion + voidform .. working seamlessly.

Setting on:
image

Setting off:
image

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]

  1. 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,
commented

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.