Jump to content


Photo

Visualising the optimal cat rotation ingame


  • This topic is locked This topic is locked
375 replies to this topic

#1 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 14 December 2009 - 03:07 PM

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


#2 chetal

chetal

    Von Kaiser

  • Members
  • 38 posts

Posted 14 December 2009 - 03:37 PM

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)

#3 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 14 December 2009 - 03:49 PM

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.

#4 Leafkiller

Leafkiller

    Piston Honda

  • Members
  • 134 posts

Posted 14 December 2009 - 05:44 PM

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.

#5 Allev

Allev

    King Hippo

  • Members
  • 545 posts

Posted 14 December 2009 - 07:05 PM

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)

#6 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 14 December 2009 - 07:11 PM

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.

#7 Leafkiller

Leafkiller

    Piston Honda

  • Members
  • 134 posts

Posted 14 December 2009 - 09:33 PM

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.

#8 funnyginman

funnyginman

    Glass Joe

  • Members
  • 6 posts

Posted 14 December 2009 - 11:34 PM

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.

#9 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 15 December 2009 - 09:06 AM

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

#10 zimira

zimira

    Von Kaiser

  • Members
  • 53 posts

Posted 15 December 2009 - 02:52 PM

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.

#11 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 15 December 2009 - 06:22 PM

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.

#12 Tressel

Tressel

    Glass Joe

  • Members
  • 8 posts

Posted 15 December 2009 - 10:30 PM

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?

#13 chetal

chetal

    Von Kaiser

  • Members
  • 38 posts

Posted 15 December 2009 - 10:43 PM

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.

#14 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 15 December 2009 - 11:46 PM

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

#15 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 16 December 2009 - 07:16 AM

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


#16 Leafkiller

Leafkiller

    Piston Honda

  • Members
  • 134 posts

Posted 16 December 2009 - 08:31 AM

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.

#17 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 16 December 2009 - 10:06 AM

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.

#18 druzen

druzen

    Glass Joe

  • Members
  • 2 posts

Posted 16 December 2009 - 10:18 AM

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

#19 babysnake

babysnake

    Glass Joe

  • Members
  • 11 posts

Posted 16 December 2009 - 11:35 AM

Alev/Toooskies is optimizing the Simulationcraft action list in this issue: Issue 142 - simulationcraft - Feral druid action list tweaks - Project Hosting on Google Code

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

#20 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 16 December 2009 - 01:00 PM

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.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users