5.4.20 posted. This is a Shred filler rotation which incorporates general improvements we made while working on the Rake filler script. This script also includes a predictive box that has fillers, Rip Shreds and TF/Berserk removed so you can get an idea of what the next major talent is likely to be. You can hide the predictive box by clicking on the Ovale display and selecting the "Hide predictive box" selection.

Jeshu wrote:There was a change to Ovale with the patch release that made all buff/debuff checks default to the old "mine=1" condition. The way that you now check for a buff/debuff that can be applied by anyone is to use the new condition "any=1", e.g., target.DebuffStacks(weakened_armor any=1) < 3.

I didn't think about this enough when you posted it. This is why FF is being requested too often in the Feral script and is also an issue in the Guardian script. I will correct that tomorrow, along with removing all the "mine=1" arguments since they are not needed. I also need to add spellinfo to the Guardian defines. (Using this as a ToDo list).

LastSpellDamageMultiplier(rake) <DamageMultiplier(rake) can be used for 2. ATM, these are not complete, they do not use all the buffs. I must update them.

Do you happen to know what buffs are missing? This will be important for the MoP rotation. I want to be able to express something like the following:rake,buff.dream_of_cenarius_damage.up&(dot.rake.multiplier<=tick_multiplier)&!prev.rake

if BuffPresent(dream_of_cenarius_damage) and LastSpellDamageMultiplier(rake) <DamageMultiplier(rake) and PreviousSpell(rake) Spell(rake)

I may also do something like the following to cast a Healing Touch in order to activate the DoC damage buff

As you can see, these conditionals are depending on the accuracy of the damage multipliers. This still has a hole in it since the rake would not be cast until after the healing touch gcd and the damage multiplier might change during that time, so it would be useful to be able to calculate what the damage multiplier would be a few seconds into the future.

For anyone who saw listened to the Podcast tonight, this post is reflective of why I don't like DoC...

It fixes the issue with FF spamming when other people overwrite the buff (so it should be safe to enable FF in the rotation now).

I also moved the main rotation into a series of functions. This allows the code to be shared between the main rotation box and the predictive rotation box. I used to copy/paste between them, which required making changes in two places. This is only of interest to those who look at the code and/or modify it for their own use.

Currently, the only buff that is tracked is Tiger's Fury. The way that the code is currently structured, it is somewhat difficult to add more buffs to the DamageMultiplier tracking, so it's not something I have carte blanche to fix. For things that involve restructuring the code, Sidoine wants to handle that personally, so you will need to wait for him to return from his vacation/hiatus. I will work on a solution anyway and attach it to your ticket for Sidoine to review.

@Jeshu - Btw, do you have access to the Simulationcraft Google Group? There is a thread there where I asked what simc was doing to calculate tick_multiplier. Unfortunately it is not taking into account AP.

One of the challenges right now is that aggixx has been focusing on the scripts but doing very little work on the simc code itself, and I have not even set up a development environment for simc (between Ovale and the startup I am working on, it is something I have been avoiding). There are several things that we cannot currently sim, including the number of Rip Shreds that have occurred and a complete value for tick_multiplier.

Leafkiller wrote:@Jeshu - Btw, do you have access to the Simulationcraft Google Group? There is a thread there where I asked what simc was doing to calculate tick_multiplier. Unfortunately it is not taking into account AP.

I recently joined and read through that thread.

As it impacts Ovale, what I'm trying to do is to figure out how to not inject a whole lot of hardcoded spell information into Ovale. Specifically, I'm talking about AP coefficients for various spells, etc.

Having a "tick_multiplier" that takes into account AP seems like an odd idea because you'd need to establish a base value of AP that current values of AP are scaled against. At least for Ovale, it doesn't make sense because there's no snapshotting of your stats. This seems to be really more about comparing two things against each other, a past Rake and a future Rake, so instead of an absolute "tick_multiplier" value, it would be enough to compare two things relative to each other.

What I think Ovale could provide is the following bits of information at the time a spell was cast:

Damage multiplier from buffs (not reflected in character sheet information)

Attack Power

Mastery

With those bits of information, you should be able to figure out how you'd like to compare past and present casts of Rake to determine if it's worthwhile. It's possible we might need to keep track of the buffs present when the spell was cast for special buffs like DoC that affect "the next two melee attacks". I'm not certain I really understand the mechanics of it yet, either, so it's hard for me to say how exactly Ovale would need to be extended.

Damage modifier % can be easy to get with wow api - UnitDamage("unit"). Percent value like 1.15 (TF)*1.30(SF)*1.25(DoC) etcMy question is about rake base damage and AP coefficient - how to get these? This is needed for comparing AP/agi procs vs modifiers or their weight to each other.

averter wrote:Damage modifier % can be easy to get with wow api - UnitDamage("unit"). Percent value like 1.15 (TF)*1.30(SF)*1.25(DoC) etcMy question is about rake base damage and AP coefficient - how to get these? This is needed for comparing AP/agi procs vs modifiers or their weight to each other.

averter wrote:Damage modifier % can be easy to get with wow api - UnitDamage("unit"). Percent value like 1.15 (TF)*1.30(SF)*1.25(DoC) etcMy question is about rake base damage and AP coefficient - how to get these? This is needed for comparing AP/agi procs vs modifiers or their weight to each other.

I'm not convinced that buff like DoC would be included like that, it's not a flat bonus to all damage done.

You can't retrieve those values with the API, you have to get them from datamining. Like Leaf said, they would be coded into the script.

How does this present itself on the beta? The talent description says:

Wrath, Starfire, Starsurge, and melee abilities increase healing done by your next healing spell by 30%. Tranquility is not affected.

Nourish, Healing Touch, and Regrowth increase the damage done by your next 2 Moonfire or Sunfire casts by 65% or by your next 2 melee abilities by 25%.

Each of these bonuses lasts 30 sec.

Does that mean you gain a buff with 2 stacks when you do the appropriate action? Looking through spell IDs on Wowhead shows two IDs (08381, 108382) that could possibly be those buffs. Are those buff stacks consumed one-by-one as you do the secondary actions (either healing or doing damage)?

There are separate buffs for healing and damage. The healing buff is up almost continuously, so any time a feral casts a healing will be with the 30% buff. We will use either Predator's Swiftness or Natire's Swiftness to cast an instant Healing Touch in order to get the damage DoC buff. That buff has two charges which apply to the next two damaging attacks (white damage does not trigger it). The strategy is two use it as much as possible for Rip and Rake.

It would take a list of buff ID/percent increase pairs. Ovale could use this information to check if the any of the named buffs are active when the named spell is cast and to track the correct damage multiplier accordingly.

This seems like an approach that is generic enough to work across multiple classes or specs. For example, for a moonkin script, we would have:

Leafkiller wrote:How would we factor in things like potions and Engineering/weapon/trinket procs?

Potions and trinket procs are usually reflected on the character sheet, so you can pull the information using AttackPower()/LastSpellAttackPower(id) or Mastery()/LastSpellMastery(id) to do a full comparison.