diff --git a/engine/class_modules/warlock/sc_warlock_actions.cpp b/engine/class_modules/warlock/sc_warlock_actions.cpp index 75e59cb3666..0a113a60ad9 100644 --- a/engine/class_modules/warlock/sc_warlock_actions.cpp +++ b/engine/class_modules/warlock/sc_warlock_actions.cpp @@ -158,41 +158,47 @@ using namespace helpers; if ( diabolist() && triggers.diabolic_ritual ) { - timespan_t adjustment = -timespan_t::from_seconds( p()->hero.diabolic_ritual->effectN( 1 ).base_value() ); + timespan_t adjustment = -timespan_t::from_seconds( p()->hero.diabolic_ritual->effectN( 1 ).base_value() ) * shards_used; + + if ( demonology() && p()->hero.infernal_machine.ok() && p()->warlock_pet_list.demonic_tyrants.n_active_pets() > 0 ) + adjustment += -p()->hero.infernal_machine->effectN( 1 ).time_value(); + + if ( destruction() && p()->hero.infernal_machine.ok() && p()->warlock_pet_list.infernals.n_active_pets() > 0 ) + adjustment += -p()->hero.infernal_machine->effectN( 1 ).time_value(); switch( p()->diabolic_ritual ) { case 0: if ( p()->buffs.ritual_overlord->check() ) { - p()->buffs.ritual_overlord->extend_duration( p(), adjustment * shards_used ); + p()->buffs.ritual_overlord->extend_duration( p(), adjustment ); } else { p()->buffs.ritual_overlord->trigger(); - make_event( sim, 1_ms, [ this, shards_used, adjustment ] { p()->buffs.ritual_overlord->extend_duration( p(), adjustment * shards_used ); } ); + make_event( sim, 1_ms, [ this, adjustment ] { p()->buffs.ritual_overlord->extend_duration( p(), adjustment ); } ); } break; case 1: if ( p()->buffs.ritual_mother->check() ) { - p()->buffs.ritual_mother->extend_duration( p(), adjustment * shards_used ); + p()->buffs.ritual_mother->extend_duration( p(), adjustment ); } else { p()->buffs.ritual_mother->trigger(); - make_event( sim, 1_ms, [ this, shards_used, adjustment ] { p()->buffs.ritual_mother->extend_duration( p(), adjustment * shards_used ); } ); + make_event( sim, 1_ms, [ this, adjustment ] { p()->buffs.ritual_mother->extend_duration( p(), adjustment ); } ); } break; case 2: if ( p()->buffs.ritual_pit_lord->check() ) { - p()->buffs.ritual_pit_lord->extend_duration( p(), adjustment * shards_used ); + p()->buffs.ritual_pit_lord->extend_duration( p(), adjustment ); } else { p()->buffs.ritual_pit_lord->trigger(); - make_event( sim, 1_ms, [ this, shards_used, adjustment ] { p()->buffs.ritual_pit_lord->extend_duration( p(), adjustment * shards_used ); } ); + make_event( sim, 1_ms, [ this, adjustment ] { p()->buffs.ritual_pit_lord->extend_duration( p(), adjustment ); } ); } break; default: diff --git a/engine/class_modules/warlock/sc_warlock_init.cpp b/engine/class_modules/warlock/sc_warlock_init.cpp index de110840f67..9f9b37207e3 100644 --- a/engine/class_modules/warlock/sc_warlock_init.cpp +++ b/engine/class_modules/warlock/sc_warlock_init.cpp @@ -500,6 +500,8 @@ namespace warlock hero.cruelty_of_kerxan = find_talent_spell( talent_tree::HERO, "Cruelty of Kerxan" ); // Should be ID 429902 + hero.infernal_machine = find_talent_spell( talent_tree::HERO, "Infernal Machine" ); // Should be ID 429917 + warlock_pet_list.overlords.set_default_duration( hero.summon_overlord->duration() ); warlock_pet_list.mothers.set_default_duration( hero.summon_mother->duration() ); warlock_pet_list.pit_lords.set_default_duration( hero.summon_pit_lord->duration() );