# Executed before combat begins. Accepts non-harmful actions only. actions.precombat=apply_poison # Check which trinket slots have Stat Values actions.precombat+=/variable,name=trinket_sync_slot,value=1,if=trinket.1.has_stat.any_dps&(!trinket.2.has_stat.any_dps|trinket.1.cooldown.duration>=trinket.2.cooldown.duration) actions.precombat+=/variable,name=trinket_sync_slot,value=2,if=trinket.2.has_stat.any_dps&(!trinket.1.has_stat.any_dps|trinket.2.cooldown.duration>trinket.1.cooldown.duration) actions.precombat+=/stealth # Pre-cast Slice and Dice if possible actions.precombat+=/slice_and_dice,precombat_seconds=1,if=refreshable # Restealth if possible (no vulnerable enemies in combat) actions=stealth # Interrupt on cooldown to allow simming interactions with that actions+=/kick,if=!stealthed.all # Conditional to check if there is only one enemy actions+=/variable,name=single_target,value=spell_targets.fan_of_knives<2 # Combined Energy Regen needed to saturate actions+=/variable,name=regen_saturated,value=energy.regen_combined>35 # Check if we should be using our energy actions+=/variable,name=not_pooling,value=(dot.deathmark.ticking|dot.kingsbane.ticking|buff.shadow_dance.up|debuff.shiv.up|cooldown.thistle_tea.full_recharge_time<20)|(buff.envenom.up&buff.envenom.remains<=2)|energy.pct>=80|fight_remains<=90 # Next Sepsis cooldown time based on Deathmark syncing logic and remaining fight duration actions+=/variable,name=sepsis_sync_remains,op=setif,condition=cooldown.deathmark.remains>cooldown.sepsis.remains&cooldown.deathmark.remains=2|!talent.cut_to_the_chase&refreshable&combo_points>=4 actions+=/envenom,if=talent.cut_to_the_chase&buff.slice_and_dice.up&buff.slice_and_dice.remains<5&combo_points>=4 actions+=/call_action_list,name=dot actions+=/call_action_list,name=direct actions+=/arcane_torrent,if=energy.deficit>=15+energy.regen_combined actions+=/arcane_pulse actions+=/lights_judgment actions+=/bag_of_tricks ## Cooldowns # Wait on Deathmark for Garrote with MA and check for Kingsbane actions.cds+=/variable,name=deathmark_ma_condition,value=!talent.master_assassin.enabled|dot.garrote.ticking actions.cds+=/variable,name=deathmark_kingsbane_condition,value=!talent.kingsbane|(cooldown.kingsbane.remains<=2&buff.envenom.up) # Deathmark to be used if not stealthed, Rupture is up, and all other talent conditions are satisfied actions.cds+=/variable,name=deathmark_condition,value=!stealthed.rogue&dot.rupture.ticking&buff.envenom.up&!debuff.deathmark.up&variable.deathmark_ma_condition&variable.deathmark_kingsbane_condition actions.cds+=/sepsis,if=dot.rupture.ticking&dot.rupture.remains>20&(!talent.improved_garrote&dot.garrote.ticking|talent.improved_garrote&cooldown.garrote.up&dot.garrote.pmultiplier<=1)&(target.time_to_die>10|boss&fight_remains<10) # Usages for various special-case Trinkets actions.cds+=/use_item,name=ashes_of_the_embersoul,use_off_gcd=1,if=(dot.kingsbane.ticking&dot.kingsbane.remains<=11)|boss&fight_remains<=22 actions.cds+=/use_item,name=witherbarks_branch,use_off_gcd=1,if=(dot.deathmark.ticking)|boss&fight_remains<=22 actions.cds+=/use_item,name=algethar_puzzle_box,use_off_gcd=1,if=dot.rupture.ticking&cooldown.deathmark.remains<2|boss&fight_remains<=22 # Sync the priority stat buff trinket with Deathmark, otherwise use on cooldown actions.cds+=/use_items,slots=trinket1,if=(variable.trinket_sync_slot=1&(debuff.deathmark.up|boss&fight_remains<=20)|(variable.trinket_sync_slot=2&(!trinket.2.cooldown.ready|!debuff.deathmark.up&cooldown.deathmark.remains>20))|!variable.trinket_sync_slot) actions.cds+=/use_items,slots=trinket2,if=(variable.trinket_sync_slot=2&(debuff.deathmark.up|boss&fight_remains<=20)|(variable.trinket_sync_slot=1&(!trinket.1.cooldown.ready|!debuff.deathmark.up&cooldown.deathmark.remains>20))|!variable.trinket_sync_slot) ### Invoke Externals to Deathmark ## actions.cds+=/invoke_external_buff,name=power_infusion,if=dot.deathmark.ticking actions.cds+=/deathmark,if=variable.deathmark_condition|boss&fight_remains<=20 # Shiv if talented into Kingsbane; Always sync, or prioritize the last 8 seconds actions.cds+=/shiv,if=talent.kingsbane&buff.envenom.up&!debuff.shiv.up&((dot.kingsbane.ticking&dot.kingsbane.remains<8)|cooldown.kingsbane.up|dot.kingsbane.ticking|dot.deathmark.ticking)&dot.garrote.ticking&dot.rupture.ticking&(!talent.crimson_tempest.enabled|variable.single_target|dot.crimson_tempest.ticking)|boss&fight_remains<=charges*8 # Shiv if talented into Arterial Precision during Deathmark actions.cds+=/shiv,if=talent.arterial_precision&!debuff.shiv.up&dot.garrote.ticking&dot.rupture.ticking&debuff.deathmark.up|boss&fight_remains<=charges*8 # Shiv with Sepsis if we have no other priority talents to sync with actions.cds+=/shiv,if=talent.sepsis&!talent.kingsbane&!talent.arterial_precision&!debuff.shiv.up&dot.garrote.ticking&dot.rupture.ticking&((cooldown.shiv.charges_fractional>0.9+talent.lightweight_shiv.enabled&variable.sepsis_sync_remains>5)|dot.sepsis.ticking|dot.deathmark.ticking|boss&fight_remains<=charges*8) # Shiv fallback condition if no special cases apply actions.cds+=/shiv,if=!talent.kingsbane&!talent.arterial_precision&!talent.sepsis&!debuff.shiv.up&dot.garrote.ticking&dot.rupture.ticking&(!talent.crimson_tempest.enabled|variable.single_target|dot.crimson_tempest.ticking)|boss&fight_remains<=charges*8 # Special Handling to Sync Shadow Dance to Kingsbane actions.cds+=/shadow_dance,if=talent.kingsbane&cooldown.kingsbane.remains<=2&buff.envenom.up actions.cds+=/kingsbane,if=(debuff.shiv.up|cooldown.shiv.remains<6)&buff.envenom.up&(cooldown.deathmark.remains>=50|dot.deathmark.ticking)|boss&fight_remains<=15 # Avoid overcapped energy, use on final 6 seconds of kingsbane, or use a charge during cooldowns when capped on charges actions.cds+=/thistle_tea,if=!buff.thistle_tea.up&(energy.deficit>=100+energy.regen_combined&(!talent.kingsbane|charges>=2)|(dot.kingsbane.ticking&dot.kingsbane.remains<6|!talent.kingsbane&dot.deathmark.ticking)|boss&fight_remains=4 # Direct Damage Abilities Envenom at 4+ (5+ with DS) CP if not pooling, capped on amplifying poison stacks, on an animacharged CP, or in aoe actions.direct+=/envenom,if=effective_combo_points>=4&(variable.not_pooling|!talent.amplifying_poison|effective_combo_points=combo_points.max&!ticking|debuff.amplifying_poison_dot.stack>=20|effective_combo_points>cp_max_spend|!variable.single_target) # Check if we should be using a filler actions.direct+=/variable,name=use_filler,value=combo_points.deficit>1|variable.not_pooling|!variable.single_target # Maintain Caustic Spatter actions.direct+=/mutilate,if=talent.caustic_spatter&dot.rupture.ticking&(!debuff.caustic_spatter.up|debuff.caustic_spatter.remains<=2)&variable.use_filler&!variable.single_target actions.direct+=/ambush,if=talent.caustic_spatter&dot.rupture.ticking&(!debuff.caustic_spatter.up|debuff.caustic_spatter.remains<=2)&variable.use_filler&!variable.single_target actions.direct+=/mutilate,if=talent.caustic_spatter&dot.rupture.ticking&(!debuff.caustic_spatter.up|debuff.caustic_spatter.remains<=2)&variable.use_filler&!variable.single_target # Apply SBS to all targets without a debuff as priority, preferring targets dying sooner after the primary target actions.direct+=/serrated_bone_spike,if=variable.use_filler&!dot.serrated_bone_spike_dot.ticking actions.direct+=/serrated_bone_spike,cycle_targets=1,if=variable.use_filler&!dot.serrated_bone_spike_dot.ticking # Keep from capping charges or burn at the end of fights actions.direct+=/serrated_bone_spike,if=variable.use_filler&master_assassin_remains<0.8&(boss&fight_remains<=5|cooldown.serrated_bone_spike.max_charges-charges_fractional<=0.25) # When MA is not at high duration, sync with Shiv actions.direct+=/serrated_bone_spike,if=variable.use_filler&master_assassin_remains<0.8&!variable.single_target&debuff.shiv.up actions.direct+=/echoing_reprimand,if=variable.use_filler|boss&fight_remains<20 # Fan of Knives at 2+ targets or 3+ with DTB actions.direct+=/fan_of_knives,if=variable.use_filler&(!priority_rotation&spell_targets.fan_of_knives>=2+stealthed.rogue+talent.dragontempered_blades) # Fan of Knives to apply poisons if inactive on any target (or any bleeding targets with priority rotation) at 3T actions.direct+=/fan_of_knives,cycle_targets=1,if=!dot.deadly_poison_dot.ticking&(!priority_rotation|dot.garrote.ticking|dot.rupture.ticking)&variable.use_filler&spell_targets.fan_of_knives>=3 # Ambush on Blindside/Shadow Dance, or a last resort usage of Sepsis. Do not use Ambush during Kingsbane & Deathmark. actions.direct+=/ambush,if=variable.use_filler&(buff.blindside.up|buff.sepsis_buff.remains<=1|stealthed.rogue)&(!dot.kingsbane.ticking|debuff.deathmark.down|buff.blindside.up) # Tab-Mutilate to apply Deadly Poison at 2 targets actions.direct+=/mutilate,cycle_targets=1,if=!dot.deadly_poison_dot.ticking&!debuff.amplifying_poison.up&variable.use_filler&spell_targets.fan_of_knives=2 # Fallback Mutilate actions.direct+=/mutilate,if=variable.use_filler # Damage over time abilities Check what the maximum Scent of Blood stacks is currently actions.dot+=/variable,name=scent_effective_max_stacks,value=(spell_targets.fan_of_knives*talent.scent_of_blood.rank*2)>?20 # We are Scent Saturated when our stack count is hitting the maximum actions.dot+=/variable,name=scent_saturation,value=buff.scent_of_blood.stack>=variable.scent_effective_max_stacks # Crimson Tempest on 2+ Targets if we have enough energy regen actions.dot+=/crimson_tempest,cycle_targets=1,if=spell_targets>=2&refreshable&effective_combo_points>=4&(active_enemies>2|energy.regen_combined>25)&!cooldown.deathmark.ready&target.time_to_die-remains>6 # Garrote upkeep, also uses it in AoE to reach energy saturation actions.dot+=/garrote,if=combo_points.deficit>=1&(pmultiplier<=1)&refreshable&target.time_to_die-remains>12 actions.dot+=/garrote,cycle_targets=1,if=combo_points.deficit>=1&(pmultiplier<=1)&refreshable&!variable.regen_saturated&spell_targets.fan_of_knives>=2&target.time_to_die-remains>12 # Rupture upkeep, also uses it in AoE to reach energy saturation actions.dot+=/rupture,if=effective_combo_points>=4&(pmultiplier<=1)&refreshable&target.time_to_die-remains>(4+(talent.dashing_scoundrel*5)+(variable.regen_saturated*6)) actions.dot+=/rupture,cycle_targets=1,if=effective_combo_points>=4&(pmultiplier<=1)&refreshable&(!variable.regen_saturated|!variable.scent_saturation)&target.time_to_die-remains>(4+(talent.dashing_scoundrel*5)+(variable.regen_saturated*6)) # Garrote as a special generator for the last CP before a finisher for edge case handling actions.dot+=/garrote,if=refreshable&combo_points.deficit>=1&(pmultiplier<=1|remains<=tick_time&spell_targets.fan_of_knives>=3)&(remains<=tick_time*2&spell_targets.fan_of_knives>=3)&(target.time_to_die-remains)>4&master_assassin_remains=0 ## Stealthed Actions # Make sure to have Shiv up during Kingsbane actions.stealthed+=/shiv,if=talent.kingsbane&(dot.kingsbane.ticking|cooldown.kingsbane.up)&(!debuff.shiv.up&debuff.shiv.remains<1)&buff.envenom.up # Kingsbane in Shadow Dance for snapshotting Nightstalker actions.stealthed+=/kingsbane,if=buff.shadow_dance.remains>=2&buff.envenom.up # Envenom to maintain the buff during Shadow Dance actions.stealthed+=/envenom,if=effective_combo_points>=4&dot.kingsbane.ticking&buff.envenom.remains<=3 # Envenom during Master Assassin in single target actions.stealthed+=/envenom,if=effective_combo_points>=4&buff.master_assassin_aura.up&!buff.shadow_dance.up&variable.single_target # Improved Garrote: Apply or Refresh with buffed Garrotes, accounting for Sepsis buff time and Indiscriminate Carnage actions.stealthed+=/garrote,cycle_targets=1,if=stealthed.improved_garrote&(remains<(12-buff.sepsis_buff.remains)|pmultiplier<=1|(buff.indiscriminate_carnage.up&active_dot.garrote=3)&target.time_to_die-remains>2 actions.stealthed+=/garrote,if=stealthed.improved_garrote&!buff.shadow_dance.up&(pmultiplier<=1|dot.deathmark.ticking&buff.master_assassin_aura.remains<3)&combo_points.deficit>=5 # Rupture in Shadow Dance to snapshot Nightstalker as a final resort actions.stealthed+=/rupture,if=effective_combo_points>=4&(pmultiplier<=1)&(buff.shadow_dance.up|debuff.deathmark.up) # Stealth Cooldowns Vanish Sync for Improved Garrote with Deathmark actions.vanish+=/pool_resource,for_next=1,extra_amount=45 # Shadow Dance for non-Kingsbane setups actions.vanish+=/shadow_dance,if=!talent.kingsbane&talent.improved_garrote&cooldown.garrote.up&(dot.garrote.pmultiplier<=1|dot.garrote.refreshable)&(debuff.deathmark.up|cooldown.deathmark.remains<12|cooldown.deathmark.remains>60)&combo_points.deficit>=(spell_targets.fan_of_knives>?4) actions.vanish+=/shadow_dance,if=!talent.kingsbane&!talent.improved_garrote&talent.master_assassin&!dot.rupture.refreshable&dot.garrote.remains>3&(debuff.deathmark.up|cooldown.deathmark.remains>60)&(debuff.shiv.up|debuff.deathmark.remains<4|dot.sepsis.ticking)&dot.sepsis.remains<3 # Vanish to spread Garrote during Deathmark actions.vanish+=/vanish,if=!talent.master_assassin&talent.improved_garrote&cooldown.garrote.up&(dot.garrote.pmultiplier<=1|dot.garrote.refreshable)&(debuff.deathmark.up|cooldown.deathmark.remains<4)&combo_points.deficit>=(spell_targets.fan_of_knives>?4) actions.vanish+=/pool_resource,for_next=1,extra_amount=45 # Vanish for cleaving Garrotes with Indiscriminate Carnage actions.vanish+=/vanish,if=!talent.master_assassin&talent.improved_garrote&cooldown.garrote.up&(dot.garrote.pmultiplier<=1|dot.garrote.refreshable)&spell_targets.fan_of_knives>(3-talent.indiscriminate_carnage) # Vanish for Master Assassin during Kingsbane actions.vanish+=/vanish,if=talent.master_assassin&talent.kingsbane&dot.kingsbane.remains<=3&dot.kingsbane.ticking&debuff.deathmark.remains<=3&dot.deathmark.ticking # Vanish fallback for Master Assassin actions.vanish+=/vanish,if=!talent.improved_garrote&talent.master_assassin&!dot.rupture.refreshable&dot.garrote.remains>3&debuff.deathmark.up&(debuff.shiv.up|debuff.deathmark.remains<4|dot.sepsis.ticking)&dot.sepsis.remains<3