Skip to content

Commit 0fe36fa

Browse files
committed
[Hunter] Beast Cleave crit bonus bugs
1 parent 1d28385 commit 0fe36fa

1 file changed

Lines changed: 21 additions & 24 deletions

File tree

engine/class_modules/sc_hunter.cpp

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2465,24 +2465,34 @@ struct hunter_main_pet_t final : public hunter_main_pet_base_t
24652465
namespace actions
24662466
{
24672467

2468-
static void trigger_beast_cleave( const action_state_t* s )
2468+
static void trigger_beast_cleave( const action_state_t* s, const double multiplier )
24692469
{
24702470
if ( !s->action->result_is_hit( s->result ) )
24712471
return;
24722472

2473-
if ( s->action->sim->active_enemies == 1 )
2473+
if ( s->action->sim->active_enemies < 2 )
2474+
return;
2475+
2476+
if ( multiplier <= 0.0 )
24742477
return;
24752478

24762479
auto p = debug_cast<hunter_pet_t*>( s->action->player );
24772480

24782481
if ( !p->buffs.beast_cleave->up() )
24792482
return;
24802483

2484+
// 2026-08-14: Crit bonuses are not Beast Cleaved across the board.
2485+
auto amount = s->result_total;
2486+
if ( p->o()->bugs && s->result == RESULT_CRIT && s->result_crit_bonus > 0 )
2487+
{
2488+
amount /= ( 1.0 + s->result_crit_bonus ) / 2.0;
2489+
}
2490+
24812491
// Target multipliers do not replicate to secondary targets
2482-
const double target_da_multiplier = ( 1.0 / s->target_da_multiplier );
2483-
const double target_pet_multiplier = ( 1.0 / s->target_pet_multiplier );
2492+
amount *= multiplier;
2493+
amount *= ( 1.0 / s->target_da_multiplier );
2494+
amount *= ( 1.0 / s->target_pet_multiplier );
24842495

2485-
const double amount = s->result_total * p->buffs.beast_cleave->check_value() * target_da_multiplier * target_pet_multiplier;
24862496
p->actions.beast_cleave->execute_on_target( s->target, amount );
24872497
}
24882498

@@ -2967,7 +2977,7 @@ struct pet_melee_t : public hunter_pet_melee_t<hunter_pet_t>
29672977
{
29682978
hunter_pet_melee_t::impact( s );
29692979

2970-
trigger_beast_cleave( s );
2980+
trigger_beast_cleave( s, p()->buffs.beast_cleave->default_value );
29712981
}
29722982
};
29732983

@@ -3006,7 +3016,7 @@ struct main_pet_base_melee_t : public hunter_pet_melee_t<hunter_main_pet_base_t>
30063016
{
30073017
hunter_pet_melee_t::impact( s );
30083018

3009-
trigger_beast_cleave( s );
3019+
trigger_beast_cleave( s, p()->hunter_pet_t::buffs.beast_cleave->default_value );
30103020

30113021
if ( o()->buffs.wyverns_cry->check() )
30123022
o()->buffs.wyverns_cry->increment( 1, buff_t::DEFAULT_VALUE(), o()->buffs.wyverns_cry->remains() );
@@ -3028,7 +3038,7 @@ struct basic_attack_base_t : public hunter_pet_attack_t<hunter_main_pet_t>
30283038
hunter_pet_attack_t::impact( s );
30293039

30303040
if ( result_is_hit( s -> result ) )
3031-
trigger_beast_cleave( s );
3041+
trigger_beast_cleave( s, p()->hunter_pet_t::buffs.beast_cleave->default_value );
30323042
}
30333043
};
30343044

@@ -3168,7 +3178,7 @@ struct bestial_wrath_t : hunter_pet_attack_t<hunter_main_pet_base_t>
31683178
{
31693179
hunter_pet_attack_t::impact( s );
31703180

3171-
trigger_beast_cleave( s );
3181+
trigger_beast_cleave( s, p()->hunter_pet_t::buffs.beast_cleave->default_value );
31723182
}
31733183
};
31743184

@@ -3185,22 +3195,9 @@ struct kill_command_wildspeaker_t: public hunter_pet_attack_t<dire_critter_t>
31853195
{
31863196
hunter_pet_attack_t::impact( s );
31873197

3188-
if ( s->action->result_is_hit( s->result ) && s->action->sim->active_enemies > 1 && o()->talents.kill_cleave.ok()
3189-
&& p()->hunter_pet_t::buffs.beast_cleave->up() )
3198+
if ( o()->talents.kill_cleave.ok() )
31903199
{
3191-
// 2026-07-27: Wildspeaker Kill Command's crit bonus is not Beast Cleaved.
3192-
double amount = s->result_total;
3193-
if ( s->result == RESULT_CRIT && s->result_crit_bonus > 0 )
3194-
{
3195-
amount /= ( 1.0 + s->result_crit_bonus ) / 2.0;
3196-
}
3197-
amount *= o()->talents.kill_cleave->effectN( 1 ).percent();
3198-
// Target multipliers do not replicate to secondary targets
3199-
amount *= ( 1.0 / s->target_da_multiplier );
3200-
amount *= ( 1.0 / s->target_pet_multiplier );
3201-
3202-
// Damage is represented as Beast Cleave
3203-
p()->hunter_pet_t::actions.beast_cleave->execute_on_target( s->target, amount );
3200+
trigger_beast_cleave( s, o()->talents.kill_cleave->effectN( 1 ).percent() );
32043201
}
32053202
}
32063203

0 commit comments

Comments
 (0)