You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
18 KiB

actions.precombat+=/blessing_of_the_bronze
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
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
# 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)
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)
# 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.spoils_of_neltharus|trinket.1.is.belorrelos_the_suncaller|trinket.1.is.nymues_unraveling_spindle
actions.precombat+=/variable,name=trinket_2_manual,value=trinket.2.is.spoils_of_neltharus|trinket.2.is.belorrelos_the_suncaller|trinket.2.is.nymues_unraveling_spindle
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.cooldown.duration%trinket.2.proc.any_dps.duration)*(1.5+trinket.2.has_buff.intellect)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%trinket.1.proc.any_dps.duration)*(1.5+trinket.1.has_buff.intellect)*(variable.trinket_1_sync))
# 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_aoe,default=4,op=reset
# Variable for when to start holding empowers for upcoming DR in ST.
actions.precombat+=/variable,name=dr_prep_time_st,default=13,op=reset
# Get Some Scarlet Adaptation Prepull
actions.precombat+=/verdant_embrace,if=talent.scarlet_adaptation
actions.precombat+=/firestorm,if=talent.firestorm
actions.precombat+=/living_flame,if=!talent.firestorm
actions+=/quell
actions+=/unravel
# Delay pot in ST if you are about to SS - mostly relevant for opener where you want DR->FB->SS->rotation
actions+=/potion,if=buff.dragonrage.up&(!cooldown.shattering_star.up|active_enemies>=2)|boss&fight_remains<35
# 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
actions+=/variable,name=next_dragonrage,op=max,value=cooldown.eternity_surge.remains-2*gcd.max
actions+=/variable,name=next_dragonrage,op=max,value=cooldown.fire_breath.remains-gcd.max
### Invoke External Power Infusions if they're available during dragonrage
## actions+=/invoke_external_buff,name=power_infusion,if=buff.dragonrage.up&(buff.emerald_trance_stacking.stack>=3&set_bonus.tier31_2pc|!cooldown.fire_breath.up&!cooldown.shattering_star.up&(!set_bonus.tier31_2pc|!talent.event_horizon))
actions+=/call_action_list,name=trinkets
# If we're already empowering a Fire Breath cast, check its empowerment level.
actions+=/run_action_list,name=fb,strict=1,if=empowering.fire_breath
# If we're already empowering an Eternity Surge cast, check its empowerment level.
actions+=/run_action_list,name=es,strict=1,if=empowering.eternity_surge
actions+=/run_action_list,name=aoe,strict=1,if=active_enemies>2
actions+=/run_action_list,name=st
# AOE action list; This is kind of a mess again and should prolly be rewritten completely Open with star before DR to save a global and start with a free EB
actions.aoe+=/shattering_star,cycle_targets=1,if=cooldown.dragonrage.up
# Send DR on CD with no regard to the safety of the mobs - DPS loss to hold DR for empowers, in real world scenario maybe you hold if you are going for longer DRs DS optimization: Only cast if current fight will last 32s+ or encounter ends in less than 30s
actions.aoe+=/firestorm,if=talent.raging_inferno&cooldown.dragonrage.remains<=gcd&(target.time_to_die>=32|boss&fight_remains<30)
# actions.aoe+=/call_action_list,name=fb,if=talent.dragonrage&talent.iridescence&(target.time_to_die>=32|fight_remains<30)&cooldown.dragonrage.remains<=gcd
actions.aoe+=/dragonrage,if=target.time_to_die>=32|boss&fight_remains<30
# Use tip to get that sweet aggro
actions.aoe+=/tip_the_scales,if=buff.dragonrage.up&(active_enemies<=3+3*talent.eternitys_span|!cooldown.fire_breath.up)
# Cast Fire Breath - stagger for swell/blazing shards outside DR DS optimization: Only cast if current fight will last 8s+ or encounter ends in less than 30s
actions.aoe+=/call_action_list,name=fb,if=empowering.fire_breath|(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_aoe|!talent.animosity)&((buff.power_swell.remains<variable.r1_cast_time|(!talent.volatility&active_enemies=3))&buff.blazing_shards.remains<variable.r1_cast_time|buff.dragonrage.up)&(target.time_to_die>=8|boss&fight_remains<30)
# Cast Eternity Surge - stagger for swell/blazing shards outside DR DS optimization: Only cast if current fight will last 8s+ or encounter ends in less than 30s
actions.aoe+=/call_action_list,name=es,if=empowering.eternity_surge|buff.dragonrage.up|!talent.dragonrage|(cooldown.dragonrage.remains>variable.dr_prep_time_aoe&(buff.power_swell.remains<variable.r1_cast_time|(!talent.volatility&active_enemies=3))&buff.blazing_shards.remains<variable.r1_cast_time)&(target.time_to_die>=8|boss&fight_remains<30)
# Cast DB if not in DR and not going to overflow essence.
actions.aoe+=/deep_breath,if=!buff.dragonrage.up&essence.deficit>3
# Send SS when it doesn't overflow EB, without vigor send on CD
actions.aoe+=/shattering_star,if=buff.essence_burst.stack<buff.essence_burst.max_stack|!talent.arcane_vigor
# Cast Firestorm before spending ressources
actions.aoe+=/firestorm,if=talent.raging_inferno&(cooldown.dragonrage.remains>=20|cooldown.dragonrage.remains<=10)&(buff.essence_burst.up|essence>=2|cooldown.dragonrage.remains<=10)|buff.snapfire.up
# Pyre logic Pyre 4T+ Pyre 3T+ if playing Volatility Pyre with 15 stacks of CB
actions.aoe+=/pyre,cycle_targets=1,if=active_enemies>=4
actions.aoe+=/pyre,cycle_targets=1,if=active_enemies>=3&talent.volatility
actions.aoe+=/pyre,cycle_targets=1,if=buff.charged_blast.stack>=15
# Cast LF with leaping flames if: not playing burnout, burnout is up, more than 4 enemies, or scarlet adaptation is up.
actions.aoe+=/living_flame,cycle_targets=1,if=(!talent.burnout|buff.burnout.up|active_enemies>=4&cooldown.fire_breath.remains<=gcd.max*3|buff.scarlet_adaptation.up)&buff.leaping_flames.up&!buff.essence_burst.up&essence<essence.max-1
# Use staff on 5T or below
actions.aoe+=/use_item,name=kharnalex_the_first_light,if=!buff.dragonrage.up&debuff.shattering_star_debuff.down&active_enemies<=5
# Yoinked the disintegrate logic from ST
actions.aoe+=/disintegrate,chain=1,early_chain_if=evoker.use_early_chaining&ticks>=2&buff.dragonrage.up&(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
# Cast LF with burnout and snapfire proc for those juicy insta firestorms
actions.aoe+=/living_flame,if=talent.snapfire&buff.burnout.up
actions.aoe+=/firestorm
# Get Ancient Flame as Filler
actions.aoe+=/call_action_list,name=green,if=talent.ancient_flame&!buff.ancient_flame.up&!buff.dragonrage.up
# Fallback filler
actions.aoe+=/azure_strike
# Eternity Surge, use rank most applicable to targets.
actions.es+=/eternity_surge,empower_to=1,if=active_enemies<=1+talent.eternitys_span|buff.dragonrage.remains<1.75*spell_haste&buff.dragonrage.remains>=1*spell_haste|buff.dragonrage.up&(active_enemies==5&!talent.font_of_magic|active_enemies>(3+talent.font_of_magic)*(1+talent.eternitys_span))|active_enemies>=6&!talent.eternitys_span
actions.es+=/eternity_surge,empower_to=2,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,if=active_enemies<=3+3*talent.eternitys_span|!talent.font_of_magic|buff.dragonrage.remains<=3.25*spell_haste&buff.dragonrage.remains>=2.5*spell_haste
actions.es+=/eternity_surge,empower_to=4
# Fire Breath, use rank appropriate to target count/talents.
actions.fb+=/fire_breath,empower_to=1,if=(buff.dragonrage.up&active_enemies<=2)|(active_enemies=1&!talent.everburning_flame)|(buff.dragonrage.remains<1.75*spell_haste&buff.dragonrage.remains>=1*spell_haste)
actions.fb+=/fire_breath,empower_to=2,if=(!debuff.in_firestorm.up&talent.everburning_flame&active_enemies<=3)|(active_enemies=2&!talent.everburning_flame)|(buff.dragonrage.remains<2.5*spell_haste&buff.dragonrage.remains>=1.75*spell_haste)
actions.fb+=/fire_breath,empower_to=3,if=(talent.everburning_flame&buff.dragonrage.up&active_enemies>=5)|!talent.font_of_magic|(debuff.in_firestorm.up&talent.everburning_flame&active_enemies<=3)|(buff.dragonrage.remains<=3.25*spell_haste&buff.dragonrage.remains>=2.5*spell_haste)
actions.fb+=/fire_breath,empower_to=4
# Green Spells used to trigger Ancient Flame
actions.green+=/emerald_blossom
actions.green+=/verdant_embrace
# ST Action List, it's a mess, but it's getting better!
actions.st+=/use_item,name=kharnalex_the_first_light,if=!buff.dragonrage.up&debuff.shattering_star_debuff.down&raid_event.movement.in>6
# Movement Logic, Time spiral logic might need some tweaking actions.st+=/time_spiral,if=raid_event.movement.in<3&cooldown.hover.remains>=3&!buff.hover.up
actions.st+=/hover,use_off_gcd=1,if=raid_event.movement.in<2&!buff.hover.up
# Spend firestorm procs ASAP
actions.st+=/firestorm,if=buff.snapfire.up
# Relaxed Dragonrage Entry Requirements, cannot reliably reach third extend under normal conditions (Bloodlust + Power Infusion/Very high haste gear) DS optimization: Only cast if current fight will last 32s+ or encounter ends in less than 30s
actions.st+=/dragonrage,if=cooldown.fire_breath.remains<4&cooldown.eternity_surge.remains<10&target.time_to_die>=32|boss&fight_remains<32
# Tip second FB if not playing font of magic or if playing EBF, otherwise tip ES.
actions.st+=/tip_the_scales,if=buff.dragonrage.up&(((!talent.font_of_magic|talent.everburning_flame)&cooldown.fire_breath.remains<cooldown.eternity_surge.remains&buff.dragonrage.remains<14)|(cooldown.eternity_surge.remains<cooldown.fire_breath.remains&!talent.everburning_flame&talent.font_of_magic))
# Fire breath logic. Play around blazing shards if outside of DR. DS optimization: Only cast if current fight will last 8s+ or encounter ends in less than 30s
actions.st+=/call_action_list,name=fb,if=empowering.fire_breath|(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_st|!talent.animosity)&(buff.blazing_shards.remains<variable.r1_cast_time|buff.dragonrage.up)&(!cooldown.eternity_surge.up|!talent.event_horizon|!buff.dragonrage.up)&(target.time_to_die>=8|boss&fight_remains<30)
# Throw Star on CD, Don't overcap with Arcane Vigor.
actions.st+=/shattering_star,if=(buff.essence_burst.stack<buff.essence_burst.max_stack|!talent.arcane_vigor)&(!cooldown.eternity_surge.up|!buff.dragonrage.up|!talent.event_horizon)
# Eternity Surge logic. Play around blazing shards if outside of DR. DS optimization: Only cast if current fight will last 8s+ or encounter ends in less than 30s
actions.st+=/call_action_list,name=es,if=empowering.eternity_surge|(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_st|!talent.animosity)&(buff.blazing_shards.remains<variable.r1_cast_time|buff.dragonrage.up)&(target.time_to_die>=8|fight_remains<30)
# Wait for FB/ES to be ready if spending another GCD would result in the cast no longer fitting inside of DR
actions.st+=/wait,sec=cooldown.fire_breath.remains,if=talent.animosity&buff.dragonrage.up&buff.dragonrage.remains<gcd.max+variable.r1_cast_time*buff.tip_the_scales.down&buff.dragonrage.remains-cooldown.fire_breath.remains>=variable.r1_cast_time*buff.tip_the_scales.down
actions.st+=/wait,sec=cooldown.eternity_surge.remains,if=talent.animosity&buff.dragonrage.up&buff.dragonrage.remains<gcd.max+variable.r1_cast_time&buff.dragonrage.remains-cooldown.eternity_surge.remains>variable.r1_cast_time*buff.tip_the_scales.down
# Spend the last 1 or 2 GCDs of DR on fillers to exit with 2 EBs
actions.st+=/living_flame,if=buff.dragonrage.up&buff.dragonrage.remains<(buff.essence_burst.max_stack-buff.essence_burst.stack)*gcd.max&buff.burnout.up
actions.st+=/azure_strike,if=buff.dragonrage.up&buff.dragonrage.remains<(buff.essence_burst.max_stack-buff.essence_burst.stack)*gcd.max
# Spend burnout procs without overcapping resources
actions.st+=/living_flame,if=buff.burnout.up&(buff.leaping_flames.up&!buff.essence_burst.up|!buff.leaping_flames.up&buff.essence_burst.stack<buff.essence_burst.max_stack)&essence.deficit>=2
# Spend pyre if raging inferno debuff is active and you have 20 stacks of CB on 2T
actions.st+=/pyre,if=debuff.in_firestorm.up&talent.raging_inferno&buff.charged_blast.stack=20&active_enemies>=2
# Dis logic Early Chain if needed for resources management. Clip after in DR after third tick for more important buttons.
actions.st+=/disintegrate,chain=1,early_chain_if=evoker.use_early_chaining&ticks>=2&buff.dragonrage.up&(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
# Hard cast only outside of SS and DR windows
actions.st+=/firestorm,if=!buff.dragonrage.up&debuff.shattering_star_debuff.down
# Use Deep Breath on 2T, unless adds will come before it'll be ready again or if talented ID.
actions.st+=/deep_breath,if=!buff.dragonrage.up&active_enemies>=2&((raid_event.adds.in>=120&!talent.onyx_legacy)|(raid_event.adds.in>=60&talent.onyx_legacy))
actions.st+=/deep_breath,if=!buff.dragonrage.up&talent.imminent_destruction&!debuff.shattering_star_debuff.up
# Get Ancient Flame as Filler
actions.st+=/call_action_list,name=green,if=talent.ancient_flame&!buff.ancient_flame.up&!buff.shattering_star_debuff.up&talent.scarlet_adaptation&!buff.dragonrage.up
# Cast LF outside of DR, In DR only cast with Iridescence.
actions.st+=/living_flame,if=!buff.dragonrage.up|(buff.iridescence_red.remains>execute_time|buff.iridescence_blue.up)&active_enemies=1
# Fallback for movement
actions.st+=/azure_strike
# Use Dreambinder on CD
actions.trinkets+=/use_item,name=dreambinder_loom_of_the_great_cycle,use_off_gcd=1,if=gcd.remains>0.5
actions.trinkets+=/use_item,name=iridal_the_earths_master,cycle_targets=1,use_off_gcd=1,if=gcd.remains>0.5
# Nymues is used before Dragonrage unless you have PI and Event Horizon, then it is used on 2 Stacks of Emerald Trance. In AoE it is used before DR.
actions.trinkets+=/use_item,name=nymues_unraveling_spindle,if=(buff.emerald_trance_stacking.stack>=2&variable.has_external_pi&talent.event_horizon|cooldown.dragonrage.remains<=3&cooldown.fire_breath.remains<7&cooldown.eternity_surge.remains<13&target.time_to_die>=35&(!variable.has_external_pi&active_enemies<=2|!talent.event_horizon|!set_bonus.tier31_2pc))|cooldown.dragonrage.remains<=3&active_enemies>=3|fight_remains<=20
# Belorrelos is used on CD if not playing Nymues, it is used after Nymues if it is played. On AoE use after other use trinket.
actions.trinkets+=/use_item,name=belorrelos_the_suncaller,if=(((trinket.2.cooldown.remains|!variable.trinket_2_buffs)&(trinket.1.cooldown.remains|!variable.trinket_1_buffs)|active_enemies<=2)&(trinket.nymues_unraveling_spindle.cooldown.remains|!equipped.nymues_unraveling_spindle))|fight_remains<=20
# 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&((buff.emerald_trance_stacking.stack>=4&set_bonus.tier31_2pc)|(variable.trinket_2_buffs&!cooldown.fire_breath.up&!cooldown.shattering_star.up&!equipped.nymues_unraveling_spindle&trinket.2.cooldown.remains)|(!cooldown.fire_breath.up&!cooldown.shattering_star.up&!set_bonus.tier31_2pc)|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)
actions.trinkets+=/use_item,slot=trinket2,if=buff.dragonrage.up&((buff.emerald_trance_stacking.stack>=4&set_bonus.tier31_2pc)|(variable.trinket_1_buffs&!cooldown.fire_breath.up&!cooldown.shattering_star.up&!equipped.nymues_unraveling_spindle&trinket.1.cooldown.remains)|(!cooldown.fire_breath.up&!cooldown.shattering_star.up&!set_bonus.tier31_2pc)|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)
# 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,slot=trinket1,if=!variable.trinket_1_buffs&(trinket.2.cooldown.remains|!variable.trinket_2_buffs)&(variable.next_dragonrage>20|!talent.dragonrage)&!variable.trinket_1_manual
actions.trinkets+=/use_item,slot=trinket2,if=!variable.trinket_2_buffs&(trinket.1.cooldown.remains|!variable.trinket_1_buffs)&(variable.next_dragonrage>20|!talent.dragonrage)&!variable.trinket_2_manual