diff --git a/engine/class_modules/apl/apl_rogue.cpp b/engine/class_modules/apl/apl_rogue.cpp index 11a0ae0fffa..3c3cb7f1d80 100644 --- a/engine/class_modules/apl/apl_rogue.cpp +++ b/engine/class_modules/apl/apl_rogue.cpp @@ -208,27 +208,28 @@ void subtlety( player_t* p ) precombat->add_action( "apply_poison" ); precombat->add_action( "snapshot_stats" ); precombat->add_action( "variable,name=priority_rotation,value=priority_rotation" ); - precombat->add_action( "variable,name=trinket_sync_slot,value=1,if=trinket.1.has_use_buff&(!trinket.2.has_use_buff|trinket.1.cooldown.duration>=trinket.2.cooldown.duration)" ); + precombat->add_action( "variable,name=trinket_sync_slot,value=1,if=trinket.1.has_use_buff&(!trinket.2.has_use_buff|trinket.1.cooldown.duration>=trinket.2.cooldown.duration)", "Check for on-use stat trinkets and which slot has the most powerful effect (ie longest cooldown)." ); precombat->add_action( "variable,name=trinket_sync_slot,value=2,if=trinket.2.has_use_buff&(!trinket.1.has_use_buff|trinket.2.cooldown.duration>trinket.1.cooldown.duration)" ); precombat->add_action( "stealth" ); default_->add_action( "variable,name=stealth,value=buff.shadow_dance.up|buff.stealth.up|buff.vanish.up" ); - default_->add_action( "variable,name=haste_trinket_snapshot,value=(trinket.1.proc.haste.remains<=1&trinket.1.proc.haste.up)|(trinket.2.proc.haste.remains<=1&trinket.2.proc.haste.up)" ); default_->add_action( "variable,name=targets,value=spell_targets.shuriken_storm" ); default_->add_action( "variable,name=racial_sync,value=(buff.shadow_blades.up&buff.shadow_dance.up)|fight_remains<20" ); - default_->add_action( "variable,name=shd_cp,value=combo_points<=2&talent.deathstalkers_mark|combo_points>=6&talent.unseen_blade|variable.targets>=5" ); + default_->add_action( "variable,name=shd_cp,value=buff.slice_and_dice.up&combo_points<=2&talent.deathstalkers_mark|combo_points>=6&talent.unseen_blade|variable.targets>=5" ); + default_->add_action( "stealth" ); default_->add_action( "call_action_list,name=race" ); default_->add_action( "call_action_list,name=item" ); default_->add_action( "call_action_list,name=cds" ); - default_->add_action( "shadowstrike,if=(buff.darkest_night.up&variable.targets<=4|(talent.unseen_blade&buff.supercharge_1.up))&buff.shadow_techniques.stack>=5&!buff.ancient_arts.up&!cooldown.secret_technique.ready" ); + default_->add_action( "shadowstrike,if=talent.ancient_arts_3&variable.targets<=2&(buff.darkest_night.up|(talent.unseen_blade&buff.supercharge_1.up))&buff.shadow_techniques.stack>=5&!buff.ancient_arts.up&!cooldown.secret_technique.ready" ); + default_->add_action( "shuriken_storm,if=talent.ancient_arts_3&variable.targets>=3&(buff.supercharge_1.up)&buff.shadow_techniques.stack>=5&!buff.ancient_arts.up&!cooldown.secret_technique.ready" ); default_->add_action( "call_action_list,name=finish,if=combo_points>=cp_max_spend-!buff.darkest_night.up" ); default_->add_action( "call_action_list,name=build,if=variable.stealth|energy>60" ); default_->add_action( "call_action_list,name=fill,if=!variable.stealth" ); - cds->add_action( "potion,if=buff.shadow_blades.up|fight_remains<30", "Cooldowns" ); - cds->add_action( "shadow_blades,if=variable.shd_cp&cooldown.shadow_dance.ready&cooldown.secret_technique.ready|fight_remains<=10" ); - cds->add_action( "shadow_dance,if=!variable.stealth&variable.shd_cp&energy>=30&((cooldown.secret_technique.ready|buff.darkest_night.up)&(cooldown.shadow_blades.remains>=9)|(buff.shadow_blades.up&cooldown.secret_technique.duration>=18))|fight_remains<=10" ); - cds->add_action( "shadow_dance,if=buff.shadow_blades.up&talent.unseen_blade&variable.haste_trinket_snapshot&cooldown.secret_technique.remains<=4" ); + cds->add_action( "shadow_blades,if=variable.shd_cp&cooldown.shadow_dance.charges_fractional>=1+0.8*talent.deathstalkers_mark&cooldown.secret_technique.ready&(fight_remains>90|!equipped.algethar_puzzle_box|trinket.1.proc.mastery.up)|(fight_remains<=20|target.time_to_die.remains<=20)", "Cooldowns Delay the last Shadow Blades to line up with puzzle box if its equipped." ); + cds->add_action( "shadow_dance,if=!variable.stealth&variable.shd_cp&energy>=30&((cooldown.secret_technique.ready|buff.darkest_night.up)&(cooldown.shadow_blades.remains>=30-cooldown.secret_technique.duration)|(buff.shadow_blades.up&cooldown.secret_technique.duration>=18))|(fight_remains<=10|target.time_to_die-remains<=9)" ); + cds->add_action( "shadow_dance,if=buff.shadow_blades.up&talent.unseen_blade&buff.shadow_blades.remains<=buff.shadow_dance.duration", "Have the second Shadow Dance in Shadow Blades line up with the end of Shadow Blades instead of back-to-back for trickster." ); + cds->add_action( "shadow_dance,if=equipped.algethar_puzzle_box&talent.unseen_blade&!variable.stealth&variable.shd_cp&energy>=30&((cooldown.secret_technique.ready|buff.darkest_night.up)&(trinket.algethar_puzzle_box.cooldown.remains>=39-30*cooldown.shadow_blades.up))", "Used for when Shadow Blades is ready but holding for Algethar Puzzlebox trinket at the end of pull" ); cds->add_action( "vanish,if=!variable.stealth&energy>=50&!buff.subterfuge.up&combo_points<=1" ); cds->add_action( "shadowmeld,if=energy>=50&!variable.stealth&combo_points.deficit>=2" ); @@ -238,12 +239,12 @@ void subtlety( player_t* p ) race->add_action( "ancestral_call,if=variable.racial_sync" ); race->add_action( "invoke_external_buff,name=power_infusion,if=variable.racial_sync" ); - item->add_action( "use_item,name=light_company_guidon,use_off_gcd=1,if=buff.shadow_blades.up", "Trinket and Items" ); - item->add_action( "use_item,name=algethar_puzzle_box,if=cooldown.shadow_blades.ready&cooldown.secret_technique.remains<=2" ); + item->add_action( "potion,if=buff.shadow_blades.up|fight_remains<30", "Trinket and Items" ); + item->add_action( "use_item,name=algethar_puzzle_box,if=cooldown.shadow_blades.ready&cooldown.secret_technique.remains<=2&combo_points>=6", "actions.item+=/use_item,name=light_company_guidon,use_off_gcd=1,if=buff.shadow_blades.up" ); item->add_action( "use_items,slots=trinket1,if=(variable.trinket_sync_slot=1&(buff.shadow_blades.up|fight_remains<=20)|(variable.trinket_sync_slot=2&(!trinket.2.cooldown.ready&cooldown.shadow_blades.remains>20))|!variable.trinket_sync_slot)" ); item->add_action( "use_items,slots=trinket2,if=(variable.trinket_sync_slot=2&(buff.shadow_blades.up|fight_remains<=20)|(variable.trinket_sync_slot=1&(!trinket.1.cooldown.ready&cooldown.shadow_blades.remains>20))|!variable.trinket_sync_slot)" ); - finish->add_action( "secret_technique,if=buff.shadow_dance.up|cooldown.secret_technique.duration<18&!cooldown.shadow_dance.ready" ); + finish->add_action( "secret_technique,if=buff.shadow_dance.up|(cooldown.secret_technique.duration<18|cooldown.shadow_dance.remains>=10)&!cooldown.shadow_dance.ready" ); finish->add_action( "eviscerate,if=buff.darkest_night.up" ); finish->add_action( "coup_de_grace,if=cooldown.secret_technique.remains>=3|buff.shadow_dance.up" ); finish->add_action( "black_powder,if=variable.targets>=3-talent.potent_powder" ); diff --git a/engine/class_modules/apl/rogue/subtlety.simc b/engine/class_modules/apl/rogue/subtlety.simc index 9dc5d74d516..c215d82bce6 100644 --- a/engine/class_modules/apl/rogue/subtlety.simc +++ b/engine/class_modules/apl/rogue/subtlety.simc @@ -1,28 +1,34 @@ + actions.precombat=apply_poison actions.precombat+=/snapshot_stats actions.precombat+=/variable,name=priority_rotation,value=priority_rotation +# Check for on-use stat trinkets and which slot has the most powerful effect (ie longest cooldown). actions.precombat+=/variable,name=trinket_sync_slot,value=1,if=trinket.1.has_use_buff&(!trinket.2.has_use_buff|trinket.1.cooldown.duration>=trinket.2.cooldown.duration) actions.precombat+=/variable,name=trinket_sync_slot,value=2,if=trinket.2.has_use_buff&(!trinket.1.has_use_buff|trinket.2.cooldown.duration>trinket.1.cooldown.duration) actions.precombat+=/stealth actions=variable,name=stealth,value=buff.shadow_dance.up|buff.stealth.up|buff.vanish.up -actions+=/variable,name=haste_trinket_snapshot,value=(trinket.1.proc.haste.remains<=1&trinket.1.proc.haste.up)|(trinket.2.proc.haste.remains<=1&trinket.2.proc.haste.up) actions+=/variable,name=targets,value=spell_targets.shuriken_storm actions+=/variable,name=racial_sync,value=(buff.shadow_blades.up&buff.shadow_dance.up)|fight_remains<20 -actions+=/variable,name=shd_cp,value=combo_points<=2&talent.deathstalkers_mark|combo_points>=6&talent.unseen_blade|variable.targets>=5 +actions+=/variable,name=shd_cp,value=buff.slice_and_dice.up&combo_points<=2&talent.deathstalkers_mark|combo_points>=6&talent.unseen_blade|variable.targets>=5 +actions+=/stealth actions+=/call_action_list,name=race actions+=/call_action_list,name=item actions+=/call_action_list,name=cds -actions+=/shadowstrike,if=(buff.darkest_night.up&variable.targets<=4|(talent.unseen_blade&buff.supercharge_1.up))&buff.shadow_techniques.stack>=5&!buff.ancient_arts.up&!cooldown.secret_technique.ready +actions+=/shadowstrike,if=talent.ancient_arts_3&variable.targets<=2&(buff.darkest_night.up|(talent.unseen_blade&buff.supercharge_1.up))&buff.shadow_techniques.stack>=5&!buff.ancient_arts.up&!cooldown.secret_technique.ready +actions+=/shuriken_storm,if=talent.ancient_arts_3&variable.targets>=3&(buff.supercharge_1.up)&buff.shadow_techniques.stack>=5&!buff.ancient_arts.up&!cooldown.secret_technique.ready actions+=/call_action_list,name=finish,if=combo_points>=cp_max_spend-!buff.darkest_night.up actions+=/call_action_list,name=build,if=variable.stealth|energy>60 actions+=/call_action_list,name=fill,if=!variable.stealth # Cooldowns -actions.cds=potion,if=buff.shadow_blades.up|fight_remains<30 -actions.cds+=/shadow_blades,if=variable.shd_cp&cooldown.shadow_dance.ready&cooldown.secret_technique.ready|fight_remains<=10 -actions.cds+=/shadow_dance,if=!variable.stealth&variable.shd_cp&energy>=30&((cooldown.secret_technique.ready|buff.darkest_night.up)&(cooldown.shadow_blades.remains>=9)|(buff.shadow_blades.up&cooldown.secret_technique.duration>=18))|fight_remains<=10 -actions.cds+=/shadow_dance,if=buff.shadow_blades.up&talent.unseen_blade&variable.haste_trinket_snapshot&cooldown.secret_technique.remains<=4 +# Delay the last Shadow Blades to line up with puzzle box if its equipped. +actions.cds=/shadow_blades,if=variable.shd_cp&cooldown.shadow_dance.charges_fractional>=1+0.8*talent.deathstalkers_mark&cooldown.secret_technique.ready&(fight_remains>90|!equipped.algethar_puzzle_box|trinket.1.proc.mastery.up)|(fight_remains<=20|target.time_to_die.remains<=20) +actions.cds+=/shadow_dance,if=!variable.stealth&variable.shd_cp&energy>=30&((cooldown.secret_technique.ready|buff.darkest_night.up)&(cooldown.shadow_blades.remains>=30-cooldown.secret_technique.duration)|(buff.shadow_blades.up&cooldown.secret_technique.duration>=18))|(fight_remains<=10|target.time_to_die-remains<=9) +# Have the second Shadow Dance in Shadow Blades line up with the end of Shadow Blades instead of back-to-back for trickster. +actions.cds+=/shadow_dance,if=buff.shadow_blades.up&talent.unseen_blade&buff.shadow_blades.remains<=buff.shadow_dance.duration +# Used for when Shadow Blades is ready but holding for Algethar Puzzlebox trinket at the end of pull +actions.cds+=/shadow_dance,if=equipped.algethar_puzzle_box&talent.unseen_blade&!variable.stealth&variable.shd_cp&energy>=30&((cooldown.secret_technique.ready|buff.darkest_night.up)&(trinket.algethar_puzzle_box.cooldown.remains>=39-30*cooldown.shadow_blades.up)) actions.cds+=/vanish,if=!variable.stealth&energy>=50&!buff.subterfuge.up&combo_points<=1 actions.cds+=/shadowmeld,if=energy>=50&!variable.stealth&combo_points.deficit>=2 @@ -34,12 +40,13 @@ actions.race+=/ancestral_call,if=variable.racial_sync actions.race+=/invoke_external_buff,name=power_infusion,if=variable.racial_sync # Trinket and Items -actions.item=/use_item,name=light_company_guidon,use_off_gcd=1,if=buff.shadow_blades.up -actions.item+=/use_item,name=algethar_puzzle_box,if=cooldown.shadow_blades.ready&cooldown.secret_technique.remains<=2 +actions.item=potion,if=buff.shadow_blades.up|fight_remains<30 +#actions.item+=/use_item,name=light_company_guidon,use_off_gcd=1,if=buff.shadow_blades.up +actions.item+=/use_item,name=algethar_puzzle_box,if=cooldown.shadow_blades.ready&cooldown.secret_technique.remains<=2&combo_points>=6 actions.item+=/use_items,slots=trinket1,if=(variable.trinket_sync_slot=1&(buff.shadow_blades.up|fight_remains<=20)|(variable.trinket_sync_slot=2&(!trinket.2.cooldown.ready&cooldown.shadow_blades.remains>20))|!variable.trinket_sync_slot) actions.item+=/use_items,slots=trinket2,if=(variable.trinket_sync_slot=2&(buff.shadow_blades.up|fight_remains<=20)|(variable.trinket_sync_slot=1&(!trinket.1.cooldown.ready&cooldown.shadow_blades.remains>20))|!variable.trinket_sync_slot) -actions.finish=secret_technique,if=buff.shadow_dance.up|cooldown.secret_technique.duration<18&!cooldown.shadow_dance.ready +actions.finish=secret_technique,if=buff.shadow_dance.up|(cooldown.secret_technique.duration<18|cooldown.shadow_dance.remains>=10)&!cooldown.shadow_dance.ready actions.finish+=/eviscerate,if=buff.darkest_night.up actions.finish+=/coup_de_grace,if=cooldown.secret_technique.remains>=3|buff.shadow_dance.up actions.finish+=/black_powder,if=variable.targets>=3-talent.potent_powder