Jump to content


Photo

Visualising the optimal cat rotation ingame


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

#21 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 16 December 2009 - 02:50 PM

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

#22 Allev

Allev

    King Hippo

  • Members
  • 545 posts

Posted 16 December 2009 - 03:16 PM

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.

#23 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 16 December 2009 - 03:47 PM

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.

#24 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 16 December 2009 - 04:07 PM

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.

#25 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 16 December 2009 - 04:35 PM

Ah ok my mistake. I was thinking of the myth.

#26 Hakana4155

Hakana4155

    Glass Joe

  • Members
  • 7 posts

Posted 16 December 2009 - 04:46 PM

Thanks for the work you put into this. I started using it last night and its great.

One question though. I want to add Barkskin into the CD box for when I tank. Where do you get the number that goes into the Define statement. I.e. Define(FF 770), where can I find that Faire Fire had the ID of 770?

edited: changed FFF to FF for the spell ID

#27 Munorion

Munorion

    Piston Honda

  • Members
  • 114 posts

Posted 16 December 2009 - 05:20 PM

It's the spell ID which you can get when you look the spell up at e.g. Wowhead: Faerie Fire - Spell - World of Warcraft (the "spell=770" at the end of that link).
Although it seems that 770 is the regular FF, the feral version seems to have ID 16857.
Posted Image

#28 coldbear

coldbear

    Piston Honda

  • Members
  • 115 posts

Posted 16 December 2009 - 05:52 PM

Just starting to try to figure out this script language (switched from FbN an hour ago) and noticed that this script will recommend Mangle the moment it falls off. Would it be possible to set that recommendation at 0.5 seconds _before_ it falls off as I'd rather not get caught in a GCD?

The alternative, of course, is to just keep an eye on a buff/debuff tracker addon in conjunction with the script, as I'm sure most of us are already.

#29 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 16 December 2009 - 06:11 PM

Just starting to try to figure out this script language (switched from FbN an hour ago) and noticed that this script will recommend Mangle the moment it falls off. Would it be possible to set that recommendation at 0.5 seconds _before_ it falls off as I'd rather not get caught in a GCD?

The alternative, of course, is to just keep an eye on a buff/debuff tracker addon in conjunction with the script, as I'm sure most of us are already.



You can change the following line
unless {TargetDebuffPresent(MANGLE) or TargetDebuffPresent(MANGLEB) or TargetDebuffPresent(TRAUMA)} Spell(MANGLE)

to

if {TargetDebuffExpires(MANGLE 1) or TargetDebuffExpires(MANGLEB 1) or TargetDebuffExpires(TRAUMA 1)} Spell(MANGLE)

I don't know if you can enter 0.5 but replace the 1's with 0.5 and give it a try.

#30 Leafkiller

Leafkiller

    Piston Honda

  • Members
  • 134 posts

Posted 16 December 2009 - 07:16 PM

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.


I am not convinced this is true. From what I can see Ovale does execute the code in a way that is consistent with how Bkim wrote his script i.e. how the logic is expressed in the simulator. You did not see Rake due to a bug in the script that has to do with the time to die option Bkim included. Once I fixed that Rake was suggested correctly with that option on. Specifically:
# 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)
		}
Should be:
# actions+=/rake,time_to_die>=9
		if TargetDebuffExpires(RAKE 0 mine=1) {
			if CheckBoxOn(TTD) unless TargetDeadIn(less 10) Spell(RAKE)
			if CheckBoxOff(TTD) Spell(RAKE)
		}

Also, one of the things that is handled by the this script is the case where it is desirable to refresh SR early (in this snippet):

		# actions+=/savage_roar,cp>=5,savage_roar<=6,rip>=6
		if {ComboPoints(more 4) and BuffExpires(ROAR 6)} {
			unless TargetDebuffExpires(RIP 6) Spell(ROAR)
		}

Given the variability of RNG it is not possible for us to measure dps by doing test runs on dummies. The most we can do is to watch the cooldowns and make a judgment call on whether or not the move selector is making logical suggestions. We need simulators to execute 1000s of runs to measure small improvements in DPS - and if the Ovale code can mirror the sim code we are more likely to benefit from small dps improvements in the algorithm.

#31 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 16 December 2009 - 07:41 PM

I think it would be a lot easier if you just reposted Bkims hole script with all the fixes you made

#32 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 16 December 2009 - 07:53 PM

Leafkiller, thanks for that. I was looking at what was wrong with it and found it as well. Should be "unless" instead of "if".

I've also been able to figure out the following statement as well but I'm at work so I haven't been able to test it.
# actions+=/shred,if=cooldown.tigers_fury.remains<=3
if 3s before Spell(TIGER) Spell(SHRED)

Here is the other statement to fix so bite isn't suggested when Berserk is active:
# actions+=/ferocious_bite,cp>=5,rip>=10
unless BuffPresent(BERSERK) {
	if ComboPoints(more 4) {
		unless TargetDebuffExpires(RIP 10 mine=1) Spell(BITE)
	}
}


I've made other changes as well. I'll post the whole script with all changes once I've at least unit tested it once I get home. Or you can PM me for the script and I'll send it to you.

#33 coldbear

coldbear

    Piston Honda

  • Members
  • 115 posts

Posted 16 December 2009 - 09:05 PM

You can change the following line

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

to

if {TargetDebuffExpires(MANGLE 1) or TargetDebuffExpires(MANGLEB 1) or TargetDebuffExpires(TRAUMA 1)} Spell(MANGLE)

I don't know if you can enter 0.5 but replace the 1's with 0.5 and give it a try.


Did not work - just returned Mangle as the recommendation all the time instead of Shred or Rake. Thinking with the priority I place on Mangle always being up that 1 second would be just fine.

#34 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 16 December 2009 - 10:12 PM

I think my logical statement is wrong again. Try this:

if {TargetDebuffExpires(MANGLE 0.5) and TargetDebuffExpires(MANGLEB 0.5) and TargetDebuffExpires(TRAUMA 0.5)} Spell(MANGLE)

It used to say that if mangle or manglebear or trauma were less than 0.5 seconds CD, then suggest mangle. In your case, manglebear and trauma would always be less than 0.5 seconds so it will suggest it always.

It now says if mange and mangelbear and trauma are all less than 0.5 seconds CD, then suggest mangle.

#35 Hakana4155

Hakana4155

    Glass Joe

  • Members
  • 7 posts

Posted 17 December 2009 - 01:09 PM

That coding won't work either because the target would have to have all three debuff on it which should never happen.

Because the debuff can come from multiple sources I think we will have to let Mangle fall off the target before the script can suggest it properly. The orginal code looks to me like the best approch.

#36 Grend

Grend

    Glass Joe

  • Members
  • 19 posts

Posted 17 December 2009 - 03:00 PM

As a precursor - I've never used the Ovale language to update/change a script, but I felt as far as a 'programming/script' language the ability might exist to solve this issue. I don't want to speculate on how the language works, but that is basically what I'm doing here.

So I went looking through the Ovale Documentation for a solution to this problem. I see there is a 'TargetDebuffPresent' action.

Using the 'TargetDebuffPresent' action to indicate which debuff (either Mangle, Mangle (Bear), or Trauma) exists on the target at that time? Then you can change the logic of the 'if' statement to check which debuff is active before checking to see when it expires. Hope that makes sense..

if TargetDebuffPresent(MANGLE) {
     if TargetDebuffExpires(MANGLE 1) Spell(MANGLE)
}

if TargetDebuffPresent(BMANGLE) {
     if TargetDebuffExpires(BMANGLE 1) Spell(MANGLE)
}

if TargetDebuffPresent(TRAUMA) {
     if TargetDebuffExpires(TRAUMA 1) Spell(MANGLE)
}

If this is wrong, doesn't make sense, will not work feel free to call me a fool. Like I said at the beginning of the post this is partly speculation because I have no way to test and have never used the script language.

#37 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 17 December 2009 - 04:34 PM

That coding won't work either because the target would have to have all three debuff on it which should never happen.

Because the debuff can come from multiple sources I think we will have to let Mangle fall off the target before the script can suggest it properly. The orginal code looks to me like the best approch.


It actually does work. I have an updated script with it included and I get prompts for Mangle.

if {TargetDebuffExpires(MANGLE 0.5) and TargetDebuffExpires(MANGLEB 0.5) and TargetDebuffExpires(TRAUMA 0.5)} Spell(MANGLE)

TargetDebuffExpires also checks for the absence of a debuff. e.g. TargetDebuffExpires(MANGLE 0) is the direct opposite of TargetDebuffPresent(MANGLE).

So the statement above it's checking if any of those debuffs has either 0.5 sec or less or has expired.

#38 Furion

Furion

    Don Flamenco

  • Members
  • 270 posts

Posted 18 December 2009 - 07:23 AM

Since my update yesterday the script should reflect the current status of theorycrafting.
Unless I get convincing feedback that states the DPS produced by following it ingame is suboptimal I will probably not update it until there are new discoveries through simcraft (which might not take long as there were a few nasty bugs for ferals, apparently).

#39 bkim

bkim

    Glass Joe

  • Members
  • 22 posts

Posted 18 December 2009 - 11:06 PM

I have translated the SimulationCraft actions for feral DPS and created an Ovale script. The Ovale addon can be found here: Ovale - WoW AddOns - CurseForge.com

What you get:
  • A Large center Icon for move suggestions
  • Two smaller icons with CD for your trinkets on the left
  • Two smaller icons for your Tiger's Fury and Berserk CD's on the right

In-game Options (Click on the icon to get options)
  • Toggle on/off Tiger's Fury suggestions
  • Toggle on/off Faerie Fire suggestions
  • Toggle on/off Mangle suggestions

Change Log:
  • v1
  • Initial revision

Deviations from the SimulationCraft action list:
  • actions+=/berserk_cat,energy>=70,energy<=90
    • Excluded because it caused odd behavior in Ovale
  • actions+=/shred,extend_rip=1,rip<=4
    • Since Ovale monitors buff and debuff timers in real time, we get this by default.
  • actions+=/ferocious_bite,cp>=5,rip>=10
    • Added logic to this statement to never suggest FB when Berserk is active
  • actions+=/mangle_cat,mangle<=1
    • Also checks for Mangle (Bear) and Trauma


Known Issues



The Ovale Script
#------------------------------------------------
# Feral Cat DPS Ovale Script v1
#
# Based on SimulationCraft actions
# http://elitistjerks.com/f73/t81052-best_possible_feral_dps_simulationcraft/
#------------------------------------------------

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(CheckBoxTF "Suggest Tiger's Fury")
AddCheckBox(CheckBoxFF "Suggest Faerie Fire")
AddCheckBox(CheckBoxDisableMangle "Don't suggest Mangle")


AddIcon help=cd size=small nocd=0 {
	if Stance(3) { # cat
		Item(Trinket0Slot usable=1)
	}
}

AddIcon help=cd size=small nocd=0 {
	if Stance(3) { # cat
		Item(Trinket1Slot usable=1)
	}
}


AddIcon help=main {
	if Stance(3) {  # CAT
	
		# actions+=/faerie_fire_feral,debuff_only=1
		if CheckBoxOn(CheckBoxFF) {
			unless {TargetDebuffPresent(FFF) or TargetDebuffPresent(FF)} Spell(FFF)
		}

		# actions+=/tigers_fury,energy<=40,berserk=0
		if CheckBoxOn(CheckBoxTF) {
			unless BuffPresent(BERSERK) if Mana(less 40) Spell(TIGER)
		}

		# 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 5 mine=1) Spell(ROAR)
		}

		# actions+=/rip,cp>=5,time_to_die>=6
		if {ComboPoints(more 4) and TargetDebuffExpires(RIP 0 mine=1)} {
			unless TargetDeadIn(less 6) Spell(RIP)
		}

		# actions+=/ferocious_bite,cp>=5,time_to_die<=6
		if ComboPoints(more 4) {
			if TargetDeadIn(less 6) Spell(BITE)
		}
		
		# actions+=/ferocious_bite,cp>=5,rip>=10
		unless BuffPresent(BERSERK) {
			if ComboPoints(more 4) {
				unless TargetDebuffExpires(RIP 10 mine=1) Spell(BITE)
			}
		}
		
		# actions+=/mangle_cat,mangle<=1
		if CheckBoxOff(CheckBoxDisableMangle) {
			if {TargetDebuffExpires(MANGLE 1) and TargetDebuffExpires(MANGLEB 1) and TargetDebuffExpires(TRAUMA 1)} {
				Spell(MANGLE)
			}
		}
		
		# actions+=/rake,time_to_die>=9
		if TargetDebuffExpires(RAKE 0 mine=1) {
			unless TargetDeadIn(less 10) 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 TargetDeadIn(less 10) Spell(SHRED)
		
		# actions+=/shred,berserk=1
		if BuffPresent(BERSERK) Spell(SHRED)
		
	}
}

AddIcon help=cd size=small nocd=0 {
	if Stance(3) { # cat
		Spell(TIGER)
	}
}

AddIcon help=cd size=small nocd=0 {
	if Stance(3) { # cat
		Spell(BERSERK)
	}
}


#40 Husyor

Husyor

    Von Kaiser

  • Members
  • 57 posts

Posted 19 December 2009 - 10:23 AM

Thanks everyone, and bkim. I guess I didn't refresh when I sent you that PM. I haven't tried it out yet, but from what I'm looking at the script does it just check to see if mangle is up or is that with 1 sec left on it? Being a FBN fan this sounds similar to that and am going to try it out tomorrow.

One thing I dislike is that I can do respectable dps on my own, but to maximize dps and I mean to really push things to the limit, I need to use an addon. Granted there are still situations where you can't follow the addon that makes or breaks the player.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users