simulationcraft / simc

Simulationcraft engine/GUI
GNU General Public License v3.0
1.4k stars 694 forks source link

Improved arms single target priority list #2804

Closed dfherr closed 8 years ago

dfherr commented 8 years ago

instead of only using execute when colossus smash is up and we have more than 40 rage, it's actually better to use it always when CS is up before MS and additionally use it to prevent from rage caping outside of CS.

Focused Rage provides less damage/execution than Execute/MS (which nearly provide the same dpe with deathblow trait active). But using Focused Rage outside of CS to trigger tactician and then spending the FR inside that CS is more damage than using execute outside of CS to prevent rage caping. To simplify that idea i simply added a "above 20% or cs.debuff.down" condition to the Focused rage trigger, which should be doable by a human player.

Adding these changes provides an additional ~6k dps gain for me.

edit: its actually better to use a 2 or 3 stack Focused Rage MS during deadly calm than an execute, as its more DPE with 3 stacks and mathematically better than Execute with 2 stacks as execute has 15% higher crit through Deathblow, which is useless during Deadly Calm

Here is the priority list:

actions.single+=colossus_smash,if=buff.shattered_defenses.down&buff.precise_strikes.down
actions.single+=/warbreaker,if=buff.shattered_defenses.down
actions.single+=/mortal_strike,if=buff.focused_rage.stack>1
actions.single+=/execute,if=buff.stone_heart.react|buff.battle_cry_deadly_calm.up
actions.single+=/mortal_strike,if=buff.focused_rage.stack>0
actions.single+=/execute,if=debuff.colossus_smash.up|rage.deficit<40
actions.single+=/mortal_strike
actions.single+=/focused_rage,if=((target.health.pct>=20|debuff.colossus_smash.down)&buff.focused_rage.stack<3&((talent.dauntless.enabled&rage>27)|(!talent.dauntless.enabled&rage>34)))|buff.battle_cry_deadly_calm.up
actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<40|buff.battle_cry_deadly_calm.up)&(!talent.focused_rage.enabled|buff.battle_cry_deadly_calm.up)
actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<50)&(!talent.focused_rage.enabled|buff.battle_cry_deadly_calm.up|buff.cleave.up)
actions.single+=/rend,if=remains<=duration*0.3
actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage.deficit<20|buff.focused_rage.stack=3)
actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage.deficit<20|buff.focused_rage.stack=3)
actions.single+=/execute,if=equipped.137060
actions.single+=/slam,if=equipped.137060
actions.single+=/shockwave
actions.single+=/storm_bolt
actions.single+=/bladestorm,if=raid_event.adds.in>90|!raid_event.adds.exists|spell_targets.bladestorm_mh>desired_targets

this priority will change with the legendary gloves equipped though.

mrdmnd commented 8 years ago

again, solid work - keep it coming!

On Tue, Sep 6, 2016, 8:56 AM Dennis-Florian Herr notifications@github.com wrote:

instead of only using execute when colossus smash is up and we have more than 40 rage, it's actually better to use it always when CS is up before MS and additionally use it to prevent from rage caping outside of CS.

Focused Rage provides less damage/execution than Execute/MS (which nearly provide the same dpe with deathblow trait active). But using Focused Rage outside of CS to trigger tactician and then spending the FR inside that CS is more damage than using execute outside of CS to prevent rage caping. To simplify that idea i simply added a "above 20% or cs.debuff.down" condition to the Focused rage trigger, which should be doable by a human player.

Adding these changes provides an additional ~6k dps gain for me.

Here is the priority list:

actions.single+=colossus_smash,if=buff.shattered_defenses.down&buff.precise_strikes.down actions.single+=/warbreaker,if=buff.shattered_defenses.down actions.single+=/execute,if=buff.stone_heart.react|buff.battle_cry_deadly_calm.up actions.single+=/execute,if=debuff.colossus_smash.up|rage.deficit<40 actions.single+=/mortal_strike actions.single+=/focused_rage,if=((target.health.pct>=20|debuff.colossus_smash.down)&buff.focused_rage.stack<3&((talent.dauntless.enabled&rage>27)|(!talent.dauntless.enabled&rage>34)))|buff.battle_cry_deadly_calm.up actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<40|buff.battle_cry_deadly_calm.up)&(!talent.focused_rage.enabled|buff.battle_cry_deadly_calm.up) actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<50)&(!talent.focused_rage.enabled|buff.battle_cry_deadly_calm.up|buff.cleave.up) actions.single+=/rend,if=remains<=duration*0.3 actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage.deficit<20|buff.focused_rage.stack=3) actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage.deficit<20|buff.focused_rage.stack=3) actions.single+=/execute,if=equipped.137060 actions.single+=/slam,if=equipped.137060 actions.single+=/shockwave actions.single+=/storm_bolt actions.single+=/bladestorm,if=raid_event.adds.in>90|!raid_event.adds.exists|spell_targets.bladestorm_mh>desired_targets

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/simulationcraft/simc/issues/2804, or mute the thread https://github.com/notifications/unsubscribe-auth/AAgFypqO-lyXFt_tzDjgb8bKrn9SrmpEks5qnY06gaJpZM4J1_5d .

Collisionc commented 8 years ago

I need to test it against this other profile that someone sent me


actions.precombat=flask,type=countless_armies
actions.precombat+=/food,type=nightborne_delicacy_platter
actions.precombat+=/augmentation,type=defiled
actions.precombat+=/snapshot_stats
actions.precombat+=/potion,name=deadly_grace

actions=charge
actions+=/auto_attack
actions+=/potion,name=deadly_grace,if=buff.berserking.up&target.health.pct>20|target.time_to_die<25
actions+=/battle_cry,sync=colossus_smash
actions+=/battle_cry
actions+=/avatar,sync=colossus_smash
actions+=/avatar
actions+=/blood_fury,if=buff.battle_cry.up
actions+=/berserking,if=buff.battle_cry.up
actions+=/arcane_torrent,if=rage<rage.max-40
actions+=/use_item,slot=trinket1
actions+=/use_item,slot=trinket2
actions+=/heroic_leap,if=debuff.colossus_smash.up
actions+=/rend,if=remains<gcd
actions+=/colossus_smash,if=debuff.colossus_smash.down
actions+=/warbreaker,if=debuff.colossus_smash.down
actions+=/hamstring,if=talent.deadly_calm.enabled&buff.battle_cry.up
actions+=/ravager
actions+=/overpower
actions+=/run_action_list,name=cleave,if=spell_targets.whirlwind>=2&talent.sweeping_strikes.enabled
actions+=/run_action_list,name=aoe,if=spell_targets.whirlwind>=2&!talent.sweeping_strikes.enabled
actions+=/run_action_list,name=single

actions.single=mortal_strike,if=buff.focused_rage.stack=3
actions.single+=/execute,if=buff.stone_heart.react|(buff.battle_cry.up&talent.deadly_calm.enabled)
actions.single+=/colossus_smash,if=buff.shattered_defenses.down&buff.precise_strikes.down
actions.single+=/warbreaker,if=buff.shattered_defenses.down
actions.single+=/execute,if=debuff.colossus_smash.up&rage.deficit<60
actions.single+=/focused_rage,if=buff.focused_rage.stack<3|(talent.deadly_calm.enabled&buff.battle_cry.up)
actions.single+=/mortal_strike,if=buff.focused_rage.stack=0&buff.shattered_defenses.down
actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<40)&(!talent.focused_rage.enabled|talent.deadly_calm.enabled&buff.battle_cry.up)
actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<50)&(!talent.focused_rage.enabled|(talent.deadly_calm.enabled&buff.battle_cry.up)|buff.cleave.up)
actions.single+=/rend,if=remains<=duration*0.3
actions.single+=/heroic_charge
actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage>100|buff.focused_rage.stack=3)
actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage>100|buff.focused_rage.stack=3)
actions.single+=/shockwave
actions.single+=/storm_bolt
actions.single+=/bladestorm,if=(raid_event.adds.in>90|!raid_event.adds.exists|spell_targets.bladestorm_mh>desired_targets)&rage>10

actions.cleave=mortal_strike
actions.cleave+=/execute,if=buff.stone_heart.react
actions.cleave+=/colossus_smash,if=buff.shattered_defenses.down&buff.precise_strikes.down
actions.cleave+=/warbreaker,if=buff.shattered_defenses.down
actions.cleave+=/execute,if=debuff.colossus_smash.up&rage.deficit<60
actions.cleave+=/focused_rage,if=buff.focused_rage.stack<3|(talent.deadly_calm.enabled&buff.battle_cry.up)
actions.cleave+=/whirlwind,if=(debuff.colossus_smash.up|rage.deficit<50)&(talent.deadly_calm.enabled&buff.battle_cry.up)|buff.cleave.up
actions.cleave+=/rend,if=remains<=duration*0.3
actions.cleave+=/heroic_charge
actions.cleave+=/bladestorm
actions.cleave+=/cleave
actions.cleave+=/whirlwind,if=target.health.pct>20&rage>=100|buff.focused_rage.stack=3
actions.cleave+=/shockwave
actions.cleave+=/storm_bolt

actions.aoe=mortal_strike
actions.aoe+=/execute,if=buff.stone_heart.react
actions.aoe+=/colossus_smash,if=buff.shattered_defenses.down&buff.precise_strikes.down
actions.aoe+=/warbreaker,if=buff.shattered_defenses.down
actions.aoe+=/whirlwind,if=talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<50)&(!talent.focused_rage.enabled|(talent.deadly_calm.enabled&buff.battle_cry.up)|buff.cleave.up)
actions.aoe+=/rend,if=remains<=duration*0.3
actions.aoe+=/heroic_charge
actions.aoe+=/bladestorm
actions.aoe+=/cleave
actions.aoe+=/whirlwind,if=rage>=60
actions.aoe+=/shockwave
actions.aoe+=/storm_bolt
dfherr commented 8 years ago

i compared his profile with mine and his idea of priorising FR over MS to hit more SD MS with higher FR stacks is good, limiting MS to be used with 0stacks only is a dps loss for me though. Otherwise my changes sim 8k dps higher than his profile. What adds 20k dps and I have no idea why is "heroic_charge". What is heroic charge? It gets executed 30 times.

Here is the combined single-target profile (i haven't looked at all in aoe so far) yielding ~8k dps more than his profile.


actions.single=colossus_smash,if=buff.shattered_defenses.down&buff.precise_strikes.down
actions.single+=/mortal_strike,if=buff.focused_rage.stack=3
actions.single+=/execute,if=buff.stone_heart.react|buff.battle_cry_deadly_calm.up
actions.single+=/warbreaker,if=buff.shattered_defenses.down
actions.single+=/execute,if=debuff.colossus_smash.up|rage.deficit<40
actions.single+=/focused_rage,if=((target.health.pct>=20|debuff.colossus_smash.down)&buff.focused_rage.stack<3)|buff.battle_cry_deadly_calm.up
actions.single+=/mortal_strike
actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<40|buff.battle_cry_deadly_calm.up)&(!talent.focused_rage.enabled|buff.battle_cry_deadly_calm.up)
actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(debuff.colossus_smash.up|rage.deficit<50)&(!talent.focused_rage.enabled|buff.battle_cry_deadly_calm.up|buff.cleave.up)
actions.single+=/rend,if=remains<=duration*0.3
actions.single+=/heroic_charge
actions.single+=/whirlwind,if=target.health.pct>20&talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage.deficit<20|buff.focused_rage.stack=3)
actions.single+=/slam,if=target.health.pct>20&!talent.fervor_of_battle.enabled&(!talent.focused_rage.enabled|rage.deficit<20|buff.focused_rage.stack=3)
actions.single+=/execute,if=equipped.137060
actions.single+=/slam,if=equipped.137060
actions.single+=/shockwave
actions.single+=/storm_bolt
actions.single+=/bladestorm,if=raid_event.adds.in>90|!raid_event.adds.exists|spell_targets.bladestorm_mh>desired_targets
dfherr commented 8 years ago

Is heroic_charge using heroic leap and then charging the target? Didn't blizzard change charge to not generate rage when used again on the same target for raid bosses? Then this heroic_charge seems bugged and shouldn't be a dps increase.

amulder87 commented 8 years ago

It no longer limits you to 1 charge per target in Legion. You can re-charge the same mob repeatedly for rage again now.

Collisionc commented 8 years ago

Yes, it models the warrior running out of melee range to charge range and charging back in. If heroic leap is available, it leaps 10 yards out and charges back in. There is a section under procs that shows how many times auto attacks were delayed due to this.

On Wed, Sep 7, 2016, 11:25 AM amulder87 notifications@github.com wrote:

It no longer limits you to 1 charge per target in Legion. You can re-charge the same mob repeatedly for rage again now.

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/simulationcraft/simc/issues/2804#issuecomment-245316834, or mute the thread https://github.com/notifications/unsubscribe-auth/AHeWYHQNfwlHJ-ie-ClR4xiE4i2qsr-Zks5qntc-gaJpZM4J1_5d .

amulder87 commented 8 years ago

As long as this discussion is going on now, I figure I'll throw my profile on the pile too. The complete action list I have going at the moment is:

actions=charge
actions+=/auto_attack
actions+=/potion,name=deadly_grace,if=(target.health.pct<20&buff.battle_cry.up)|target.time_to_die<25
actions+=/battle_cry
actions+=/avatar
actions+=/blood_fury,if=buff.battle_cry.up
actions+=/berserking,if=buff.battle_cry.up
actions+=/arcane_torrent,if=buff.battle_cry.down&rage.deficit>40
actions+=/use_item,name=gift_of_radiance
actions+=/hamstring,if=buff.battle_cry_deadly_calm.up
actions+=/focused_rage,if=buff.battle_cry_deadly_calm.up
actions+=/colossus_smash,if=debuff.colossus_smash.down
actions+=/warbreaker,if=debuff.colossus_smash.down
actions+=/run_action_list,name=execute,if=target.health.pct<=20
actions+=/run_action_list,name=single

actions.single+=/mortal_strike,if=buff.battle_cry.up&buff.focused_rage.stack>=1&buff.battle_cry.remains<gcd
actions.single+=/slam,if=buff.battle_cry.up&buff.battle_cry.remains<gcd
actions.single+=/colossus_smash,if=buff.shattered_defenses.down
actions.single+=/warbreaker,if=buff.shattered_defenses.down&cooldown.mortal_strike.remains<gcd
actions.single+=/mortal_strike,if=buff.focused_rage.stack=3
actions.single+=/focused_rage,if=buff.focused_rage.stack<3&(buff.shattered_defenses.up|cooldown.colossus_smash.remains)
actions.single+=/slam,if=buff.battle_cry_deadly_calm.up|buff.focused_rage.stack=3|rage.deficit<=30
actions.single+=/bladestorm,interrupt=1
actions.single+=/heroic_charge,if=rage.deficit>=40

actions.execute+=/focused_rage,if=buff.focused_rage.stack<3&debuff.colossus_smash.down
actions.execute+=/mortal_strike,if=buff.battle_cry.up&(buff.focused_rage.stack=3|buff.focused_rage.stack=2&buff.battle_cry.remains<gcd)
actions.execute+=/execute,if=buff.battle_cry_deadly_calm.up
actions.execute+=/colossus_smash,if=buff.shattered_defenses.down
actions.execute+=/warbreaker,if=buff.shattered_defenses.down&rage<=30
actions.execute+=/execute,if=buff.shattered_defenses.up
actions.execute+=/mortal_strike,if=buff.focused_rage.stack=3
actions.execute+=/execute,if=debuff.colossus_smash.up
actions.execute+=/bladestorm,interrupt=1
actions.execute+=/heroic_charge,if=rage.deficit>=40

I haven't looked at aoe/cleave at all yet, so it has none of that in it(e.g. holding bladestorm in single target if adds are going to spawn later). I have all the weaker talents stripped out to make it easier to work with, so it doesn't work at all with FoB, Trauma, OP, etc. It also doesn't work with any legendaries, since I haven't started looking at fitting any of them in yet. Given all that, it ought to outperform any other profile I've seen by a solid margin in basic single target. Throwing in some placeholder locations for OP/ravager/legendary stuff and adding the aoe conditionals back would make it reasonably complete and significantly more accurate than the current profile.

TODOs are a more complete look at gear selection, especially trinkets, and reworking Battle Cry/Avatar usage to actually attempt to align them and to work BC in more optimally around the GCD and CS. It's just running them on CD at the moment, which should be pretty bad compared to their potential.

dfherr commented 8 years ago

very nice. i also like it that you split the execute phase, which got really ugly in my profile.

though using mortal strike before you start using slam is still a dps gain for me and is even easier to execute as a human player

actions.single+=/mortal_strike,if=buff.battle_cry.up&buff.focused_rage.stack>=1&buff.battle_cry.remains<gcd
actions.single+=/colossus_smash,if=buff.shattered_defenses.down
actions.single+=/warbreaker,if=buff.shattered_defenses.down&cooldown.mortal_strike.remains<gcd
actions.single+=/mortal_strike,if=buff.focused_rage.stack=3
actions.single+=/focused_rage,if=buff.focused_rage.stack<3&(buff.shattered_defenses.up|cooldown.colossus_smash.remains)
actions.single+=/mortal_strike
actions.single+=/slam,if=buff.battle_cry_deadly_calm.up|buff.focused_rage.stack=3|rage.deficit<=30
actions.single+=/bladestorm,interrupt=1
actions.single+=/heroic_charge,if=rage.deficit>=40

I'll look into the execute profile tomorrow.

We should add the other talents and the legendaries though, otherwise we would screw all people running the default profile with a different talent setup (e.g. thorugh the simcraft ingame addon)

I also avoided GCD tuning on purpose as it's really hard for a human to execute and can result in a dps loss compared to a simpler rotation

amulder87 commented 8 years ago

Oh nice, I see an improvement too, which really surprises me. I originally aimed to build it around always going to 3 stacks since initially setting it to only work with 3 stacks was a relatively large dps gain. I'm now wondering what it was about the other changes that made it unnecessary naturally, or if there are just other conditions where you'd want to hold til 3 stacks still vs hitting it on CD that have become unlikely enough that they don't have a large impact. I'm going to dig around more with that and see if I can find any use case where holding MS's CD for more stacks makes sense.

The changes you added make the MS line that hits on focused_rage.stack=3 redundant, so it can be shortened even further to just:

actions.single+=/mortal_strike,if=buff.battle_cry.up&buff.focused_rage.stack>=1&buff.battle_cry.remains<gcd
actions.single+=/colossus_smash,if=buff.shattered_defenses.down
actions.single+=/warbreaker,if=buff.shattered_defenses.down&cooldown.mortal_strike.remains<gcd
actions.single+=/focused_rage,if=buff.focused_rage.stack<3&(buff.shattered_defenses.up|cooldown.colossus_smash.remains)
actions.single+=/mortal_strike
actions.single+=/slam,if=buff.battle_cry_deadly_calm.up|buff.focused_rage.stack=3|rage.deficit<=30
actions.single+=/bladestorm,interrupt=1
actions.single+=/heroic_charge,if=rage.deficit>=40
dfherr commented 8 years ago

I guess it's about MS having higher Damage per Rage naturally than Focused Rage in addition with triggering Tactician more often.

Considering the Legendary Hands this simplified profile seems superior anyway (without having tested it)

amulder87 commented 8 years ago

I dug into it a bit more, and it looks like the crux of hold for 3 stacks vs burn MS with whatever you have just comes down to tactician proc generation. I think when I was originally approaching the question, some of the bugs with tactician proc rates weren't entirely fixed yet and underestimated the chance, and the profile wasn't attempting to charge for rage, which meant less to burn for more tacticians. If I drop exploit weakness from 6 ranks to 3 to compare, holding for 3 stacks edges out using on CD again, but by a trivial amount(like 1.5k). I imagine as gear gets better, and with the legendary like you said, holding for 3 stacks will be left behind permanently, and it's simpler to follow to boot.

Edit: Something that's also bugging me is I can't seem to get any DPS gains out of not hitting FR or slam(when focused_rage.stack=3) at low enough rage that it'd prevent MS from being used when it comes off CD. You would think rage starving yourself with Slam/FR just before MS's CD comes up would be a bad thing, but it apparently isn't. I assume it's because using them even if it delays MS is a last ditch effort to fish out a tactician proc for a CS to buff that MS you just built stacks up for, but it's still kinda surprising.

amulder87 commented 8 years ago

Changing actions+=/focused_rage,if=buff.battle_cry_deadly_calm.up to:

actions+=/focused_rage,if=buff.battle_cry_deadly_calm.up&(buff.focused_rage.stack<3|cooldown.mortal_strike.remains)

is a decent gain. I noticed the sim was often hitting FR during BC at the exact same time as MS, but just before MS instead of just after it. This prevents that behavior so FR stacks aren't wasted pointlessly.

Simcraft apparently uses BL at 1s now instead of 0s, so changing the BC/Avatar lines to:

actions+=/battle_cry,if=buff.bloodlust.up|time>=5
actions+=/avatar,if=buff.bloodlust.up|time>=5

is a simple hack to actually sync the opening CDs with BL. Still need to find a way to get them to only fire along with the GCD though and see when it makes the most sense to hit BC(e.g. maybe only with an available MS CD when CS is already up? not even sure if anything will make a difference here)

Collisionc commented 8 years ago

If you need expressions to make certain things easier, just let me know and I can add them.

amulder87 commented 8 years ago

Cool, thanks! I think if #2796 was resolved, I'd be all good for working with the off GCD CDs. The FR change was just me forgetting FR was on top of the APL and would trigger before MS was used, even at 3 stacks.

Is there any way to control the BL timing? I'd rather just override its timing to execute at precombat/0s rather than hold CDs for 1s and have the opening burst be a little goofy.

dfherr commented 8 years ago

wouldn't it be better to pop cds 1sec into fight anyway?

I wouldn't pop my cds in real combat before i charged and applied the initial colossus smash. I dont think it makes any sense in simcraft either. Also who pops bloodlust prepull? You can precast prepull, so bloodlust has zero advantage.

Haven't simmed yet if it's always better to delay CD activiation until a CS debuff i applied or even align it with 1minute trinkets. But maybe thats overtuning because with Deadly Calm active Tactician will procc really fast

Collisionc commented 8 years ago

Using battle cry on cooldown is definitely a dps increase, as you can generally force a tactician proc with all the rage dumping, and you can always use warbreaker as a backup. The only time it might be worth holding it for a few seconds is with a on-use trinket.

dfherr commented 8 years ago

whops. misclick. sorry

yea delaying the Battle Cry for colossus smash didnt work for my sims.

I'll put together a profile with the other talents included based on @amulder87 profile with the discussed changes, so we can merge it today or sometime tomorrow.

I think it's a big step from the current profile and will also help players looking at the simc action priority list to improve their gameplay.

Collisionc commented 8 years ago

http://downloads.simulationcraft.org/?C=M;O=D

Ok, try your action lists with the top download... off gcd actions are now much more consistent in usage.

Collisionc commented 8 years ago

Uploaded another version that has a functional gcd.remains expression. gcd.remains=0 will say that the gcd is ready to be used.

amulder87 commented 8 years ago

Most recent APL I'm using is now:

actions.precombat=flask,type=countless_armies
actions.precombat+=/food,type=nightborne_delicacy_platter
actions.precombat+=/augmentation,type=defiled
actions.precombat+=/snapshot_stats
actions.precombat+=/potion,name=deadly_grace

actions=charge
actions+=/auto_attack
actions+=/potion,name=deadly_grace,if=target.health.pct<20&buff.battle_cry.up|target.time_to_die<=26
actions+=/battle_cry,if=(buff.bloodlust.up|time>=1)&!gcd.remains
actions+=/avatar,if=(buff.bloodlust.up|time>=1)&!gcd.remains
actions+=/blood_fury,if=buff.battle_cry.up|target.time_to_die<=16
actions+=/berserking,if=buff.battle_cry.up|target.time_to_die<=11
actions+=/arcane_torrent,if=buff.battle_cry_deadly_calm.down&rage.deficit>40
actions+=/use_item,name=gift_of_radiance
actions+=/hamstring,if=buff.battle_cry_deadly_calm.remains>cooldown.hamstring.remains
actions+=/focused_rage,if=buff.battle_cry_deadly_calm.remains>cooldown.focused_rage.remains&(buff.focused_rage.stack<3|cooldown.mortal_strike.remains)
actions+=/colossus_smash,if=debuff.colossus_smash.down
actions+=/warbreaker,if=debuff.colossus_smash.down
actions+=/run_action_list,name=execute,if=target.health.pct<=20
actions+=/run_action_list,name=single

actions.single+=/mortal_strike,if=buff.battle_cry.up&buff.focused_rage.stack>=1&buff.battle_cry.remains<gcd
actions.single+=/colossus_smash,if=buff.shattered_defenses.down
actions.single+=/warbreaker,if=buff.shattered_defenses.down&cooldown.mortal_strike.remains<gcd
actions.single+=/focused_rage,if=buff.focused_rage.stack<3&(buff.shattered_defenses.up|cooldown.colossus_smash.remains)
actions.single+=/mortal_strike
actions.single+=/slam,if=buff.battle_cry_deadly_calm.up|buff.focused_rage.stack=3|rage.deficit<=30
actions.single+=/bladestorm,interrupt=1
actions.single+=/heroic_charge,if=rage.deficit>=40&(!cooldown.heroic_leap.remains|swing.mh.remains>1.2)

actions.execute+=/focused_rage,if=buff.focused_rage.stack<3&debuff.colossus_smash.down
actions.execute+=/mortal_strike,if=buff.battle_cry.up&(buff.focused_rage.stack=3|buff.focused_rage.stack=2&buff.battle_cry.remains<gcd)
actions.execute+=/execute,if=buff.battle_cry_deadly_calm.up
actions.execute+=/colossus_smash,if=buff.shattered_defenses.down
actions.execute+=/warbreaker,if=buff.shattered_defenses.down&rage<=30
actions.execute+=/execute,if=buff.shattered_defenses.up
actions.execute+=/mortal_strike,if=buff.focused_rage.stack=3
actions.execute+=/execute,if=debuff.colossus_smash.up
actions.execute+=/bladestorm,interrupt=1
actions.execute+=/heroic_charge,if=rage.deficit>=40&(!cooldown.heroic_leap.remains|swing.mh.remains>1.2)

head=vision_of_the_spider_queen,id=137451,bonus_id=1727
neck=brysngamen_torc_of_helheim,id=133636,bonus_id=1727,enchant=mark_of_the_distant_army
shoulders=mortar_guard_shoulderplates,id=134518,bonus_id=1727
back=stole_of_malefic_repose,id=134404,bonus_id=1727,enchant=binding_of_strength
chest=etheldrins_breastplate,id=134503,bonus_id=1727
wrists=exomesh_carpalform_armplates_mk._vii,id=134502,bonus_id=1727
hands=reinforced_mook_handguards,id=140596,bonus_id=1727
waist=roaring_breeze_waistguard,id=137499,bonus_id=1727
legs=legplates_of_the_swarm,id=134506,bonus_id=1727
feet=leadfoot_earthshakers,id=134507,bonus_id=1727
finger1=loop_of_eightfold_eyes,id=134527,bonus_id=1727,enchant=binding_of_mastery
finger2=archdruids_tainted_seal,id=134487,bonus_id=1727,enchant=binding_of_mastery
trinket1=gift_of_radiance,id=133647,bonus_id=1727
trinket2=terrorbound_nexus,id=137406,bonus_id=1727
main_hand=stromkar_the_warbreaker,id=128910,bonus_id=750,gem_id=137469/137363/137377,relic_id=3412/3412/3412

I added the things mentioned above as well as a few others:

Gear change swapped in the inferno breasplate/frozen shoulders set for the Vers proc, showed as a DPS gain. I added some time_to_die conditions to racials to force them to be used before end of fight. Avatar and BC are pinned to the GCD so they don't waste any uptime, which is a pretty large boost and makes the 20% haste breakpoint a massive gain to hit(it's better to shoot for that over stacking mastery even). Hamstring/FR conditions modified after the off-gcd changes to ensure they only get queued if their usage will fit inside the BC/DC window.

I'm starting to think this profile may be impossible for a player to actually play though. Looking through the sample APL, I see some pretty crazy behavior that may not be realistic. There aren't any reaction time checks added to the MS/CS CD resets right now, and reacting to them is pretty critical to this playstyle. The profile is also capable of some insanely well timed FR usage. It'll hit it simultaneously with MS just before MS is hit(if less than 3 stacks), simultaneously with MS after MS is hit(if at 3 stacks), or simultaneously with CS just after CS is hit(to avoid wasting a reset until you've put CS on CD).

Some of that could be handled with a clever set of macros though. You'd need FR->MS, FR->CS, CS->FR, and MS->FR macros to cover the various conditions you run into. I'm not sure if something like FR->MS even works though inside a macro if FR resets MS's CD suddenly. Would the server not react to the MS reset for a brief moment, or could it insta-cast it if the FR reset MS?

Bladestorm usage is optimized to hit it and break it after 3 ticks(most of the time), which is the only way it makes sense to try to weave it in at all. Using it it's full duration is a wash vs not using it entirely, but it's probably pretty tough for a player to do the mini-bladestorm behavior for a 1% dps gain.

Heroic Charging may also be overly optimistic. I think it's fairly reasonable when HL is up, but I don't know if I believe a player can reasonably run out of melee range and charge back in while only losing 1.2s of combat time. I don't know what I'd even consider to be reasonable on that front though.

All of that combined leads to a pretty ridiculous skillcap, which I don't think any player can achieve. Any thoughts on what changes make the most sense for the sake of realism?

Collisionc commented 8 years ago

I'll add heroic charging to the action list, but have it commented out so people can add it if they want. I don't think it realistic to run out and charge in on a lot of raid bosses.

It's not obvious on your side, but there is a built in reaction delay to tactician procs. The sim doesn't tell the player that mortal strike/colossus smash have been reset for 0.15-0.35 seconds, so if a GCD comes up in that time frame it won't use them.

Collisionc commented 8 years ago

Also, if anyone has time, can you test something for me in game? I've noticed that there is a little bit of leeway with mortal strike resets in game.

Ex: Mortal strike is ready to use. Focused rage procs tactician Use mortal strike Mortal Strike's CD resets even though tactician happened earlier.

It seems that internally, this procs: http://www.wowhead.com/spell=199854/tactician That lasts 3 seconds, so I'm wondering if there is 3 seconds of leeway to reset mortal strike if it was already ready to use.

dfherr commented 8 years ago

I would like a heroic charge function that is only executed when heroic leap is ready, but not walks out of meele range. would heroic_charge,if=cooldown.heroic_leap.up (or whatever the correct way is to check something is not on cd :smile: ) work? Thats way more realistic than perfectly walking out of range.

@Collisionc yes, i tested it ingame right now. There is a timewindow. It's definetly less than a GCD. I have a WA showing me tactician proccs. If i use FR and then instantly press MS when i see the tactician proccs, i usually only get the GCD but not real cooldown on my MS, but i have to be really fast. I would say it's around 1/4 GCD. Could be the same time window used for spell queuing. (I really like that it is like that. Makes arms less ridiculous to play at top level)

This makes some of the optimization of @amulder87 unnecessary. It will not waste a tactician procc if MS is used right after FR. It would only waste the FR stack.

dfherr commented 8 years ago

I don't know if blizzard cares for simc, but a lot of people whining about balance on official forums or ingame do (afaik). So I don't think creating the public simc rankings based on unplayable profiles really helps anyone. Was were a policy about that in the past?

Collisionc commented 8 years ago

Personally, I try to keep default action lists simple if possible. Expressions that are a mile long shouldn't be in them, and things like heroic charge shouldn't be part of them either.

In the past I have added noise to abilities when it's just not possible for someone to execute them with the precision that simc does, no matter how good they are. Example being wild strike when it had a 0.5-0.75 gcd, which required a player to either set the lag tolerance extremely high and risk queueing spells that they don't want to, or deal with lost gcd time when using wild strike. I went through logs to see what the average high end raider was doing and with that data set the gcd of wild strike so that it would have a gaussian distribution from 0.75-0.85 seconds, as most people tended to use wild strike every 0.8 seconds.

amulder87 commented 8 years ago

I think they only added the Tactician buff to make the procs trackable in combat log analysis. I've seen that delayed proc behavior from tons of other procs in game in the past, typically when they're a random chance vs being a guaranteed side effect of an ability. When I was playing a warlock recently before they removed the chance for the direct damage portion of immolate to proc a soul shard, I could cast immolate at max soul shards and queue a shadowburn to hit at the end of the cast. The shadowburn would end up eating a soul shard and bringing me below the shard cap before immolate's soul shard proc happened, so the shard proc wasn't wasted even though the immolate hit that procced a shard actually landed before SB did.

I think there's just latency between the triggering event and the actual application on lots of effects that trigger randomly. Sometimes that's useful behavior, e.g. that means you could cast FR and CS at roughly the same time without worrying if you were doing it slightly before or slightly after CS, because you won't waste the CS reset either way. But, it can also work against you, in that a /cast FR; /cast MS(or CS) macro when you're fishing for tactician procs wouldn't work to instantly cast CS/MS on a reset, since you'd have to wait out the tactician reset delay before MS/CS were actually available as well as a latency to the server delay since you couldn't take advantage of queuing when the server thinks you're not close to coming off CD. I spammed against a macro like that against a dummy for a little bit and I saw an average delay between an FR triggering tactician and being able to actually cast CS of about .25s. My latency to the server is only 20ms, so the majority of that delay is the lag on the reset.

Collisionc commented 8 years ago

After hitting a target dummy for a while, it looks like the grace period for tactician is around 0.5 seconds. I'll add it in before we officially release 703-02.

amulder87 commented 8 years ago

I don't think it's a grace period so much as the reset doesn't even happen until some time after it's triggered. So you both can't even use CS/MS when a reset is triggered until X time after the proc, as well as have that same X time to use the abilities if they were already on CD before the reset happens. I'm using a KB that can do fixed delays between keypresses, and at 500ms between FR and MS, the reset is almost always occurring before the MS cast. I think a better test for the delay is to just spam a /cast FR; /cast CS macro while CS is on CD and see how much delay you end up with between the triggering FR cast and the CS cast. I was seeing more like 250ms average when I was doing that.

Edit: Scratch that, there's definitely some kind of grace period. In logs where I'm trying to spam CS as soon as possible after tactician procs, I could do so from as short as 120ms after tactician procced up to about 270ms. Testing for a grace period, I was seeing MS resetting after use even was I was setting up to about a 350ms delay between FR and MS on my KB, which would be impossible if the reset was a hard event in the 120-270ms range...

Collisionc commented 8 years ago

Could it be based on lag tolerance? I always set mine to max ever since wild strike went away.

amulder87 commented 8 years ago

I didn't think there was lag tolerance any more that you could actually modify. Is there a console command to fiddle with it?

Collisionc commented 8 years ago

reducedLagTolerance 1 MaxSpellStartRecoveryOffset 400

amulder87 commented 8 years ago

That may have actually have some impact.. I'm setting a delay of 500ms now between FR/MS, and MS is staying available after use when tactician procs about 50% of the time(just guessing at it, haven't been tallying).

My best guess now is that there's some variable time between tactician proccing and the abilities actually resetting(the duration where you can't even use it yet) of about 150-250ms, and then there's a deliberately built-in grace period like you said that's another 300ms or so on top of that. E.g. if it actually resets at 150ms, you can use MS in the 150-450ms range and the reset still works. If it's randomly slow to take effect and doesn't reset til 250ms, you can use it in the 250-550ms range. Something along those lines could explain both behaviors.

Edit: Wait I'm really, really dumb. I haven't been considering that MS could be the thing proccing tactician and resetting MS... I was just hitting the kb macro and seeing if MS stayed usable after a tactician reset. I went back to setting the delay to 300ms, and I'm not seeing any kind of grace period mechanic anymore. When FR procs tactician and MS doesn't, the CD is staying burned every time if I use MS that late , which makes me think again that all we're seeing is the latency on the reset, which is random and generally in the 150-250ms range. This brief log just shows the delays I'm seeing between FR resetting CS and CS being usable: link

Collisionc commented 8 years ago

Ah. Yeah, you're right. I was doing the same thing.

Collisionc commented 8 years ago

Closing as fixed, just open up another issue if you find a better rotation again. ;)