# Executed before combat begins. Accepts non-harmful actions only. actions.precombat+=/apply_poison actions.precombat+=/bottled_flayedwing_toxin actions.precombat+=/marked_for_death,precombat_seconds=10,if=raid_event.adds.in>25 actions.precombat+=/fleshcraft,if=soulbind.pustule_eruption|soulbind.volatile_solvent actions.precombat+=/stealth actions.precombat+=/adrenaline_rush,precombat_seconds=3,if=talent.improved_adrenaline_rush actions.precombat+=/roll_the_bones,precombat_seconds=2,if=remains<3 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 # Checks if we are in an appropriate Stealth state for triggering the Count the Odds bonus actions+=/variable,name=stealthed_cto,value=talent.count_the_odds&(stealthed.basic|buff.shadowmeld.up|buff.shadow_dance.up) # Roll the Bones Reroll Conditions actions+=/variable,name=rtb_reroll,value=rtb_buffs<2&(!buff.broadside.up&(!talent.fan_the_hammer|!buff.skull_and_crossbones.up)&!buff.true_bearing.up|buff.loaded_dice.up)|rtb_buffs=2&(buff.buried_treasure.up&buff.grand_melee.up|!buff.broadside.up&!buff.true_bearing.up&buff.loaded_dice.up) # Ensure we get full Ambush CP gains and aren't rerolling Count the Odds buffs away actions+=/variable,name=ambush_condition,value=combo_points.deficit>=2+talent.improved_ambush+buff.broadside.up&energy>=50&(!talent.count_the_odds|buff.roll_the_bones.remains>=10) # Finish at max possible CP without overflowing bonus combo points, unless for BtE which always should be 5+ CP actions+=/variable,name=finish_condition,value=combo_points>=cp_max_spend-buff.broadside.up-(buff.opportunity.up&(talent.quick_draw|talent.fan_the_hammer)|buff.concealed_blunderbuss.up)|effective_combo_points>=cp_max_spend # Always attempt to use BtE at 5+ CP, regardless of CP gen waste actions+=/variable,name=finish_condition,op=reset,if=cooldown.between_the_eyes.ready&effective_combo_points<5 # Finish at 2+ in the last GCD of Flagellation actions+=/variable,name=finish_condition,value=1,if=buff.flagellation_buff.up&buff.flagellation_buff.remains<1&effective_combo_points>=2 # With multiple targets, this variable is checked to decide whether some CDs should be synced with Blade Flurry actions+=/variable,name=blade_flurry_sync,value=spell_targets.blade_flurry<2&raid_event.adds.in>20|buff.blade_flurry.remains>1+talent.killing_spree.enabled # Higher priority Stealth list for Count the Odds or true Stealth/Vanish that will break in a single global actions+=/call_action_list,name=stealth,strict=1,if=stealthed.basic|buff.shadowmeld.up actions+=/call_action_list,name=cds # Lower priority Stealth list for Shadow Dance actions+=/call_action_list,name=stealth,strict=1,if=variable.stealthed_cto actions+=/run_action_list,name=finish,if=variable.finish_condition actions+=/call_action_list,name=build actions+=/arcane_torrent,if=energy.base_deficit>=15+energy.regen actions+=/arcane_pulse actions+=/lights_judgment actions+=/bag_of_tricks # Builders actions.build=sepsis,cycle_targets=1,if=target.time_to_die>11&debuff.between_the_eyes.up|fight_remains<11 actions.build+=/ghostly_strike,if=debuff.ghostly_strike.remains<=3&(spell_targets.blade_flurry<=2|debuff.dreadblades.up)&target.time_to_die>=5 actions.build+=/echoing_reprimand,if=!debuff.dreadblades.up # High priority Ambush line to apply Find Weakness or consume HO+Audacity buff before Pistol Shot actions.build+=/ambush,if=talent.hidden_opportunity&buff.audacity.up|talent.find_weakness&debuff.find_weakness.down # Use Greenskins Wickers buff immediately with Opportunity unless running Fan the Hammer actions.build+=/pistol_shot,if=buff.greenskins_wickers.up&(!talent.fan_the_hammer&buff.opportunity.up|buff.greenskins_wickers.remains<1.5) # With Fan the Hammer, consume Opportunity at max stacks or if we will get 4+ CP and Dreadblades is not up actions.build+=/pistol_shot,if=talent.fan_the_hammer&buff.opportunity.up&(buff.opportunity.stack>=buff.opportunity.max_stack|buff.opportunity.remains<2) actions.build+=/pistol_shot,if=talent.fan_the_hammer&buff.opportunity.up&combo_points.deficit>4&!debuff.dreadblades.up actions.build+=/pool_resource,for_next=1 actions.build+=/ambush,if=settings.ambush_anyway|talent.hidden_opportunity|talent.find_weakness&debuff.find_weakness.down # Apply SBS to all targets without a debuff as priority, preferring targets dying sooner after the primary target actions.build+=/serrated_bone_spike,if=!dot.serrated_bone_spike_dot.ticking actions.build+=/serrated_bone_spike,cycle_targets=1,if=!dot.serrated_bone_spike_dot.ticking # Attempt to use when it will cap combo points and SnD is down, otherwise keep from capping charges actions.build+=/serrated_bone_spike,if=fight_remains<=5|cooldown.serrated_bone_spike.max_charges-charges_fractional<=0.25|combo_points.deficit=cp_gain&!buff.skull_and_crossbones.up&energy.base_time_to_max>1 # Use Pistol Shot with Opportunity if Combat Potency won't overcap energy, when it will exactly cap CP, or when using Quick Draw actions.build+=/pistol_shot,if=!talent.fan_the_hammer&buff.opportunity.up&(energy.base_deficit>energy.regen*1.5|!talent.weaponmaster&combo_points.deficit<=1+buff.broadside.up|talent.quick_draw.enabled|talent.audacity.enabled&!buff.audacity.up) # Use Sinister Strike on targets without the Cache DoT if the trinket is up actions.build+=/sinister_strike,cycle_targets=1,if=buff.acquired_axe_driver.up actions.build+=/sinister_strike # Blade Flurry on 2+ enemies actions.cds=blade_flurry,if=spell_targets>=2&!buff.blade_flurry.up&!stealthed.rogue actions.cds+=/roll_the_bones,if=debuff.dreadblades.down&(!buff.roll_the_bones.up|variable.rtb_reroll) actions.cds+=/keep_it_rolling,if=!variable.rtb_reroll&(buff.broadside.up+buff.true_bearing.up+buff.skull_and_crossbones.up+buff.ruthless_precision.up)>2&(buff.shadow_dance.down|rtb_buffs>=6) actions.cds+=/vanish,if=!runeforge.invigorating_shadowdust&(!stealthed.all|talent.count_the_odds&!variable.stealthed_cto)&!buff.take_em_by_surprise.up&((talent.find_weakness&debuff.find_weakness.down|talent.hidden_opportunity|settings.ambush_anyway)&variable.ambush_condition|!talent.find_weakness&talent.count_the_odds&variable.finish_condition)&(!talent.shadow_dance|!cooldown.shadow_dance.ready) actions.cds+=/variable,name=shadow_dance_condition,value=talent.shadow_dance&(!stealthed.all|talent.count_the_odds&!variable.stealthed_cto)&debuff.between_the_eyes.up&(!talent.ghostly_strike|debuff.ghostly_strike.up)&(!talent.dreadblades|!cooldown.dreadblades.ready) actions.cds+=/shadow_dance,if=!talent.keep_it_rolling&variable.shadow_dance_condition&buff.slice_and_dice.up&(variable.finish_condition|talent.hidden_opportunity) actions.cds+=/shadow_dance,if=talent.keep_it_rolling&variable.shadow_dance_condition&(cooldown.keep_it_rolling.remains<=30|cooldown.keep_it_rolling.remains>120&(variable.finish_condition|talent.hidden_opportunity)) actions.cds+=/flagellation,cycle_targets=1,if=!stealthed.all&(variable.finish_condition&target.time_to_die>10|fight_remains<13) actions.cds+=/adrenaline_rush,if=!buff.adrenaline_rush.up&(!talent.improved_adrenaline_rush|combo_points<=2) actions.cds+=/dreadblades,if=!stealthed.all&combo_points<=2&(!talent.marked_for_death|!cooldown.marked_for_death.ready)&target.time_to_die>=10 # Fleshcraft for Pustule Eruption if not stealthed and not with Blade Flurry actions.cds+=/fleshcraft,if=(soulbind.pustule_eruption|soulbind.volatile_solvent)&!stealthed.all&(!buff.blade_flurry.up|spell_targets.blade_flurry<2)&(!buff.adrenaline_rush.up|energy.base_time_to_max>2) # If adds are up, snipe the one with lowest TTD. Use when dying faster than CP deficit or without any CP. actions.cds+=/marked_for_death,line_cd=1.5,target_if=min:target.time_to_die,if=raid_event.adds.up&(target.time_to_die=cp_max_spend-1)&!debuff.dreadblades.up # If no adds will die within the next 30s, use MfD on boss without any CP. actions.cds+=/marked_for_death,if=raid_event.adds.in>30-raid_event.adds.duration&combo_points.deficit>=cp_max_spend-1&!debuff.dreadblades.up # Use in 1-2T if BtE is up and won't cap Energy, or at 3T+ actions.cds+=/killing_spree,if=variable.blade_flurry_sync&!stealthed.rogue&(debuff.between_the_eyes.up&debuff.dreadblades.down&energy.base_deficit>(energy.regen*2+15)|spell_targets.blade_flurry>2) actions.cds+=/blade_rush,if=variable.blade_flurry_sync&(energy.base_time_to_max>2&!debuff.dreadblades.up|energy<=30|spell_targets>2) # If using Invigorating Shadowdust, use normal logic in addition to checking major CDs. actions.cds+=/vanish,if=runeforge.invigorating_shadowdust&action.flagellation.known&!stealthed.all&variable.finish_condition&(!cooldown.flagellation.ready&(!talent.dreadblades|!cooldown.dreadblades.ready|!buff.flagellation_buff.up)) actions.cds+=/vanish,if=runeforge.invigorating_shadowdust&!action.flagellation.known&!stealthed.all&variable.finish_condition&(cooldown.echoing_reprimand.remains>6|!cooldown.sepsis.ready|cooldown.serrated_bone_spike.full_recharge_time>20) actions.cds+=/shadowmeld,if=!stealthed.all&(talent.count_the_odds&variable.finish_condition|!talent.weaponmaster.enabled&variable.ambush_condition) actions.cds+=/thistle_tea,if=!buff.thistle_tea.up&(energy.base_deficit>=100|fight_remainsdesired_targets|raid_event.adds.in>60|fight_remains<7) actions.cds+=/use_item,name=cache_of_acquired_treasures,if=!stealthed.rogue&(buff.acquired_axe.up|boss&fight_remains<25) actions.cds+=/use_item,name=bloodstained_handkerchief,cycle_targets=1,if=!stealthed.rogue&!dot.cruel_garrote.ticking actions.cds+=/use_item,name=scars_of_fraternal_strife,if=!stealthed.rogue&(!buff.scars_of_fraternal_strife_4.up|fight_remains<30) # Default conditions for usable items. actions.cds+=/use_items,slots=trinket1,if=debuff.between_the_eyes.up|trinket.1.has_stat.any_dps|fight_remains<=20 actions.cds+=/use_items,slots=trinket2,if=debuff.between_the_eyes.up|trinket.2.has_stat.any_dps|fight_remains<=20 # Finishers BtE to keep the Crit debuff up, if RP is up, or for Greenskins, unless the target is about to die. actions.finish=between_the_eyes,if=target.time_to_die>3&(debuff.between_the_eyes.remains<4|(runeforge.greenskins_wickers|talent.greenskins_wickers)&!buff.greenskins_wickers.up|!runeforge.greenskins_wickers&!talent.greenskins_wickers&buff.ruthless_precision.up) actions.finish+=/slice_and_dice,if=buff.slice_and_dice.remains=cp_max_spend) actions.finish+=/cold_blood actions.finish+=/dispatch # Stealth actions.stealth=cold_blood,if=variable.finish_condition actions.stealth+=/dispatch,if=variable.finish_condition actions.stealth+=/ambush,if=variable.stealthed_cto|stealthed.basic&talent.find_weakness&!debuff.find_weakness.up