Archived

This topic is now archived and is closed to further replies.

Furion

Visualising the optimal cat rotation ingame

376 posts in this topic

I have quit wow so if you want the OP updated either create a new thread or write me a PM as I'm still here from time to time.

In my search for an alternative to the FBN move suggester I decided to write a custom Ovale (a script-based move suggesting addon by Sidoine) script for cats. It's main goal is to produce the best DPS suggestions ingame.

Apart from that ovale can be useful to visualise what simcraft does ingame so it can be a used to spot errors in simcraft profiles more easily.

What I'm looking for in this thread:

I am mainly looking for discussion about ovale scripts in a way that states why it does not visualize the optimal cat rotation ingame (and even better if you can explain how to fix it). Feel free to comment on any mistakes you may find but if it's based on controversial theories make sure to include or link to convincing evidence and not just post your vague feelings or preferences. I am not too interested in long-winded discussions about theorycrafting, rotation, gearing or the usefulness of this script or other tools (like simcraft), here as there are enough other threads for that.

As I'm not the author of ovale or in any way affiliated with him I probably can't help you with any problems regarding the addon itself and not my script.

About my script:

-The numbers are mainly based on simcraft simulations

-Bear in mind that a simple script also doesn't react to the current encounter. They are meant for static situations where you are wearing decent gear and do single target damage to a boss with appropriate buffs and debuffs. A script will never play the game for you. Following my script will still expect the end user to make some choices. But it's easy enough to modify to your taste and might work in other scenarios. You will need to make custom modifications if you want the perfect script for you.

-The script offers only one option (Manglebot)

-I currently don't think the script needs updates for the rest of wotlk

-there is a bug where the movement suggestions won't show when an unattackable enemy becomes attackable (Gormok etc). Just retarget him I can't fix this.

How to read the movement suggestions ingame:

I'll descripe the Icons from left (1) to right (4)

(1) is the main suggestion box with your main rotation. If anything is suggested here it has high priority.

(2) is the filler shreds and FFF. Only follow this icon when there is nothing to do in (1) within the next ~0.5 seconds. Basically you have to treat this icon as if you had an OOC proc up (which is something every feral needs to learn anyways).

(3) + (4) are only there to notify you about TF and Berserk coming off cooldown soon. Use them at your own discretion, but generally you want to use both ASAP; TF only when your energy is below 30; Berserk when your energy is around 80.

If I'm not maintaining the script anymore the ovale logic is easy enough to pick up for almost anyone with a bit of dedication who might want to continue working on it. If someone wants to continue working on my script or maintain this or a new topic feel free to contact me.

Special thanks to all those whose posts have helped me in tweaking my script.

Faq:

No bear or balance support?

No. Those are in the default script that comes with ovale but will not be included here. If you really want those just copy and paste the relevant parts from the default script.

Why not feature X?

I will ignore most feature requests as I am taking a very minimalistic approach here, trying to keep the script as short, efficient and easy as possible. If you want a feature that not every smart person would definetly want please ask yourself wether you can't just adapt or a different addon can add the missing feature for you or feel free to modify the script to your likings yourself so I can dedicate my limited time to improving the script for everyone instead of answering personal requests. The more I put into this script the harder it will be to modify it later on so my current view is that I need to be quite picky and concentrate on the core issues. But feel free to change the script in any way you like. Should be easy enough as I am trying to keep it as minimalistic as possible.

How to do custom modifications?

You can try Ovale - Documentation - WoW AddOns - CurseForge.com for all the available commands in ovale to optimise the script for your tastes.

---------------------------------------------------------------------------------------------------------------------------------------

Alternatives:

You can post your own script modifications, scripts, or discuss other scripts here, too.

There is a script by Torzak that pays attention to a few details like trinket procs so it might be a source for your own custom modifications:

http://elitistjerks.com/f73/t84378-visualising_optimal_cat_rotation_ingame_ovale_scripts/p5/#post1506709

Fatalsaint wrote a Module for Faceroller (an Addon similar to ovale) that is somewhat based on my results and should produce comparable or even higher DPS to my ovale script, however I can't verify anything as I'm not playing anymore. It should also offer more options.

Faceroller Feral Druid : WoWInterface Downloads : Plug-Ins & Patches

Gurrshael modified the old FBN so it is reduced to the move suggester without all the bloat, but remember the suggestions are probably outdated.

Gurrshael / FBNLite / source — bitbucket.org

---------------------------------------------------------------------------------------------------------------------------------------

Usage of ovale scripts:

1) Get Ovale - Addons - Curse

2) Install Ovale properly

3) Just to clarify: Whenever I update the script you will have to repeat this step to match the current version

a) Copy and paste my current script ingame into interface->addons-> ovale (make sure you replace the old script) and press "accept" afterwards.

b) If that doesn't work try following this alternative process:

Exit WoW

Delete YourWoWFolder\WTF\Account\YourAccountName\SavedVariables\Ovale.lua and Ovale.lua.bak

Open YourWoWFolder\Interface\AddOns\Ovale\defaut\Druide.lua

Replace the existing script in that file with mine + save the chances.

4) If everything fails make sure you have the newest version of ovale.

How to use: In the newest Version there are 4 move suggesting Icons. The first from left is your main rotation the 2nd from left will tell you when shredding would be appropriate, however the first Icon has priority, you only check the 2nd icon if there is nothing to do in the first. This should be natural for a feral as it's exactly what you should be doing on an OOC proc anyways.

3rd and 4th icon will show when TF or berserk are ready soon.

Here is my script:


#Project: Visualising the optimal cat rotation ingame

#Script Version: 2.8a

Define(FFF 16857)

Define(FF 770)

Define(RIP 1079)

Define(MANGLE 33876)

Define(SHRED 5221)

Define(TIGER 5217)

Define(RAKE 59886)

Define(ROAR 52610)

Define(BITE 22568)

Define(BERSERK 50334)

Define(OMEN 16870)

Define(TRAUMA 46857)

Define(MANGLEB 33878)

SpellInfo(RIP resetcounter=ripshreds)

SpellInfo(SHRED inccounter=ripshreds)

AddCheckBox(Manglebot "Manglebot" default)


AddIcon help=main

{

if Stance(3) # cat

    {

    if ComboPoints(more 0) and BuffExpires(ROAR 0) Spell(ROAR priority=4)

    if ComboPoints(more 2) and BuffExpires(ROAR 8) and TargetDebuffPresent(RIP mine=1) and at most 3s from TargetDebuffExpires(Rip mine=1) until BuffExpires(ROAR) and TargetDeadIn(more 8) Spell(ROAR priority=4)

    if ComboPoints(more 3) and TargetDeadIn(less 2) Spell(BITE)

    if TargetDebuffPresent(RIP mine=1) and TargetDebuffExpires(RIP 4 mine=1) and Counter(ripshreds less 3) Spell(SHRED)

    if ComboPoints(more 4)

        {

        if TargetDeadIn(less 6) Spell(BITE)

        unless TargetDebuffPresent(RIP mine=1) Spell(RIP priority=4)

        unless TargetDebuffExpires(RIP 8 mine=1) or BuffExpires(ROAR 11) Spell(BITE)

        }

    if CheckBoxOn(Manglebot) and TargetDebuffExpires (MANGLE 1) Spell(MANGLE)

    unless {TargetDebuffPresent(MANGLE) or TargetDebuffPresent(MANGLEB) or TargetDebuffPresent(TRAUMA)} Spell(MANGLE)

    unless TargetDebuffPresent(RAKE mine=1) or TargetDeadIn(less 10) Spell(RAKE)

    if TargetDeadIn(less 10) Spell(SHRED)

    }

}


AddIcon help=main size=small nocd=3

{

if Stance(3) # cat

    {

        {

    if {TargetDebuffPresent(MANGLE 0.6) or TargetDebuffPresent(MANGLEB 0.6) or TargetDebuffPresent(TRAUMA 0.6)} and TargetDebuffPresent(RAKE 0.6 mine=1) and {Mana(more 79) or BuffPresent(OMEN) or {TargetDebuffExpires(RIP 3 mine=1) and ComboPoints(less 5)} or BuffPresent(BERSERK) or 2s before Spell(TIGER) or {ComboPoints(less 1) and BuffExpires(ROAR 2)}} Spell(SHRED)

        } 

    unless {BuffPresent(BERSERK) or 4s before Spell(TIGER) or Mana(more 32)}

        {

        unless {TargetDebuffPresent(FFF) or TargetDebuffPresent(FF)} Spell(FFF priority=2)

        }

    }

}



AddIcon help=cd size=small nocd=3

{

if Stance(3) # cat

    {

    Spell(TIGER priority=4)

    }

}


AddIcon help=cd size=small nocd=5

{

if Stance(3) # cat

    {

    Spell(BERSERK)

    }

}

Share this post


Link to post
Share on other sites

The script works very well. I know you said you do not want to add TF/Berserk to the main bar and I agree with Berserk but TF is so short of a cooldown that the only time that I save it is when I deviate from the normal "rotation", completely ignoring ovale (stun phase of icehowl, any aoe, ect.)

So for people who want to add TF to the main script simple add the following:

if Mana(less 40) Spell(TIGER) unless BuffPresent(BERSERK)

this should be added right before:

if BuffPresent(OMEN) Spell(SHRED)

if BuffPresent(BERSERK) Spell(SHRED priority=1)

unless TargetDebuffPresent(RAKE mine=1) or TargetDeadIn(less 9) Spell(RAKE)

making it look like:

if Mana(less 40) Spell(TIGER) unless BuffPresent(BERSERK)

if BuffPresent(OMEN) Spell(SHRED)

if BuffPresent(BERSERK) Spell(SHRED priority=1)

unless TargetDebuffPresent(RAKE mine=1) or TargetDeadIn(less 9) Spell(RAKE)

Share this post


Link to post
Share on other sites

You are somewhat right about TF. My reasoning might not have been too good but I stand by my conclusion. When you notice on the 2nd Icon that TF is ready you may want to spend your energy in a different way/a bit faster than the script would currently suggest. On top TF is not on the gcd so you may want to press a second button at the same time but you wouldn't know what to press if the main icon is occupied by TF.

I guess these things could be worked into the script as well, but currently I am not planning to do so myself. I might include it if someone comes up with a solution that seems to be close enough to optimal.

Share this post


Link to post
Share on other sites

Thanks for putting up this thread and creating the script. First, a couple of housekeeping suggestions for you. Wrap the script in code tags to make it easier to cut and paste and also distinguish it from the rest of your post. It will look something like this snippet:


if BuffPresent(OMEN) Spell(SHRED)

if BuffPresent(BERSERK) Spell(SHRED priority=1)

unless TargetDebuffPresent(RAKE mine=1) or TargetDeadIn(less 9) Spell(RAKE)

Also it would be helpful to include a date stamp of the last time you updated it - some sort of change log.

I tested the version of the script you posted in the sim thread last night on ToGC 25 Twins and the one major issue I saw was several times it kept asking me to do FBs when Rip had fallen off completely. I will try to find some time to analyze the script to see if there is anything obvious that is causing that.

Share this post


Link to post
Share on other sites

If I had to guess, I'd say that you play with another feral who had rip up. In which case the line:

unless TargetDebuffPresent(RIP) Spell(RIP)

maybe should be

unless TargetDebuffPresent(RIP mine=1) Spell(RIP)

Share this post


Link to post
Share on other sites

I guess I'll just call the current version 1 and start counting from there. (Never really planned to release this)

I think Allev is right and I'll fix the OP. Otherwise it might be related to twin valkyrs shield mechanics as I haven't noticed any problems in my ICC and Ulduar raids this week despite having another feral with me. Maybe I'll get to test the script in Totc tomorrow.

Share this post


Link to post
Share on other sites

Just confirming - I did have another feral with me on that fight so the fixes you made look correct. I will also continue to test it in raid with the other feral using the corrected script.

Share this post


Link to post
Share on other sites

Is it possible to add some code to accomidate other forms? Meaning the suggestion box shows up whether I'm in cat or bear form during battle, and I'd like it to not show up when I'm in my tanking spec. I'd do it myself, but I don't know the language well enough.

Share this post


Link to post
Share on other sites

Script updated, icons wont show unless in catform. However you need to enable "hide empty buttons" in ovale options.

Share this post


Link to post
Share on other sites

It is probably a good idea to include version number as a comment in the script itself.

The line below checks for MANGLEB and TRAUMA twice if i read it correctly.

if ComboPoints(less 5) and {{TargetDebuffPresent(MANGLE) or TargetDebuffPresent(MANGLEB) or TargetDebuffPresent(TRAUMA)} or TargetDebuffPresent(MANGLEB) or TargetDebuffPresent(TRAUMA)} Spell(SHRED priority=2)

The code below should be enough
if ComboPoints(less 5) and {TargetDebuffPresent(MANGLE)  or TargetDebuffPresent(MANGLEB) or TargetDebuffPresent(TRAUMA)} Spell(SHRED priority=2)

To further improve the readability you could intendent the code to better show how its nested.

Share this post


Link to post
Share on other sites

To further improve the readability you could intendent the code to better show how its nested.

I don't quite understand what that means but I guess it's about the formatting... however I won't change that as I copy and paste the script a lot and the better formatting i did when creating the script is unfortunately lost in that process. But I'll implement the other suggestions.

Share this post


Link to post
Share on other sites
Script updated, icons wont show unless in catform. However you need to enable "hide empty buttons" in ovale options.

Are we having to update code manually or is the updated addon going through the review/update process on Curse?

Share this post


Link to post
Share on other sites
Are we having to update code manually or is the updated addon going through the review/update process on Curse?

Well being that the rotation is going to change based on your gear and if you have t10 manual updating seems to be the way to go.

Share this post


Link to post
Share on other sites

This is great! I started tinkering with Ovale myself but never got around to finishing it. Thank you for starting this.

Share this post


Link to post
Share on other sites

Here is another way to write it. It copies exactly the SimulationCraft logic and action order. The addon seems to run all statements and knows what to suggest based on what statement came first. I've also added checkboxes to give ppl the option to turn various stuff on and off.


Define(FFF 16857)

Define(FF 770)

Define(RIP 1079)

Define(MANGLE 33876)

Define(SHRED 5221)

Define(TIGER 5217)

Define(RAKE 59886)

Define(ROAR 52610)

Define(BITE 22568)

Define(BERSERK 50334)

Define(OMEN 16870)

Define(TRAUMA 46857)

Define(MANGLEB 33878)


AddCheckBox(STF "Suggest Tiger's Fury")

AddCheckBox(SB "Suggest Berserk")

AddCheckBox(SFF "Suggest Faerie Fire")

AddCheckBox(TTD "Calculate Time To Die")


AddIcon help=cd size=small nocd=0 {

	if Stance(3) { # cat

		Spell(BERSERK)

	}

}


AddIcon help=main {

	if Stance(3) {  # CAT


		# actions+=/faerie_fire_feral,debuff_only=1

		if CheckBoxOn(SFF) {

			unless {TargetDebuffPresent(FFF) or TargetDebuffPresent(FF)} Spell(FFF)

		}


		# actions+=/tigers_fury,energy<=40,berserk=0

		if CheckBoxOn(STF) {

			if {BuffExpires(BERSERK 0) and Mana(less 41)} Spell(TIGER)

		}


		# actions+=/berserk_cat,energy>=70,energy<=90

		if CheckBoxOn(SB) {

			if {Mana(more 69) and Mana(less 91)} Spell(BERSERK)

		}


		# actions+=/savage_roar,cp>=1,savage_roar<=1

		if {ComboPoints(more 0) and BuffExpires(ROAR 1)} Spell(ROAR)


		# actions+=/savage_roar,cp>=5,savage_roar<=6,rip>=6

		if {ComboPoints(more 4) and BuffExpires(ROAR 6)} {

			unless TargetDebuffExpires(RIP 6) Spell(ROAR)

		}


		# actions+=/shred,extend_rip=1,rip<=4

		# pretty sure this addon accounts for this since it reads timers in real time


		# actions+=/rip,cp>=5,time_to_die>=6

		if {ComboPoints(more 4) and TargetDebuffExpires(RIP 1 mine=1)} {

			if CheckBoxOn(TTD) unless TargetDeadIn(less 6) Spell(RIP)

			if CheckBoxOff(TTD) Spell(RIP)

		}


		# actions+=/ferocious_bite,cp>=5,time_to_die<=6

		if ComboPoints(more 4) {

			if CheckBoxOn(TTD) if TargetDeadIn(less 6) Spell(BITE)

			if CheckBoxOff(TTD) Spell(BITE)

		}


		# actions+=/ferocious_bite,cp>=5,rip>=10

		if ComboPoints(more 4) {

			unless TargetDebuffExpires(RIP 10 mine=1) Spell(BITE)

		}


		# actions+=/mangle_cat,mangle<=1

		unless {TargetDebuffPresent(MANGLE) or TargetDebuffPresent(MANGLEB) or TargetDebuffPresent(TRAUMA)} {

			Spell(MANGLE)

		}


		# actions+=/rake,time_to_die>=9

		if TargetDebuffExpires(RAKE 0 mine=1) {

			if CheckBoxOn(TTD) if TargetDeadIn(less 10) Spell(RAKE)

			if CheckBoxOff(TTD) Spell(RAKE)

		}


		# actions+=/shred,energy>=70

		if Mana(more 69) Spell(SHRED)


		# actions+=/shred,omen_of_clarity=1

		if BuffPresent(OMEN) Spell(SHRED)


		# actions+=/shred,cp<=4,rip<=3

		if {ComboPoints(less 5) and TargetDebuffExpires(RIP 3 mine=1)} Spell(SHRED)


		# actions+=/shred,time_to_die<=9

		if CheckBoxOn(TTD) if TargetDeadIn(less 10) Spell(SHRED)

		if CheckBoxOff(TTD) Spell(SHRED)


		# actions+=/shred,berserk=1

		if BuffPresent(BERSERK) Spell(SHRED)


	}

}


AddIcon help=cd size=small nocd=0 {

	if Stance(3) { # cat

		Spell(TIGER)

	}

}

Share this post


Link to post
Share on other sites

Bkim,

I like the format you posted - it is easier to follow the logic and also get it verified by SimulationCraft.

I tested your script and I am seeing too many FBs. I believe the problem is here:


                # actions+=/ferocious_bite,cp>=5,time_to_die<=6

		if ComboPoints(more 4) {

			if CheckBoxOn(TTD) if TargetDeadIn(less 6) Spell(BITE)

			if CheckBoxOff(TTD) Spell(BITE)

		}

which should probably read

                # actions+=/ferocious_bite,cp>=5,time_to_die<=6

		if ComboPoints(more 4) {

			if CheckBoxOn(TTD) if TargetDeadIn(less 6) Spell(BITE)

		}

It does not seem correct to bite if we are not calculating TTD. I noticed two other things: There is no test for Berserk active on the condition for FB:

		# actions+=/ferocious_bite,cp>=5,rip>=10

		if ComboPoints(more 4) {

			unless TargetDebuffExpires(RIP 10 mine=1) Spell(BITE)

		}

Seems like there should be an additional test before doing a FB to ensure that Berserk is not active and/or close to finishing.

The placement of the OOC check near the bottom of the logic results in very few shreds on OOC procs. Both of these could be questions for simulator more than the script but they do represent a change in cycle priority.

Share this post


Link to post
Share on other sites
Here is another way to write it. It copies exactly the SimulationCraft logic and action order.

Well, first, thanks for your effort. However, as leafkiller pointed out partly already, there is a problem with that. Of course that's how I started out trying to write the script as well. Unfortunately it isn't that easy, though, as the ovale and simcraft logic are apparently quite different beasts. It doesn't deliver the correct results as the script will not execute the actions in the right priority thus I had to change a lot of stuff (especially brackets) around trying to preserve what the simcraft settings actually mean in ovale language instead of translating them literally.

Please ensure that your own script has undergone a minimum amount of testing before presenting it as an alternative to mine, which it isn't, unless it produces the same DPS (I did test it but not for long as it wouldn't suggest rake at all).

However, I hope I didn't sound too rude. If you improve on your script in a way that it produces better DPS than mine I will gladly hand this project over to you (or someone else with more knowledge than me). The only reason I wrote this script was because there were no good alternatives and someone had to get the ball rolling, not because I think that I am in any way exceptionally good at it.

On another note: I am also not sure if it's a good idea to tie the script to simcraft forever in the way you seem to be suggesting.

What I am aiming for is the best possible DPS result ingame and not mimicing simcraft in the best possible way, which are two different goals. Maybe I should clarify my OP in regard to that.

Share this post


Link to post
Share on other sites

Is it possible to display the abilities as a small priority list with 2-3 elements? I would also like to have a list of my cooldowns with their status (yes, I am FBN addicted).

Share this post


Link to post
Share on other sites

Might be nice to keep an eye on that while optimizing these Ovale scripts.

Yes that seems like a helpful discussion and actually deals with the things I have been wondering myself. I'll have a close look at it and see what may improve my script.

Is it possible to display the abilities as a small priority list with 2-3 elements? I would also like to have a list of my cooldowns with their status (yes, I am FBN addicted).

Well it's easily possible to make 1 Icon for each berserk and TF (bkim's script does just that) and show the cooldown of each all the time (just change "nocd=1" to "nocd=0").

However I'm quite happy with my current implementation as I still have the spells on my action bar to seek out additional info if I want it. You could also use an additional addon for tracking these or adjust the script manually.

In the end it's a choice of design philosophy: I don't want to bloat the center of my screen with info I don't need most of the time so I guess I won't implement that into the main script for now. I might add that option at some point although I am skeptical about that as I want to keep the script as small and easy to handle as possible as that was one of the main reasons I switched away from FBN and that is the reason why it currently doesn't offer any ingame options at all. The more I put into this script the harder it will be to modify it later on so my current view is that I need to be quite picky and concentrate on the core issues.

I am not too interested in a long priority list either, as that isn't quite how the feral rotation works: Thanks to OOC procs we can never plan ahead currently. I know FBN had that option but it just kept confusing me as it often made future suggestions which turned out to be wrong 2 seconds later and I think it's better to keep one in the dark than raising false expectations.

More remarks to add to the OP I guess.

Share this post


Link to post
Share on other sites

V 1.4: Improved readability, fixed 2 little errors and optimized bite usage during berserk more.

Share this post


Link to post
Share on other sites

Yeah, that would be me working on those scripts. Most things I report to the SimulationCraft threads in this forum, as there are lots of variables to check which I can't test all by myself.

Currently I'm very busy at work and need a new SC release to continue making improvements, which is this weekend at earliest.

Share this post


Link to post
Share on other sites

Thanks for the feedback. I didn't mean any disrespect or intend on taking over the project. I do appreciate your hard work and sharing it with the community. I had actually installed your script and was wondering why it wasn't suggesting RAKE until I had rewritten it and realized it's because most of the training dummies are at 1/1 HP. Might be the same reason for you guys why mine didn't suggest rake.

I did testing last night and it seemed accurate but I do see that it's ignoring berserk and suggesting things like bite.

Keep going man! I do think though that Tiger's Fury and Berserk suggest should be added to the script but with a checkbox to toggle it on/off for those who want it.

Edit:

Ran your script, works great! I did notice though that it doesn't always suggest Shred on omen procs.

Share this post


Link to post
Share on other sites
I had actually installed your script and was wondering why it wasn't suggesting RAKE until I had rewritten it and realized it's because most of the training dummies are at 1/1 HP. Might be the same reason for you guys why mine didn't suggest rake.

I double checked that the dummy was at several million hp and my script would suggest rake while yours wouldn't. Just tested it another time to be on the safe side.

Ran your script, works great! I did notice though that it doesn't always suggest Shred on omen procs.

That is true however that behaviour is actually intended currently.

Issue 142 - simulationcraft - Feral druid action list tweaks - Project Hosting on Google Code

"Shred on clearcast is a myth, except when it randomly procs"

An earlier version had shred (or mangle if it was down) on every clearcast

Currently the script should recommend shred on OOC procs when there is nothing with higher priority to do like rip/rake/mangle/fb. But feel free to correct me on that.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.