diff --git a/engine/class_modules/apl/apl_monk.cpp b/engine/class_modules/apl/apl_monk.cpp index 382ba1dbfc8..26f217c33da 100644 --- a/engine/class_modules/apl/apl_monk.cpp +++ b/engine/class_modules/apl/apl_monk.cpp @@ -206,6 +206,14 @@ parsed_assisted_combat_rule_t monk_t::parse_assisted_combat_rule( const assisted return base_t::parse_assisted_combat_rule( rule, step ); } +std::vector 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 ); +} + std::string monk_t::aura_expr_from_spell_id( unsigned int spell_id, bool on_self ) const { if ( on_self ) diff --git a/engine/class_modules/monk/sc_monk.cpp b/engine/class_modules/monk/sc_monk.cpp index 7da35fdad1a..9759cb59169 100644 --- a/engine/class_modules/monk/sc_monk.cpp +++ b/engine/class_modules/monk/sc_monk.cpp @@ -35,12 +35,12 @@ Manatee #include "action/action_callback.hpp" #include "action/parse_effects.hpp" +#include "dbc/trait_data.hpp" #include "player/pet.hpp" #include "player/pet_spawner.hpp" #include "report/charts.hpp" #include "report/highchart.hpp" #include "sc_enums.hpp" -#include "dbc/trait_data.hpp" #include @@ -376,7 +376,7 @@ void monk_action_t::consume_resource() return; if ( current_resource() == RESOURCE_CHI && p()->talent.windwalker.dance_of_chiji->ok() ) - p()->buff.dance_of_chiji->trigger(); + p()->buff.dance_of_chiji->trigger(); // Chi Savings on Dodge & Parry & Miss if ( base_t::last_resource_cost > 0 ) @@ -1425,11 +1425,6 @@ struct fists_of_fury_t : monk_melee_attack_t .set_eff( &effect ); parse_effects( player->buff.tigereye_brew_3 ); - if ( const auto &effect = player->talent.windwalker.tigereye_brew_3->effectN( 1 ); effect.ok() ) - add_parse_entry( da_multiplier_effects ) - .set_value_func( - [ & ]( double ) { return ( p()->composite_melee_crit_chance() ) * effect.percent(); } ) - .set_eff( &effect ); add_parse_entry( da_multiplier_effects ) .set_value( player->talent.windwalker.fists_of_fury->effectN( 6 ).percent() - 1.0 ) @@ -1453,7 +1448,8 @@ struct fists_of_fury_t : monk_melee_attack_t monk_melee_attack_t::impact( state ); p()->buff.momentum_boost_damage->trigger(); - p()->buff.tigereye_brew_3->trigger(); + if ( p()->rng().roll( p()->composite_melee_crit_chance() ) ) + p()->buff.tigereye_brew_3->trigger(); } }; @@ -1462,7 +1458,7 @@ struct fists_of_fury_t : monk_melee_attack_t jadefire_stomp_t( monk_t *player ) : monk_melee_attack_t( player, "jadefire_stomp", player->talent.windwalker.jadefire_stomp_damage ) { - aoe = as(player->talent.windwalker.jadefire_stomp_targeting->effectN( 1 ).base_value()); + aoe = as( player->talent.windwalker.jadefire_stomp_targeting->effectN( 1 ).base_value() ); background = dual = true; ww_mastery = true; @@ -2000,17 +1996,17 @@ struct auto_attack_t : public monk_melee_attack_t switch ( monk_melee_attack_t::weapon->group() ) { case WEAPON_1H: - flurry_charges = as(p()->talent.shado_pan.flurry_strikes->effectN( 1 ).base_value()); + flurry_charges = as( p()->talent.shado_pan.flurry_strikes->effectN( 1 ).base_value() ); break; case WEAPON_2H: - flurry_charges = as(p()->talent.shado_pan.flurry_strikes->effectN( 2 ).base_value()); + flurry_charges = as( p()->talent.shado_pan.flurry_strikes->effectN( 2 ).base_value() ); break; default: assert( false ); } if ( state->result == RESULT_CRIT ) - flurry_charges *= as(1.0 + p()->talent.shado_pan.one_versus_many->effectN( 1 ).base_value()); + flurry_charges *= as( 1.0 + p()->talent.shado_pan.one_versus_many->effectN( 1 ).base_value() ); if ( flurry_charges ) p()->buff.flurry_charge->trigger( flurry_charges ); @@ -2618,7 +2614,7 @@ struct special_delivery_t : public monk_spell_t : monk_spell_t( player, "celestial_flames", player->talent.brewmaster.celestial_flames_damage ) { background = dual = true; - aoe = as(player->talent.brewmaster.celestial_flames->effectN( 2 ).base_value()); + aoe = as( player->talent.brewmaster.celestial_flames->effectN( 2 ).base_value() ); } }; @@ -3396,8 +3392,6 @@ struct zenith_t : public monk_spell_t { parse_options( options_str ); - parse_effects( player->buff.tigereye_brew_1 ); - if ( player->talent.monk.zenith_stomp->ok() ) { zenith_stomp = new zenith_stomp_t( player ); @@ -3954,6 +3948,26 @@ struct whirling_dragon_punch_buff_t : monk_buff_t<> } }; +struct zenith_t : monk_buff_t<> +{ + zenith_t( monk_t *player ) : monk_buff_t( player, "zenith", player->talent.windwalker.zenith ) + { + if ( player->talent.windwalker.martial_agility->ok() ) + add_invalidate( CACHE_AUTO_ATTACK_SPEED ); + + if ( player->talent.windwalker.tigereye_brew_1->ok() ) + set_pct_buff_type( STAT_PCT_BUFF_CRIT ); + } + + bool trigger( int stacks = -1, double = DEFAULT_VALUE(), double chance = -1.0, + timespan_t duration = timespan_t::min() ) override + { + double value = p().buff.tigereye_brew_1->stack_value(); + p().buff.tigereye_brew_1->expire(); + return monk_buff_t::trigger( stacks, value, chance, duration ); + } +}; + struct rushing_jade_wind_buff_t : public monk_buff_t<> { struct tick_action_t : actions::monk_melee_attack_t @@ -4552,7 +4566,6 @@ void monk_t::parse_player_effects() return talent.windwalker.martial_agility->effectN( 3 ).percent(); return value; } ); - parse_effects( talent.windwalker.tigereye_brew_2 ); // Shadopan parse_effects( buff.whirling_steel ); @@ -5125,11 +5138,11 @@ void monk_t::init_spells() talent.windwalker.hurricanes_vault = _ST( "Hurricane's Vault" ); talent.windwalker.path_of_jade = _ST( "Path of Jade" ); talent.windwalker.singularly_focused_jade = _ST( "Singularly Focused Jade" ); - talent.windwalker.tigereye_brew_1 = _ST( "Tigereye Brew" ); - talent.windwalker.tigereye_brew_1_buff = find_spell( 1261724 ); - talent.windwalker.tigereye_brew_2 = _STID( 1261844 ); - talent.windwalker.tigereye_brew_3 = _STID( 1261849 ); - talent.windwalker.tigereye_brew_3_buff = find_spell( 1262042 ); + talent.windwalker.tigereye_brew_1 = find_talent_spell( talent_tree::SPECIALIZATION, "Tigereye Brew", 1 ); + talent.windwalker.tigereye_brew_1_buff = find_spell( 1261724 ); + talent.windwalker.tigereye_brew_2 = find_talent_spell( talent_tree::SPECIALIZATION, "Tigereye Brew", 2 ); + talent.windwalker.tigereye_brew_3 = find_talent_spell( talent_tree::SPECIALIZATION, "Tigereye Brew", 3 ); + talent.windwalker.tigereye_brew_3_buff = find_spell( 1262042 ); } // monk_t::talent::conduit_of_the_celestials @@ -5593,11 +5606,12 @@ void monk_t::create_buffs() // Create the buff even if untalented - it is possible to get a dance of chiji proc without the talent from other // sources. - buff.dance_of_chiji = make_buff_fallback( specialization() == MONK_WINDWALKER, this, "dance_of_chiji", - talent.windwalker.dance_of_chiji_buff ) - ->set_trigger_spell( talent.windwalker.dance_of_chiji ) - ->set_chance( - !talent.windwalker.dance_of_chiji->ok() ? 1.0 : talent.windwalker.dance_of_chiji->proc_chance()); + buff.dance_of_chiji = + make_buff_fallback( specialization() == MONK_WINDWALKER, this, "dance_of_chiji", + talent.windwalker.dance_of_chiji_buff ) + ->set_trigger_spell( talent.windwalker.dance_of_chiji ) + ->set_chance( !talent.windwalker.dance_of_chiji->ok() ? 1.0 + : talent.windwalker.dance_of_chiji->proc_chance() ); buff.hit_combo = make_buff_fallback( talent.windwalker.hit_combo->ok(), this, "hit_combo", talent.windwalker.hit_combo_buff ) @@ -5641,14 +5655,14 @@ void monk_t::create_buffs() buff.whirling_dragon_punch = make_buff_fallback( talent.windwalker.whirling_dragon_punch->ok(), this, "whirling_dragon_punch" ); - buff.zenith = make_buff_fallback( talent.windwalker.zenith->ok(), this, "zenith", talent.windwalker.zenith ) - ->add_invalidate( CACHE_AUTO_ATTACK_SPEED ); + buff.zenith = make_buff_fallback( talent.windwalker.zenith->ok(), this, "zenith" ); buff.rushing_wind_kick = make_buff_fallback( talent.windwalker.rushing_wind_kick->ok(), this, "rushing_wind_kick", talent.windwalker.rushing_wind_kick_buff ); buff.tigereye_brew_1 = make_buff_fallback( talent.windwalker.tigereye_brew_1->ok(), this, "tigereye_brew_1", - talent.windwalker.tigereye_brew_1_buff ); + talent.windwalker.tigereye_brew_1_buff ) + ->set_default_value( talent.windwalker.tigereye_brew_1_buff->effectN( 1 ).percent() ); buff.tigereye_brew_3 = make_buff_fallback( talent.windwalker.tigereye_brew_3->ok(), this, "tigereye_brew_3", talent.windwalker.tigereye_brew_3_buff ); @@ -6323,6 +6337,10 @@ void monk_t::combat_begin() make_repeating_event( sim, talent.monk.chi_wave->effectN( 1 ).period(), [ this ]() { buff.chi_wave->trigger(); } ); } + if ( talent.windwalker.tigereye_brew_1->ok() ) + make_repeating_event( sim, talent.windwalker.tigereye_brew_1->effectN( 1 ).period(), + [ & ] { buff.tigereye_brew_1->trigger(); } ); + if ( specialization() == MONK_WINDWALKER ) { if ( user_options.initial_chi > 0 ) @@ -6569,4 +6587,4 @@ const module_t *module_t::monk() { static monk::monk_module_t m; return &m; -} \ No newline at end of file +} diff --git a/engine/class_modules/monk/sc_monk.hpp b/engine/class_modules/monk/sc_monk.hpp index 500d98660a7..e7f083b5131 100644 --- a/engine/class_modules/monk/sc_monk.hpp +++ b/engine/class_modules/monk/sc_monk.hpp @@ -1116,6 +1116,7 @@ struct monk_t : public stagger_t void init_blizzard_action_list() override; void parse_assisted_combat_step( const assisted_combat_step_data_t &step, action_priority_list_t *assisted_combat ) override; + std::vector action_names_from_spell_id( unsigned int spell_id ) const override; std::string aura_expr_from_spell_id( unsigned int spell_id, bool on_self = true ) const override; parsed_assisted_combat_rule_t parse_assisted_combat_rule( const assisted_combat_rule_data_t &rule, const assisted_combat_step_data_t &step ) const override;