Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[monk] Fix Shado Pan Flurry Offset option. #9824

Merged
merged 1 commit into from
Dec 28, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions engine/class_modules/monk/sc_monk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1008,14 +1008,24 @@ struct flurry_strikes_t : public monk_melee_attack_t
shuffled_rng_t *deck;
flurry_strike_wisdom_t *wisdom_flurry;

/*
* [shadow] buff application tends to be a bit late, thus up cannot reliably
* detect if the buff is applied, and shadow wotw triggers should occur.
*
* this serves as an easy check for whether or not shadow was pulled in the
* current chain of flurries, without having to refactor everything
*/
bool recent_shadow_trigger;

flurry_strike_t( monk_t *p, action_t *parent )
: monk_melee_attack_t( p, "flurry_strike", p->talent.shado_pan.flurry_strikes_hit ),
flurry_strikes_counter( p->user_options.shado_pan_initial_charge_accumulator ),
flurry_strikes_threshold( as<int>( p->talent.shado_pan.wisdom_of_the_wall->effectN( 1 ).base_value() ) ),
deck( p->get_shuffled_rng( "wisdom_of_the_wall", { { WISDOM_OF_THE_WALL_CRIT, 1 },
{ WISDOM_OF_THE_WALL_DODGE, 1 },
{ WISDOM_OF_THE_WALL_FLURRY, 1 },
{ WISDOM_OF_THE_WALL_MASTERY, 1 } } ) )
{ WISDOM_OF_THE_WALL_MASTERY, 1 } } ) ),
recent_shadow_trigger( false )
{
background = dual = true;

Expand All @@ -1030,6 +1040,9 @@ struct flurry_strikes_t : public monk_melee_attack_t
{
monk_melee_attack_t::impact( s );

if ( last_used + 10 * 150_ms < sim->current_time() )
recent_shadow_trigger = false;

if ( p()->talent.shado_pan.wisdom_of_the_wall->ok() )
{
flurry_strikes_counter++;
Expand All @@ -1049,6 +1062,7 @@ struct flurry_strikes_t : public monk_melee_attack_t
p()->buff.wisdom_of_the_wall_dodge->trigger();
break;
case WISDOM_OF_THE_WALL_FLURRY:
recent_shadow_trigger = true;
p()->buff.wisdom_of_the_wall_flurry->trigger();
break;
case WISDOM_OF_THE_WALL_MASTERY:
Expand All @@ -1065,9 +1079,17 @@ struct flurry_strikes_t : public monk_melee_attack_t
if ( auto target_data = p()->get_target_data( s->target ); target_data )
target_data->debuff.high_impact->trigger();

if ( p()->buff.wisdom_of_the_wall_flurry->up() )
if ( p()->buff.wisdom_of_the_wall_flurry->up() || recent_shadow_trigger )
wisdom_flurry->execute_on_target( s->target );
}

void reset() override
{
monk_melee_attack_t::reset();

// this shouldn't get offset, but just in case :)
flurry_strikes_counter = p()->user_options.shado_pan_initial_charge_accumulator;
}
};

flurry_strike_t *strike;
Expand Down Expand Up @@ -2593,7 +2615,7 @@ struct strike_of_the_windlord_t : public monk_melee_attack_t

p()->buff.tigers_ferocity->trigger();

if ( p()->talent.windwalker.darting_hurricane.ok() && !p()->is_ptr())
if ( p()->talent.windwalker.darting_hurricane.ok() && !p()->is_ptr() )
p()->buff.darting_hurricane->increment(
as<int>( p()->talent.windwalker.darting_hurricane->effectN( 2 )
.base_value() ) ); // increment is used to not incur the rppm cooldown
Expand Down Expand Up @@ -6632,7 +6654,7 @@ void monk_t::trigger_celestial_fortune( action_state_t *s )
void monk_t::trigger_mark_of_the_crane( action_state_t *s )
{
if ( is_ptr() )
return;
return;

if ( !baseline.windwalker.mark_of_the_crane->ok() )
return;
Expand Down