Hekili Priority Helper

Hekili Priority Helper

44M Downloads

Stacking Ironskin Brew buff not extending remains

jschick04 opened this issue ยท 33 comments

commented

I am trying to track Ironskin Brew to trigger a refresh before the buff expires but "buff.ironskin_brew.remains" does not refresh the timer when the buff is reapplied and only shows the remaining duration of the single cast.

Even if i try to workaround this by tracking "charges_fractional" to make sure I am never capped on charges I run into issues with "buff.ironskin_brew.down" always returning true once that initial 7 seconds has expired.

commented

So the icon shows up in the Defensive slot based on the "readyTime" method, or at least it seems that the method is overwriting priorities for only this slot.

Instead of following that and being greyed out because its marked as "delay", it would only show based on the priority lists. I want it to show up in the Defensive slot but only when it matches the "buff.blackout_combo.down & buff.ironskin_brew.remains < 5 & incoming_damage_3s > 0" rule.

This may be better listed as a feature request but basically the Defensive slot would still follow the priority rules but if an ability is marked as "defensive" then it would only show in the Defensive slot when "Show Separately" is checked.

image

Note how it is greyed out because is marked as "delay" when ideally it shouldn't even be showing due to the priority rule I have in place.

commented

No, the readyTime function helps identify when it would be ready. The conditions must also pass. In 8.8 seconds, the conditions for ISB pass and it is shown int he defensive display.

if an ability is marked as "defensive" then it would only show in the Defensive slot when "Show Separately" is checked

This is exactly how the Defensive toggle and Show Separately work.

commented

Ok, then I must be missing something because if the condition I have to show Ironskin Brew is marked as false then it shouldn't be showing in the Defensive slot?

commented

In your screenshot, in 8.8 seconds, the conditions are true. Pause and mouseover to see.

commented

image

So based on this rule it should not be listed if the cool down is over 4 seconds and the condition is showing false, yet it is showing up in the defense slot.

commented

Yes, the options interface shows you data about right now.

The display itself shows the next thing. The next defensive thing in your screenshot is ISB in 8.8 seconds. Because in 8.8 seconds, ISB's criteria are met.

commented

The behavior of Ironskin brew seems different than the other tanks or defense abilities. From what I have noticed on the other tanks is it seems they only show up when they are ready right now.

commented

The other tanks are not generally maintaining a buff at all times while tanking, so their options are a bit more reactive.

commented

Which is why i figured this one was different and basically what I am trying to get at is if there could be an option to make this behave the same, in the sense that it won't show up unless it is ready right now.

Not a huge deal but it would be nice to only see it reactive as I am already using another weak aura to monitor its duration and would be nice to not see redundant trackers.

commented

You can just turn off Ironskin Brew if you're using something else to track it. Abilities can be disabled individually, or you can disable the related abilities in the priority list.

commented

The thing is that I would still like it to show up on that defensive list only when it meets the condition as a reminder to refresh it. Similar to how I would be using it with the "Show Separately" unchecked, which may be how I end up having to use it now that it's working.

commented

Further testing of this with "Show Separately" unchecked and I am also not seeing this ability jump to the front of the queue once its show value is set to true until it is about 1 second from expiring, despite it having a much higher position than other abilities that are staying in front of it.

commented

Yes, see this again: #141 (comment)

Ironskin Brew isn't ready until you'd have at least 2 charges of ISB -or- the ISB has less than a GCD remaining. That's what the readyTime function accomplishes.

If your action list criteria are met but ISB is not ready, then ISB is not recommended. The addon then fasts forward to when it thinks ISB would be ready and retests. That is why you get an ISB recommendation for later on when defensives are shown separately.

Each display's goal is to show you the next thing to use. The defensive display, showing only defensive abilities, doesn't have anything to show you sooner than ISB's next cast, which may be several seconds in the future. The primary display, which shows all your abilities, will have other things to recommend while waiting for ISB to be ready.

ISB would be shown in the primary display when ISB is ready and its criteria are met and no higher-priority ability is ready with its criteria met.

So, with defensives shown separately:

image

That entry is recommended in 5.03 seconds because in 5.03 seconds, the criteria are met. You'll be tanking, Blackout Combo will be down, and ISB will have less than a GCD remaining.

With defensives shown in the primary display:

image

Tiger Palm > Ironskin Brew > RJW

image

Why? Tiger Palm is shown in 0.13 seconds; because Tiger Palm is ready at that time and energy would cap in less than 1 second.

image

Okay, so why is ISB next? 0.38 seconds after Tiger Palm is used, ISB is recommended. At that point, ISB is ready and its criteria are met (you can see that ISB just fell under 1s remaining at that point in time).

In summary, the addon goes through the priority list, entry by entry, as follows:

  1. Is it known by your character and is it usable? If not, skip it.

  2. Is it ready right now or will it be ready before our current recommendation? If not, skip it.

  3. Are this entr's conditions met right now or will they be met before our current recommendation?

  • If yes, this is our recommendation. Select it for now, and check the next entries to see if they are ready sooner and their criteria pass sooner.
  • If not, skip it.
commented

With all that being said, if you really want to override the addon's design, which is to tell you the next thing with as much notice as it possibly can, you can add delay = 0 & to your action criteria. This will keep the addon from using any kind of advance forecasting on that entry. So the last screenshot's criteria would be:

delay = 0 & tanking & buff.blackout_combo.down & buff.ironskin_brew.remains < gcd.max

I don't recommend this, because it's literally the opposite of how the addon is intended to work. I would sooner just disable Ironskin Brew if you're using other tools to tell you when to use it.

This addon's goal is to show you what is next and when you want to push it, not to have things pop up and surprise you. There are other addons for that.

commented

Makes sense, but why is the value of "buff.ironskin_brew.remains" always 0.99 no matter when you pause even though the conditions pane value matches the actual time in the buff pane?

Also, if i modify my condition to only "buff.ironskin_brew.remains <= 5" it will not show up in the Defense window unless I take damage. If i go into MonkBrewmaster.lua and comment out the "usable" function then I can see the skill show up in the Defense window. It just seems like no matter what I set in the conditions pane, doesn't actually change anything as the functionality of Ironskin Brew seems completely hard coded.

commented

Because, in general, popping defensives when you're not taking damage is pointless.

And I am sorry, but I don't know another way to explain timing/readiness.

commented

I get what your saying and i understand but my point is that no matter what i put in as a condition doesnt matter because the condition is hard coded. And why the value is different between the pause view and the conditions pane.

commented

No, the conditions aren't hard coded. The conditions are checked when the ability is ready, based on the function we've talked about.

What is your goal with Ironskin Brew? You want to repeatedly mash it when you already have it up? Why? The readyTime delay is there because there's no reason to push ISB early, you want to daisy-chain it, so that you can use those charges on Purify if/when needed. If you want to daisy-chain it at a different number of seconds, why? What is the problem you're trying to solve?

The config UI, where you enter the conditions, shows the current values attribute/expression.

The tooltip, when paused, shows you the value of those attributes/expressions at the time of the recommendation.

Example, Ironskin Brew has 6 seconds remaining. Mousing over the config UI is going to show buff.ironskin.remains at 6. Because that's the current value. When paused, the tooltip is going to show you that Ironskin Brew is recommended in +5.01 seconds, and buff.ironskin.remains at 0.99 at that time.

That's intentional.

commented

So I think I was confusing my ask and getting too tied up on Ironskin Brew so I did some further testing and I think this is the best way to explain what I was looking for.

It would be nice if there was a checkbox that forced "readyTime" to always return 0 for abilities marked as "defensive" or under the "Displays > Defensives > Delays" there was an option to "Hide" similar to how there is an option to "Fade as Unusable". Possibly even an alpha slider in place of "Fade as Unusable".

commented

But why? What is the benefit of the change? Does it result in better recommendations under some particular circumstance?

Adding display customization also increases user confusion as they try out features and/or don't understand what they're for.

If you were going to convince a user that they wanted to check something so that abilities that are not ready (per my implementation) are treated as ready earlier, how would you sell them on it? Why would they want it?

For Ironskin Brew, is there a scenario where you want the addon to make an early recommendation of Ironskin Brew but you can't because the addon wants you to wait until ISB is almost falling off before pressing the button? What is that scenario? Why is it beneficial to you or someone else?

commented

That's why I think the route of an option under the "Displays > Defensives > Delays" section would be the most user friendly option but allowing a little extra flexability.

As for Ironskin Brew, my scenario is that I like to keep the remaining time around or above 5-10 seconds to keep a smoother damage rotation and accounting for any bursts in boss damage where I am more likely to not be paying attention to the remaining time on ISB and having a higher chance of dropping off. I am also more likely to not notice even if I have the display settings set to fade when delayed which is why it would be nice to have the option to be 0 alpha when delayed. Also, with "Straight, No Chaser" and "Blackout Strike" you are more likely to always be capped on charges where you are more flexible in using Purifying Brew. I look at this similar to staying at 100 rage on a warrior, you may not need that early refresh of "Ignore Pain" but getting a little more damage prevented is better then wasting the rage.

commented

You're going to have to post all the information requested (so I can see your addon version, traits, talents, etc.).

Then, you'll want to post your actual priority changes so I can see that you're using it.

If you have your delay timer text visible, that number is not the remaining time on Ironskin Brew. It's the time until the addon recommends pressing the button again. For Ironskin Brew, that looks like this:

readyTime = function () return max( ( 2 - charges_fractional ) * recharge, 0.01 + buff.ironskin_brew.remains - gcd.max ) end,

That function means Ironskin Brew is not considered ready to use until you have 2 charges (so that 1 charge is reserved for Purify) or Ironskin Brew is going to fall off within the next GCD (or is already down).

commented

Here is the character data
https://pastebin.com/VftLPaNe

This is the specific condition I am trying to setup.
"buff.blackout_combo.down & buff.ironskin_brew.remains < 5 & incoming_damage_3s > 0"

Here is the priority I am currently using with "default > position 13" being the condition I am changing.
https://pastebin.com/eNSxQCas

To track the time and see the condition evaluation, I have been mousing over the conditions box after hitting Ironskin Brew 2-3 times and also testing without "incoming_damage_3s".

Basically, my ask is that I am looking for anytime Ironskin Brew is used that it should "buff.ironskin_brew.remains += 7".

commented

Ah, interesting. So, in normal combat, this isn't going to be an issue.

It looks like when ISB extends duration, the addon isn't catching this and realizing that the duration has extended (may be a combat log or other event issue).

In real combat, any other buff/debuff applying to you, updating, stacking, falling off is going to force a refresh of all your buffs.

I'll address this for -19, as it is a bug, but it should generally not impact you in a real fight. Basically, SPELL_AURA_APPLIED doesn't happen for ISB's extension. I'll add a workaround.

commented

Check out v8.1.5-19-alpha1 when it finishes building.

commented

Tested v8.1.5-19-alpha1 and that fixes the prioritization queue. Is there any way to implement this to override the readyTime method ?

Basically so it drops it from the Defensives display when "Shown Separately" is checked?

commented

I don't understand the question. If you don't want it to show up, disable the entry, the ability, or remove it from the priority.

What would overriding the 'readyTime' command accomplish? What is the goal?

commented

It's not necessarily a matter of popping up when its ready, the issue was more of seeing ISB as delayed for the entire stack duration and not lighting up as ready until the ~1 sec mark. This is basically what I was already doing previously with a weakaura to track the time remaining.

This alpha 2 change is exactly what I was looking for where it would light up at say 5 seconds instead of that ~1 sec mark. This is what I was trying to do with the condition variable but it was not taking that into account when changing it from delayed.

Thank you for taking the time to discuss and for implementing this change.

commented

In terms of having a "hide" or "transparent" option when delayed, that's something I'll think about. As a variant on "Fade As Unusable" it might be valid and useful, without bloating those options. It'd be a little more complicated to set up, because alpha is controlled elsewhere, but that's my problem and not yours.

And I think that's less relevant to what you're really wanting.

So, for Ironskin Brew, what you really want is for it to be available sooner, instead of being 'ready' only when it's about to fall off. I'm open to making adjustments to its readyTime, but they need to be specific.

Currently, ISB is ready when:

  • You have at least 2 charges of ISB available; and
  • ISB is going to fall off in a GCD.

Some possible changes:

  • If you are at or near your max ISB charges, ISB is ready regardless of remaining time on the buff.

Or:

  • Provide a slider for the amount of overlap you want for ISB. (So, currently, it would be at 1 second, but you could potentially slide that out to 5 seconds, so ISB is ready when the buff has less than 5 seconds remaining.)

Or maybe both. Does that capture what you're saying?

I look at this similar to staying at 100 rage on a warrior, you may not need that early refresh of "Ignore Pain" but getting a little more damage prevented is better then wasting the rage.

Have you actually been in a situation where you've capped ISB charges and the addon is still telling you to wait before using ISB again? I haven't, but I'd be interested in seeing a log of it.

commented

I like the first option of tracking charges or even specifying the overlap but the issue I had when testing regardless of time remaining is that you can end up with a long buff duration. There would need to be a happy medium between am i wasting charges or am i wasting time extending the buff duration. I have had those rare procs where I can hit ISB 2-3 times and not consume a charge and hitting it again would just be a waste at the start of a fight.

This is also the reason I like the "hide" option because it puts some flexibility by customizing the conditions and works for all class defenses. I also think that the "hide" option would be the better option than setting the alpha but threw out both ideas since you can already set the base alpha from the advance options and was unsure about the implementation complexity.

Have you actually been in a situation where you've capped ISB charges and the addon is still telling you to wait before using ISB again? I haven't, but I'd be interested in seeing a log of it.

I have not seen an issue at max charges but similar to the other class charges or Rage, you would want a threshold to activate above 80% or some GCD offset.

commented

I still don't know about the hiding thing. The point of the addon is to show you what's next. For something that pops up at the last second, that's more of a WeakAuras kinda deal.

Anyway, 19-alpha2 includes a slider for allowing more overlap with ISB. If you're capping charges in the next 3 seconds, ISB is ready regardless of buff duration.

commented

I would generally agree and maybe if there was a way for weakauras to read the defense priorities or something. The only issue with the monk is that, more often than not, only 1 defense ability that will always show and it becomes more like a weakaura buff tracker then a helper. And in my example above, it becomes even less helpful when it is acting like a duration tracker.

I will check out 19-alpha2.

commented

I promise you it is not acting like a buff tracker. Yes, it takes measures to avoid wasting ISB by extending too early, but that's not like a buff tracker.

I'm not sure if you understand that, if another entry in the priority list were ready and had its criteria pass sooner, the other entry would be shown. If you had a priority list that looked like:

ironskin_brew,if=true
purifying_brew,if=stagger.heavy

The addon would look at the Ironskin Brew buff, and let's say its duration is 10 seconds. If my ISB Overlap is set to 5 seconds (now), the addon say "in 5 seconds, use Ironskin Brew." BUT, it will also continue down the priority list. So if Purifying Brew is ready and stagger.heavy is true, it will say, "Purifying Brew, now." It's not going to wait 5 seconds for you to ISB and then tell you to purify.

It tells you the next, best ability to use, based on when abilities are ready and the criteria provided.

What you're asking for sounds more like a WeakAura to me. "I want something to pop up for Ironskin Brew under these conditions." That has nothing to do with prioritization.