## https://github.com/simulationcraft/simc/blob/thewarwithin/ActionPriorityLists/default/evoker_devastation.simc ## Up to date with SimC: March 28 2025 - 74b5dd8 actions.precombat+=/variable,name=trinket_1_buffs,value=trinket.1.has_buff.intellect|trinket.1.has_buff.mastery|trinket.1.has_buff.versatility|trinket.1.has_buff.haste|trinket.1.has_buff.crit|trinket.1.is.mirror_of_fractured_tomorrows|trinket.1.is.signet_of_the_priory actions.precombat+=/variable,name=trinket_2_buffs,value=trinket.2.has_buff.intellect|trinket.2.has_buff.mastery|trinket.2.has_buff.versatility|trinket.2.has_buff.haste|trinket.2.has_buff.crit|trinket.2.is.mirror_of_fractured_tomorrows|trinket.2.is.signet_of_the_priory actions.precombat+=/variable,name=weapon_buffs,value=equipped.bestinslots actions.precombat+=/variable,name=weapon_sync,op=setif,value=1,value_else=0.5,condition=equipped.bestinslots # Mythic one hardcoded - To Do implement something in simc to just get the value. actions.precombat+=/variable,name=weapon_stat_value,value=equipped.bestinslots*5142*15 # Decide which trinket to pair with Dragonrage, prefer 2 minute and 1 minute trinkets actions.precombat+=/variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.dragonrage.duration=0|cooldown.dragonrage.duration%%trinket.1.cooldown.duration=0|trinket.1.is.house_of_cards) actions.precombat+=/variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.dragonrage.duration=0|cooldown.dragonrage.duration%%trinket.2.cooldown.duration=0|trinket.2.is.house_of_cards) # Estimates a trinkets value by comparing the cooldown of the trinket, divided by the duration of the buff it provides. Has a intellect modifier (currently 1.5x) to give a higher priority to intellect trinkets. The intellect modifier should be changed as intellect priority increases or decreases. As well as a modifier for if a trinket will or will not sync with cooldowns. actions.precombat+=/variable,name=trinket_1_manual,value=trinket.1.is.belorrelos_the_suncaller|trinket.1.is.nymues_unraveling_spindle|trinket.1.is.spymasters_web actions.precombat+=/variable,name=trinket_2_manual,value=trinket.2.is.belorrelos_the_suncaller|trinket.2.is.nymues_unraveling_spindle|trinket.2.is.spymasters_web actions.precombat+=/variable,name=trinket_1_ogcd_cast,value=0 actions.precombat+=/variable,name=trinket_2_ogcd_cast,value=0 actions.precombat+=/variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell|trinket.1.is.whispering_incarnate_icon actions.precombat+=/variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell|trinket.2.is.whispering_incarnate_icon actions.precombat+=/variable,name=trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&variable.trinket_2_buffs|variable.trinket_2_buffs&((trinket.2.proc.any_dps.duration)*(variable.trinket_2_sync)*trinket.2.proc.any_dps.default_value)>((trinket.1.proc.any_dps.duration)*(variable.trinket_1_sync)*trinket.1.proc.any_dps.default_value) actions.precombat+=/variable,name=trinket_priority,op=setif,if=variable.weapon_buffs,value=3,value_else=variable.trinket_priority,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs|variable.weapon_stat_value*variable.weapon_sync>(((trinket.2.proc.any_dps.duration)*(variable.trinket_2_sync)*trinket.2.proc.any_dps.default_value)=trinket.1.ilvl # Rank 1 empower spell cast time actions.precombat+=/variable,name=r1_cast_time,value=1.0*spell_haste # Variable for when to start holding empowers for upcoming DR in AoE. - From my testing 4sec seems like the sweetspot, but it's very minor diff so far - Holding for more than 6 seconds it begins to become a loss. actions.precombat+=/variable,name=dr_prep_time,default=6,op=reset actions.precombat+=/variable,name=dr_prep_time_aoe,default=4,op=reset actions.precombat+=/variable,name=can_extend_dr,default=0,op=reset ## actions.precombat+=/variable,name=has_external_pi,value=cooldown.invoke_power_infusion_0.duration>0 actions.precombat+=/variable,name=can_use_empower,value=1,default=1,if=!talent.animosity|!talent.dragonrage|buff.empowering.up # Get Some Scarlet Adaptation Prepull actions.precombat+=/verdant_embrace,if=talent.scarlet_adaptation ## [Syrif] - This charge gets refunded pretty early by deep breath when talented into slipstream, but added some extra conditions to stop it from griefing in dungeons actions.precombat+=/hover,if=talent.slipstream&buff.hover.down&cooldown.deep_breath.up actions.precombat+=/firestorm,if=talent.firestorm&(!talent.engulf|!talent.ruby_embers) actions.precombat+=/living_flame,if=!talent.firestorm|talent.engulf&talent.ruby_embers # Variable that evaluates when next dragonrage is by working out the maximum between the dragonrage cd and your empowers, ignoring CDR effect estimates. actions+=/variable,name=next_dragonrage,value=cooldown.dragonrage.remains?(cooldown.fire_breath.remains-8)) ## Invoke External Power Infusions if they're available during dragonrage ## actions+=/invoke_external_buff,name=power_infusion,if=buff.dragonrage.up&!cooldown.fire_breath.up&!cooldown.shattering_star.up actions+=/variable,name=pool_for_id,if=talent.imminent_destruction,default=0,op=set,value=cooldown.deep_breath.remains<7&essence.deficit>=1&!buff.essence_burst.up&(raid_event.adds.in>=action.deep_breath.cooldown*0.4|talent.melt_armor&talent.maneuverability|active_enemies>=3) # [Edited by Syrif] - animosity_extension returns the number of extensions performed for this dragonrage, use it instead of the complex APL conditions actions+=/variable,name=can_extend_dr,if=talent.animosity,op=set,value=buff.dragonrage.up&(animosity_extension<4) actions+=/variable,name=can_use_empower,op=set,value=cooldown.dragonrage.remains>=gcd.max*variable.dr_prep_time,if=!buff.empowering.up&talent.animosity&talent.dragonrage # Rupt to make the raidleader happy actions+=/quell,use_off_gcd=1 actions+=/unravel actions+=/expunge,enabled=0,if=debuff.dispellable_poison.up # [Hekili] No API available for detecting bleeds actions+=/cauterizing_flame,enabled=0,if=debuff.dispellable_poison.up|debuff.dispellable_curse.up|debuff.dispellable_disease.up # [Hekili] Recommended to link to toggle.interrupts with Show Separately enabled actions+=/hover,enabled=0,if=moving&buff.hover.down # Delay pot in ST if you are about to SS - mostly relevant for opener where you want DR->FB->SS->rotation actions+=/potion,if=(!talent.dragonrage|buff.dragonrage.up)&(!cooldown.shattering_star.up|debuff.shattering_star_debuff.up|active_enemies>=2)|boss&fight_remains<35 actions+=/call_action_list,name=trinkets actions+=/run_action_list,name=aoe,strict=1,if=active_enemies>2 actions+=/run_action_list,name=st,strict=1,if=active_enemies<3 # AOE action list; Open with star before DR to save a global and start with a free EB BaumChange 2: Don't do as FS - Neutral actions.aoe+=/shattering_star,cycle_targets=1,if=(cooldown.dragonrage.up&talent.arcane_vigor|talent.eternitys_span&active_enemies<=3)&!talent.engulf actions.aoe+=/hover,use_off_gcd=1,if=raid_event.movement.in<6&!buff.hover.up&gcd.remains>=0.5&(buff.mass_disintegrate_stacks.up&talent.mass_disintegrate|active_enemies<=4) # Spend firestorm procs ASAP actions.aoe+=/firestorm,if=buff.snapfire.up&!talent.feed_the_flames actions.aoe+=/variable,name=engulf_condition,value=dot.fire_breath_damage.remains>(action.engulf.travel_time+2*action.engulf.in_flight)&(variable.next_dragonrage>=cooldown*1.2|!talent.dragonrage) # BaumChange 1: Send DB before DR if FS FS FTF - +30k in 5T actions.aoe+=/deep_breath,if=talent.maneuverability&talent.melt_armor&!cooldown.fire_breath.up&!cooldown.eternity_surge.up|talent.feed_the_flames&talent.engulf&talent.imminent_destruction&(cooldown.engulf.remains>4|!variable.engulf_condition) # Acquire the buff BaumChange #3: Keep it from hardcasting firestorm while the SS debuff is running. I know the condition is garbage but it works - +20k in 5T actions.aoe+=/firestorm,if=talent.feed_the_flames&(!talent.engulf|cooldown.engulf.remains>4|cooldown.engulf.charges=0|(variable.next_dragonrage<=cooldown*1.2|!talent.dragonrage)) # Grab Irid Red before Dragonrage without griefing extension actions.aoe+=/call_action_list,name=fb,strict_if=talent.dragonrage&(talent.iridescence|talent.scorching_embers)&!talent.engulf,if=talent.dragonrage&cooldown.dragonrage.up&(talent.iridescence|talent.scorching_embers)&!talent.engulf actions.aoe+=/dragonrage # Tip ES at appropiate target count or when playing Flameshaper otherwise Tip FB actions.aoe+=/tip_the_scales,if=(!talent.dragonrage|buff.dragonrage.up)&(cooldown.fire_breath.remains<=cooldown.eternity_surge.remains|(cooldown.eternity_surge.remains<=cooldown.fire_breath.remains&talent.font_of_magic)&!talent.engulf) # BaumChange 2: Do as FS - Neutral actions.aoe+=/shattering_star,if=(cooldown.dragonrage.up&talent.arcane_vigor|talent.eternitys_span&active_enemies<=3)&talent.engulf actions.aoe+=/dragonrage,if=target.time_to_die>=32|active_enemies>=3&target.time_to_die>=15|boss&fight_remains<30 # Cast Fire Breath DS optimization: Only cast if current fight will last 8s+ or encounter ends in less than 30s actions.aoe+=/call_action_list,name=fb,strict=1,if=(!talent.dragonrage|buff.dragonrage.up|cooldown.dragonrage.remains>variable.dr_prep_time_aoe|!talent.animosity|talent.flame_siphon)&(target.time_to_die>=8|talent.mass_disintegrate) actions.aoe+=/call_action_list,name=es,strict_if=(!talent.dragonrage|buff.dragonrage.up|cooldown.dragonrage.remains>variable.dr_prep_time_aoe|!talent.animosity),if=(!talent.dragonrage|buff.dragonrage.up|cooldown.dragonrage.remains>variable.dr_prep_time_aoe|!talent.animosity)&(!buff.jackpot.up|!set_bonus.tww2_4pc|talent.mass_disintegrate) actions.aoe+=/deep_breath,if=!buff.dragonrage.up&essence.deficit>3 # Send SS when it doesn't overflow EB, without vigor send on CD BaumChange 3: Save SS for Engulf - +20k in 5T actions.aoe+=/shattering_star,cycle_targets=1,if=(buff.essence_burst.stack0) # [Hekili] Re-revised Fire Breath debuff remaining so that you get back-to-back Engulfs easier. actions.aoe+=/engulf,cycle_targets=1,if=variable.engulf_condition actions.aoe+=/pyre,if=buff.charged_blast.stack>=12&(cooldown.dragonrage.remains>gcd.max*4|!talent.dragonrage) # Use Mass Disintegrate if CB wont't overcap actions.aoe+=/disintegrate,cycle_targets=1,if=buff.mass_disintegrate_stacks.up&talent.mass_disintegrate&(!variable.pool_for_id|buff.mass_disintegrate_stacks.remains<=buff.mass_disintegrate_stacks.stack*(duration+0.1)) # Use Deep Breath on 2T, unless adds will come before it'll be ready again or if talented ID. actions.aoe+=/deep_breath,if=talent.imminent_destruction&!buff.essence_burst.up # Pyre 4T+ - 3T+ with Volatility - 12 stacks of CB - Pool CB for DR actions.aoe+=/pyre,if=(active_enemies>=4-(buff.imminent_destruction.up)|talent.volatility|talent.scorching_embers&active_dot.fire_breath_damage>=active_enemies*0.75)&(cooldown.dragonrage.remains>gcd.max*4|!talent.dragonrage|!talent.charged_blast)&!variable.pool_for_id&(!buff.mass_disintegrate_stacks.up|buff.essence_burst.stack=2|buff.essence_burst.stack=1&essence>=(3-buff.imminent_destruction.up)|essence>=(5-buff.imminent_destruction.up*2)) # Cast LF with leaping flames up if: not playing burnout, burnout is up or the next firebreath is soon. actions.aoe+=/living_flame,cycle_targets=1,if=(!talent.burnout|buff.burnout.up|cooldown.fire_breath.remains<=gcd.max*5|buff.scarlet_adaptation.up|buff.ancient_flame.up)&buff.leaping_flames.up&(!buff.essence_burst.up&essence.deficit>1|cooldown.fire_breath.remains<=gcd.max*3&buff.essence_burst.stack=2&(raid_event.movement.in>2|buff.hover.up),interrupt_if=evoker.use_clipping&buff.dragonrage.up&ticks>=2&(raid_event.movement.in>2|buff.hover.up),if=(raid_event.movement.in>2|buff.hover.up)&!variable.pool_for_id&(active_enemies<=4|buff.mass_disintegrate_stacks.up) # Cast LF with burnout to fish for snapfire procs actions.aoe+=/living_flame,cycle_targets=1,if=talent.snapfire&buff.burnout.up # Get Ancient Flame as Filler actions.aoe+=/call_action_list,name=green,strict_if=talent.ancient_flame,if=talent.ancient_flame&!buff.ancient_flame.up&!buff.dragonrage.up actions.aoe+=/living_flame,if=talent.snapfire&!talent.engulfing_blaze # Fallback filler actions.aoe+=/azure_strike,cycle_targets=1 # Eternity Surge, use rank most applicable to targets. actions.es+=/eternity_surge,empower_to=1,cycle_targets=1,if=active_enemies<=1+talent.eternitys_span|(variable.can_extend_dr&talent.animosity|talent.mass_disintegrate)&active_enemies>(3+talent.font_of_magic+4*talent.eternitys_span)|buff.dragonrage.remains<1.75*spell_haste&buff.dragonrage.remains>=1*spell_haste&talent.animosity&variable.can_extend_dr actions.es+=/eternity_surge,empower_to=2,cycle_targets=1,if=active_enemies<=2+2*talent.eternitys_span|buff.dragonrage.remains<2.5*spell_haste&buff.dragonrage.remains>=1.75*spell_haste actions.es+=/eternity_surge,empower_to=3,cycle_targets=1,if=active_enemies<=3+3*talent.eternitys_span|!talent.font_of_magic&talent.mass_disintegrate|buff.dragonrage.remains<=3.25*spell_haste&buff.dragonrage.remains>=2.5*spell_haste actions.es+=/eternity_surge,empower_to=4,cycle_targets=1,if=talent.mass_disintegrate|active_enemies<=4+4*talent.eternitys_span # Fire Breath, use rank appropriate to target count/talents. actions.fb+=/fire_breath,empower_to=2,if=talent.scorching_embers&(cooldown.engulf.remains<=duration+0.5|cooldown.engulf.up)&talent.engulf&release.dot_duration<=fight_remains actions.fb+=/fire_breath,empower_to=3,if=talent.scorching_embers&(cooldown.engulf.remains<=duration+0.5|cooldown.engulf.up)&talent.engulf&(release.dot_duration<=fight_remains|!talent.font_of_magic) actions.fb+=/fire_breath,empower_to=4,if=talent.scorching_embers&(cooldown.engulf.remains<=duration+0.5|cooldown.engulf.up)&talent.engulf&talent.font_of_magic actions.fb+=/fire_breath,empower_to=1,if=((buff.dragonrage.remains<1.75*spell_haste&buff.dragonrage.remains>=1*spell_haste)&talent.animosity&variable.can_extend_dr|active_enemies=1)&release.dot_duration<=fight_remains actions.fb+=/fire_breath,empower_to=2,if=((buff.dragonrage.remains<2.5*spell_haste&buff.dragonrage.remains>=1.75*spell_haste)&talent.animosity&variable.can_extend_dr|talent.scorching_embers|active_enemies>=2)&release.dot_duration<=fight_remains actions.fb+=/fire_breath,empower_to=3,if=!talent.font_of_magic|((buff.dragonrage.remains<=3.25*spell_haste&buff.dragonrage.remains>=2.5*spell_haste)&talent.animosity&variable.can_extend_dr|talent.scorching_embers)&release.dot_duration<=fight_remains # Green Spells used to trigger Ancient Flame actions.green+=/emerald_blossom actions.green+=/verdant_embrace # Become a Superior Dragon actions.st+=/dragonrage # Flap wings actions.st+=/hover,use_off_gcd=1,if=raid_event.movement.in<6&!buff.hover.up&gcd.remains>=0.5|talent.slipstream&gcd.remains>=0.5 # Become a faster dragon (for one empower) actions.st+=/tip_the_scales,use_off_gcd=1,if=buff.dragonrage.up&cooldown.fire_breath.remains<=cooldown.eternity_surge.remains # Dont overcap with Vigor. With TWWS2 this is neutral but it will stay for posterity. actions.st+=/shattering_star,if=(buff.essence_burst.stacktravel_time)&(dot.living_flame_damage.remains>travel_time|dot.fire_breath_damage.remainstravel_time|!talent.enkindle)&(!talent.iridescence|buff.iridescence_red.up)&(!talent.scorching_embers|dot.fire_breath_damage.duration<=6|boss&fight_remains<=30)&(debuff.shattering_star_debuff.remains>travel_time|full_recharge_time=2 # Use the Deeper Breath actions.st+=/deep_breath,if=talent.imminent_destruction|talent.melt_armor|talent.maneuverability # Mass Disintegrator pov actions.st+=/disintegrate,cycle_targets=1,early_chain_if=ticks_remain<=1&buff.mass_disintegrate_stacks.up,if=(raid_event.movement.in>2|buff.hover.up)&buff.mass_disintegrate_stacks.up&talent.mass_disintegrate&!variable.pool_for_id # Secret tech (dont leak) actions.st+=/pyre,if=talent.snapfire&active_enemies>=2&talent.volatility.rank>=2&(!talent.azure_celerity|talent.feed_the_flames) # Disintegrator pov actions.st+=/disintegrate,cycle_targets=1,chain=1,if=(raid_event.movement.in>2|buff.hover.up)&!variable.pool_for_id # Get Ancient Flame if you have Engulfing Blaze and nothing interesting is happening actions.st+=/call_action_list,name=green,strict_if=talent.ancient_flame&talent.scarlet_adaptation&talent.engulfing_blaze,if=talent.ancient_flame&!buff.ancient_flame.up&!buff.shattering_star_debuff.up&talent.scarlet_adaptation&!buff.dragonrage.up&!buff.burnout.up&talent.engulfing_blaze # LF Gooder actions.st+=/living_flame,if=buff.burnout.up|buff.leaping_flames.up|buff.ancient_flame.up # AS Gooder actions.st+=/azure_strike,if=active_enemies>=2&!talent.snapfire # LF actions.st+=/living_flame # Cry actions.st+=/azure_strike actions.trinkets+=/use_item,name=spymasters_web,if=buff.dragonrage.up&(fight_remains<130)&buff.spymasters_report.stack>=15|(boss&fight_remains<=20|cooldown.engulf.up&talent.engulf&fight_remains<=40&cooldown.dragonrage.remains>=40) actions.trinkets+=/use_item,name=neural_synapse_enhancer,if=buff.dragonrage.up|!talent.dragonrage|cooldown.dragonrage.remains>=5 # The trinket with the highest estimated value, will be used first and paired with Dragonrage. Trinkets are used on 4 stacks of Emerald Trance, unless playing double buff trinket, then one is used after SS/FB and the next on CD. Or with DR in AoE actions.trinkets+=/use_item,slot=trinket1,if=buff.dragonrage.up&((variable.trinket_2_buffs&!cooldown.fire_breath.up&!cooldown.shattering_star.up&trinket.2.cooldown.remains)|buff.tip_the_scales.up&(!cooldown.shattering_star.up|talent.engulf)&variable.trinket_priority=1|(!cooldown.fire_breath.up&!cooldown.shattering_star.up)|active_enemies>=3)&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1|variable.trinket_2_exclude)&!variable.trinket_1_manual|trinket.1.proc.any_dps.duration>=fight_remains|trinket.1.cooldown.duration<=60&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=1)&!variable.trinket_1_manual actions.trinkets+=/use_item,slot=trinket2,if=buff.dragonrage.up&((variable.trinket_1_buffs&!cooldown.fire_breath.up&!cooldown.shattering_star.up&trinket.1.cooldown.remains)|buff.tip_the_scales.up&(!cooldown.shattering_star.up|talent.engulf)&variable.trinket_priority=2|(!cooldown.fire_breath.up&!cooldown.shattering_star.up)|active_enemies>=3)&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2|variable.trinket_1_exclude)&!variable.trinket_2_manual|trinket.2.proc.any_dps.duration>=fight_remains|trinket.2.cooldown.duration<=60&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=2)&!variable.trinket_2_manual actions.trinkets+=/use_item,slot=main_hand,if=variable.weapon_buffs&((variable.trinket_2_buffs&(trinket.2.cooldown.remains|trinket.2.cooldown.duration<=20)|!variable.trinket_2_buffs|variable.trinket_2_exclude|variable.trinket_priority=3)&(variable.trinket_1_buffs&(trinket.1.cooldown.remains|trinket.1.cooldown.duration<=20)|!variable.trinket_1_buffs|variable.trinket_1_exclude|variable.trinket_priority=3)&(!cooldown.fire_breath.up&!cooldown.shattering_star.up|buff.tip_the_scales.up&(!cooldown.shattering_star.up|talent.engulf)|(!cooldown.fire_breath.up&!cooldown.shattering_star.up)|active_enemies>=3))&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=3|variable.trinket_priority=1&trinket.1.cooldown.remains|variable.trinket_priority=2&trinket.2.cooldown.remains) # If only one on use trinket provides a buff, use the other on cooldown. Or if neither trinket provides a buff, use both on cooldown. actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.is.spymasters_web|trinket.2.cooldown.duration=0)&(gcd.remains>0.1&!prev_gcd.1.deep_breath)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_2_buffs|trinket.2.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) actions.trinkets+=/use_item,use_off_gcd=1,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.is.spymasters_web|trinket.1.cooldown.duration=0)&(gcd.remains>0.1&!prev_gcd.1.deep_breath)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_1_buffs|trinket.1.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) actions.trinkets+=/use_item,slot=trinket1,if=!variable.trinket_1_buffs&!variable.trinket_1_manual&(variable.damage_trinket_priority=1|trinket.2.cooldown.remains|trinket.2.is.spymasters_web|trinket.2.cooldown.duration=0)&(!variable.trinket_1_ogcd_cast)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_2_buffs|trinket.2.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage)) actions.trinkets+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&!variable.trinket_2_manual&(variable.damage_trinket_priority=2|trinket.1.cooldown.remains|trinket.1.is.spymasters_web|trinket.1.cooldown.duration=0)&(!variable.trinket_2_ogcd_cast)&(variable.next_dragonrage>20|!talent.dragonrage|!variable.trinket_1_buffs|trinket.1.is.spymasters_web&(buff.spymasters_report.stack<5|fight_remains>=130+variable.next_dragonrage))