|
|
|
|
## Demonology Warlock
|
|
|
|
|
## https://github.com/simulationcraft/simc/
|
|
|
|
|
## November 2, 2021
|
|
|
|
|
|
|
|
|
|
## 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.
|
|
|
|
|
## - Try to avoid wasting Demonic Core stacks.
|
|
|
|
|
## - Try to make opener priority only work if we can actually open with a Tyrant.
|
|
|
|
|
|
|
|
|
|
# Executed before combat begins. Accepts non-harmful actions only.
|
|
|
|
|
actions.precombat+=/variable,name=first_tyrant_time,op=set,if=buff.bloodlust.up,value=10,value_else=12
|
|
|
|
|
actions.precombat+=/use_item,name=shadowed_orb_of_torment
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
# 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+=/call_action_list,name=opener,strict=1,if=toggle.cooldowns&time<variable.first_tyrant_time&cooldown.summon_demonic_tyrant.remains<variable.first_tyrant_time-time
|
|
|
|
|
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+=/potion,if=(cooldown.summon_demonic_tyrant.remains_expected=0&time>variable.first_tyrant_time|soulbind.refined_palate&cooldown.summon_demonic_tyrant.remains_expected<38)
|
|
|
|
|
actions+=/call_action_list,name=tyrant_setup
|
|
|
|
|
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
|
|
|
|
|
# Use Demonbolt if you're going to lose Demonic Core stacks, even if it'd waste a soul shard.
|
|
|
|
|
actions+=/demonbolt,if=buff.demonic_core.react&buff.demonic_core.remains<1+gcd.max*buff.demonic_core.stack
|
|
|
|
|
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&!pet.demonic_tyrant.active&cooldown.summon_demonic_tyrant.remains_expected>18
|
|
|
|
|
actions.covenant_ability+=/decimating_bolt,if=(soulbind.lead_by_example|soulbind.kevins_oozeling)&(pet.demonic_tyrant.active&soul_shard<2|!pet.demonic_tyrant.active&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
|
|
|
|
|
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.opener=soul_rot,if=soulbind.grove_invigoration
|
|
|
|
|
actions.opener+=/nether_portal
|
|
|
|
|
actions.opener+=/grimoire_felguard
|
|
|
|
|
actions.opener+=/summon_vilefiend
|
|
|
|
|
actions.opener+=/demonbolt,if=buff.demonic_core.react&soul_shard<4&cooldown.call_dreadstalkers.up
|
|
|
|
|
actions.opener+=/shadow_bolt,if=soul_shard<5&cooldown.call_dreadstalkers.up
|
|
|
|
|
actions.opener+=/call_dreadstalkers
|
|
|
|
|
|
|
|
|
|
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<22
|
|
|
|
|
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)
|
|
|
|
|
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))
|