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.

110 lines
9.9 KiB

5 years ago
## Demonology Warlock
## https://github.com/simulationcraft/simc/
## July 8, 2021
5 years ago
## Changes:
## - Spell Lock.
## - Only recommend Demonbolt pre-combat if it is instant (or hardcast for bosses).
## - Power Siphon allowed pre-combat to proc instant Demonbolt.
## - PvP talent interrupt.
## - Avoid SB->HoG spam when you're not about to summon a Tyrant.
## - Fleshcraft/Volatile Solvent cancel_if changed to interrupt_if.
# Executed before combat begins. Accepts non-harmful actions only.
actions.precombat+=/fel_domination,if=time>0&!pet.alive
actions.precombat+=/summon_pet
actions.precombat+=/use_item,name=tome_of_monstrous_constructions
actions.precombat+=/use_item,name=soleahs_secret_technique
actions.precombat+=/fleshcraft
actions.precombat+=/power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<=2
actions.precombat+=/demonbolt,if=(boss|action.demonbolt.cast=0)&soul_shards<4
actions.precombat+=/shadow_bolt,if=!(boss|action.demonbolt.cast=0)|soul_shards>3
actions.precombat+=/variable,name=first_tyrant_time,op=set,value=12
# Executed every time the actor is available.
actions=spell_lock
actions+=/call_felhunter
actions+=/axe_toss
actions+=/devour_magic
actions+=/call_action_list,name=trinkets
actions+=/doom,if=refreshable
actions+=/call_action_list,name=covenant_ability,strict=1,if=soulbind.grove_invigoration|soulbind.field_of_blossoms|soulbind.combat_meditation|covenant.necrolord
actions+=/call_action_list,name=tyrant_setup
actions+=/potion,if=(cooldown.summon_demonic_tyrant.remains_expected<10&time>variable.first_tyrant_time-10|soulbind.refined_palate&cooldown.summon_demonic_tyrant.remains_expected<38)
actions+=/call_action_list,name=ogcd,strict=1,if=pet.demonic_tyrant.active
actions+=/demonic_strength,if=(!runeforge.wilfreds_sigil_of_superior_summoning&cooldown.summon_demonic_tyrant.remains_expected>9)|(pet.demonic_tyrant.active&pet.demonic_tyrant.remains<6*gcd.max)
actions+=/call_dreadstalkers,if=cooldown.summon_demonic_tyrant.remains_expected>20-5*!runeforge.wilfreds_sigil_of_superior_summoning
actions+=/power_siphon,if=buff.wild_imps.stack>1&buff.demonic_core.stack<3
actions+=/bilescourge_bombers,if=buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5
actions+=/implosion,if=active_enemies>1+(1*talent.sacrificed_souls.enabled)&buff.wild_imps.stack>=6&buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5
actions+=/implosion,if=active_enemies>2&buff.wild_imps.stack>=6&buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5&!runeforge.implosive_potential&(!talent.from_the_shadows.enabled|buff.from_the_shadows.up)
actions+=/implosion,if=active_enemies>2&buff.wild_imps.stack>=6&buff.implosive_potential.remains<2&runeforge.implosive_potential
actions+=/implosion,if=buff.wild_imps.stack>=12&talent.soul_conduit.enabled&talent.from_the_shadows.enabled&runeforge.implosive_potential&buff.tyrant.down&cooldown.summon_demonic_tyrant.remains_expected>5
actions+=/grimoire_felguard,if=boss&time_to_die<30
actions+=/summon_vilefiend,if=boss&time_to_die<28
actions+=/summon_demonic_tyrant,if=boss&time_to_die<15
actions+=/hand_of_guldan,if=soul_shard=5
# If Dreadstalkers are already active, no need to save shards
actions+=/hand_of_guldan,if=soul_shard>=3&(pet.dreadstalker.active|pet.demonic_tyrant.active)
actions+=/hand_of_guldan,if=soul_shard>=1&buff.nether_portal.up&cooldown.call_dreadstalkers.remains>2*gcd.max
actions+=/hand_of_guldan,if=soul_shard>=1&cooldown.summon_demonic_tyrant.remains_expected<gcd.max&time>12-gcd.max&(buff.dreadstalkers.up&buff.dreadstalkers.remains>action.hand_of_guldan.execute_time+action.summon_demonic_tyrant.execute_time)&(!talent.summon_vilefiend.enabled|buff.vilefiend.up)
actions+=/call_action_list,name=covenant_ability,strict=1,if=!covenant.venthyr
# Without Sacrificed Souls, Soul Strike is stronger than Demonbolt, so it has a higher priority
actions+=/soul_strike,if=!talent.sacrificed_souls.enabled
# Spend Demonic Cores for Soul Shards until Tyrant cooldown is close to ready
actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&cooldown.summon_demonic_tyrant.remains_expected>20
# During Tyrant setup, spend Demonic Cores for Soul Shards
actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&cooldown.summon_demonic_tyrant.remains_expected<12
actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&(buff.demonic_core.stack>2|talent.sacrificed_souls.enabled)
actions+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&active_enemies>1
actions+=/soul_strike
actions+=/call_action_list,name=covenant_ability
# If you can get back to 5 Soul Shards before Dreadstalkers cooldown is ready, it's okay to spend them now
actions+=/hand_of_guldan,if=soul_shard>=3&cooldown.summon_demonic_tyrant.remains_expected>25&(talent.demonic_calling.enabled|cooldown.call_dreadstalkers.remains>((5-soul_shard)*action.shadow_bolt.execute_time)+action.hand_of_guldan.execute_time)
actions+=/doom,cycle_targets=1,if=refreshable&time>variable.first_tyrant_time
actions+=/shadow_bolt
actions.slow_trinkets=use_item,name=soulletting_ruby,if=cooldown.summon_demonic_tyrant.remains_expected<target.distance%5&time>variable.first_tyrant_time-(target.distance%5)
actions.slow_trinkets+=/use_item,name=sunblood_amethyst,if=cooldown.summon_demonic_tyrant.remains_expected<target.distance%5&time>variable.first_tyrant_time-(target.distance%5)
# Ordnance has a 12 second delay and is therefore skipped for first Tyrant to line up with the rest
actions.slow_trinkets+=/use_item,name=empyreal_ordnance,if=cooldown.summon_demonic_tyrant.remains_expected<(target.distance%5)+12&cooldown.summon_demonic_tyrant.remains_expected>(((target.distance%5)+12)-15)&time>variable.first_tyrant_time-((target.distance%5)+12)
actions.covenant_ability=soul_rot,if=soulbind.grove_invigoration&(cooldown.summon_demonic_tyrant.remains_expected<20|cooldown.summon_demonic_tyrant.remains_expected>30)
actions.covenant_ability+=/soul_rot,if=soulbind.field_of_blossoms&pet.demonic_tyrant.active
actions.covenant_ability+=/soul_rot,if=soulbind.wild_hunt_tactics
actions.covenant_ability+=/decimating_bolt,if=(soulbind.lead_by_example|soulbind.kevins_oozeling)&(pet.demonic_tyrant.active&soul_shard<2|cooldown.summon_demonic_tyrant.remains_expected>40)
actions.covenant_ability+=/decimating_bolt,if=(soulbind.forgeborne_reveries|(soulbind.volatile_solvent&!soulbind.kevins_oozeling))&!pet.demonic_tyrant.active
5 years ago
actions.covenant_ability+=/fleshcraft,if=soulbind.volatile_solvent,interrupt_if=buff.volatile_solvent.up
actions.covenant_ability+=/scouring_tithe,if=soulbind.combat_meditation&pet.demonic_tyrant.active
actions.covenant_ability+=/scouring_tithe,if=!soulbind.combat_meditation
actions.covenant_ability+=/impending_catastrophe,if=pet.demonic_tyrant.active&soul_shard=0
actions.hp_trinks=use_item,name=sinful_gladiators_emblem
actions.hp_trinks+=/use_item,name=sinful_aspirants_emblem
actions.ogcd=berserking
actions.ogcd+=/blood_fury
actions.ogcd+=/fireblood
actions.ogcd+=/use_items
actions.pure_damage_trinks=use_item,name=dreadfire_vessel
actions.pure_damage_trinks+=/use_item,name=soul_igniter
actions.pure_damage_trinks+=/use_item,name=glyph_of_assimilation,if=active_enemies=1
actions.pure_damage_trinks+=/use_item,name=darkmoon_deck_putrescence
actions.pure_damage_trinks+=/use_item,name=ebonsoul_vise
actions.pure_damage_trinks+=/use_item,name=unchained_gladiators_shackles
actions.trinkets=use_item,name=shadowed_orb_of_torment,if=cooldown.summon_demonic_tyrant.remains_expected<15
actions.trinkets+=/call_action_list,name=hp_trinks,if=talent.demonic_consumption.enabled&cooldown.summon_demonic_tyrant.remains_expected<20
# Effects that travel slowly to target require additional, separate handling
actions.trinkets+=/call_action_list,name=slow_trinkets
actions.trinkets+=/use_item,name=overflowing_anima_cage,if=pet.demonic_tyrant.active
actions.trinkets+=/trinket1,if=trinket.1.has_use_buff&pet.demonic_tyrant.active
actions.trinkets+=/trinket2,if=trinket.2.has_use_buff&pet.demonic_tyrant.active
actions.trinkets+=/call_action_list,name=pure_damage_trinks,if=time>variable.first_tyrant_time&cooldown.summon_demonic_tyrant.remains_expected>20
actions.tyrant_setup=nether_portal,if=cooldown.summon_demonic_tyrant.remains_expected<15
actions.tyrant_setup+=/grimoire_felguard,if=cooldown.summon_demonic_tyrant.remains_expected<17-(action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time)&(cooldown.call_dreadstalkers.remains<17-(action.summon_demonic_tyrant.execute_time+action.summon_vilefiend.execute_time+action.shadow_bolt.execute_time)|pet.dreadstalker.remains>cooldown.summon_demonic_tyrant.remains_expected+action.summon_demonic_tyrant.execute_time)
actions.tyrant_setup+=/summon_vilefiend,if=(cooldown.summon_demonic_tyrant.remains_expected<15-(action.summon_demonic_tyrant.execute_time)&(cooldown.call_dreadstalkers.remains<15-(action.summon_demonic_tyrant.execute_time+action.summon_vilefiend.execute_time)|pet.dreadstalker.remains>cooldown.summon_demonic_tyrant.remains_expected+action.summon_demonic_tyrant.execute_time))|(!runeforge.wilfreds_sigil_of_superior_summoning&cooldown.summon_demonic_tyrant.remains_expected>40)
actions.tyrant_setup+=/call_dreadstalkers,if=cooldown.summon_demonic_tyrant.remains_expected<12-(action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time)&time>variable.first_tyrant_time-12-action.call_dreadstalkers.execute_time+action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time
actions.tyrant_setup+=/summon_demonic_tyrant,if=time>variable.first_tyrant_time&(pet.dreadstalker.active&pet.dreadstalker.remains>action.summon_demonic_tyrant.execute_time)&(!talent.summon_vilefiend.enabled|pet.vilefiend.active)&(soul_shard=0|(pet.dreadstalker.active&pet.dreadstalker.remains<action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time)|(pet.vilefiend.active&pet.vilefiend.remains<action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time)|(buff.grimoire_felguard.up&buff.grimoire_felguard.remains<action.summon_demonic_tyrant.execute_time+action.shadow_bolt.execute_time))