From 3b0f7c5f53f80316c9f17d3c75d1e6d7c175bebd Mon Sep 17 00:00:00 2001 From: Mlklock <118071530+Mlklock@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:39:43 -0300 Subject: [PATCH] [Warlock] Fix default APL syntax errors (#9370) * Update warlock.cpp Adding commas to comments. * Update warlock.cpp removed the +- * Update warlock.cpp * Remove extra closing parens from Affliction line --------- Co-authored-by: Azevara <46403881+Azevara@users.noreply.github.com> --- engine/class_modules/apl/warlock.cpp | 91 ++++++++++++++-------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/engine/class_modules/apl/warlock.cpp b/engine/class_modules/apl/warlock.cpp index 096d2c464b3..c54053c8fd8 100644 --- a/engine/class_modules/apl/warlock.cpp +++ b/engine/class_modules/apl/warlock.cpp @@ -52,17 +52,18 @@ void affliction( player_t* p ) precombat->add_action( "augmentation" ); precombat->add_action( "summon_pet" ); precombat->add_action( "variable,name=cleave_apl,default=0,op=reset" ); - precombat->add_action( "variable,name=trinket_1_buffs,value=trinket.1.has_use_buff" "Used to set Trinkets as Buff Trinkets for the automatic logic" ); - precombat->add_action( "variable,name=trinket_2_buffs,value=trinket.2.has_use_buff" "Used to set Trinkets as Buff Trinkets for the automatic logic" ); - precombat->add_action( "variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.soul_rot.duration=0|cooldown.soul_rot.duration%%trinket.1.cooldown.duration=0)" "Automatic Logic for Buff Trinkets in Trinket Slot 1" ); - precombat->add_action( "variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.soul_rot.duration=0|cooldown.soul_rot.duration%%trinket.2.cooldown.duration=0)" "Automatic Logic for Buff Trinkets in Trinket Slot 2" ); - precombat->add_action( "variable,name=trinket_1_manual,value=trinket.1.is.spymasters_web|trinket.1.is.aberrant_spellforge" " Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); - precombat->add_action( "variable,name=trinket_2_manual,value=trinket.2.is.spymasters_web|trinket.2.is.aberrant_spellforge" " Sets a specific Trinkets in Slot 2 to follow an APL line and not the automatic logic " ); - precombat->add_action( "variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell" "For On Use Trinkets on slot 1 with on use effects you dont want to use in combat" ); - precombat->add_action( "variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell" "For On Use Trinkets on Slot 2 with on use effects you don't want to use in combat" ); - precombat->add_action( "variable,name=trinket_1_buff_duration,value=trinket.1.proc.any_dps.duration+(trinket.1.is.mirror_of_fractured_tomorrows*20)" " Sets the duration of Trinket 1 in the automatic logic" ); - precombat->add_action( "variable,name=trinket_2_buff_duration,value=trinket.2.proc.any_dps.duration+(trinket.2.is.mirror_of_fractured_tomorrows*20)" " Sets the duration of Trinket 2 in the automatic logic" ); - precombat->add_action( "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%variable.trinket_2_buff_duration)*(1+0.5*trinket.2.has_buff.intellect)*(variable.trinket_2_sync)))>((trinket.1.cooldown.duration%variable.trinket_1_buff_duration)*(1+0.5*trinket.1.has_buff.intellect)*(variable.trinket_1_sync)))" "Automatic Logic in case of 2 On Use Buff Trinkets" ); + precombat->add_action( "variable,name=trinket_1_buffs,value=trinket.1.has_use_buff", "Used to set Trinket in slot 1 as Buff Trinkets for the automatic logic" ); + precombat->add_action( "variable,name=trinket_2_buffs,value=trinket.2.has_use_buff", "Used to set Trinkets in slot 2 as Buff Trinkets for the automatic logic" ); + precombat->add_action( "variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.soul_rot.duration=0|cooldown.soul_rot.duration%%trinket.1.cooldown.duration=0)", "Automatic Logic for Buff Trinkets in Trinket Slot 1" ); + precombat->add_action( "variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.soul_rot.duration=0|cooldown.soul_rot.duration%%trinket.2.cooldown.duration=0)", "Automatic Logic for Buff Trinkets in Trinket Slot 2" ); + precombat->add_action( "variable,name=trinket_1_manual,value=trinket.1.is.spymasters_web|trinket.1.is.aberrant_spellforge", " Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); + precombat->add_action( "variable,name=trinket_2_manual,value=trinket.2.is.spymasters_web|trinket.2.is.aberrant_spellforge", " Sets a specific Trinkets in Slot 2 to follow an APL line and not the automatic logic " ); + precombat->add_action( "variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell", "For On Use Trinkets on slot 1 with on use effects you dont want to use in combat" ); + precombat->add_action( "variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell", "For On Use Trinkets on Slot 2 with on use effects you don't want to use in combat" ); + precombat->add_action( "variable,name=trinket_1_buff_duration,value=trinket.1.proc.any_dps.duration+(trinket.1.is.mirror_of_fractured_tomorrows*20)", " Sets the duration of Trinket 1 in the automatic logic" ); + precombat->add_action( "variable,name=trinket_2_buff_duration,value=trinket.2.proc.any_dps.duration+(trinket.2.is.mirror_of_fractured_tomorrows*20)", " Sets the duration of Trinket 2 in the automatic logic" ); + precombat->add_action( "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%variable.trinket_2_buff_duration)*(1+0.5*trinket.2.has_buff.intellect)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%variable.trinket_1_buff_duration)*(1+0.5*trinket.1.has_buff.intellect)*(variable.trinket_1_sync))", "Automatic Logic in case of 2 On Use Buff Trinkets" ); + precombat->add_action( "grimoire_of_sacrifice,if=talent.grimoire_of_sacrifice.enabled" ); precombat->add_action( "snapshot_stats" ); precombat->add_action( "seed_of_corruption,if=spell_targets.seed_of_corruption_aoe>2|spell_targets.seed_of_corruption_aoe>1" ); @@ -211,25 +212,25 @@ void demonology( player_t* p ) precombat->add_action( "augmentation" ); precombat->add_action( "summon_pet" ); precombat->add_action( "snapshot_stats" ); - precombat->add_action( "variable,name=first_tyrant_time,op=set,value=12" "Sets the expected Tyrant Setup on pull to take a total 12 seconds long" ); - precombat->add_action( "variable,name=first_tyrant_time,op=add,value=action.grimoire_felguard.execute_time,if=talent.grimoire_felguard.enabled" "Accounts for the execution time of Grimoire Felguard in the setup of Tyrant on Pull" ); - precombat->add_action( "variable,name=first_tyrant_time,op=add,value=action.summon_vilefiend.execute_time,if=talent.summon_vilefiend.enabled" "Accounts for the execution time of Vilefiend in the the setup of Tyrant on Pull" ); - precombat->add_action( "variable,name=first_tyrant_time,op=add,value=gcd.max,if=talent.grimoire_felguard.enabled|talent.summon_vilefiend.enabled" "Accounts for the execution time of both Grimoire Felguard and Vilefiend in the tyrant Setup on Pull" ); - precombat->add_action( "variable,name=first_tyrant_time,op=sub,value=action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time" "Accounts for Tyrant own Cast Time and an additional Shadowbolt cast time" ); - precombat->add_action( "variable,name=first_tyrant_time,op=min,value=10" "Sets an absolute minimun of 10s for the First Tyrant Setup" ); + precombat->add_action( "variable,name=first_tyrant_time,op=set,value=12", "Sets the expected Tyrant Setup on pull to take a total 12 seconds long" ); + precombat->add_action( "variable,name=first_tyrant_time,op=add,value=action.grimoire_felguard.execute_time,if=talent.grimoire_felguard.enabled", "Accounts for the execution time of Grimoire Felguard in the setup of Tyrant on Pull" ); + precombat->add_action( "variable,name=first_tyrant_time,op=add,value=action.summon_vilefiend.execute_time,if=talent.summon_vilefiend.enabled", "Accounts for the execution time of Vilefiend in the the setup of Tyrant on Pull" ); + precombat->add_action( "variable,name=first_tyrant_time,op=add,value=gcd.max,if=talent.grimoire_felguard.enabled|talent.summon_vilefiend.enabled", "Accounts for the execution time of both Grimoire Felguard and Vilefiend in the tyrant Setup on Pull" ); + precombat->add_action( "variable,name=first_tyrant_time,op=sub,value=action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time", "Accounts for Tyrant own Cast Time and an additional Shadowbolt cast time" ); + precombat->add_action( "variable,name=first_tyrant_time,op=min,value=10", "Sets an absolute minimun of 10s for the First Tyrant Setup" ); precombat->add_action( "variable,name=in_opener,op=set,value=1" ); - precombat->add_action( "variable,name=trinket_1_buffs,value=trinket.1.has_use_buff" "Defines if the the Trinket 1 is a buff Trinket in the trinket logic" ); - precombat->add_action( "variable,name=trinket_2_buffs,value=trinket.2.has_use_buff" "Defines if the the Trinket 2 is a buff Trinket in the trinket logic" ); - precombat->add_action( "variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell" "For On Use Trinkets on slot 1 with on use effects you dont want to use in combat" ); - precombat->add_action( "variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell" "For On Use Trinkets on slot 2 with on use effects you dont want to use in combat" ); - precombat->add_action( "variable,name=trinket_1_manual,value=trinket.1.is.spymasters_web|trinket.1.is.imperfect_ascendancy_serum" "Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); - precombat->add_action( "variable,name=trinket_2_manual,value=trinket.2.is.spymasters_web|trinket.2.is.imperfect_ascendancy_serum" "Sets a specific Trinkets in Slot 2 to follow an APL line and not the automatic logic" ); - precombat->add_action( "variable,name=trinket_1_buff_duration,value=trinket.1.proc.any_dps.duration+(trinket.1.is.mirror_of_fractured_tomorrows*20)" "Defines the Duration of the buff or an expected time for value of the trinket" ); - precombat->add_action( "variable,name=trinket_2_buff_duration,value=trinket.2.proc.any_dps.duration+(trinket.2.is.mirror_of_fractured_tomorrows*20)" "Defines the Duration of the buff or an expected time for value of the trinket" ); - precombat->add_action( "variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.summon_demonic_tyrant.duration=0|cooldown.summon_demonic_tyrant.duration%%trinket.1.cooldown.duration=0)" "Trinket Automatic Logic for Trinket 1" ); - precombat->add_action( "variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.summon_demonic_tyrant.duration=0|cooldown.summon_demonic_tyrant.duration%%trinket.2.cooldown.duration=0)" "Trinket Automatic Logic for Trinket 2" ); - precombat->add_action( "variable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs&trinket.2.ilvl>trinket.1.ilvl" "Automatic Logic in case of 2 Buff Trinkets" ); - precombat->add_action( "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%variable.trinket_2_buff_duration)*(1.5+trinket.2.has_buff.intellect)*(variable.trinket_2_sync)*)>(((trinket.1.cooldown.duration%variable.trinket_1_buff_duration)*(1.5+trinket.1.has_buff.intellect)*(variable.trinket_1_sync)*)*(1+((trinket.1.ilvl-trinket.2.ilvl)%100)))" ); + precombat->add_action( "variable,name=trinket_1_buffs,value=trinket.1.has_use_buff", "Defines if the the Trinket 1 is a buff Trinket in the trinket logic" ); + precombat->add_action( "variable,name=trinket_2_buffs,value=trinket.2.has_use_buff", "Defines if the the Trinket 2 is a buff Trinket in the trinket logic" ); + precombat->add_action( "variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell", "For On Use Trinkets on slot 1 with on use effects you dont want to use in combat" ); + precombat->add_action( "variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell", "For On Use Trinkets on slot 2 with on use effects you dont want to use in combat" ); + precombat->add_action( "variable,name=trinket_1_manual,value=trinket.1.is.spymasters_web|trinket.1.is.imperfect_ascendancy_serum", "Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); + precombat->add_action( "variable,name=trinket_2_manual,value=trinket.2.is.spymasters_web|trinket.2.is.imperfect_ascendancy_serum", "Sets a specific Trinkets in Slot 2 to follow an APL line and not the automatic logic" ); + precombat->add_action( "variable,name=trinket_1_buff_duration,value=trinket.1.proc.any_dps.duration+(trinket.1.is.mirror_of_fractured_tomorrows*20)", "Defines the Duration of the buff or an expected time for value of the trinket" ); + precombat->add_action( "variable,name=trinket_2_buff_duration,value=trinket.2.proc.any_dps.duration+(trinket.2.is.mirror_of_fractured_tomorrows*20)", "Defines the Duration of the buff or an expected time for value of the trinket" ); + precombat->add_action( "variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.summon_demonic_tyrant.duration=0|cooldown.summon_demonic_tyrant.duration%%trinket.1.cooldown.duration=0)", "Trinket Automatic Logic for Trinket 1" ); + precombat->add_action( "variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.summon_demonic_tyrant.duration=0|cooldown.summon_demonic_tyrant.duration%%trinket.2.cooldown.duration=0)", "Trinket Automatic Logic for Trinket 2" ); + precombat->add_action( "variable,name=damage_trinket_priority,op=setif,value=2,value_else=1,condition=!variable.trinket_1_buffs&!variable.trinket_2_buffs&trinket.2.ilvl>trinket.1.ilvl", "Automatic Logic in case of 2 Buff Trinkets" ); + precombat->add_action( "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%variable.trinket_2_buff_duration)*(1.5+trinket.2.has_buff.intellect)*(variable.trinket_2_sync))>(((trinket.1.cooldown.duration%variable.trinket_1_buff_duration)*(1.5+trinket.1.has_buff.intellect)*(variable.trinket_1_sync))*(1+((trinket.1.ilvl-trinket.2.ilvl)%100)))" ); precombat->add_action( "power_siphon" ); precombat->add_action( "demonbolt,if=!buff.power_siphon.up" ); precombat->add_action( "shadow_bolt" ); @@ -331,14 +332,14 @@ void demonology( player_t* p ) variables->add_action( "variable,name=next_tyrant_cd,op=set,value=cooldown.summon_demonic_tyrant.remains_expected" ); variables->add_action( "variable,name=in_opener,op=set,value=0,if=pet.demonic_tyrant.active" ); - variables->add_action( "variable,name=imp_despawn,op=set,value=2*spell_haste*6+0.58+time,if=prev_gcd.1.hand_of_guldan&buff.dreadstalkers.up&cooldown.summon_demonic_tyrant.remains<13&variable.imp_despawn=0" "Sets an expected duration of valid Wild Imps on a tyrant Setup for the sake of casting Tyrant before expiration of Imps" ); - variables->add_action( "variable,name=imp_despawn,op=set,value=(variable.imp_despawn>?buff.dreadstalkers.remains+time),if=variable.imp_despawn" "Checks the Wild Imps in a Tyrant Setup alongside Dreadstalkers for the sake of casting Tyrant before Expiration Dreadstalkers or Imps" ); - variables->add_action( "variable,name=imp_despawn,op=set,value=variable.imp_despawn>?buff.grimoire_felguard.remains+time,if=variable.imp_despawn&buff.grimoire_felguard.up" "Checks The Wild Imps in a Tyrant Setup alongside Grimoire Felguard for the sake of casting Tyrant before Expiration of Grimoire Felguard or Imps" ); + variables->add_action( "variable,name=imp_despawn,op=set,value=2*spell_haste*6+0.58+time,if=prev_gcd.1.hand_of_guldan&buff.dreadstalkers.up&cooldown.summon_demonic_tyrant.remains<13&variable.imp_despawn=0", "Sets an expected duration of valid Wild Imps on a tyrant Setup for the sake of casting Tyrant before expiration of Imps" ); + variables->add_action( "variable,name=imp_despawn,op=set,value=(variable.imp_despawn>?buff.dreadstalkers.remains+time),if=variable.imp_despawn", "Checks the Wild Imps in a Tyrant Setup alongside Dreadstalkers for the sake of casting Tyrant before Expiration Dreadstalkers or Imps" ); + variables->add_action( "variable,name=imp_despawn,op=set,value=variable.imp_despawn>?buff.grimoire_felguard.remains+time,if=variable.imp_despawn&buff.grimoire_felguard.up", "Checks The Wild Imps in a Tyrant Setup alongside Grimoire Felguard for the sake of casting Tyrant before Expiration of Grimoire Felguard or Imps" ); variables->add_action( "variable,name=imp_despawn,op=set,value=0,if=buff.tyrant.up" ); - variables->add_action( "variable,name=impl,op=set,value=buff.tyrant.down,if=active_enemies>1+(talent.sacrificed_souls.enabled)" "Defines the viability of Implosion when Tyrant is down" ); - variables->add_action( "variable,name=impl,op=set,value=buff.tyrant.remains<6,if=active_enemies>2+(talent.sacrificed_souls.enabled)&active_enemies<5+(talent.sacrificed_souls.enabled)" "Defines the Viability of Implosion while Tyrant is Up" ); - variables->add_action( "variable,name=impl,op=set,value=buff.tyrant.remains<8,if=active_enemies>4+(talent.sacrificed_souls.enabled)" "Defines the Viability of Implosion while Tyrant is Up" ); - variables->add_action( "variable,name=pool_cores_for_tyrant,op=set,value=cooldown.summon_demonic_tyrant.remains<20&variable.next_tyrant_cd<20&(buff.demonic_core.stack<=2|!buff.demonic_core.up)&cooldown.summon_vilefiend.remainsadd_action( "variable,name=impl,op=set,value=buff.tyrant.down,if=active_enemies>1+(talent.sacrificed_souls.enabled)", "Defines the viability of Implosion when Tyrant is down" ); + variables->add_action( "variable,name=impl,op=set,value=buff.tyrant.remains<6,if=active_enemies>2+(talent.sacrificed_souls.enabled)&active_enemies<5+(talent.sacrificed_souls.enabled)", "Defines the Viability of Implosion while Tyrant is Up" ); + variables->add_action( "variable,name=impl,op=set,value=buff.tyrant.remains<8,if=active_enemies>4+(talent.sacrificed_souls.enabled)", "Defines the Viability of Implosion while Tyrant is Up" ); + variables->add_action( "variable,name=pool_cores_for_tyrant,op=set,value=cooldown.summon_demonic_tyrant.remains<20&variable.next_tyrant_cd<20&(buff.demonic_core.stack<=2|!buff.demonic_core.up)&cooldown.summon_vilefiend.remainsadd_action( "variable,name=diabolic_ritual_remains,value=buff.diabolic_ritual_mother_of_chaos.remains,if=buff.diabolic_ritual_mother_of_chaos.up" ); variables->add_action( "variable,name=diabolic_ritual_remains,value=buff.diabolic_ritual_overlord.remains,if=buff.diabolic_ritual_overlord.up" ); variables->add_action( "variable,name=diabolic_ritual_remains,value=buff.diabolic_ritual_pit_lord.remains,if=buff.diabolic_ritual_pit_lord.up" ); @@ -362,17 +363,17 @@ void destruction( player_t* p ) precombat->add_action( "augmentation" ); precombat->add_action( "summon_pet" ); precombat->add_action( "variable,name=cleave_apl,default=0,op=reset" ); - precombat->add_action( "variable,name=trinket_1_buffs,value=trinket.1.has_use_buff" "Automatic Logic for Buff Trinkets in Trinket Slot 1" ); - precombat->add_action( "variable,name=trinket_2_buffs,value=trinket.2.has_use_buff" "Automatic Logic for Buff Trinkets in Trinket Slot 2" ); + precombat->add_action( "variable,name=trinket_1_buffs,value=trinket.1.has_use_buff", "Automatic Logic for Buff Trinkets in Trinket Slot 1" ); + precombat->add_action( "variable,name=trinket_2_buffs,value=trinket.2.has_use_buff", "Automatic Logic for Buff Trinkets in Trinket Slot 2" ); precombat->add_action( "variable,name=trinket_1_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_1_buffs&(trinket.1.cooldown.duration%%cooldown.summon_infernal.duration=0|cooldown.summon_infernal.duration%%trinket.1.cooldown.duration=0)" ); precombat->add_action( "variable,name=trinket_2_sync,op=setif,value=1,value_else=0.5,condition=variable.trinket_2_buffs&(trinket.2.cooldown.duration%%cooldown.summon_infernal.duration=0|cooldown.summon_infernal.duration%%trinket.2.cooldown.duration=0)" ); - precombat->add_action( "variable,name=trinket_1_manual,value=trinket.1.is.spymasters_web" "Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); - precombat->add_action( "variable,name=trinket_2_manual,value=trinket.2.is.spymasters_web" "Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); - precombat->add_action( "variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell" "For On Use Trinkets on slot 1 with on use effects you dont want to use in combat" ); - precombat->add_action( "variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell" "For On Use Trinkets on slot 2 with on use effects you dont want to use in combat" ); - precombat->add_action( "variable,name=trinket_1_buff_duration,value=trinket.1.proc.any_dps.duration+(trinket.1.is.mirror_of_fractured_tomorrows*20)" "Sets the duration of the trinket in the automatic logic" ); - precombat->add_action( "variable,name=trinket_2_buff_duration,value=trinket.2.proc.any_dps.duration+(trinket.2.is.mirror_of_fractured_tomorrows*20)" "Sets the duration of the trinket in the automatic logic" ); - precombat->add_action( "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%variable.trinket_2_buff_duration)*(1+0.5*trinket.2.has_buff.intellect)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%variable.trinket_1_buff_duration)*(1+0.5*trinket.1.has_buff.intellect)*(variable.trinket_1_sync))" "Automatic Logic in case both Trinkets are on use buffs" ); + precombat->add_action( "variable,name=trinket_1_manual,value=trinket.1.is.spymasters_web", "Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); + precombat->add_action( "variable,name=trinket_2_manual,value=trinket.2.is.spymasters_web", "Sets a specific Trinkets in Slot 1 to follow an APL line and not the automatic logic" ); + precombat->add_action( "variable,name=trinket_1_exclude,value=trinket.1.is.ruby_whelp_shell", "For On Use Trinkets on slot 1 with on use effects you dont want to use in combat" ); + precombat->add_action( "variable,name=trinket_2_exclude,value=trinket.2.is.ruby_whelp_shell", "For On Use Trinkets on slot 2 with on use effects you dont want to use in combat" ); + precombat->add_action( "variable,name=trinket_1_buff_duration,value=trinket.1.proc.any_dps.duration+(trinket.1.is.mirror_of_fractured_tomorrows*20)", "Sets the duration of the trinket in the automatic logic" ); + precombat->add_action( "variable,name=trinket_2_buff_duration,value=trinket.2.proc.any_dps.duration+(trinket.2.is.mirror_of_fractured_tomorrows*20)", "Sets the duration of the trinket in the automatic logic" ); + precombat->add_action( "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%variable.trinket_2_buff_duration)*(1+0.5*trinket.2.has_buff.intellect)*(variable.trinket_2_sync))>((trinket.1.cooldown.duration%variable.trinket_1_buff_duration)*(1+0.5*trinket.1.has_buff.intellect)*(variable.trinket_1_sync))", "Automatic Logic in case both Trinkets are on use buffs" ); precombat->add_action( "variable,name=allow_rof_2t_spender,default=2,op=reset" ); precombat->add_action( "variable,name=do_rof_2t,value=variable.allow_rof_2t_spender>1.99&!(talent.cataclysm&talent.improved_chaos_bolt),op=set" ); precombat->add_action( "variable,name=disable_cb_2t,value=variable.do_rof_2t|variable.allow_rof_2t_spender>0.01&variable.allow_rof_2t_spender<0.99" );