diff --git a/engine/class_modules/sc_demon_hunter.cpp b/engine/class_modules/sc_demon_hunter.cpp index 3c9830ea971..8ecf6b34a2d 100644 --- a/engine/class_modules/sc_demon_hunter.cpp +++ b/engine/class_modules/sc_demon_hunter.cpp @@ -3423,6 +3423,29 @@ struct shattered_souls_trigger_t : public BASE } }; +template +struct soulburst_trigger_t : public BASE +{ + using base_t = soulburst_trigger_t; + + soulburst_trigger_t( util::string_view n, demon_hunter_t* p, const spell_data_t* s = spell_data_t::nil(), + util::string_view o = {} ) + : BASE( n, p, s, o ) + { + } + + void trigger_soulburst( unsigned fragments_consumed ) + { + // TOCHECK: Is this instant? + if ( BASE::dh()->set_bonuses.mid2_devourer_2pc->ok() && + fragments_consumed >= BASE::dh()->set_bonuses.mid2_devourer_2pc->effectN( 1 ).base_value() && + BASE::rng().roll( BASE::dh()->set_bonuses.mid2_devourer_2pc->effectN( 2 ).percent() ) ) + { + BASE::dh()->buff.soulburst->trigger(); + } + } +}; + struct demon_hunter_heal_t : public demon_hunter_action_t { demon_hunter_heal_t( util::string_view n, demon_hunter_t* p, const spell_data_t* s = spell_data_t::nil(), @@ -5860,7 +5883,8 @@ struct soul_immolation_heal_t : public demon_hunter_heal_t } }; -struct reap_base_t : public voidfall_spending_trigger_t> +struct reap_base_t + : public soulburst_trigger_t>> { struct reap_damage_t : public shattered_souls_trigger_t { @@ -5915,13 +5939,7 @@ struct reap_base_t : public voidfall_spending_trigger_tconsume_soul_fragments( soul_fragment::LESSER, false, souls_to_consume() ); - // TOCHECK: Is this instant? - if ( dh()->set_bonuses.mid2_devourer_2pc->ok() && - fragments_consumed >= dh()->set_bonuses.mid2_devourer_2pc->effectN( 1 ).base_value() && - rng().roll( dh()->set_bonuses.mid2_devourer_2pc->effectN( 2 ).percent() ) ) - { - dh()->buff.soulburst->trigger(); - } + trigger_soulburst( fragments_consumed ); dh()->buff.reap->trigger(); @@ -5946,7 +5964,8 @@ struct reap_base_t : public voidfall_spending_trigger_t> +struct eradicate_t + : public soulburst_trigger_t>> { struct eradicate_damage_t : public shattered_souls_trigger_t { @@ -6012,6 +6031,8 @@ struct eradicate_t : public voidfall_spending_trigger_tconsume_soul_fragments( soul_fragment::LESSER, false, souls_to_consume() ); + trigger_soulburst( fragments_consumed ); + dh()->buff.reap->trigger(); base_t::execute();