Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 25 additions & 19 deletions engine/class_modules/apl/apl_evoker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,31 +78,36 @@ void devastation( player_t* p )
precombat->add_action( "hover,if=talent.slipstream" );
precombat->add_action( "living_flame" );

default_->add_action( "potion,if=(!talent.dragonrage|buff.dragonrage.up)|fight_remains<35" );
default_->add_action( "potion,if=!talent.dragonrage|buff.dragonrage.up|fight_remains<35" );
default_->add_action( "variable,name=next_dragonrage,value=cooldown.dragonrage.remains<?((cooldown.eternity_surge.remains-8)>?(cooldown.fire_breath.remains-8))" );
default_->add_action( "invoke_external_buff,name=power_infusion,if=buff.dragonrage.up|fight_remains<35" );
default_->add_action( "variable,name=can_use_empower,op=set,value=cooldown.dragonrage.remains>=gcd.max*variable.dr_prep_time,if=talent.animosity&talent.dragonrage" );
default_->add_action( "variable,name=use_pyre_fs,op=set,value=talent.legacy_of_the_lifebinder&(active_enemies>=5|active_enemies>=3&(talent.volatility.rank=2|talent.feed_the_flames))" );
default_->add_action( "variable,name=cb_ready,op=set,value=(active_enemies>=4|active_enemies>=3&talent.volatility.rank=2)&talent.charged_blast&buff.charged_blast.stack>=15" );
default_->add_action( "variable,name=use_tts,op=set,value=(cooldown.eternity_surge.remains<=action.fire_breath.usable_in),if=talent.legacy_of_the_lifebinder" );
default_->add_action( "quell,use_off_gcd=1,if=target.debuff.casting.react" );
default_->add_action( "call_action_list,name=trinkets" );
default_->add_action( "run_action_list,name=sc,if=talent.mass_disintegrate" );
default_->add_action( "run_action_list,name=fs" );

sc->add_action( "deep_breath,if=buff.strafing_run.remains<=gcd.max*2,cancel_if=gcd.remains<=0", "SC Action List. Use Deep Breath to optimise for Strafing Run" );
sc->add_action( "dragonrage,if=target.time_to_die>=30&raid_event.adds.in>=60|!raid_event.adds.exists|raid_event.adds.in=0" );
sc->add_action( "dragonrage,if=target.time_to_die>=30&raid_event.adds.in>=60|!raid_event.adds.exists|raid_event.adds.in=0|talent.rising_fury_4&fight_remains<=50|fight_remains<=20" );
sc->add_action( "hover,use_off_gcd=1,if=raid_event.movement.in<6&!buff.hover.up&gcd.remains>=0.5|talent.slipstream&gcd.remains>=0.5" );
sc->add_action( "azure_sweep,if=(buff.essence_burst.down|!buff.essence_burst.at_max_stacks)&set_bonus.mid1_2pc&cooldown.eternity_surge.remains<=6", "Use Azure Sweep if Eternity Surge is reasonably Soon. This is not a magic number, it's just simpler than writing out the expansion to account for azure sweep stacks." );
sc->add_action( "call_action_list,name=es", "Swell Gaming with EoI is good, With EH its bad" );
sc->add_action( "tip_the_scales,use_off_gcd=1,if=action.fire_breath.ready" );
sc->add_action( "call_action_list,name=fb_sc" );
sc->add_action( "deep_breath,if=active_enemies>=2,cancel_if=gcd.remains=0", "Using DB whenever is neutral at 2T and a gain above" );
sc->add_action( "disintegrate,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&buff.charged_blast.stack<15,interrupt_if=talent.volatility&active_enemies>=8" );
sc->add_action( "pyre,target_if=max:target.health.pct,if=(active_enemies>=5|active_enemies>=4&talent.volatility.rank=2)&!buff.mass_disintegrate_stacks.up|active_enemies>=3&talent.charged_blast&buff.charged_blast.stack>=15" );
sc->add_action( "disintegrate,target_if=max:dot.fire_breath_damage.remains,if=(raid_event.movement.in>2|buff.hover.up),early_chain_if=ticks_remain<=1,interrupt_if=ticks_remain<=1&active_enemies>=3" );
sc->add_action( "unbound_flame,if=!buff.essence_burst.at_max_stacks&buff.unbound_flame.remains<=(buff.unbound_flame.stack+3)*gcd.max*2" );
sc->add_action( "unbound_flame,if=!buff.essence_burst.up&active_enemies>2&buff.mass_disintegrate_stacks.up" );
sc->add_action( "disintegrate,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&(buff.charged_blast.stack<15|!variable.cb_ready)", "Dedicated Mass Disintegrate" );
sc->add_action( "pyre,target_if=max:target.health.pct,if=active_enemies>=5|active_enemies>=4&talent.volatility.rank=2|variable.cb_ready" );
sc->add_action( "disintegrate,target_if=max:dot.fire_breath_damage.remains,if=(raid_event.movement.in>2|buff.hover.up),early_chain_if=ticks_remain<=1,interrupt_if=ticks_remain<=1&active_enemies>=3", "Dedicated Normal Disintegrate" );
sc->add_action( "azure_sweep,if=active_enemies>3&!buff.essence_burst.at_max_stacks&!buff.iridescence_blue.up" );
sc->add_action( "living_flame,if=buff.burnout.up&buff.leaping_flames.up&active_enemies<=1+buff.leaping_flames.stack" );
sc->add_action( "unbound_flame,if=!buff.essence_burst.at_max_stacks" );
sc->add_action( "azure_sweep" );
sc->add_action( "azure_strike,if=!talent.ruby_embers&!talent.engulfing_blaze&active_enemies>=2" );
sc->add_action( "living_flame,if=raid_event.movement.in>execute_time|buff.hover.up" );
sc->add_action( "call_action_list,name=green,if=talent.ancient_flame&!buff.ancient_flame.up&talent.scarlet_adaptation&!buff.dragonrage.up" );
sc->add_action( "azure_strike" );
Expand All @@ -111,37 +116,38 @@ void devastation( player_t* p )
fs->add_action( "dragonrage,if=target.time_to_die>=30&raid_event.adds.in>=60|target.time_to_die>=15&active_enemies>4|!raid_event.adds.exists|raid_event.adds.in=0" );
fs->add_action( "hover,use_off_gcd=1,if=raid_event.movement.in<6&!buff.hover.up&gcd.remains>=0.5&!variable.use_pyre_fs" );
fs->add_action( "tip_the_scales,use_off_gcd=1,if=buff.dragonrage.up&variable.use_tts" );
fs->add_action( "call_action_list,name=es,if=variable.can_use_empower|buff.tip_the_scales.up", "Target Match with ES (Hitting everything is priority over lower ranks)" );
fs->add_action( "eternity_surge,empower_to=1,target_if=max:target.health.pct,if=target.time_to_die>duration&(variable.can_use_empower|buff.tip_the_scales.up)", "Upranking is just not worth it for FS (might be when playing salvo but playing salvo on FS is unrealistic in the first place)" );
fs->add_action( "call_action_list,name=fb_fs,if=variable.can_use_empower&dot.fire_breath_damage.refreshable&!buff.tip_the_scales.up", "Upranking in 2-3T is back on the menu boys" );
fs->add_action( "pyre,target_if=max:target.health.pct,if=variable.use_pyre_fs" );
fs->add_action( "disintegrate,target_if=max:dot.fire_breath_damage.remains,chain=1,if=(raid_event.movement.in>2|buff.hover.up),early_chain_if=ticks_remain<=1,interrupt_if=ticks_remain<=1" );
fs->add_action( "deep_breath,if=talent.imminent_destruction&active_dot.fire_breath_damage=0&active_enemies>=4,cancel_if=gcd.remains=0,interrupt_if=gcd.remains=0", "Queue the token deep breath condition" );
fs->add_action( "unbound_flame,target_if=max:dot.fire_breath_damage.remains,if=!buff.essence_burst.at_max_stacks&(!talent.scorching_embers|active_dot.fire_breath_damage>0)", "Aim at the ones that are burning" );
fs->add_action( "living_flame,if=buff.burnout.up|buff.leaping_flames.up&active_enemies>=4|(buff.leaping_flames.up|buff.ancient_flame.up)&raid_event.movement.in>execute_time" );
fs->add_action( "azure_sweep", "Sweep is worse than LF with procs" );
fs->add_action( "azure_strike,if=!talent.ruby_embers&!talent.engulfing_blaze&active_enemies>=2" );
fs->add_action( "living_flame,if=raid_event.movement.in>execute_time" );
fs->add_action( "call_action_list,name=green,if=talent.ancient_flame&!buff.ancient_flame.up&talent.scarlet_adaptation&!buff.dragonrage.up&active_enemies<4" );
fs->add_action( "azure_strike" );

es->add_action( "eternity_surge,empower_to=4,target_if=max:target.health.pct,if=(active_enemies=4+4*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=4+4*talent.eternitys_span-talent.star_salvo)&talent.star_salvo", "Pick optimal Eternity Surge Rank" );
es->add_action( "eternity_surge,empower_to=3,target_if=max:target.health.pct,if=(active_enemies=3+3*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=3+3*talent.eternitys_span-talent.star_salvo)&talent.star_salvo" );
es->add_action( "eternity_surge,empower_to=2,target_if=max:target.health.pct,if=(active_enemies=2+2*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=2+2*talent.eternitys_span-talent.star_salvo)&talent.star_salvo" );
es->add_action( "eternity_surge,empower_to=1,target_if=max:target.health.pct" );
es->add_action( "eternity_surge,empower_to=4,target_if=max:target.health.pct,if=((active_enemies>=4+4*talent.eternitys_span)&(active_enemies<=6+4*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=4+3*talent.eternitys_span-talent.star_salvo)&talent.star_salvo)&target.time_to_die>duration", "Pick optimal Eternity Surge Rank" );
es->add_action( "eternity_surge,empower_to=3,target_if=max:target.health.pct,if=((active_enemies>=3+2*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=3+2*talent.eternitys_span-talent.star_salvo)&talent.star_salvo)&target.time_to_die>duration" );
es->add_action( "eternity_surge,empower_to=2,target_if=max:target.health.pct,if=((active_enemies>=2+2*talent.eternitys_span)&!talent.star_salvo|(active_enemies>=2+1*talent.eternitys_span-talent.star_salvo)&talent.star_salvo)&target.time_to_die>duration" );
es->add_action( "eternity_surge,empower_to=1,target_if=max:target.health.pct,if=target.time_to_die>duration" );

fb_fs->add_action( "fire_breath,empower_to=1,target_if=max:target.health.pct,if=active_enemies=1|variable.use_pyre_fs", "Fire Breath Upranking" );
fb_fs->add_action( "fire_breath,empower_to=2,target_if=max:target.health.pct,if=active_enemies=2|buff.dragonrage.up|buff.rising_fury.up" );
fb_fs->add_action( "fire_breath,empower_to=3,target_if=max:target.health.pct,if=active_enemies>=3", "Cap at R3 since R4 is just sort of bad for all cases" );
fb_fs->add_action( "fire_breath,empower_to=1,target_if=max:target.health.pct,if=(active_enemies=1|variable.use_pyre_fs)&target.time_to_die>duration", "Fire Breath Upranking" );
fb_fs->add_action( "fire_breath,empower_to=2,target_if=max:target.health.pct,if=(active_enemies=2|buff.dragonrage.up|buff.rising_fury.up)&target.time_to_die>duration" );
fb_fs->add_action( "fire_breath,empower_to=3,target_if=max:target.health.pct,if=active_enemies>=3&target.time_to_die>duration", "Cap at R3 since R4 is just sort of bad for all cases" );

fb_sc->add_action( "fire_breath,empower_to=1,target_if=max:target.health.pct,if=active_enemies=1|active_enemies>4", "Fire Breath Upranking" );
fb_sc->add_action( "fire_breath,empower_to=2,target_if=max:target.health.pct,if=active_enemies=2" );
fb_sc->add_action( "fire_breath,empower_to=3,target_if=max:target.health.pct,if=active_enemies=3" );
fb_sc->add_action( "fire_breath,empower_to=4,target_if=max:target.health.pct,if=active_enemies=4" );
fb_sc->add_action( "fire_breath,empower_to=1,target_if=max:target.health.pct,if=(active_enemies=1|active_enemies>4)&target.time_to_die>duration", "Fire Breath Upranking" );
fb_sc->add_action( "fire_breath,empower_to=2,target_if=max:target.health.pct,if=active_enemies=2&target.time_to_die>duration" );
fb_sc->add_action( "fire_breath,empower_to=3,target_if=max:target.health.pct,if=active_enemies=3&target.time_to_die>duration" );
fb_sc->add_action( "fire_breath,empower_to=4,target_if=max:target.health.pct,if=active_enemies=4&target.time_to_die>duration" );

green->add_action( "emerald_blossom", "Green Spells for Ancient Flame" );
green->add_action( "verdant_embrace" );

trinkets->add_action( "use_item,slot=trinket1,if=(buff.dragonrage.up&(buff.rising_fury.stack>=4|!talent.rising_fury|talent.legacy_of_the_lifebinder)&((variable.trinket_2_buffs&!cooldown.fire_breath.up&trinket.2.cooldown.remains)|buff.tip_the_scales.up&variable.trinket_priority=1|(!cooldown.fire_breath.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)", "Trinket Spaghetti" );
trinkets->add_action( "use_item,slot=trinket2,if=buff.dragonrage.up&(buff.rising_fury.stack>=4|!talent.rising_fury|talent.legacy_of_the_lifebinder)&((variable.trinket_1_buffs&!cooldown.fire_breath.up&trinket.1.cooldown.remains)|buff.tip_the_scales.up&variable.trinket_priority=2|(!cooldown.fire_breath.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" );
trinkets->add_action( "use_item,slot=trinket1,if=(buff.dragonrage.up&(buff.rising_fury.stack>=4|!talent.rising_fury|talent.legacy_of_the_lifebinder)&((variable.trinket_2_buffs&!cooldown.fire_breath.up&trinket.2.cooldown.remains)|buff.tip_the_scales.up&variable.trinket_priority=1|(!cooldown.fire_breath.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.is.hex_lords_dooming_idol|time>=120)|trinket.1.proc.any_dps.duration>=fight_remains|!trinket.1.is.hex_lords_dooming_idol&trinket.1.cooldown.duration<=60&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=1)&!variable.trinket_1_manual)", "Trinket Spaghetti" );
trinkets->add_action( "use_item,slot=trinket2,if=buff.dragonrage.up&(buff.rising_fury.stack>=4|!talent.rising_fury|talent.legacy_of_the_lifebinder)&((variable.trinket_1_buffs&!cooldown.fire_breath.up&trinket.1.cooldown.remains)|buff.tip_the_scales.up&variable.trinket_priority=2|(!cooldown.fire_breath.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.is.hex_lords_dooming_idol|time>=120)|trinket.2.proc.any_dps.duration>=fight_remains|!trinket.2.is.hex_lords_dooming_idol&trinket.2.cooldown.duration<=60&(variable.next_dragonrage>20|!talent.dragonrage)&(!buff.dragonrage.up|variable.trinket_priority=2)&!variable.trinket_2_manual" );
trinkets->add_action( "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.fire_breath.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)" );
trinkets->add_action( "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))" );
trinkets->add_action( "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))" );
Expand Down
Loading