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.
144 lines
19 KiB
144 lines
19 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
|
|
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
|
|
# 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
|
|
actions.precombat+=/variable,name=trinket_2_manual,value=trinket.2.is.spoils_of_neltharus
|
|
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 TODO: multiplier should be 1.0 but 1.3 results in more dps for EBF builds
|
|
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
|
|
actions.precombat+=/verdant_embrace,if=talent.scarlet_adaptation&talent.firestorm
|
|
actions.precombat+=/use_item,name=shadowed_orb_of_torment
|
|
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.power_infusion.up&!cooldown.fire_breath.up&!cooldown.shattering_star.up
|
|
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; Actually kinda clean now Open with star before DR to save a global and start with a free EB
|
|
actions.aoe+=/variable,name=dr_prep_time_aoe,value=4
|
|
# Open with star before DR to save a global and start with a free EB
|
|
actions.aoe+=/shattering_star,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+=/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=(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_aoe|!talent.animosity)&(buff.power_swell.remains<variable.r1_cast_time&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=buff.dragonrage.up|!talent.dragonrage|(cooldown.dragonrage.remains>variable.dr_prep_time_aoe&buff.power_swell.remains<variable.r1_cast_time&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 running imminent destruction. - I'm assuming that casting DB inside of DR with imminent before you start spending should be an increase, but might be worth to save it for outside of DR for more value?
|
|
actions.aoe+=/deep_breath,if=!buff.dragonrage.up
|
|
# 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
|
|
# Pyre logic with volatility. Pyre 4T+ Pyre on 3T if playing CB and neither EB or blue buff is up Pyre on 3T if not playing CB aslong as both EB and blue buff isn't up at the same time. Pyre with 15 stacks of CB Pyre with raging debuff active
|
|
actions.aoe+=/pyre,if=talent.volatility&(active_enemies>=4|(talent.charged_blast&!buff.essence_burst.up&!buff.iridescence_blue.up)|(!talent.charged_blast&(!buff.essence_burst.up|!buff.iridescence_blue.up))|(buff.charged_blast.stack>=15)|(talent.raging_inferno&debuff.in_firestorm.up))
|
|
# Pyre logic without volatility. Without Vola use pyre if raging debuff is active, or if on 3T with 15 stacks of CB, or if 4T+
|
|
actions.aoe+=/pyre,if=(talent.raging_inferno&debuff.in_firestorm.up)|(active_enemies=3&buff.charged_blast.stack>=15)|active_enemies>=4
|
|
# 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,if=(!talent.burnout|buff.burnout.up|active_enemies>=4|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&(buff.dragonrage.up|essence.deficit<=1)&ticks>=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=!moving|buff.hover.up
|
|
# Cast LF with burnout and snapfire(kekW) proc for those juicy insta firestorms
|
|
actions.aoe+=/living_flame,if=talent.snapfire&buff.burnout.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.eternitys_span&active_enemies>=6|talent.eternitys_span&active_enemies>=8)
|
|
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<30
|
|
# 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.up&!cooldown.eternity_surge.up&buff.dragonrage.remains<14)|(cooldown.eternity_surge.up&!cooldown.fire_breath.up&!talent.everburning_flame&talent.font_of_magic))
|
|
# Fire breath logic Play around power swell if you don't have pi or lust up. 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=set_bonus.tier30_4pc&(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_st|!talent.animosity)&((buff.power_swell.remains<variable.r1_cast_time|buff.bloodlust.up|buff.power_infusion.up|buff.dragonrage.up)&(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)
|
|
# FB logic for T29, keeping for legacy support
|
|
actions.st+=/call_action_list,name=fb,if=!set_bonus.tier30_4pc&(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_st|!talent.animosity)&((buff.limitless_potential.remains<variable.r1_cast_time|!buff.power_infusion.up)&buff.power_swell.remains<variable.r1_cast_time&buff.blazing_shards.remains<variable.r1_cast_time)&(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.fire_breath.up|!talent.event_horizon)
|
|
# Eternity Surge logic Play around power swell if you don't have pi or lust up. 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=set_bonus.tier30_4pc&(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_st|!talent.animosity)&((buff.power_swell.remains<variable.r1_cast_time|buff.bloodlust.up|buff.power_infusion.up)&(buff.blazing_shards.remains<variable.r1_cast_time|buff.dragonrage.up))&(target.time_to_die>=8|boss&fight_remains<30)
|
|
# ES logic for T29, keeping for legacy support
|
|
actions.st+=/call_action_list,name=es,if=!set_bonus.tier30_4pc&(!talent.dragonrage|variable.next_dragonrage>variable.dr_prep_time_st|!talent.animosity)&((buff.limitless_potential.remains<variable.r1_cast_time|!buff.power_infusion.up)&buff.power_swell.remains<variable.r1_cast_time&buff.blazing_shards.remains<variable.r1_cast_time)&(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 in DR after third tick if both lust & pi isn't up. Clip after in DR after third tick for more important buttions, atm that is: empowers, burnout & SS. burnout and SS you only clip for if both lust & pi isn't up.
|
|
actions.st+=/disintegrate,chain=1,early_chain_if=evoker.use_early_chaining&ticks>=2&buff.dragonrage.up&!(buff.power_infusion.up&buff.bloodlust.up)&(raid_event.movement.in>2|buff.hover.up),interrupt_if=!(time<9&cooldown.eternity_surge.up&active_enemies<=2&!set_bonus.tier30_4pc|active_enemies>2)&evoker.use_clipping&buff.dragonrage.up&ticks>=2&(!(buff.power_infusion.up&buff.bloodlust.up)|cooldown.fire_breath.up|cooldown.eternity_surge.up)&(raid_event.movement.in>2|buff.hover.up),if=set_bonus.tier30_4pc&raid_event.movement.in>2|buff.hover.up
|
|
# Dis logic for T29, keeping for legacy support - Early Chain in DR 3rd tick. Clip after third tick in dragonrage for more important buttons. Will only cast if >2s till movement
|
|
actions.st+=/disintegrate,chain=1,early_chain_if=evoker.use_early_chaining&buff.dragonrage.up&ticks>=2&(raid_event.movement.in>2|buff.hover.up),interrupt_if=!(time<9&cooldown.eternity_surge.up&active_enemies<=2&!set_bonus.tier30_4pc|active_enemies>2)&evoker.use_clipping&buff.dragonrage.up&ticks>=2&(raid_event.movement.in>2|buff.hover.up),if=!set_bonus.tier30_4pc&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
|
|
|
|
# With spoils try to fish for non vers buff before you using it on <=2T, use regardless of buff when 18s is left on DR. Don't fish when >=3T.
|
|
actions.trinkets+=/use_item,name=spoils_of_neltharus,if=buff.dragonrage.up&(active_enemies>=3|!buff.spoils_of_neltharus_vers.up&!cooldown.fire_breath.up&!cooldown.shattering_star.up|buff.dragonrage.remains+4*((cooldown.eternity_surge.remains<=gcd.max*2)+(cooldown.fire_breath.remains<=gcd.max*2))<=18)|boss&fight_remains<=20
|
|
# The trinket with the highest estimated value, will be used first and paired with Dragonrage.
|
|
actions.trinkets+=/use_item,slot=trinket1,if=buff.dragonrage.up&((!cooldown.fire_breath.up&!cooldown.shattering_star.up)|active_enemies>=3|(buff.dragonrage.remains+4*((cooldown.eternity_surge.remains<=gcd.max*2)+(cooldown.fire_breath.remains<=gcd.max*2))<=18))&(!trinket.2.has_cooldown|trinket.2.cooldown.remains|variable.trinket_priority=1|variable.trinket_2_exclude)&!variable.trinket_1_manual|boss&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&((!cooldown.fire_breath.up&!cooldown.shattering_star.up)|active_enemies>=3|(buff.dragonrage.remains+4*((cooldown.eternity_surge.remains<=gcd.max*2)+(cooldown.fire_breath.remains<=gcd.max*2))<=18))&(!trinket.1.has_cooldown|trinket.1.cooldown.remains|variable.trinket_priority=2|variable.trinket_1_exclude)&!variable.trinket_2_manual|boss&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
|