Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 12 additions & 11 deletions engine/class_modules/apl/apl_rogue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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" );

Expand All @@ -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" );
Expand Down
27 changes: 17 additions & 10 deletions engine/class_modules/apl/rogue/subtlety.simc
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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
Expand Down
Loading