Bloodtalons not being saved to Rip
rwygand opened this issue ยท 5 comments
Ovale isn't saving that I've applied (as feral) a Rip with Bloodtalons, so it keep suggesting I overwrite Rip when, in fact, it's a dps loss to do so. Schmoo mentioned this on fluiddruid:
It's actually been a problem for ages, but became a much lower priority in 7.3.5 because we dropped BT in favor of MoC.
https://fluiddruid.net/forum/viewtopic.php?f=3&t=5709&start=900#p39126
Last time I looked into this issue, I believe it was primarily due to events occurring out of order. If the buff (Bloodtalons) was removed before the debuff (Rake or Rip) was applied, then it didn't get saved properly.
That may or may not be the case still, might be a while till I can look at it so if someone can solve it in the meantime that's great.
This is happening to me as well. I noticed that, in Feral, with Sabertooth enabled, the default script keeps telling me to reapply Rip instead of using Ferocious Bite. If you aren't familiar, Sabertooth enables Ferocious Bite to refresh Rip every time it's used instead of only refreshing it below 25%, so it should be using Ferocious Bite every time Rip is on the target (and it's the buffed Bloodtalons version of Rip, otherwise it should rewrite it with a new buffed Rip). I copied the default script to custom and noticed an error in this line:
#ferocious_bite,target_if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die>10&(target.health.pct<25alent.sabertooth.enabled)
it should be
#ferocious_bite,target_if=dot.rip.ticking&dot.rip.remains<3&target.time_to_die>10&(target.health.pct<25|talent.sabertooth.enabled)
I looked at the script on GitHub and it's fine, I looked at the script on my local machine and its fine. Not sure where the error in translation is occurring, but it's happening somewhere.
@InvalidTheory the line you see there is a comment, the line below is what is actually read and parsed by Ovale. Ovale parses the line fine. I think what you're seeing it's just a display error in your text editor.
if target.DebuffPresent(rip_debuff) and target.DebuffRemaining(rip_debuff) < 3 and target.TimeToDie() > 10 and { target.HealthPercent() < 25 or Talent(sabertooth_talent) } Spell(ferocious_bite)
Yeah, still a little strange that this line changes...I tried it again and it shows up the same in the Ovale Editor.
Regarding the underlying issue of overwriting Rip, I believe it is because of this line in the druid script:
PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff)
This line compares the current Rip buffs and the Rip on the target, and overrites it if it is stronger. I took a look at the damageMultiplier values and they range between 1 (normal Rip), 1.25 (Bloodtalons buffed Rip) and 1.4375 (fully buffed Rip). For whatever reason, even with a fully buffed Rip on the target, the damageMultiplier value is sometimes accurate and sometimes will be 1 or 1.25 (resulting in a Rip override).
Hope this helps.
I figured out a workaround that should improve Feral until we can get the damageMultiplier info corrected in Ovale. Note that this does not affect the issue of overwriting Rake, only the issue of overwriting Rip. Also note that this is for when you take the Sabertooth talent, although it should apply to Savage Roar as well.
Rip can only be buffed by 2 things: Bloodtalons & Tiger's Fury. If you follow Ovale recommendations closely, you will see that Bloodtalons is almost always applied before any finisher (Rip, Ferocious Bite, etc). This means that we should always have a Bloodtalons-buffed Rip, and all we really need to check is if Rip is buffed by Tiger's Fury.
As such, I will assume that Rip is ALWAYS modified by Bloodtalons and have modified the code below to ONLY do a modifier overwrite if Tiger's Fury is up (added "and BuffPresent(tigers_fury_buff)" to the damageModifier check):
if not target.DebuffPresent(rip_debuff) or target.DebuffRemaining(rip_debuff) <= BaseDuration(rip_debuff) * 0.3 and target.HealthPercent() > 25 and not Talent(sabertooth_talent) or target.DebuffRemaining(rip_debuff) <= BaseDuration(rip_debuff) * 0.8 and PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) and target.TimeToDie() > 8 and BuffPresent(tigers_fury_buff) Spell(rip) unless { not target.DebuffPresent(rip_debuff) or target.DebuffRemaining(rip_debuff) <= BaseDuration(rip_debuff) * 0.3 and target.HealthPercent() > 25 and not Talent(sabertooth_talent) or target.DebuffRemaining(rip_debuff) <= BaseDuration(rip_debuff) * 0.8 and PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff) and target.TimeToDie() > 8 and BuffPresent(tigers_fury_buff) } and SpellUsable(rip) and SpellCooldown(rip) < TimeToEnergyFor(rip)
This will still overwrite rip when Tiger's Fury is up and the damageMultiplier info is wrong, and this isn't going to be great in hectic situations where my assumption that we always have a Bloodtalons Rip falls flat, but at least it's only going to overwrite Rip with a fully-buffed Rip now and only once per Tiger's Fury, which still loses you a big Ferocious Bite, but better than nothing.
EDIT:
After further testing, the above changes cause Ovale to ALWAYS overwrite Rip when Tiger's Fury is up, meaning the check (below) Is ALWAYS true if Tiger's Fury is up:
PersistentMultiplier(rip_debuff) > target.DebuffPersistentMultiplier(rip_debuff)