Skip to content
Merged
Show file tree
Hide file tree
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
3 changes: 0 additions & 3 deletions engine/class_modules/apl/apl_monk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,9 +208,6 @@ parsed_assisted_combat_rule_t monk_t::parse_assisted_combat_rule( const assisted

std::vector<std::string> monk_t::action_names_from_spell_id( unsigned int spell_id ) const
{
if ( spell_id == 467307 )
return { "rising_sun_kick" };

return base_t::action_names_from_spell_id( spell_id );
}

Expand Down
147 changes: 90 additions & 57 deletions engine/class_modules/monk/sc_monk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,10 @@ void monk_action_t<Base>::apply_buff_effects()
if ( const auto &effect = p()->baseline.windwalker.mastery->effectN( 1 ); effect.ok() )
{
auto mastery_parse_entry = [ & ]( std::vector<player_effect_t> &effect_list ) {
const std::array<unsigned, 3> rsk_ids = { p()->talent.monk.rising_sun_kick->effectN( 1 ).trigger()->id(),
p()->talent.windwalker.rushing_wind_kick_damage->id(),
p()->talent.windwalker.glory_of_the_dawn_damage->id() };
const std::array<unsigned, 3> rsk_ids = {
p()->talent.monk.rising_sun_kick->effectN( 1 ).trigger()->id(),
p()->talent.windwalker.rushing_wind_kick_action->effectN( 1 ).trigger()->id(),
p()->talent.windwalker.glory_of_the_dawn_damage->id() };

double value = effect.mastery_value();
if ( range::contains( rsk_ids, base_t::id ) && p()->talent.windwalker.sunfire_spiral->ok() )
Expand Down Expand Up @@ -939,6 +940,13 @@ struct rising_sun_kick_t : monk_melee_attack_t

background = dual = true;
}

std::vector<player_t *> &target_list() const override
{
std::vector<player_t *> &tl = monk_melee_attack_t::target_list();
range::erase_remove( tl, target );
return tl;
}
};

action_t *damage;
Expand All @@ -960,9 +968,8 @@ struct rising_sun_kick_t : monk_melee_attack_t
if ( !damage )
return;

double value = state->result_amount * TBase::p()->talent.windwalker.skyfire_heel->effectN( 1 ).percent();
damage->base_dd_min = damage->base_dd_max = value;
damage->execute_on_target( state->target );
double value = state->result_amount * TBase::p()->talent.windwalker.skyfire_heel->effectN( 1 ).percent();
damage->execute_on_target( state->target, value );
}
};

Expand All @@ -976,74 +983,103 @@ struct rising_sun_kick_t : monk_melee_attack_t
}
};

struct rushing_wind_kick_t : combined_type_t
action_t *rising_sun_kick;

rising_sun_kick_t( monk_t *player, std::string_view options_str )
: monk_melee_attack_t( player, "rising_sun_kick", player->talent.monk.rising_sun_kick ),
rising_sun_kick( new damage_t( player ) )
{
parse_options( options_str );

may_combo_strike = true;
cast_during_sck = true;

add_child( rising_sun_kick );
}

bool ready() override
{
if ( p()->buff.rushing_wind_kick->check() )
return false;

return monk_melee_attack_t::ready();
}

void execute() override
{
int target_count_max;
double target_count_coefficient;
monk_melee_attack_t::execute();

rising_sun_kick->execute_on_target( target );

if ( p()->specialization() == MONK_WINDWALKER )
p()->action.flurry_strikes->execute( flurry_strikes_t::WISDOM_OF_THE_WALL );

rushing_wind_kick_t( monk_t *player )
: combined_type_t( player, "rushing_wind_kick", player->talent.windwalker.rushing_wind_kick_damage ),
target_count_max( 5 ),
target_count_coefficient( 0.06 )
p()->buff.whirling_dragon_punch->trigger();
p()->action.chi_wave->execute();
}
};

struct rushing_wind_kick_t : monk_melee_attack_t
{
using combined_type_t = rising_sun_kick_t::combined_type_t;

struct damage_t : combined_type_t
{
damage_t( monk_t *player )
: combined_type_t( player, "rushing_wind_kick_damage",
player->talent.windwalker.rushing_wind_kick_action->effectN( 1 ).trigger() )
{
background = dual = true;

may_combo_strike = true;
aoe = -1;
split_aoe_damage = true;

add_parse_entry( da_multiplier_effects )
.set_func( []() { return false; } )
.set_value( target_count_coefficient )
.set_value( player->talent.windwalker.rushing_wind_kick_action->effectN( 1 ).percent() )
.set_note( "Target-count AoE Scaling" );
}

double composite_aoe_multiplier( const action_state_t *state ) const override
{
double mult = 1.0 + std::min( state->n_targets, 5u ) * target_count_coefficient;
return combined_type_t::composite_aoe_multiplier( state ) * mult;
}
double cam = combined_type_t::composite_aoe_multiplier( state );

void execute() override
{
combined_type_t::execute();
double count = std::min( as<double>( state->n_targets ),
p()->talent.windwalker.rushing_wind_kick_action->effectN( 2 ).base_value() );
double mult = 1.0 + count * p()->talent.windwalker.rushing_wind_kick_action->effectN( 1 ).percent();
cam *= mult;

p()->buff.rushing_wind_kick->expire();
return cam;
}
};

action_t *rising_sun_kick;
action_t *rushing_wind_kick;

rising_sun_kick_t( monk_t *player, std::string_view options_str )
: monk_melee_attack_t( player, "rising_sun_kick", player->talent.monk.rising_sun_kick ),
rising_sun_kick( new damage_t( player ) ),
rushing_wind_kick( nullptr )
rushing_wind_kick_t( monk_t *player, std::string_view options_str )
: monk_melee_attack_t( player, "rushing_wind_kick", player->talent.windwalker.rushing_wind_kick_action )
{
parse_options( options_str );

may_combo_strike = true;
cast_during_sck = true;
// Note that Rushing Wind Kick cannot be parented to Rising Sun Kick
// due to max parent depth.
if ( !player->talent.windwalker.rushing_wind_kick->ok() )
return;

add_child( rising_sun_kick );
execute_action = new damage_t( player );
add_child( execute_action );
}

if ( player->talent.windwalker.rushing_wind_kick->ok() )
{
rushing_wind_kick = new rushing_wind_kick_t( player );
add_child( rushing_wind_kick );
}
bool ready() override
{
if ( p()->buff.rushing_wind_kick->up() )
return monk_melee_attack_t::ready();

return false;
}

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

if ( p()->buff.rushing_wind_kick->up() )
rushing_wind_kick->execute_on_target( target );
else
rising_sun_kick->execute_on_target( target );

if ( p()->specialization() == MONK_WINDWALKER )
p()->action.flurry_strikes->execute( flurry_strikes_t::WISDOM_OF_THE_WALL );
p()->buff.whirling_dragon_punch->trigger();
p()->action.chi_wave->execute();
p()->buff.rushing_wind_kick->expire();
}
};

Expand Down Expand Up @@ -1301,7 +1337,6 @@ struct rushing_jade_wind_t : public monk_melee_attack_t
buff( player->buff.rushing_jade_wind )
{
parse_options( options_str );
may_combo_strike = true;
}

void execute() override
Expand Down Expand Up @@ -1778,6 +1813,7 @@ struct auto_attack_t : public monk_melee_attack_t

void impact( action_state_t *state ) override
{
monk_spell_t::impact( state );
// We attribute all DT melees to MH weapon type, but it will be technically
// accurate as you cannot equip a 2h in your offhand :)
p()->buff.flurry_charge->trigger( state, &p()->main_hand_weapon );
Expand Down Expand Up @@ -2541,7 +2577,6 @@ struct flying_serpent_kick_t : public monk_melee_attack_t
parse_options( options_str );
may_crit = true;
ww_mastery = true;
may_combo_strike = true;
ignore_false_positive = true;
aoe = -1;
}
Expand Down Expand Up @@ -2649,8 +2684,7 @@ struct chi_wave_t : public monk_spell_t
heal( new bounce_t<monk_heal_t>( player, "heal", player->talent.monk.chi_wave_heal ) ),
damage( new bounce_t<monk_spell_t>( player, "damage", player->talent.monk.chi_wave_damage ) )
{
background = true;
may_combo_strike = false;
background = true;

heal->other_cb = damage->this_cb;
damage->other_cb = heal->this_cb;
Expand Down Expand Up @@ -2707,7 +2741,6 @@ struct chi_burst_t : monk_spell_t
buff( buff_t::find( player, "chi_burst" ) )
{
parse_options( options_str );
may_combo_strike = true;

stats = damage->stats;
add_child( heal );
Expand Down Expand Up @@ -3613,8 +3646,7 @@ struct expel_harm_t : monk_heal_t
damage( new damage_t( player ) )
{
parse_options( options_str );
may_combo_strike = false;
cast_during_sck = true;
cast_during_sck = true;
if ( player->talent.windwalker.combat_wisdom->ok() )
background = true;

Expand Down Expand Up @@ -4885,6 +4917,8 @@ action_t *monk_t::create_action( std::string_view name, std::string_view options
return new paralysis_t( this, options_str );
if ( name == "rising_sun_kick" )
return new rising_sun_kick_t( this, options_str );
if ( name == "rushing_wind_kick" )
return new rushing_wind_kick_t( this, options_str );
if ( name == "roll" )
return new roll_t( this, options_str );
if ( name == "spear_hand_strike" )
Expand Down Expand Up @@ -5396,7 +5430,7 @@ void monk_t::init_spells()
talent.windwalker.memory_of_the_monastery_buff = find_spell( 454970 );
talent.windwalker.rushing_wind_kick = _ST( "Rushing Wind Kick" );
talent.windwalker.rushing_wind_kick_buff = find_spell( 1250554 );
talent.windwalker.rushing_wind_kick_damage = find_spell( 468179 );
talent.windwalker.rushing_wind_kick_action = find_spell( 467307 );
talent.windwalker.xuens_battlegear = _ST( "Xuen's Battlegear" );
talent.windwalker.thunderfist = _ST( "Thunderfist" );
talent.windwalker.thunderfist_buff = find_spell( 393565 );
Expand Down Expand Up @@ -6026,7 +6060,7 @@ void monk_t::create_buffs()

buff.strength_of_the_black_ox =
make_buff_fallback( talent.conduit_of_the_celestials.strength_of_the_black_ox->ok(), this,
"strength_of_the_black_ox", talent.conduit_of_the_celestials.unity_within_buff );
"strength_of_the_black_ox", talent.conduit_of_the_celestials.strength_of_the_black_ox_buff );

buff.unity_within = make_buff_fallback( talent.conduit_of_the_celestials.unity_within->ok(), this, "unity_within",
talent.conduit_of_the_celestials.unity_within_buff )
Expand Down Expand Up @@ -6682,8 +6716,7 @@ void monk_t::combat_begin()
};
internal( internal );
};
timespan_t initial_period =
talent.windwalker.tigereye_brew_1->effectN( 1 ).period() * composite_melee_haste();
timespan_t initial_period = talent.windwalker.tigereye_brew_1->effectN( 1 ).period() * composite_melee_haste();
make_event<events::delayed_cb_event_t>( *sim, this, initial_period, callback );
buff.tigereye_brew_1->trigger( 10 );
}
Expand Down
2 changes: 1 addition & 1 deletion engine/class_modules/monk/sc_monk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -931,7 +931,7 @@ struct monk_t : public stagger_t<parse_player_effects_t, monk_t>
// Row 9
player_talent_t rushing_wind_kick;
const spell_data_t *rushing_wind_kick_buff;
const spell_data_t *rushing_wind_kick_damage;
const spell_data_t *rushing_wind_kick_action;
player_talent_t xuens_battlegear;
player_talent_t thunderfist;
const spell_data_t *thunderfist_buff;
Expand Down
Loading