Skip to content

Commit a718cc9

Browse files
committed
[Hunter] Death Bringer
also trigger bulletstorm on impact not execute
1 parent 6cc87c0 commit a718cc9

1 file changed

Lines changed: 41 additions & 6 deletions

File tree

engine/class_modules/sc_hunter.cpp

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,7 @@ struct hunter_t final : public player_t
440440
buff_t* deathblow;
441441

442442
// Marksmanship Tree
443+
buff_t* death_bringer;
443444
buff_t* precise_shots;
444445
buff_t* trick_shots;
445446
buff_t* lock_and_load;
@@ -757,6 +758,7 @@ struct hunter_t final : public player_t
757758
spell_data_ptr_t feathered_frenzy;
758759
spell_data_ptr_t deadeye;
759760
spell_data_ptr_t deathblow;
761+
spell_data_ptr_t death_bringer_buff;
760762

761763
spell_data_ptr_t take_aim_1;
762764
spell_data_ptr_t unmatched_precision;
@@ -4690,7 +4692,21 @@ struct black_arrow_base_t : public kill_shot_base_t
46904692
kill_shot_base_t::execute();
46914693

46924694
if ( rng().roll( p()->talents.ebon_bowstring->effectN( 1 ).percent() ) )
4693-
p()->trigger_deathblow();
4695+
{
4696+
switch ( p()->specialization() )
4697+
{
4698+
case HUNTER_BEAST_MASTERY:
4699+
p()->trigger_deathblow();
4700+
break;
4701+
4702+
case HUNTER_MARKSMANSHIP:
4703+
p()->buffs.death_bringer->trigger();
4704+
break;
4705+
4706+
default:
4707+
break;
4708+
}
4709+
}
46944710
}
46954711

46964712
void impact( action_state_t* s ) override
@@ -5446,6 +5462,14 @@ struct aimed_shot_t : public aimed_shot_base_t
54465462
{
54475463
p()->buffs.lock_and_load->decrement();
54485464
}
5465+
5466+
// 2026-07-12: This check is duplicated from aimed_shot_t but made unreactable as Hydra can munch Death Bringers from the primary shot.
5467+
// Should really be in aimed_shot_base_t but working on the assumption that this will be fixed so duplicating here for ease of cleanup.
5468+
if ( p()->buffs.death_bringer->up() )
5469+
{
5470+
p()->buffs.death_bringer->expire();
5471+
p()->trigger_deathblow();
5472+
}
54495473
}
54505474
};
54515475

@@ -5540,7 +5564,13 @@ struct aimed_shot_t : public aimed_shot_base_t
55405564
p()->buffs.precise_shots->increment( precise_shot_stacks );
55415565

55425566
if ( rng().roll( deathblow.chance ) )
5543-
p()->trigger_deathblow();
5567+
p()->buffs.death_bringer->trigger();
5568+
5569+
if ( p()->buffs.death_bringer->up() )
5570+
{
5571+
p()->buffs.death_bringer->expire();
5572+
p()->trigger_deathblow( true );
5573+
}
55445574

55455575
auto tl = target_list();
55465576

@@ -5558,8 +5588,7 @@ struct aimed_shot_t : public aimed_shot_base_t
55585588
}
55595589
lock_and_loaded = false;
55605590

5561-
if ( p()->buffs.bulletstorm->check() )
5562-
p()->buffs.bulletstorm->decrement();
5591+
p()->buffs.bulletstorm->decrement();
55635592
}
55645593

55655594
double recharge_rate_multiplier( const cooldown_t& cd ) const override
@@ -5631,6 +5660,9 @@ struct rapid_fire_t: public hunter_ranged_attack_t
56315660
double amount = state->result_amount * p()->talents.sanctified_armaments->effectN( 1 ).percent();
56325661
residual_action::trigger( sanctified_armaments, state->target, amount );
56335662
}
5663+
5664+
if ( p()->talents.bulletstorm.ok() )
5665+
p()->buffs.bulletstorm->trigger();
56345666
}
56355667

56365668
double composite_da_multiplier( const action_state_t* s ) const override
@@ -5802,8 +5834,6 @@ struct rapid_fire_t: public hunter_ranged_attack_t
58025834
if ( p()->talents.no_scope.ok() )
58035835
p()->buffs.precise_shots->trigger();
58045836

5805-
p()->buffs.bulletstorm->trigger();
5806-
58075837
execute_unload();
58085838
}
58095839

@@ -7557,6 +7587,7 @@ void hunter_t::init_spells()
75577587
talents.feathered_frenzy = find_talent_spell( talent_tree::SPECIALIZATION, "Feathered Frenzy", HUNTER_MARKSMANSHIP );
75587588
talents.deadeye = find_talent_spell( talent_tree::SPECIALIZATION, "Deadeye", HUNTER_MARKSMANSHIP );
75597589
talents.deathblow = find_talent_spell( talent_tree::SPECIALIZATION, "Deathblow", HUNTER_MARKSMANSHIP );
7590+
talents.death_bringer_buff = talents.deathblow.ok() ? find_spell( 1302277 ) : spell_data_t::not_found();
75607591

75617592
talents.unmatched_precision = find_talent_spell( talent_tree::SPECIALIZATION, "Unmatched Precision", HUNTER_MARKSMANSHIP );
75627593
talents.bullseye = find_talent_spell( talent_tree::SPECIALIZATION, "Bullseye", HUNTER_MARKSMANSHIP );
@@ -7923,6 +7954,10 @@ void hunter_t::create_buffs()
79237954

79247955
// Marksmanship Tree
79257956

7957+
buffs.death_bringer =
7958+
make_buff( this, "death_bringer", talents.death_bringer_buff )
7959+
->set_chance( talents.deathblow.ok() );
7960+
79267961
buffs.precise_shots =
79277962
make_buff( this, "precise_shots", talents.precise_shots_buff )
79287963
->set_default_value_from_effect( 1 );

0 commit comments

Comments
 (0)