diff --git a/engine/class_modules/apl/apl_monk.cpp b/engine/class_modules/apl/apl_monk.cpp index 1e30ad8787b..e22579b1f45 100644 --- a/engine/class_modules/apl/apl_monk.cpp +++ b/engine/class_modules/apl/apl_monk.cpp @@ -46,179 +46,11 @@ std::string default_temporary_enchant( const monk_t* player ) return "disabled"; } -void default_apl( monk_t* player ) +void default_apl( monk_t* /* player */ ) { - action_priority_list_t* precombat_ = player->get_action_priority_list( "precombat" ); - action_priority_list_t* default_ = player->get_action_priority_list( "default" ); - action_priority_list_t* item_actions_ = player->get_action_priority_list( "item_actions" ); - action_priority_list_t* race_actions_ = player->get_action_priority_list( "race_actions" ); - - precombat_->add_action( "snapshot_stats" ); - precombat_->add_action( "potion" ); - - default_->add_action( "auto_attack" ); - default_->add_action( "potion" ); - default_->add_action( "call_action_list,name=race_actions" ); - default_->add_action( "call_action_list,name=item_actions" ); - default_->add_action( - "black_ox_brew,if=energy<40&(!talent.aspect_of_harmony.enabled|cooldown.celestial_brew.charges_fractional<1)" ); - default_->add_action( - "celestial_brew,if=(buff.aspect_of_harmony_accumulator.value>0.3*health.max&buff.weapons_of_order.up&!dot.aspect_" - "of_harmony_damage.ticking)" ); - default_->add_action( - "celestial_brew,if=(buff.aspect_of_harmony_accumulator.value>0.3*health.max&!talent.weapons_of_order.enabled&!" - "dot.aspect_of_harmony_damage.ticking)" ); - default_->add_action( - "celestial_brew,if=(target.time_to_die<20&target.time_to_die>14&buff.aspect_of_harmony_accumulator.value>0.2*" - "health.max)" ); - default_->add_action( - "celestial_brew,if=(buff.aspect_of_harmony_accumulator.value>0.3*health.max&cooldown.weapons_of_order.remains>20&" - "!dot.aspect_of_harmony_damage.ticking)" ); - default_->add_action( - "celestial_brew,if=!buff.blackout_combo.up&(cooldown.celestial_brew.charges_fractional>1.8|(cooldown.celestial_" - "brew.charges_fractional>1.2&cooldown.black_ox_brew.up))" ); - default_->add_action( "blackout_kick" ); - default_->add_action( "chi_burst,if=!talent.aspect_of_harmony.enabled|buff.balanced_stratagem_magic.stack>3" ); - default_->add_action( "weapons_of_order" ); - default_->add_action( "invoke_niuzao,if=!talent.call_to_arms.enabled" ); - default_->add_action( - "invoke_niuzao,if=talent.call_to_arms.enabled&buff.call_to_arms_invoke_niuzao.down&buff.weapons_of_order.remains<" - "16" ); - default_->add_action( "rising_sun_kick,if=!talent.fluidity_of_motion.enabled" ); - default_->add_action( - "keg_smash,if=buff.weapons_of_order.up&(debuff.weapons_of_order_debuff.remains<1.8|debuff.weapons_of_order_" - "debuff.stack<3-buff.blackout_combo.up|(buff.weapons_of_order.remains<3-buff.blackout_combo.up&buff.weapons_of_" - "order.remains<1+cooldown.rising_sun_kick.remains))" ); - default_->add_action( "tiger_palm,if=buff.blackout_combo.up" ); - default_->add_action( "keg_smash,if=talent.scalding_brew.enabled" ); - default_->add_action( - "spinning_crane_kick,if=talent.charred_passions.enabled&talent.scalding_brew.enabled&buff.charred_passions.up&" - "buff.charred_passions.remains<3&dot.breath_of_fire.remains<9&active_enemies>4" ); - default_->add_action( "rising_sun_kick,if=talent.fluidity_of_motion.enabled" ); - default_->add_action( - "purifying_brew,if=buff.blackout_combo.down&!(talent.call_to_arms.enabled|talent.invoke_niuzao_the_black_ox." - "enabled)" ); - default_->add_action( - "purifying_brew,if=buff.blackout_combo.down&(talent.call_to_arms.enabled|talent.invoke_niuzao_the_black_ox." - "enabled)&(buff.invoke_niuzao_the_black_ox.up|buff.call_to_arms_invoke_niuzao.up)" ); - default_->add_action( - "purifying_brew,if=buff.blackout_combo.down&(talent.call_to_arms.enabled|talent.invoke_niuzao_the_black_ox." - "enabled)&cooldown.weapons_of_order.remains>10&cooldown.invoke_niuzao_the_black_ox.remains>10" ); - default_->add_action( - "breath_of_fire,if=(buff.charred_passions.down&(!talent.scalding_brew.enabled|active_enemies<5))|!talent.charred_" - "passions.enabled|(dot.breath_of_fire.remains<3&talent.scalding_brew.enabled)" ); - default_->add_action( "exploding_keg,if=!talent.rushing_jade_wind.enabled|buff.rushing_jade_wind.up" ); - default_->add_action( - "rushing_jade_wind,if=talent.aspect_of_harmony.enabled&((buff.rushing_jade_wind.remains<2.5&buff.rushing_jade_" - "wind.up)|!buff.rushing_jade_wind.up)" ); - default_->add_action( "keg_smash" ); - default_->add_action( - "rushing_jade_wind,if=!talent.aspect_of_harmony.enabled&((buff.rushing_jade_wind.remains<2.5&buff.rushing_jade_" - "wind.up)|!buff.rushing_jade_wind.up)" ); - default_->add_action( "tiger_palm,if=energy>40-cooldown.keg_smash.remains*energy.regen" ); - default_->add_action( "spinning_crane_kick,if=energy>40-cooldown.keg_smash.remains*energy.regen" ); - - item_actions_->add_action( "use_item,name=tome_of_lights_devotion,if=buff.inner_resilience.up" ); - item_actions_->add_action( - "use_item,name=unyielding_netherprism,if=buff.weapons_of_order.up&debuff.weapons_of_order_debuff.stack=4" ); - item_actions_->add_action( "use_item,name=unyielding_netherprism,if=!talent.weapons_of_order.enabled" ); - item_actions_->add_action( - "use_item,name=lily_of_the_eternal_weave,if=buff.weapons_of_order.up&debuff.weapons_of_order_debuff.stack=4" ); - item_actions_->add_action( "use_item,name=lily_of_the_eternal_weave,if=!talent.weapons_of_order.enabled" ); - item_actions_->add_action( - "use_item,name=signet_of_the_priory,if=buff.weapons_of_order.up&debuff.weapons_of_order_debuff.stack=4" ); - item_actions_->add_action( "use_item,name=signet_of_the_priory,if=!talent.weapons_of_order.enabled" ); - item_actions_->add_action( "use_items" ); - - race_actions_->add_action( "blood_fury" ); - race_actions_->add_action( "berserking" ); - race_actions_->add_action( "arcane_torrent" ); - race_actions_->add_action( "lights_judgment" ); - race_actions_->add_action( "fireblood" ); - race_actions_->add_action( "ancestral_call" ); - race_actions_->add_action( "bag_of_tricks" ); } }; // namespace brewmaster -namespace mistweaver -{ -std::string default_potion( const monk_t* player ) -{ - if ( player->true_level >= 80 ) - return "tempered_potion_3"; - return "disabled"; -} - -std::string default_flask( const monk_t* player ) -{ - if ( player->true_level >= 80 ) - return "flask_of_alchemical_chaos_3"; - return "disabled"; -} - -std::string default_food( const monk_t* player ) -{ - if ( player->true_level >= 80 ) - return "feast_of_the_midnight_masquerade"; - return "disabled"; -} - -std::string default_rune( const monk_t* player ) -{ - if ( player->true_level >= 80 ) - return "crystallized"; - return "disabled"; -} - -std::string default_temporary_enchant( const monk_t* ) -{ - return "disabled"; -} - -void default_apl( monk_t* player ) -{ - action_priority_list_t* pre = player->get_action_priority_list( "precombat" ); - action_priority_list_t* def = player->get_action_priority_list( "default" ); - action_priority_list_t* racials = player->get_action_priority_list( "race_actions" ); - - pre->add_action( "snapshot_stats" ); - pre->add_action( "potion" ); - - for ( const auto& racial_action : player->get_racial_actions() ) - racials->add_action( racial_action ); - - def->add_action( "auto_attack" ); - def->add_action( "potion" ); - def->add_action( "use_item,slot=trinket1" ); - def->add_action( "use_item,slot=trinket2" ); - def->add_action( "call_action_list,name=race_actions" ); - - def->add_action( "touch_of_death" ); - def->add_action( "thunder_focus_tea" ); - def->add_action( "invoke_chiji,if=talent.invokers_delight" ); - def->add_action( "invoke_yulon,if=talent.invokers_delight" ); - def->add_action( - "sheiluns_gift,if=talent.shaohaos_lessons&(buff.sheiluns_gift.stack>=10|(buff.sheiluns_gift.stack*4>=fight_" - "remains&buff.sheiluns_gift.stack>=3)|(fight_style.dungeonslice&buff.sheiluns_gift.stack>=5&active_enemies>=4)" - ")" ); - def->add_action( "celestial_conduit" ); - def->add_action( "rising_sun_kick,if=talent.secret_infusion&buff.thunder_focus_tea.up" ); - def->add_action( "spinning_crane_kick,if=buff.dance_of_chiji.up" ); - def->add_action( "chi_burst,if=active_enemies>=2" ); - def->add_action( "crackling_jade_lightning,if=buff.jade_empowerment.up" ); - - def->add_action( "jadefire_stomp,if=active_enemies>=4&active_enemies<=10" ); - def->add_action( "spinning_crane_kick,if=active_enemies>=4" ); - - def->add_action( "jadefire_stomp,if=buff.jadefire_stomp.down" ); - def->add_action( "rising_sun_kick,if=active_enemies<=2" ); - def->add_action( - "blackout_kick,if=buff.teachings_of_the_monastery.stack>=3&(active_enemies>=2|cooldown.rising_sun_kick.remains>" - "gcd)" ); - def->add_action( "tiger_palm" ); -} -}; // namespace mistweaver - namespace windwalker { std::string default_potion( const monk_t* player ) @@ -249,701 +81,15 @@ std::string default_rune( const monk_t* player ) return "disabled"; } -std::string default_temporary_enchant( const monk_t* player ) +std::string default_temporary_enchant( const monk_t* /* player */ ) { - if ( player->true_level >= 80 ) - return "main_hand:algari_mana_oil_3/off_hand:algari_mana_oil_3"; + // if ( player->true_level >= 80 ) + // return "main_hand:algari_mana_oil_3/off_hand:algari_mana_oil_3"; return "disabled"; } -void live_apl( monk_t* player ) +void live_apl( monk_t* /* player */ ) { - action_priority_list_t* pre = player->get_action_priority_list( "precombat" ); - action_priority_list_t* def = player->get_action_priority_list( "default" ); - action_priority_list_t* trinkets = player->get_action_priority_list( "trinkets" ); - action_priority_list_t* special_trinkets = player->get_action_priority_list( "special_trinkets" ); - action_priority_list_t* normal_opener = player->get_action_priority_list( "normal_opener" ); - action_priority_list_t* cooldowns = player->get_action_priority_list( "cooldowns" ); - action_priority_list_t* default_aoe = player->get_action_priority_list( "default_aoe" ); - action_priority_list_t* default_cleave = player->get_action_priority_list( "default_cleave" ); - action_priority_list_t* default_st = player->get_action_priority_list( "default_st" ); - action_priority_list_t* fallback = player->get_action_priority_list( "fallback" ); - - pre->add_action( "snapshot_stats", "Snapshot raid buffed stats before combat begins and pre-potting is done." ); - pre->add_action( "use_item,name=imperfect_ascendancy_serum" ); - - // Define variable for double on use trinket situations - pre->add_action( "variable,name=invoke_xuen_count,op=set,value=0" ); - - def->add_action( "auto_attack,target_if=max:target.time_to_die" ); - def->add_action( "roll,if=movement.distance>5", "Move to target" ); - def->add_action( "chi_torpedo,if=movement.distance>5" ); - def->add_action( "flying_serpent_kick,if=movement.distance>5" ); - def->add_action( "spear_hand_strike,if=target.debuff.casting.react" ); - - def->add_action( "potion,if=buff.invoke_xuen_the_white_tiger.up&buff.storm_earth_and_fire.up", "Potion" ); - def->add_action( "potion,if=!talent.invoke_xuen_the_white_tiger&buff.storm_earth_and_fire.up" ); - def->add_action( "potion,if=fight_remains<=30" ); - - // Enable PI if available - def->add_action( "variable,name=has_external_pi,value=cooldown.invoke_power_infusion_0.duration>0", - "Enable PI if available" ); - - // Define special trinket situation S3 TWW - def->add_action( - "variable,name=special_case_trinket,value=talent.flurry_strikes&(trinket.1.cooldown.duration=120&trinket.1.has_" - "use_buff|trinket.2.cooldown.duration=120&trinket.2.has_use_buff)&equipped.unyielding_netherprism&!talent.xuens_" - "bond" ); - - // Combine small HotJS into one condition - def->add_action( - "variable,name=small_hotjs_active,value=buff.heart_of_the_jade_serpent_cdr.up|buff.heart_of_the_jade_serpent_" - "tww3_tier.up" ); - - // Count Xuen usages - def->add_action( "variable,name=invoke_xuen_count,op=add,value=1,if=prev.invoke_xuen_the_white_tiger" ); - - // Define variables for CD Usage - def->add_action( - "variable,name=sef_condition,value=target.time_to_die>6&(cooldown.rising_sun_kick.remains|active_enemies>2|!" - "talent.ordered_elements)&(prev.invoke_xuen_the_white_tiger|(talent.celestial_conduit|!talent.last_emperors_" - "capacitor)&buff.bloodlust.up&(cooldown.strike_of_the_windlord.remains<5|!talent.strike_of_the_windlord)&talent." - "sequenced_strikes|buff.invokers_delight.remains>15|(cooldown.strike_of_the_windlord.remains<5|!talent.strike_of_" - "the_windlord)&cooldown.storm_earth_and_fire.full_recharge_time17&cooldown.invoke_xuen_the_white_tiger.remains>cooldown." - "storm_earth_and_fire.full_recharge_time)|fight_remains<30&cooldown.invoke_xuen_the_white_tiger.remains>10&" - "(cooldown.rising_sun_kick.remains|active_enemies>1)|buff.invokers_delight.remains>15&(cooldown.rising_sun_" - "kick.remains|active_enemies>2|!talent.ordered_elements)|fight_style.patchwerk&buff.bloodlust.up&(cooldown." - "rising_sun_kick.remains|active_enemies>2|!talent.ordered_elements)&talent.celestial_conduit&time>10", - "Define Variables for CD Management" ); - def->add_action( - "variable,name=xuen_dungeonslice_condition,value=active_enemies=1&(time<10|talent.xuens_bond&talent.celestial_" - "conduit&target.time_to_die>14)|active_enemies>1&cooldown.storm_earth_and_fire.ready&target.time_to_die>14&(" - "active_enemies>2|debuff.acclamation.up|!talent.ordered_elements&time<5)&((chi>2&!talent.ordered_elements|talent." - "ordered_elements|!talent.ordered_elements&energy<50)|talent.sequenced_strikes&talent.energy_burst&talent." - "revolving_whirl)|fight_remains<30|active_enemies>3&target.time_to_die>5|fight_style.dungeonslice&time>50&target." - "time_to_die>1&talent.xuens_bond" ); - def->add_action( - "variable,name=xuen_condition,value=(fight_style.DungeonSlice&active_enemies=1&(time<10|talent.xuens_bond&talent." - "celestial_conduit)|!fight_style.dungeonslice|active_enemies>1)&cooldown.storm_earth_and_fire.ready&(target.time_" - "to_die>14&!fight_style.dungeonroute|target.time_to_die>22)&(active_enemies>2|debuff.acclamation.up|!talent." - "ordered_elements&time<5)&(chi>2&talent.ordered_elements|chi>5|chi>3&energy<50|energy<50&active_enemies=1|prev." - "tiger_palm&!talent.ordered_elements&time<5)|fight_remains<30|fight_style.dungeonroute&talent.celestial_conduit&" - "target.time_to_die>14" ); - def->add_action( - "variable,name=xuen_dungeonroute_condition,value=cooldown.storm_earth_and_fire.ready&(active_enemies>1&cooldown." - "storm_earth_and_fire.ready&target.time_to_die>22&(active_enemies>2|debuff.acclamation.up|!talent.ordered_" - "elements&time<5)&((chi>2&!talent.ordered_elements|talent.ordered_elements|!talent.ordered_elements&energy<50)|" - "talent.sequenced_strikes&talent.energy_burst&talent.revolving_whirl)|fight_remains<30|active_enemies>3&target." - "time_to_die>15|time>50&(target.time_to_die>10&talent.xuens_bond|target.time_to_die>20))|buff.storm_earth_and_" - "fire.remains>5" ); - def->add_action( - "variable,name=sef_dungeonroute_condition,value=time<50&target.time_to_die>10&(buff.bloodlust.up|active_enemies>" - "2|cooldown.strike_of_the_windlord.remains<2|talent.last_emperors_capacitor&buff.the_emperors_capacitor.stack>17)" - "|target.time_to_die>10&(cooldown.storm_earth_and_fire.full_recharge_time3|energy<50)&(active_enemies>2|!talent.ordered_" - "elements|cooldown.rising_sun_kick.remains)&!talent.flurry_strikes|target.time_to_die>10&talent.flurry_strikes&(" - "active_enemies>2|!talent.ordered_elements|cooldown.rising_sun_kick.remains)&(talent.last_emperors_capacitor&" - "buff.the_emperors_capacitor.stack>17&cooldown.storm_earth_and_fire.full_recharge_time15|!talent.last_emperors_capacitor&cooldown." - "storm_earth_and_fire.full_recharge_time15)" ); - - // Use Trinkets - def->add_action( "call_action_list,name=trinkets,if=!variable.special_case_trinket", "Use Trinkets" ); - def->add_action( "call_action_list,name=special_trinkets,if=variable.special_case_trinket" ); - - // Openers - def->add_action( "call_action_list,name=normal_opener,if=time<4&active_enemies<3", "Opener" ); - - // Use Cooldowns - def->add_action( "call_action_list,name=cooldowns,if=talent.storm_earth_and_fire", "Use Cooldowns" ); - - // Default priority (aoe>=5; cleave=3-4; st<3) - def->add_action( "call_action_list,name=default_aoe,if=active_enemies>=5", "Default Priority" ); - def->add_action( "call_action_list,name=default_cleave,if=active_enemies>2&active_enemies<5" ); - def->add_action( "call_action_list,name=default_st,if=active_enemies<3" ); - - // Fallback - def->add_action( "call_action_list,name=fallback" ); - - // irrelevant racials - def->add_action( "arcane_torrent,if=chiadd_action( "bag_of_tricks,if=buff.storm_earth_and_fire.down" ); - def->add_action( "lights_judgment,if=buff.storm_earth_and_fire.down" ); - def->add_action( "haymaker,if=buff.storm_earth_and_fire.down" ); - def->add_action( "rocket_barrage,if=buff.storm_earth_and_fire.down" ); - // earthen racial not implemented yet - // def->add_action( "azerite_surge,if=buff.storm_earth_and_fire.down" ); - def->add_action( "arcane_pulse,if=buff.storm_earth_and_fire.down" ); - - // Trinkets - trinkets->add_action( - "use_item,slot=trinket1,if=trinket.1.has_use_buff&trinket.2.has_use_buff&buff.invoke_xuen_the_white_tiger.up&" - "variable.invoke_xuen_count%%2|fight_remains<20", - "Double on Use Stats" ); - trinkets->add_action( - "use_item,slot=trinket2,if=trinket.1.has_use_buff&trinket.2.has_use_buff&buff.invoke_xuen_the_white_tiger.up|" - "fight_" - "remains<20" ); - trinkets->add_action( - "use_item,slot=trinket1,if=trinket.1.has_use_buff&!trinket.2.has_use_buff&buff.invoke_xuen_the_white_tiger.up|" - "fight_" - "remains<20", - "Trinket 1 On use Stats" ); - trinkets->add_action( - "use_item,slot=trinket2,if=trinket.1.has_use_buff&!trinket.2.has_use_buff&cooldown.invoke_xuen_the_white_tiger." - "remains>30|fight_remains<20" ); - trinkets->add_action( - "use_item,slot=trinket1,if=!trinket.1.has_use_buff&trinket.2.has_use_buff&cooldown.invoke_xuen_the_white_tiger." - "remains>30|fight_remains<20", - "Trinket 2 On use Stats" ); - trinkets->add_action( - "use_item,slot=trinket2,if=!trinket.1.has_use_buff&trinket.2.has_use_buff&buff.invoke_xuen_the_white_tiger.up|" - "fight_" - "remains<20" ); - trinkets->add_action( "use_item,slot=trinket1,if=!trinket.1.has_use_buff&!trinket.2.has_use_buff", "No Stat on Use" ); - trinkets->add_action( "use_item,slot=trinket2,if=!trinket.1.has_use_buff&!trinket.2.has_use_buff" ); - trinkets->add_action( "use_item,slot=main_hand", "Use Weapon" ); - - // Special Case Trinkets - special_trinkets->add_action( - "use_item,slot=trinket1,if=trinket.1.cooldown.duration=120&buff.invoke_xuen_the_white_tiger.up|fight_remains<30", - "Prism + 2 Min on use without XB talented" ); - special_trinkets->add_action( - "use_item,slot=trinket2,if=trinket.2.cooldown.duration=120&buff.invoke_xuen_the_white_tiger.up|fight_remains<" - "30" ); - special_trinkets->add_action( - "use_item,name=unyielding_netherprism,if=cooldown.invoke_xuen_the_white_tiger.remains&buff.storm_earth_and_fire." - "remains>10&buff.latent_energy.stack>2" ); - special_trinkets->add_action( "use_item,slot=main_hand", "Use Weapon" ); - - // Cooldowns - cooldowns->add_action( - "invoke_external_buff,name=power_infusion,if=buff.invoke_xuen_the_white_tiger.up&(!buff.bloodlust.up|buff." - "bloodlust." - "up&cooldown.strike_of_the_windlord.remains)", - "Use Power Infusion while Invoke Xuen, the White Tiger is " - "active." ); - cooldowns->add_action( - "storm_earth_and_fire,target_if=max:target.time_to_die,if=fight_style.dungeonroute&buff.invokers_delight.remains>" - "15&(active_enemies>2|!talent.ordered_elements|cooldown.rising_sun_kick.remains)" ); - cooldowns->add_action( - "tiger_palm,if=(target.time_to_die>14&!fight_style.dungeonroute|" - "target.time_to_die>22)&!cooldown.invoke_xuen_the_white_tiger.remains&(chi<5&!talent.ordered_elements|chi<3)&(" - "combo_strike|!talent.hit_combo)" ); - cooldowns->add_action( - "invoke_xuen_the_white_tiger,target_if=max:target.time_to_die,if=!fight_style.dungeonroute&(target.time_to_die>" - "12|!talent.xuens_bond&target.time_to_die>8)&set_bonus.tww3_2pc&talent.celestial_conduit&cooldown.strike_of_the_" - "windlord.remains<3&(chi>2&talent.ordered_elements|chi>5|chi>3&energy<50|energy<50&active_enemies=1|prev.tiger_" - "palm&!talent.ordered_elements&time<5)|fight_remains<20" ); - cooldowns->add_action( - "invoke_xuen_the_white_tiger,target_if=max:target.time_to_die,if=(!set_bonus.tww3_2pc|!talent.celestial_conduit|!" - "fight_style.patchwerk)&(variable.xuen_condition&!fight_style.dungeonslice&!fight_style.dungeonroute|variable." - "xuen_dungeonslice_condition&fight_style.Dungeonslice|variable.xuen_dungeonroute_condition&fight_style." - "dungeonroute)" ); - cooldowns->add_action( - "storm_earth_and_fire,target_if=max:target.time_to_die,if=talent.flurry_strikes&cooldown.invoke_xuen_the_white_" - "tiger.remains&buff.bloodlust.up&cooldown.rising_sun_kick.remains|variable.sef_condition&!fight_style." - "dungeonroute|variable.sef_dungeonroute_condition&fight_style.dungeonroute|fight_style.patchwerk&active_enemies=" - "1&talent.flurry_strikes&fight_remains<60&cooldown.invoke_xuen_the_white_tiger.remains>fight_remains&cooldown." - "rising_sun_kick.remains&buff.the_emperors_capacitor.stack>15" ); - cooldowns->add_action( "touch_of_karma,target_if=max:target.time_to_die" ); - // CD relevant racials - cooldowns->add_action( - "ancestral_call,if=buff.invoke_xuen_the_white_tiger.remains>15|!talent.invoke_xuen_the_white_tiger&(!talent." - "storm_earth_and_fire&(cooldown.strike_of_the_windlord.ready|!talent.strike_of_the_windlord&cooldown.fists_of_" - "fury.ready)|buff.storm_earth_and_fire.remains>10)|fight_remains<20" ); - cooldowns->add_action( - "blood_fury,if=buff.invoke_xuen_the_white_tiger.remains>15|!talent.invoke_xuen_the_white_tiger&(!talent.storm_" - "earth_and_fire&(cooldown.strike_of_the_windlord.ready|!talent.strike_of_the_windlord&cooldown.fists_of_fury." - "ready)|buff.storm_earth_and_fire.remains>10)|fight_remains<20" ); - cooldowns->add_action( - "fireblood,if=buff.invoke_xuen_the_white_tiger.remains>15|!talent.invoke_xuen_the_white_tiger&(!talent.storm_" - "earth_and_fire&(cooldown.strike_of_the_windlord.ready|!talent.strike_of_the_windlord&cooldown.fists_of_fury." - "ready)|buff.storm_earth_and_fire.remains>10)|fight_remains<20" ); - cooldowns->add_action( - "berserking,if=buff.invoke_xuen_the_white_tiger.remains>15|!talent.invoke_xuen_the_white_tiger&(!talent.storm_" - "earth_and_fire&(cooldown.strike_of_the_windlord.ready|!talent.strike_of_the_windlord&cooldown.fists_of_fury." - "ready)|buff.storm_earth_and_fire.remains>10)|fight_remains<20" ); - - // Normal Opener - normal_opener->add_action( "tiger_palm,if=chi<6&combo_strike", "normal opener" ); - normal_opener->add_action( "rising_sun_kick" ); - - // >=5 Target priority - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=(energy>55&talent.inner_peace|energy>60&!talent." - "inner_peace)&combo_strike&chi.max-chi>=2&buff.teachings_of_the_monastery.stack=5 Targets" ); - default_aoe->add_action( - "touch_of_death,target_if=min:target.time_to_die,if=!variable.small_hotjs_active&!buff.heart_of_the_jade_serpent_" - "cdr_celestial.up|fight_remains<10" ); - default_aoe->add_action( "whirling_dragon_punch,target_if=max:target.time_to_die,if=buff.dance_of_chiji.stack<2" ); - default_aoe->add_action( - "strike_of_the_windlord,target_if=max:target.time_to_die,if=talent.gale_force&cooldown.invoke_xuen_the_white_" - "tiger.remains>10&set_bonus.tww3_2pc&!talent.flurry_strikes" ); - default_aoe->add_action( - "slicing_winds,if=set_bonus.tww3_2pc&talent.celestial_conduit&variable.small_hotjs_active&!talent.flurry_" - "strikes" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&energy.time_to_max<=gcd.max*3&set_bonus.tww3_4pc" ); - default_aoe->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=buff.dance_of_chiji.stack=2&combo_strike" ); - default_aoe->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.chi_energy.stack>29&cooldown.fists_of_" - "fury.remains<5" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&energy.time_to_max<=gcd." - "max*3&cooldown.fists_of_fury.remains&(!talent.xuens_battlegear|chi<6)&set_bonus.tww3_4pc" ); - default_aoe->add_action( - "slicing_winds,if=variable.small_hotjs_active|buff.heart_of_the_jade_serpent_cdr_celestial.up" ); - default_aoe->add_action( - "celestial_conduit,if=buff.storm_earth_and_fire.up&cooldown.strike_of_the_windlord.remains&(!variable.small_" - "hotjs_active|debuff.gale_force.remains<5)&(talent.xuens_bond|!talent.xuens_bond&buff.invokers_delight.up)|fight_" - "remains<15|fight_style.dungeonroute&buff.invokers_delight.up&cooldown.strike_of_the_windlord.remains&buff.storm_" - "earth_and_fire.remains<8" ); - default_aoe->add_action( - "fists_of_fury,target_if=max:target.time_to_die,if=combo_strike&buff.heart_of_the_jade_serpent_cdr_celestial.up|" - "variable.small_hotjs_active" ); - default_aoe->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=cooldown.whirling_dragon_punch.remains<2&cooldown.fists_of_" - "fury.remains>1&buff.dance_of_chiji.stack<2|!buff.storm_earth_and_fire.up&buff.pressure_point.up" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&energy.time_to_max<=gcd." - "max*3&set_bonus.tww3_4pc" ); - default_aoe->add_action( - "whirling_dragon_punch,target_if=max:target.time_to_die,if=!talent.revolving_whirl|talent.revolving_whirl&buff." - "dance_of_chiji.stack<2&active_enemies>2" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=combo_strike&buff.bok_proc.up&chi<2&talent." - "energy_burst&energy<55" ); - default_aoe->add_action( - "strike_of_the_windlord,target_if=max:target.time_to_die,if=(time>5|buff.invokers_delight.up&buff.storm_earth_" - "and_fire.up)&(cooldown.invoke_xuen_the_white_tiger.remains>" - "15|talent.flurry_strikes)" ); - default_aoe->add_action( "slicing_winds" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=buff.teachings_of_the_monastery.stack=8&talent." - "shadowboxing_treads" ); - default_aoe->add_action( - "crackling_jade_lightning,target_if=max:target.time_to_die,if=buff.the_emperors_capacitor.stack>19&combo_strike&" - "talent.power_of_the_thunder_king&cooldown.invoke_xuen_the_white_tiger.remains>10" ); - default_aoe->add_action( - "fists_of_fury,target_if=max:target.time_to_die,if=(talent.flurry_strikes|talent.xuens_battlegear&(cooldown." - "invoke_xuen_the_white_tiger.remains>5&fight_style.patchwerk|cooldown.invoke_xuen_the_white_tiger.remains>9)|" - "cooldown.invoke_xuen_the_white_tiger.remains>10)" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes&buff.wisdom_of_the_wall_flurry.up&chi<6" ); - default_aoe->add_action( "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&chi>5" ); - default_aoe->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.dance_of_chiji.up&buff.chi_energy." - "stack>29&cooldown.fists_of_fury.remains<5" ); - default_aoe->add_action( - "rising_sun_kick,if=buff.pressure_point.up&cooldown.fists_of_fury." - "remains>2" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&active_enemies>5&set_bonus." - "tww3_4pc" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=talent.shadowboxing_treads&talent.courageous_" - "impulse&combo_strike&buff.bok_proc.stack=2" ); - default_aoe->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.dance_of_chiji.up" ); - default_aoe->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.ordered_elements.up&talent.crane_" - "vortex&active_enemies>2" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes&buff.ordered_elements.up" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&chi.deficit>=2&(!buff.ordered_" - "elements.up|energy.time_to_max<=gcd.max*3)" ); - default_aoe->add_action( - "jadefire_stomp,target_if=max:target.time_to_die,if=talent.Singularly_Focused_Jade|talent.jadefire_harmony" ); - default_aoe->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&!buff.ordered_elements.up&talent.crane_" - "vortex&active_enemies>2&chi>4" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=combo_strike&cooldown.fists_of_fury.remains&(" - "buff.teachings_of_the_monastery.stack>3|buff.ordered_elements.up)&(talent.shadowboxing_treads|buff.bok_proc." - "up)" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=combo_strike&!cooldown.fists_of_fury.remains&" - "chi<3" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=talent.shadowboxing_treads&talent.courageous_" - "impulse&combo_strike&buff.bok_proc.up" ); - default_aoe->add_action( "spinning_crane_kick,if=combo_strike&(chi>3|energy>55)" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=combo_strike&(buff.ordered_elements.up|buff.bok_" - "proc.up&chi.deficit>=1&talent.energy_burst)&cooldown.fists_of_fury.remains" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=combo_strike&cooldown.fists_of_fury.remains&(" - "chi>2|energy>60|buff.bok_proc.up)" ); - default_aoe->add_action( "jadefire_stomp,target_if=max:debuff.acclamation.stack" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.ordered_elements.up&chi.deficit>=" - "1" ); - default_aoe->add_action( "chi_burst,if=!buff.ordered_elements.up" ); - default_aoe->add_action( "chi_burst" ); - default_aoe->add_action( "spinning_crane_kick,if=combo_strike&buff.ordered_elements.up&talent.hit_combo" ); - default_aoe->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=buff.ordered_elements.up&!talent.hit_combo&" - "cooldown.fists_of_fury.remains" ); - default_aoe->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=prev.tiger_palm&chi<3&!cooldown.fists_of_fury.remains" ); - - // 3-4 targets - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=buff.storm_earth_and_fire.remains>13&combo_strike&talent." - "glory_of_the_dawn", - "2-4 targets" ); - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=combo_strike&!cooldown.whirling_dragon_punch.remains&(" - "cooldown.fists_of_fury.remains>1&!talent.xuens_battlegear|cooldown.fists_of_fury.remains>4)&!buff.invokers_" - "delight.up&!talent.flurry_strikes&buff.dance_of_chiji.stack<2&!talent.glory_of_the_dawn" ); - default_cleave->add_action( - "whirling_dragon_punch,target_if=max:target.time_to_die,if=variable.small_hotjs_active&buff.dance_of_chiji.stack<" - "2&prev.rising_sun_kick" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&energy.time_to_max<=gcd.max*3&set_bonus.tww3_4pc" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&!talent.xuens_battlegear&set_bonus.tww3_4pc" ); - default_cleave->add_action( - "strike_of_the_windlord,target_if=max:target.time_to_die,if=talent.gale_force&cooldown.invoke_xuen_the_white_" - "tiger.remains>10&set_bonus.tww3_2pc&!" - "talent.flurry_strikes" ); - default_cleave->add_action( - "slicing_winds,if=set_bonus.tww3_2pc&talent.celestial_conduit&variable.small_hotjs_active&!talent.flurry_" - "strikes" ); - default_cleave->add_action( "spinning_crane_kick,if=buff.dance_of_chiji.stack=2&combo_strike" ); - default_cleave->add_action( - "whirling_dragon_punch,target_if=max:target.time_to_die,if=variable.small_hotjs_active&buff.dance_of_chiji.stack<" - "2" ); - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=buff.pressure_point.up&active_enemies<4&cooldown.fists_of_" - "fury.remains>4" ); - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=cooldown.whirling_dragon_punch.remains<2&cooldown.fists_of_" - "fury.remains<3&buff.dance_of_chiji.stack<2&cooldown.fists_of_fury.remains" ); - default_cleave->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.dance_of_chiji.stack=2&active_enemies>" - "3" ); - default_cleave->add_action( - "celestial_conduit,target_if=max:target.time_to_die,if=buff.storm_earth_and_fire.up&debuff.gale_force.remains<5&" - "cooldown.strike_of_the_windlord.remains&(!buff.heart_of_the_jade_serpent_cdr.up|debuff.gale_force.remains<5)&(" - "talent.xuens_bond|!talent.xuens_bond&buff.invokers_delight.up)|fight_remains<15|fight_style.dungeonroute&buff." - "invokers_delight.up&cooldown.strike_of_the_windlord.remains&buff.storm_earth_and_fire.remains<8|fight_remains<" - "10" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&(energy>55&talent.inner_peace|energy>60&!talent." - "inner_peace)&combo_strike&chi.max-chi>=2&buff.teachings_of_the_monastery.stack=2&!buff.ordered_elements.up" ); - default_cleave->add_action( - "touch_of_death,target_if=max:target.time_to_die,if=!variable.small_hotjs_active&!buff.heart_of_the_jade_serpent_" - "cdr_celestial.up|fight_remains<10" ); - default_cleave->add_action( - "whirling_dragon_punch,target_if=max:target.time_to_die,if=variable.small_hotjs_active&buff.dance_of_" - "chiji.stack<2" ); - default_cleave->add_action( "whirling_dragon_punch,target_if=max:target.time_to_die,if=buff.dance_of_chiji.stack<2" ); - default_cleave->add_action( - "slicing_winds,if=variable.small_hotjs_active|buff.heart_of_the_jade_serpent_cdr_celestial.up" ); - default_cleave->add_action( - "blackout_kick,if=combo_strike&talent.courageous_impulse&talent.shadowboxing_treads&buff.bok_proc.stack=2&" - "cooldown.fists_of_fury.remains&active_enemies=3" ); - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=buff.invoke_xuen_the_white_tiger.down&prev.tiger_palm&time<" - "5&talent.ordered_elements&(talent.glory_of_the_dawn|active_enemies<3)|variable.small_hotjs_active&buff.pressure_" - "point.up&cooldown.fists_of_fury.remains&(talent.glory_of_the_dawn|active_enemies<3)" ); - default_cleave->add_action( - "fists_of_fury,target_if=max:target.time_to_die,if=combo_strike&buff.heart_of_the_jade_serpent_cdr_celestial.up|" - "variable.small_hotjs_active" ); - default_cleave->add_action( - "whirling_dragon_punch,target_if=max:target.time_to_die,if=buff.heart_of_the_jade_serpent_cdr_celestial.up" ); - default_cleave->add_action( - "strike_of_the_windlord,target_if=max:target.time_to_die,if=talent.gale_force&buff.invokers_delight.up&(buff." - "bloodlust.up|!buff.heart_of_the_jade_serpent_cdr_celestial.up)" ); - default_cleave->add_action( - "fists_of_fury,target_if=max:target.time_to_die,if=buff.power_infusion.up&buff.bloodlust.up" ); - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=buff.power_infusion.up&buff.bloodlust.up&active_enemies<3" ); - default_cleave->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=buff.teachings_of_the_monastery.stack=8&(active_" - "enemies<3|talent.shadowboxing_treads)" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_" - "strikes&!talent.xuens_battlegear&" - "set_bonus.tww3_4pc" ); - default_cleave->add_action( - "whirling_dragon_punch,target_if=max:target.time_to_die,if=!talent.revolving_whirl|talent.revolving_whirl&buff." - "dance_of_chiji.stack<2&active_enemies>2|active_enemies<3" ); - default_cleave->add_action( - "strike_of_the_windlord,target_if=max:target.time_to_die,if=time>5&(cooldown.invoke_xuen_the_white_tiger." - "remains>15|talent.flurry_strikes)&(cooldown.fists_of_fury.remains<2|cooldown.celestial_conduit.remains<10)" ); - default_cleave->add_action( "slicing_winds" ); - default_cleave->add_action( - "crackling_jade_lightning,target_if=max:target.time_to_die,if=buff.the_emperors_capacitor.stack>19&combo_strike&" - "talent.power_of_the_thunder_king&cooldown.invoke_xuen_the_white_tiger.remains>10" ); - default_cleave->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.dance_of_chiji.stack=2" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes&active_enemies<5&buff.wisdom_of_the_wall_flurry.up&active_enemies<4" ); - default_cleave->add_action( - "fists_of_fury,target_if=max:target.time_to_die,if=(talent.flurry_strikes|talent.xuens_battlegear|!talent.xuens_" - "battlegear&(cooldown.strike_of_the_windlord.remains>1|variable.small_hotjs_active|buff.heart_of_the_" - "jade_serpent_cdr_celestial.up))&(talent.flurry_strikes|talent.xuens_battlegear&(cooldown.invoke_xuen_the_white_" - "tiger.remains>5&fight_style.patchwerk|cooldown.invoke_xuen_the_white_tiger.remains>9)|cooldown.invoke_xuen_the_" - "white_tiger.remains>10)" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes&active_enemies<5&buff.wisdom_of_the_wall_flurry.up" ); - default_cleave->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.dance_of_chiji.up&buff.chi_energy." - "stack>29" ); - default_cleave->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=chi>4&(active_enemies<3|talent.glory_of_the_dawn)|chi>2&" - "energy>50&(active_enemies<3|talent.glory_of_the_dawn)|cooldown.fists_of_fury.remains>2&(active_enemies<3|talent." - "glory_of_the_dawn)" ); - default_cleave->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=talent.shadowboxing_treads&talent.courageous_" - "impulse&combo_strike&buff.bok_proc.stack=2" ); - default_cleave->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=buff.teachings_of_the_monastery.stack=4&!talent." - "knowledge_of_the_broken_temple&talent.shadowboxing_treads&active_enemies<3" ); - default_cleave->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&buff.dance_of_chiji.up" ); - default_cleave->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=talent.shadowboxing_treads&talent.courageous_" - "impulse&combo_strike&buff.bok_proc.up" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes&active_enemies<5" ); - default_cleave->add_action( - "tiger_palm,target_if=max:target.time_to_die,if=combo_strike&chi.deficit>=2&(!buff.ordered_" - "elements.up|energy.time_to_max<=gcd.max*3)" ); - default_cleave->add_action( - "blackout_kick,target_if=max:target.time_to_die,if=combo_strike&cooldown.fists_of_fury.remains&" - "buff.teachings_of_the_monastery.stack>3&cooldown.rising_sun_kick.remains" ); - default_cleave->add_action( - "jadefire_stomp,if=talent.Singularly_Focused_Jade|talent.jadefire_" - "harmony" ); - default_cleave->add_action( - "blackout_kick,if=combo_strike&cooldown.fists_of_fury.remains&(" - "buff.teachings_of_the_monastery.stack>3|buff.ordered_elements.up)&(talent.shadowboxing_treads|buff.bok_proc.up|" - "buff.ordered_elements.up)" ); - default_cleave->add_action( - "spinning_crane_kick,target_if=max:target.time_to_die,if=combo_strike&!buff.ordered_elements.up&talent.crane_" - "vortex&active_enemies>2&chi>4" ); - default_cleave->add_action( "chi_burst,if=!buff.ordered_elements.up" ); - default_cleave->add_action( - "blackout_kick,if=combo_strike&(buff.ordered_elements.up|buff.bok_" - "proc.up&chi.deficit>=1&talent.energy_burst)&cooldown.fists_of_fury.remains" ); - default_cleave->add_action( - "blackout_kick,if=combo_strike&cooldown.fists_of_fury.remains&(" - "chi>2|energy>60|buff.bok_proc.up)" ); - default_cleave->add_action( "jadefire_stomp,target_if=max:debuff.acclamation.stack" ); - default_cleave->add_action( - "tiger_palm,if=combo_strike&buff.ordered_elements.up&chi.deficit>=" - "1" ); - default_cleave->add_action( "chi_burst" ); - default_cleave->add_action( "spinning_crane_kick,if=combo_strike&buff.ordered_elements.up&talent.hit_combo" ); - default_cleave->add_action( - "blackout_kick,if=buff.ordered_elements.up&!talent.hit_combo&" - "cooldown.fists_of_fury.remains" ); - default_cleave->add_action( "blackout_kick,if=combo_strike&!cooldown.fists_of_fury.remains&prev.tiger_palm" ); - default_cleave->add_action( "tiger_palm,if=prev.tiger_palm&chi<3&!cooldown.fists_of_fury.remains" ); - - // 1-2 Target priority - default_st->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=combo_strike&buff.pressure_point.up&variable.small_hotjs_" - "active", - "1 target" ); - default_st->add_action( "slicing_winds,if=set_bonus.tww3_2pc&talent.celestial_conduit&variable.small_hotjs_active" ); - default_st->add_action( - "tiger_palm,if=combo_strike&!cooldown.celestial_conduit.remains&buff.pressure_point.up&chi<5&time<10" ); - default_st->add_action( - "fists_of_fury,target_if=max:debuff.acclamation.stack,if=active_enemies>1&(combo_strike&buff.heart_of_the_jade_" - "serpent_cdr_celestial.up|variable.small_hotjs_active)" ); - default_st->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=combo_strike&(buff.pressure_point.up&!variable.small_hotjs_" - "active&buff.heart_of_the_jade_" - "serpent_cdr_celestial.up|buff.invokers_delight.up|buff.bloodlust.up|buff.pressure_point.up&cooldown.fists_of_" - "fury.remains|talent.flurry_strikes)" ); - default_st->add_action( - "tiger_palm,if=chi<5&combo_strike&!variable.small_hotjs_active&!" - "buff.heart_of_the_jade_serpent_cdr_celestial.up&energy.time_to_max<=gcd.max*3" ); - default_st->add_action( - "tiger_palm,if=combo_strike&buff.storm_earth_and_fire.remains>2&talent.flurry_strikes&set_bonus.tww3_4pc" ); - default_st->add_action( - "tiger_palm,if=combo_strike&buff.storm_earth_and_fire.remains&talent.flurry_strikes&set_bonus.tww3_4pc&!buff." - "bloodlust.up" ); - default_st->add_action( - "whirling_dragon_punch,target_if=max:debuff.acclamation.stack,if=!buff.heart_of_the_jade_serpent_cdr_celestial." - "up&!buff.dance_of_chiji.stack=2&!set_bonus.tww3_2pc|active_enemies>1&buff.dance_of_chiji.stack<2&cooldown." - "celestial_conduit.remains" ); - default_st->add_action( - "celestial_conduit,if=buff.storm_earth_and_fire.up&(!buff.heart_of_the_jade_serpent_cdr.up|debuff.gale_force." - "remains<5)&cooldown.strike_of_the_windlord.remains&(talent.xuens_bond|!talent.xuens_bond&buff.invokers_delight." - "up)|fight_remains<15|fight_style.dungeonroute&buff.invokers_delight.up&cooldown.strike_of_the_windlord.remains&" - "buff.storm_earth_and_fire.remains<8|fight_remains<10" ); - default_st->add_action( - "tiger_palm,if=chi<5&combo_strike&variable.small_hotjs_active&!" - "buff.heart_of_the_jade_serpent_cdr_celestial.up&energy.time_to_max<=gcd.max*3&!buff.invokers_delight.up&!buff." - "bloodlust.up&!buff.storm_earth_and_fire.up" ); - default_st->add_action( - "tiger_palm,if=chi<2&combo_strike&cooldown.strike_of_the_windlord.remains<5&talent.celestial_conduit" ); - default_st->add_action( "tiger_palm,if=chi<2&combo_strike&talent.celestial_conduit" ); - default_st->add_action( - "fists_of_fury,target_if=max:debuff.acclamation.stack,if=combo_strike&buff.heart_of_the_jade_serpent_cdr_" - "celestial.up|variable.small_hotjs_active" ); - default_st->add_action( - "spinning_crane_kick,if=buff.dance_of_chiji.stack=2&combo_strike&(!set_bonus.tww3_2pc|!buff.bloodlust.up)&!" - "talent.flurry_strikes" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=(energy>55&talent.inner_peace|energy>60&!talent." - "inner_peace)&combo_strike&chi.max-chi>=2&buff.teachings_of_the_monastery.stack=2&!buff." - "ordered_elements.up" ); - default_st->add_action( "touch_of_death,target_if=min:target.time_to_die" ); - default_st->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=combo_strike&(buff.invoke_xuen_the_white_tiger.down&prev." - "tiger_palm&time<5|buff.storm_earth_and_" - "fire.up&talent.ordered_elements)" ); - default_st->add_action( - "strike_of_the_windlord,target_if=max:debuff.acclamation.stack,if=!buff.heart_of_the_jade_serpent_cdr_celestial." - "up&talent.celestial_conduit&!buff." - "invokers_delight.up&!buff.heart_of_the_jade_serpent_cdr_celestial.up&cooldown.fists_of_fury.remains<5&cooldown." - "invoke_xuen_the_white_tiger.remains>15&(cooldown.slicing_winds.remains<23|!set_bonus.tww3_2pc)|fight_remains<" - "12" ); - default_st->add_action( - "strike_of_the_windlord,target_if=max:debuff.acclamation.stack,if=talent.gale_force&cooldown.invoke_xuen_the_" - "white_tiger.remains>13|fight_remainsadd_action( - "strike_of_the_windlord,target_if=max:debuff.acclamation.stack,if=time>5&talent.flurry_strikes" ); - default_st->add_action( - "strike_of_the_windlord,target_if=max:debuff.acclamation.stack,if=time>15&set_bonus.tww3_2pc&cooldown.invoke_" - "xuen_the_white_tiger.remains>15&(cooldown." - "slicing_winds.remains<23|!set_bonus.tww3_2pc)" ); - default_st->add_action( "spinning_crane_kick,if=buff.dance_of_chiji.stack=2&combo_strike&!talent.flurry_strikes" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=buff.teachings_of_the_monastery.stack>3&buff." - "ordered_elements.up&cooldown.rising_sun_kick.remains>1&cooldown.fists_of_fury.remains>2&!set_bonus.tww3_2pc" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=buff.teachings_of_the_monastery.stack>4&" - "cooldown.rising_sun_kick.remains>1&cooldown.fists_of_fury.remains>2&!set_bonus.tww3_2pc" ); - default_st->add_action( "whirling_dragon_punch,target_if=max:debuff.acclamation.stack,if=set_bonus.tww3_2pc" ); - default_st->add_action( - "whirling_dragon_punch,target_if=max:debuff.acclamation.stack,if=!buff.heart_of_the_jade_serpent_cdr_celestial." - "up&!buff.dance_of_chiji.stack=2|buff." - "ordered_elements.up|talent.knowledge_of_the_broken_temple" ); - default_st->add_action( - "crackling_jade_lightning,target_if=max:debuff.acclamation.stack,if=buff.the_emperors_capacitor.stack>19&!" - "variable.small_hotjs_active&!buff.heart_of_" - "the_jade_serpent_cdr_celestial.up&combo_strike&(!fight_style.dungeonslice|target.time_to_die>20)&cooldown." - "invoke_xuen_the_white_tiger.remains>15|buff.the_emperors_capacitor.stack>20&!variable.small_hotjs_active&!buff." - "heart_of_the_jade_serpent_cdr_celestial.up&combo_strike&(!fight_style.dungeonslice|target.time_to_die>20)&" - "cooldown.invoke_xuen_the_white_tiger.remains<20&cooldown.invoke_xuen_the_white_tiger.remains>2|buff.the_" - "emperors_capacitor.stack>10&fight_remains<5|buff.storm_earth_and_fire.remains<2&buff.the_emperors_capacitor." - "stack>15&buff.storm_earth_and_fire.up" ); - default_st->add_action( "slicing_winds,if=target.time_to_die>10&!set_bonus.tww3_4pc|talent.flurry_strikes" ); - default_st->add_action( - "rising_sun_kick,target_if=max:target.time_to_die,if=combo_strike&(chi>4|chi>2&energy>50|cooldown.fists_of_fury." - "remains>2)" ); - default_st->add_action( - "fists_of_fury,target_if=max:debuff.acclamation.stack,if=(talent.xuens_battlegear|!talent.xuens_battlegear&(" - "cooldown.strike_of_the_windlord.remains>1|" - "variable.small_hotjs_active|buff.heart_of_the_jade_serpent_cdr_celestial.up))&(talent.xuens_battlegear&cooldown." - "invoke_xuen_the_white_tiger.remains>5|cooldown.invoke_xuen_the_white_tiger.remains>10)&(!buff.invokers_delight." - "up|buff.invokers_delight.up&cooldown.strike_of_the_windlord.remains>4&cooldown.celestial_conduit.remains)|fight_" - "remains<5|talent.flurry_strikes" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=combo_strike&energy.time_to_max<=gcd.max*3&talent.flurry_" - "strikes&buff.wisdom_of_the_wall_flurry." - "up" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=combo_strike&chi<5&set_bonus.tww3_2pc" ); - default_st->add_action( "spinning_crane_kick,if=buff.dance_of_chiji.stack=2&combo_strike" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=combo_strike&talent.energy_burst&buff.bok_proc.up&chi<5&" - "(variable.small_hotjs_active|buff." - "heart_of_the_jade_serpent_cdr_celestial.up)" ); - default_st->add_action( - "spinning_crane_kick,if=combo_strike&buff.bloodlust.up&variable.small_hotjs_active&buff.dance_of_chiji." - "up" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=combo_strike&chi.deficit>=2&energy.time_to_max<=" - "gcd.max*3" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=buff.teachings_of_the_monastery.stack>7&talent." - "memory_of_the_monastery&!buff.memory_of_the_monastery.up&cooldown.fists_of_fury.remains" ); - default_st->add_action( - "spinning_crane_kick,if=(buff.dance_of_chiji.stack=2|buff.dance_of_chiji.remains<2&buff.dance_of_chiji.up)&combo_" - "strike&!buff.ordered_elements.up" ); - default_st->add_action( "whirling_dragon_punch,target_if=max:debuff.acclamation.stack" ); - default_st->add_action( "spinning_crane_kick,if=buff.dance_of_chiji.stack=2&combo_strike" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=talent.courageous_impulse&combo_strike&buff.bok_" - "proc.stack=2" ); - default_st->add_action( "spinning_crane_kick,if=buff.dance_of_chiji.up&set_bonus.tww3_2pc&combo_strike" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=combo_strike&buff.ordered_elements.up&cooldown." - "rising_sun_kick.remains>1&cooldown.fists_of_fury.remains>2" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes" ); - default_st->add_action( - "spinning_crane_kick,if=combo_strike&buff.dance_of_chiji.up&(buff.ordered_elements.up|energy.time_to_max>=gcd." - "max*3&talent.sequenced_strikes&talent.energy_burst|!talent.sequenced_strikes|!talent.energy_burst|buff.dance_of_" - "chiji.remains<=gcd.max*3)" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=combo_strike&energy.time_to_max<=gcd.max*3&talent." - "flurry_strikes" ); - default_st->add_action( "jadefire_stomp,if=talent.Singularly_Focused_Jade|talent.jadefire_harmony" ); - default_st->add_action( "chi_burst,if=!buff.ordered_elements.up" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=combo_strike&(buff.ordered_elements.up|buff.bok_" - "proc.up&chi.deficit>=1&talent.energy_burst)&cooldown.fists_of_fury.remains" ); - default_st->add_action( - "blackout_kick,target_if=max:debuff.acclamation.stack,if=combo_strike&cooldown.fists_of_fury.remains&(" - "chi>2|energy>60|buff.bok_proc.up)" ); - default_st->add_action( "jadefire_stomp" ); - default_st->add_action( - "tiger_palm,target_if=max:debuff.acclamation.stack,if=combo_strike&buff.ordered_elements.up&chi.deficit>=" - "1" ); - default_st->add_action( "chi_burst" ); - default_st->add_action( "spinning_crane_kick,if=combo_strike&buff.ordered_elements.up&talent.hit_combo" ); - default_st->add_action( - "blackout_kick,if=buff.ordered_elements.up&!talent.hit_combo&" - "cooldown.fists_of_fury.remains" ); - default_st->add_action( "tiger_palm,if=prev.tiger_palm&chi<3&!cooldown.fists_of_fury.remains" ); - - // fallback - fallback->add_action( "spinning_crane_kick,if=chi>5&combo_strike", "Fallback" ); - fallback->add_action( "blackout_kick,if=combo_strike&chi>3" ); - fallback->add_action( "tiger_palm,if=combo_strike&chi>5" ); } void ptr_apl( monk_t* player ) @@ -971,7 +117,6 @@ void monk_t::init_blizzard_action_list() switch ( specialization() ) { case MONK_BREWMASTER: - case MONK_MISTWEAVER: case MONK_WINDWALKER: default_->add_action( "auto_attack", "Overridden" ); break; @@ -987,11 +132,8 @@ void monk_t::init_blizzard_action_list() switch ( specialization() ) { case MONK_BREWMASTER: - cooldowns->add_action( "weapons_of_order" ); cooldowns->add_action( "invoke_niuzao_the_black_ox" ); break; - case MONK_MISTWEAVER: - break; case MONK_WINDWALKER: cooldowns->add_action( "invoke_xuen_the_white_tiger" ); cooldowns->add_action( "touch_of_karma" ); @@ -1005,12 +147,20 @@ void monk_t::init_blizzard_action_list() void monk_t::parse_assisted_combat_step( const assisted_combat_step_data_t& step, action_priority_list_t* assisted_combat ) { + if ( step.spell_id == 388193 ) + return; + base_t::parse_assisted_combat_step( step, assisted_combat ); } parsed_assisted_combat_rule_t monk_t::parse_assisted_combat_rule( const assisted_combat_rule_data_t& rule, const assisted_combat_step_data_t& step ) const { + // Assisted Combat APL is partially updated and still includes references to Emperor's Capacitor + if ( step.spell_id == 117952 && rule.condition_type == PLAYER_AURA_APPLICATION_GREATER && + rule.condition_value_1 == 393039 && rule.condition_value_2 == 20 && rule.condition_value_3 == 0 ) + return "1"; + if ( step.spell_id == 152175 && rule.condition_type == TARGET_DISTANCE_LESS ) { assisted_combat_rule_data_t rule_copy = rule; @@ -1019,27 +169,38 @@ parsed_assisted_combat_rule_t monk_t::parse_assisted_combat_rule( const assisted return { base_t::parse_assisted_combat_rule( rule_copy, step ), "Extended range check to 10 yards (from 5)." }; } - if ( is_ptr() && step.spell_id == 205523 && rule.condition_type == AURA_ON_PLAYER && - rule.condition_value_1 == 196736 ) - return { "", "Remove talent.blackout_combo check." }; + if ( step.spell_id == 100780 && rule.condition_type == AURA_ON_PLAYER && rule.condition_value_1 == 116768 && + rule.condition_value_2 == 0 && rule.condition_value_3 == 0 ) + return { + "buff.combo_breaker.up", + "The name `Combo Breaker` is used instead of `Blackout Kick` due to standard tokenization rules and clarity.", + true }; - if ( rule.condition_type == AURA_MISSING_PLAYER ) + if ( step.spell_id == 100780 && rule.condition_type == AURA_MISSING_PLAYER && rule.condition_value_1 == 261916 && + rule.condition_value_2 == 0 && rule.condition_value_3 == 0 ) + return { "1", "Checks for Blackout Kick Rank 2 being known, which is assumed to be true.", true }; + + if ( rule.condition_type == AURA_MISSING_PLAYER && rule.condition_value_2 == 0 && rule.condition_value_3 == 0 ) { switch ( rule.condition_value_1 ) { - case 1245502: - case 1245503: - case 1245504: - case 1245506: + case 1249753: + case 1249754: + case 1249756: + case 1249757: + case 1249758: + case 1249764: + case 1249765: + case 1249766: return { "combo_strike", - fmt::format( "Spell id {} is a helper buff to avoid breaking combo for {}.", rule.condition_value_1, - find_spell( step.spell_id )->name_cstr() ), - true }; + fmt::format( "Spell id {} is a helper buff to avoid breaking Combo Strikes for {}.", + rule.condition_value_1, find_spell( step.spell_id )->name_cstr() ), + false }; } } if ( rule.condition_type == TARGET_COUNT_NEAR_PLAYER_GREATER && rule.condition_value_1 == 1 && - rule.condition_value_2 == 15 ) + rule.condition_value_2 == 15 && rule.condition_value_3 == 0 ) return { "1", "Counts valid targets for action, including player." }; return base_t::parse_assisted_combat_rule( rule, step ); @@ -1051,8 +212,6 @@ std::string monk_t::aura_expr_from_spell_id( unsigned int spell_id, bool on_self { switch ( spell_id ) { - case 261916: // Blackout Kick! proc - return "buff.bok_proc"; case 443421: // Heart of the Jade Serpent Strike of the Windlord Cooldown Reduction return "buff.heart_of_the_jade_serpent_cdr"; case 443616: // Heart of the Jade Serpent Conduit of the Celestial Cooldown Reduction @@ -1072,8 +231,6 @@ std::string monk_t::default_potion() const { case MONK_BREWMASTER: return brewmaster::default_potion( this ); - case MONK_MISTWEAVER: - return mistweaver::default_potion( this ); case MONK_WINDWALKER: return windwalker::default_potion( this ); default: @@ -1087,8 +244,6 @@ std::string monk_t::default_flask() const { case MONK_BREWMASTER: return brewmaster::default_flask( this ); - case MONK_MISTWEAVER: - return mistweaver::default_flask( this ); case MONK_WINDWALKER: return windwalker::default_flask( this ); default: @@ -1102,8 +257,6 @@ std::string monk_t::default_food() const { case MONK_BREWMASTER: return brewmaster::default_food( this ); - case MONK_MISTWEAVER: - return mistweaver::default_food( this ); case MONK_WINDWALKER: return windwalker::default_food( this ); default: @@ -1117,8 +270,6 @@ std::string monk_t::default_rune() const { case MONK_BREWMASTER: return brewmaster::default_rune( this ); - case MONK_MISTWEAVER: - return mistweaver::default_rune( this ); case MONK_WINDWALKER: return windwalker::default_rune( this ); default: @@ -1132,8 +283,6 @@ std::string monk_t::default_temporary_enchant() const { case MONK_BREWMASTER: return brewmaster::default_temporary_enchant( this ); - case MONK_MISTWEAVER: - return mistweaver::default_temporary_enchant( this ); case MONK_WINDWALKER: return windwalker::default_temporary_enchant( this ); default: @@ -1152,9 +301,6 @@ void monk_t::init_action_list() case MONK_BREWMASTER: brewmaster::default_apl( this ); break; - case MONK_MISTWEAVER: - mistweaver::default_apl( this ); - break; case MONK_WINDWALKER: windwalker::default_apl( this ); break; diff --git a/engine/class_modules/monk/sc_monk.cpp b/engine/class_modules/monk/sc_monk.cpp index ff0ed57a8ed..a1525ce077c 100644 --- a/engine/class_modules/monk/sc_monk.cpp +++ b/engine/class_modules/monk/sc_monk.cpp @@ -245,9 +245,6 @@ void monk_action_t::init() "Two power entries per aura id." ); _resource_by_stance[ dbc::spec_idx( MONK_BREWMASTER, Base::sim->dbc->ptr ) ] = pd.resource(); break; - case 137024: - assert( false ); - break; case 137025: assert( _resource_by_stance[ dbc::spec_idx( MONK_WINDWALKER, Base::sim->dbc->ptr ) ] == RESOURCE_MAX && "Two power entries per aura id." ); @@ -413,8 +410,8 @@ void monk_action_t::consume_resource() p()->efficient_training_energy += std::lround( final_cost ); if ( p()->efficient_training_energy >= p()->talent.shado_pan.efficient_training->effectN( 3 ).base_value() ) { - timespan_t cdr = - timespan_t::from_millis( -1 * p()->talent.shado_pan.efficient_training->effectN( 4 ).base_value() ); + // timespan_t cdr = + // timespan_t::from_millis( -1 * p()->talent.shado_pan.efficient_training->effectN( 4 ).base_value() ); p()->efficient_training_energy -= as( p()->talent.shado_pan.efficient_training->effectN( 3 ).base_value() ); } @@ -611,32 +608,18 @@ struct flurry_strikes_t : public monk_melee_attack_t } }; - struct flurry_strike_wisdom_t : public monk_spell_t - { - flurry_strike_wisdom_t( monk_t *p ) - : monk_spell_t( p, "flurry_strike_wisdom", p->talent.shado_pan.wisdom_of_the_wall_flurry ) - { - aoe = -1; - background = dual = true; - - name_str_reporting = "flurry_strike_wisdom_of_the_wall"; - } - }; - struct flurry_strike_t : public monk_melee_attack_t { enum wisdom_buff_e { WISDOM_OF_THE_WALL_CRIT, WISDOM_OF_THE_WALL_DODGE, - WISDOM_OF_THE_WALL_FLURRY, WISDOM_OF_THE_WALL_MASTERY }; int flurry_strikes_counter; int flurry_strikes_threshold; shuffled_rng_t *deck; - flurry_strike_wisdom_t *wisdom_flurry; /* * [shadow] buff application tends to be a bit late, thus up cannot reliably @@ -647,21 +630,16 @@ struct flurry_strikes_t : public monk_melee_attack_t */ bool recent_shadow_trigger; - flurry_strike_t( monk_t *p, action_t *parent ) + flurry_strike_t( monk_t *p, action_t * ) : 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( 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 } } ) ), + 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_MASTERY, 1 } } ) ), recent_shadow_trigger( false ) { background = dual = true; - - wisdom_flurry = new flurry_strike_wisdom_t( p ); - - parent->add_child( wisdom_flurry ); } void set_recent_trigger( bool state ) @@ -700,10 +678,6 @@ struct flurry_strikes_t : public monk_melee_attack_t case WISDOM_OF_THE_WALL_DODGE: p()->buff.wisdom_of_the_wall_dodge->trigger(); break; - case WISDOM_OF_THE_WALL_FLURRY: - set_recent_trigger( true ); - p()->buff.wisdom_of_the_wall_flurry->trigger(); - break; case WISDOM_OF_THE_WALL_MASTERY: p()->buff.wisdom_of_the_wall_mastery->trigger(); break; @@ -717,9 +691,6 @@ 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() || recent_shadow_trigger ) - wisdom_flurry->execute_on_target( s->target ); } void reset() override @@ -3543,60 +3514,50 @@ struct unity_within_t : public monk_spell_t struct celestial_conduit_t : public monk_spell_t { - // TODO: convert to template - struct celestial_conduit_dmg_t : public monk_spell_t + template + struct tick_action_t : TBase { - celestial_conduit_dmg_t( monk_t *p ) - : monk_spell_t( p, "celestial_conduit_dmg", p->talent.conduit_of_the_celestials.celestial_conduit_dmg ) - { - background = true; - aoe = -1; - split_aoe_damage = true; - ww_mastery = true; - } - - double composite_aoe_multiplier( const action_state_t *state ) const override + tick_action_t( monk_t *player, std::string_view name, const spell_data_t *spell_data ) + : TBase( player, name, spell_data ) { - double cam = monk_spell_t::composite_aoe_multiplier( state ); + TBase::background = true; - if ( state->n_targets > 0 ) - cam *= 1 + ( p()->talent.conduit_of_the_celestials.celestial_conduit->effectN( 1 ).percent() * - std::min( as( state->n_targets ), - p()->talent.conduit_of_the_celestials.celestial_conduit->effectN( 3 ).base_value() ) ); - - return cam; - } - }; + if constexpr ( std::is_same_v ) + { + TBase::aoe = -1; + TBase::split_aoe_damage = true; + TBase::ww_mastery = true; + } - struct celestial_conduit_heal_t : public monk_heal_t - { - celestial_conduit_heal_t( monk_t *p ) - : monk_heal_t( p, "celestial_conduit_heal", p->talent.conduit_of_the_celestials.celestial_conduit_heal ) - { - background = true; - target = p; + if constexpr ( std::is_same_v ) + TBase::target = player; } double composite_aoe_multiplier( const action_state_t *state ) const override { - double cam = monk_heal_t::composite_aoe_multiplier( state ); + double cam = TBase::composite_aoe_multiplier( state ); - if ( state->n_targets > 0 ) - cam *= 1 + ( p()->talent.conduit_of_the_celestials.celestial_conduit->effectN( 1 ).percent() * - std::min( (double)state->n_targets, - p()->talent.conduit_of_the_celestials.celestial_conduit->effectN( 3 ).base_value() ) ); + if ( state->n_targets ) + cam *= + 1 + + ( TBase::p()->talent.conduit_of_the_celestials.celestial_conduit_action->effectN( 1 ).percent() * + std::min( + as( state->n_targets ), + TBase::p()->talent.conduit_of_the_celestials.celestial_conduit_action->effectN( 3 ).base_value() ) ); return cam; } }; - celestial_conduit_dmg_t *damage; - celestial_conduit_heal_t *heal; + action_t *damage; + action_t *heal; - celestial_conduit_t( monk_t *p, std::string_view options_str ) - : monk_spell_t( p, "celestial_conduit", p->talent.conduit_of_the_celestials.celestial_conduit ), - damage( new celestial_conduit_dmg_t( p ) ), - heal( new celestial_conduit_heal_t( p ) ) + celestial_conduit_t( monk_t *player, std::string_view options_str ) + : monk_spell_t( player, "celestial_conduit", player->talent.conduit_of_the_celestials.celestial_conduit_action ), + damage( new tick_action_t( player, "celestial_conduit_damage", + player->talent.conduit_of_the_celestials.celestial_conduit_damage ) ), + heal( new tick_action_t( player, "celestial_conduit_heal", + player->talent.conduit_of_the_celestials.celestial_conduit_heal ) ) { parse_options( options_str ); @@ -3607,6 +3568,14 @@ struct celestial_conduit_t : public monk_spell_t tick_action = damage; } + bool ready() override + { + if ( p()->talent.conduit_of_the_celestials.celestial_conduit->ok() ) + return monk_spell_t::ready(); + + return false; + } + bool usable_moving() const override { return true; @@ -5078,13 +5047,12 @@ void monk_t::init_spells() baseline.monk.provoke = find_class_spell( "Provoke" ); baseline.monk.roll = find_class_spell( "Roll" ); baseline.monk.spinning_crane_kick = find_spell( 101546 ); - baseline.monk.tiger_palm = find_class_spell( "Tiger Palm" ); + baseline.monk.tiger_palm = find_spell( 100780 ); baseline.monk.touch_of_death = find_spell( 322109 ); baseline.monk.vivify = find_class_spell( "Vivify" ); } // monk_t::baseline::brewmaster - if ( specialization() == MONK_BREWMASTER ) { baseline.brewmaster.mastery = find_mastery_spell( MONK_BREWMASTER ); baseline.brewmaster.aura = find_specialization_spell( "Brewmaster Monk" ); @@ -5107,7 +5075,6 @@ void monk_t::init_spells() } // monk_t::baseline::windwalker - if ( specialization() == MONK_WINDWALKER ) { baseline.windwalker.mastery = find_mastery_spell( MONK_WINDWALKER ); baseline.windwalker.aura = find_specialization_spell( "Windwalker Monk" ); @@ -5128,92 +5095,80 @@ void monk_t::init_spells() // monk_t::talent::monk { - talent.monk.rising_sun_kick = _CT( "Rising Sun Kick" ); - talent.monk.soothing_mist = _CT( "Soothing Mist" ); - talent.monk.paralysis = _CT( "Paralysis" ); - talent.monk.stagger = _CT( "Stagger" ); - talent.monk.elusive_mists = _CT( "Elusive Mists" ); - talent.monk.tigers_lust = _CT( "Tiger's Lust" ); - talent.monk.crashing_momentum = _CT( "Crashing Momentum" ); - talent.monk.disable = _CT( "Disable" ); - talent.monk.fast_feet = _CT( "Fast Feet" ); - talent.monk.grace_of_the_crane = _CT( "Grace of the Crane" ); - talent.monk.bounding_agility = _CT( "Bounding Agility" ); - talent.monk.calming_presence = _CT( "Calming Presence" ); - talent.monk.winds_reach = _CT( "Wind's Reach" ); - talent.monk.detox = _CT( "Detox" ); - talent.monk.vivacious_vivification = _CT( "Vivacious Vivification" ); - talent.monk.jade_walk = _CT( "Jade Walk" ); - talent.monk.pressure_points = _CT( "Pressure Points" ); - talent.monk.spear_hand_strike = _CT( "Spear Hand Strike" ); - talent.monk.ancient_arts = _CT( "Ancient Arts" ); - talent.monk.chi_wave = _CT( "Chi Wave" ); - if ( talent.monk.chi_wave->ok() ) - { - talent.monk.chi_wave_buff = find_spell( 450380 ); - talent.monk.chi_wave_driver = find_spell( 115098 ); - talent.monk.chi_wave_damage = find_spell( 132467 ); - talent.monk.chi_wave_heal = find_spell( 132463 ); - } - talent.monk.chi_burst = _CT( "Chi Burst" ); - if ( talent.monk.chi_burst->ok() ) - { - talent.monk.chi_burst_buff = find_spell( 460490 ); - talent.monk.chi_burst_projectile = find_spell( 461404 ); - talent.monk.chi_burst_damage = find_spell( 148135 ); - talent.monk.chi_burst_heal = find_spell( 130654 ); - } - talent.monk.transcendence = _CT( "Transcendence" ); - talent.monk.energy_transfer = _CT( "Energy Transfer" ); - talent.monk.celerity = _CT( "Celerity" ); - talent.monk.chi_torpedo = _CT( "Chi Torpedo" ); - talent.monk.quick_footed = _CT( "Quick Footed" ); - talent.monk.hasty_provocation = _CT( "Hasty Provocation" ); - talent.monk.ferocity_of_xuen = _CT( "Ferocity of Xuen" ); - talent.monk.ring_of_peace = _CT( "Ring of Peace" ); - talent.monk.song_of_chi_ji = _CT( "Song of Chi-Ji" ); - talent.monk.spirits_essence = _CT( "Spirit's Essence" ); - talent.monk.tiger_tail_sweep = _CT( "Tiger Tail Sweep" ); - talent.monk.improved_touch_of_death = _CT( "Improved Touch of Death" ); - talent.monk.vigorous_expulsion = _CT( "Vigorous Expulsion" ); - talent.monk.yulons_grace = _CT( "Yu'lon's Grace" ); - if ( talent.monk.yulons_grace->ok() ) - talent.monk.yulons_grace_buff = find_spell( 414143 ); - talent.monk.peace_and_prosperity = _CT( "Peace and Prosperity" ); - talent.monk.fortifying_brew = _CT( "Fortifying Brew" ); - if ( talent.monk.fortifying_brew->ok() ) - talent.monk.fortifying_brew_buff = find_spell( 120954 ); - talent.monk.dance_of_the_wind = _CT( "Dance of the Wind" ); - talent.monk.save_them_all = _CT( "Save Them All" ); - talent.monk.swift_art = _CT( "Swift Art" ); - talent.monk.strength_of_spirit = _CT( "Strength of Spirit" ); - talent.monk.profound_rebuttal = _CT( "Profound Rebuttal" ); - talent.monk.summon_black_ox_statue = _CT( "Summon Black Ox Statue" ); - talent.monk.summon_white_tiger_statue = _CT( "Summon White Tiger Statue" ); - if ( talent.monk.summon_white_tiger_statue->ok() ) - { - talent.monk.summon_white_tiger_statue_npc = find_spell( 388686 ); - talent.monk.claw_of_the_white_tiger = find_spell( 389541 ); - } - talent.monk.ironshell_brew = _CT( "Ironshell Brew" ); - talent.monk.expeditious_fortification = _CT( "Expeditious Fortification" ); - talent.monk.diffuse_magic = _CT( "Diffuse Magic" ); - talent.monk.celestial_determination = _CT( "Celestial Determination" ); - talent.monk.chi_proficiency = _CT( "Chi Proficiency" ); - talent.monk.healing_winds = _CT( "Healing Winds" ); - talent.monk.windwalking = _CT( "Windwalking" ); - talent.monk.bounce_back = _CT( "Bounce Back" ); - talent.monk.martial_instincts = _CT( "Martial Instincts" ); - talent.monk.lighter_than_air = _CT( "Lighter Than Air" ); - talent.monk.flow_of_chi = _CT( "Flow of Chi" ); - talent.monk.escape_from_reality = _CT( "Escape from Reality" ); - talent.monk.transcendence_linked_spirits = _CT( "Transcendence: Linked Spirits" ); - talent.monk.fatal_touch = _CT( "Fatal Touch" ); - talent.monk.rushing_reflexes = _CT( "Rushing Reflexes" ); + talent.monk.rising_sun_kick = _CT( "Rising Sun Kick" ); + talent.monk.soothing_mist = _CT( "Soothing Mist" ); + talent.monk.paralysis = _CT( "Paralysis" ); + talent.monk.stagger = _CT( "Stagger" ); + talent.monk.elusive_mists = _CT( "Elusive Mists" ); + talent.monk.tigers_lust = _CT( "Tiger's Lust" ); + talent.monk.crashing_momentum = _CT( "Crashing Momentum" ); + talent.monk.disable = _CT( "Disable" ); + talent.monk.fast_feet = _CT( "Fast Feet" ); + talent.monk.grace_of_the_crane = _CT( "Grace of the Crane" ); + talent.monk.bounding_agility = _CT( "Bounding Agility" ); + talent.monk.calming_presence = _CT( "Calming Presence" ); + talent.monk.winds_reach = _CT( "Wind's Reach" ); + talent.monk.detox = _CT( "Detox" ); + talent.monk.vivacious_vivification = _CT( "Vivacious Vivification" ); + talent.monk.jade_walk = _CT( "Jade Walk" ); + talent.monk.pressure_points = _CT( "Pressure Points" ); + talent.monk.spear_hand_strike = _CT( "Spear Hand Strike" ); + talent.monk.ancient_arts = _CT( "Ancient Arts" ); + talent.monk.chi_wave = _CT( "Chi Wave" ); + talent.monk.chi_wave_buff = find_spell( 450380 ); + talent.monk.chi_wave_driver = find_spell( 115098 ); + talent.monk.chi_wave_damage = find_spell( 132467 ); + talent.monk.chi_wave_heal = find_spell( 132463 ); + talent.monk.chi_burst = _CT( "Chi Burst" ); + talent.monk.chi_burst_buff = find_spell( 460490 ); + talent.monk.chi_burst_projectile = find_spell( 461404 ); + talent.monk.chi_burst_damage = find_spell( 148135 ); + talent.monk.chi_burst_heal = find_spell( 130654 ); + talent.monk.transcendence = _CT( "Transcendence" ); + talent.monk.energy_transfer = _CT( "Energy Transfer" ); + talent.monk.celerity = _CT( "Celerity" ); + talent.monk.chi_torpedo = _CT( "Chi Torpedo" ); + talent.monk.quick_footed = _CT( "Quick Footed" ); + talent.monk.hasty_provocation = _CT( "Hasty Provocation" ); + talent.monk.ferocity_of_xuen = _CT( "Ferocity of Xuen" ); + talent.monk.ring_of_peace = _CT( "Ring of Peace" ); + talent.monk.song_of_chi_ji = _CT( "Song of Chi-Ji" ); + talent.monk.spirits_essence = _CT( "Spirit's Essence" ); + talent.monk.tiger_tail_sweep = _CT( "Tiger Tail Sweep" ); + talent.monk.improved_touch_of_death = _CT( "Improved Touch of Death" ); + talent.monk.vigorous_expulsion = _CT( "Vigorous Expulsion" ); + talent.monk.yulons_grace = _CT( "Yu'lon's Grace" ); + talent.monk.yulons_grace_buff = find_spell( 414143 ); + talent.monk.peace_and_prosperity = _CT( "Peace and Prosperity" ); + talent.monk.fortifying_brew = _CT( "Fortifying Brew" ); + talent.monk.fortifying_brew_buff = find_spell( 120954 ); + talent.monk.dance_of_the_wind = _CT( "Dance of the Wind" ); + talent.monk.save_them_all = _CT( "Save Them All" ); + talent.monk.swift_art = _CT( "Swift Art" ); + talent.monk.strength_of_spirit = _CT( "Strength of Spirit" ); + talent.monk.profound_rebuttal = _CT( "Profound Rebuttal" ); + talent.monk.summon_black_ox_statue = _CT( "Summon Black Ox Statue" ); + talent.monk.summon_white_tiger_statue = _CT( "Summon White Tiger Statue" ); + talent.monk.summon_white_tiger_statue_npc = find_spell( 388686 ); + talent.monk.claw_of_the_white_tiger = find_spell( 389541 ); + talent.monk.ironshell_brew = _CT( "Ironshell Brew" ); + talent.monk.expeditious_fortification = _CT( "Expeditious Fortification" ); + talent.monk.diffuse_magic = _CT( "Diffuse Magic" ); + talent.monk.celestial_determination = _CT( "Celestial Determination" ); + talent.monk.chi_proficiency = _CT( "Chi Proficiency" ); + talent.monk.healing_winds = _CT( "Healing Winds" ); + talent.monk.windwalking = _CT( "Windwalking" ); + talent.monk.bounce_back = _CT( "Bounce Back" ); + talent.monk.martial_instincts = _CT( "Martial Instincts" ); + talent.monk.lighter_than_air = _CT( "Lighter Than Air" ); + talent.monk.flow_of_chi = _CT( "Flow of Chi" ); + talent.monk.escape_from_reality = _CT( "Escape from Reality" ); + talent.monk.transcendence_linked_spirits = _CT( "Transcendence: Linked Spirits" ); + talent.monk.fatal_touch = _CT( "Fatal Touch" ); + talent.monk.rushing_reflexes = _CT( "Rushing Reflexes" ); } // monk_t::talent::brewmaster - if ( specialization() == MONK_BREWMASTER ) { talent.brewmaster.keg_smash = _ST( "Keg Smash" ); talent.brewmaster.purifying_brew = _ST( "Purifying Brew" ); @@ -5289,7 +5244,6 @@ void monk_t::init_spells() } // monk_t::talent::windwalker - if ( specialization() == MONK_WINDWALKER ) { talent.windwalker.fists_of_fury = _ST( "Fists of Fury" ); talent.windwalker.fists_of_fury_tick = find_spell( 117418 ); @@ -5328,52 +5282,54 @@ void monk_t::init_spells() talent.windwalker.combo_breaker = _ST( "Combo Breaker" ); talent.windwalker.combo_breaker_buff = find_spell( 116768 ); talent.windwalker.dance_of_chiji = _ST( "Dance of Chi-Ji" ); - talent.windwalker.shadowboxing_treads = _STID( 392982 ); - talent.windwalker.strike_of_the_windlord = _ST( "Strike of the Windlord" ); - talent.windwalker.whirling_dragon_punch = _ST( "Whirling Dragon Punch" ); - talent.windwalker.whirling_dragon_punch_aoe_tick = find_spell( 158221 ); - talent.windwalker.whirling_dragon_punch_st_tick = find_spell( 451767 ); - talent.windwalker.whirling_dragon_punch_buff = find_spell( 196742 ); - talent.windwalker.energy_burst = _ST( "Energy Burst" ); - talent.windwalker.inner_peace = _ST( "Inner Peace" ); - talent.windwalker.sequenced_strikes = _ST( "Sequenced Strikes" ); - talent.windwalker.stormspirit_strikes = _ST( "Stormspirit Strikes" ); - talent.windwalker.communion_with_wind = _ST( "Communion With Wind" ); - talent.windwalker.revolving_whirl = _ST( "Revolving Whirl" ); - talent.windwalker.echo_technique = _ST( "Echo Technique" ); - talent.windwalker.rushing_jade_wind = _ST( "Rushing Jade Wind" ); - talent.windwalker.memory_of_the_monastery = _ST( "Memory of the Monastery" ); - talent.windwalker.memory_of_the_monastery_buff = find_spell( 454970 ); - talent.windwalker.rushing_wind_kick = _ST( "Rushing Wind Kick" ); - talent.windwalker.xuens_battlegear = _ST( "Xuen's Battlegear" ); - talent.windwalker.thunderfist = _ST( "Thunderfist" ); - talent.windwalker.thunderfist_buff = find_spell( 393565 ); - talent.windwalker.invoke_xuen_the_white_tiger = _ST( "Invoke Xuen, the White Tiger" ); - talent.windwalker.invoke_xuen_the_white_tiger_npc = find_spell( 132578 ); - talent.windwalker.crackling_tiger_lightning_driver = find_spell( 123999 ); - talent.windwalker.crackling_tiger_lightning = find_spell( 123996 ); - talent.windwalker.knowledge_of_the_broken_temple = _ST( "Knowledge of the Broken Temple" ); - talent.windwalker.slicing_winds = _ST( "Slicing Winds" ); - talent.windwalker.slicing_winds_damage = find_spell( 1217411 ); - talent.windwalker.jadefire_stomp = _ST( "Jadefire Stomp" ); - talent.windwalker.jadefire_stomp_damage = find_spell( 388207 ); - talent.windwalker.skyfire_heel = _ST( "Skyfire Heel" ); - talent.windwalker.harmonic_combo = _ST( "Harmonic Combo" ); - talent.windwalker.flurry_of_xuen = _ST( "Flurry of Xuen" ); - talent.windwalker.flurry_of_xuen_driver = find_spell( 452117 ); - talent.windwalker.xuens_bond = _ST( "Xuen's Bond" ); - talent.windwalker.airborne_rhythm = _ST( "Airborne Rhythm" ); - 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" ); + // do not use talent.windwalker.dance_of_chiji->effectN( 1 ).trigger() to avoid talent known dependency + talent.windwalker.dance_of_chiji_buff = find_spell( 325202 ); + talent.windwalker.shadowboxing_treads = _STID( 392982 ); + talent.windwalker.strike_of_the_windlord = _ST( "Strike of the Windlord" ); + talent.windwalker.whirling_dragon_punch = _ST( "Whirling Dragon Punch" ); + talent.windwalker.whirling_dragon_punch_aoe_tick = find_spell( 158221 ); + talent.windwalker.whirling_dragon_punch_st_tick = find_spell( 451767 ); + talent.windwalker.whirling_dragon_punch_buff = find_spell( 196742 ); + talent.windwalker.energy_burst = _ST( "Energy Burst" ); + talent.windwalker.inner_peace = _ST( "Inner Peace" ); + talent.windwalker.sequenced_strikes = _ST( "Sequenced Strikes" ); + talent.windwalker.stormspirit_strikes = _ST( "Stormspirit Strikes" ); + talent.windwalker.communion_with_wind = _ST( "Communion With Wind" ); + talent.windwalker.revolving_whirl = _ST( "Revolving Whirl" ); + talent.windwalker.echo_technique = _ST( "Echo Technique" ); + talent.windwalker.rushing_jade_wind = _ST( "Rushing Jade Wind" ); + talent.windwalker.memory_of_the_monastery = _ST( "Memory of the Monastery" ); + talent.windwalker.memory_of_the_monastery_buff = find_spell( 454970 ); + talent.windwalker.rushing_wind_kick = _ST( "Rushing Wind Kick" ); + talent.windwalker.xuens_battlegear = _ST( "Xuen's Battlegear" ); + talent.windwalker.thunderfist = _ST( "Thunderfist" ); + talent.windwalker.thunderfist_buff = find_spell( 393565 ); + talent.windwalker.invoke_xuen_the_white_tiger = _ST( "Invoke Xuen, the White Tiger" ); + talent.windwalker.invoke_xuen_the_white_tiger_npc = find_spell( 132578 ); + talent.windwalker.crackling_tiger_lightning_driver = find_spell( 123999 ); + talent.windwalker.crackling_tiger_lightning = find_spell( 123996 ); + talent.windwalker.knowledge_of_the_broken_temple = _ST( "Knowledge of the Broken Temple" ); + talent.windwalker.slicing_winds = _ST( "Slicing Winds" ); + talent.windwalker.slicing_winds_damage = find_spell( 1217411 ); + talent.windwalker.jadefire_stomp = _ST( "Jadefire Stomp" ); + talent.windwalker.jadefire_stomp_damage = find_spell( 388207 ); + talent.windwalker.skyfire_heel = _ST( "Skyfire Heel" ); + talent.windwalker.harmonic_combo = _ST( "Harmonic Combo" ); + talent.windwalker.flurry_of_xuen = _ST( "Flurry of Xuen" ); + talent.windwalker.flurry_of_xuen_driver = find_spell( 452117 ); + talent.windwalker.xuens_bond = _ST( "Xuen's Bond" ); + talent.windwalker.airborne_rhythm = _ST( "Airborne Rhythm" ); + 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" ); } // monk_t::talent::conduit_of_the_celestials - if ( has_hero_tree( HERO_CONDUIT_OF_THE_CELESTIALS ) ) { talent.conduit_of_the_celestials.celestial_conduit = _HT( "Celestial Conduit" ); + talent.conduit_of_the_celestials.celestial_conduit_action = find_spell( 443028 ); talent.conduit_of_the_celestials.celestial_conduit_buff = find_spell( 443028 ); - talent.conduit_of_the_celestials.celestial_conduit_dmg = find_spell( 443038 ); + talent.conduit_of_the_celestials.celestial_conduit_damage = find_spell( 443038 ); talent.conduit_of_the_celestials.celestial_conduit_heal = find_spell( 443039 ); talent.conduit_of_the_celestials.temple_training = _HT( "Temple Training" ); talent.conduit_of_the_celestials.xuens_guidance = _HT( "Xuen's Guidance" ); @@ -5415,7 +5371,6 @@ void monk_t::init_spells() } // monk_t::talent::master_of_harmony - if ( has_hero_tree( HERO_MASTER_OF_HARMONY ) ) { talent.master_of_harmony.aspect_of_harmony = _HT( "Aspect of Harmony" ); talent.master_of_harmony.aspect_of_harmony_driver = find_spell( 450567 ); @@ -5445,7 +5400,6 @@ void monk_t::init_spells() } // monk_t::talent::shado_pan - if ( has_hero_tree( HERO_SHADOPAN ) ) { talent.shado_pan.flurry_strikes = _HT( "Flurry Strikes" ); talent.shado_pan.flurry_charge = find_spell( 451021 ); @@ -5470,9 +5424,7 @@ void monk_t::init_spells() talent.shado_pan.wisdom_of_the_wall = _HT( "Wisdom of the Wall" ); talent.shado_pan.wisdom_of_the_wall_crit_buff = find_spell( 452684 ); talent.shado_pan.wisdom_of_the_wall_dodge_buff = find_spell( 451242 ); - talent.shado_pan.wisdom_of_the_wall_flurry_buff = find_spell( 452688 ); talent.shado_pan.wisdom_of_the_wall_mastery_buff = find_spell( 452685 ); - talent.shado_pan.wisdom_of_the_wall_flurry = find_spell( 451250 ); } // monk_t::talent::tier @@ -5702,8 +5654,6 @@ void monk_t::create_buffs() }, [ this ]( school_e school, result_amount_type, action_state_t *state ) { double stagger_rating = agility() * talent.monk.stagger->effectN( 1 ).percent(); - if ( talent.brewmaster.high_tolerance->ok() ) - stagger_rating *= 1.0 + talent.brewmaster.high_tolerance->effectN( 5 ).percent(); if ( talent.brewmaster.fortifying_brew_determination->ok() && buff.fortifying_brew->up() ) stagger_rating *= 1.0 + talent.monk.fortifying_brew_buff->effectN( 6 ).percent(); @@ -5737,7 +5687,7 @@ void monk_t::create_buffs() base_t::create_buffs(); - // General + // Monk buff.combat_wisdom = make_buff_fallback( talent.windwalker.combat_wisdom->ok(), this, "combat_wisdom", talent.windwalker.combat_wisdom_buff ) ->set_trigger_spell( talent.windwalker.combat_wisdom ) @@ -5747,6 +5697,8 @@ void monk_t::create_buffs() talent.monk.fatal_touch->effectN( 2 ).trigger() ) ->set_trigger_spell( talent.monk.fatal_touch ); + buff.chi_wave = make_buff_fallback( talent.monk.chi_wave->ok(), this, "chi_wave", talent.monk.chi_wave_buff ); + buff.fortifying_brew = make_buff_fallback( talent.monk.fortifying_brew->ok() && specialization() == MONK_BREWMASTER, this, "fortifying_brew" ); @@ -5759,12 +5711,6 @@ void monk_t::create_buffs() ->set_default_value_from_effect( 2 ) ->set_refresh_behavior( buff_refresh_behavior::PANDEMIC ); - buff.teachings_of_the_monastery = - make_buff_fallback( talent.windwalker.teachings_of_the_monastery->ok(), this, "teachings_of_the_monastery", - talent.windwalker.teachings_of_the_monastery_buff ) - ->set_trigger_spell( talent.windwalker.teachings_of_the_monastery ) - ->set_default_value_from_effect( 1 ); - buff.yulons_grace = make_buff_fallback( talent.monk.yulons_grace->ok(), this, "yulons_grace", talent.monk.yulons_grace_buff ); @@ -5844,7 +5790,13 @@ void monk_t::create_buffs() ->set_trigger_spell( sets->set( MONK_BREWMASTER, TWW1, B4 ) ); // Windwalker - buff.combo_breaker = make_buff_fallback( talent.windwalker.combo_breaker->ok(), this, "bok_proc", + buff.teachings_of_the_monastery = + make_buff_fallback( talent.windwalker.teachings_of_the_monastery->ok(), this, "teachings_of_the_monastery", + talent.windwalker.teachings_of_the_monastery_buff ) + ->set_trigger_spell( talent.windwalker.teachings_of_the_monastery ) + ->set_default_value_from_effect( 1 ); + + buff.combo_breaker = make_buff_fallback( talent.windwalker.combo_breaker->ok(), this, "combo_breaker", talent.windwalker.combo_breaker_buff ) ->set_trigger_spell( talent.windwalker.combo_breaker ) ->set_chance( talent.windwalker.combo_breaker->effectN( 1 ).percent() ); @@ -6070,12 +6022,6 @@ void monk_t::create_buffs() } ) ->set_tick_behavior( buff_tick_behavior::CLIP ); - buff.wisdom_of_the_wall_flurry = - make_buff_fallback( talent.shado_pan.wisdom_of_the_wall->ok(), this, "wisdom_of_the_wall_flurry", - talent.shado_pan.wisdom_of_the_wall_flurry_buff ) - ->set_trigger_spell( talent.shado_pan.wisdom_of_the_wall ) - ->set_default_value_from_effect( 1 ); - buff.wisdom_of_the_wall_mastery = make_buff_fallback( talent.shado_pan.wisdom_of_the_wall->ok(), this, "wisdom_of_the_wall_mastery", talent.shado_pan.wisdom_of_the_wall_mastery_buff ) diff --git a/engine/class_modules/monk/sc_monk.hpp b/engine/class_modules/monk/sc_monk.hpp index 28aee19e742..7461904f188 100644 --- a/engine/class_modules/monk/sc_monk.hpp +++ b/engine/class_modules/monk/sc_monk.hpp @@ -520,7 +520,6 @@ struct monk_t : public stagger_t propagate_const vigilant_watch; propagate_const wisdom_of_the_wall_crit; propagate_const wisdom_of_the_wall_dodge; - propagate_const wisdom_of_the_wall_flurry; propagate_const wisdom_of_the_wall_mastery; // TWW1 Set Bonus @@ -912,8 +911,9 @@ struct monk_t : public stagger_t { // Row 1 player_talent_t celestial_conduit; + const spell_data_t *celestial_conduit_action; const spell_data_t *celestial_conduit_buff; - const spell_data_t *celestial_conduit_dmg; + const spell_data_t *celestial_conduit_damage; const spell_data_t *celestial_conduit_heal; // Row 2 player_talent_t temple_training; @@ -1024,9 +1024,7 @@ struct monk_t : public stagger_t player_talent_t wisdom_of_the_wall; const spell_data_t *wisdom_of_the_wall_crit_buff; const spell_data_t *wisdom_of_the_wall_dodge_buff; - const spell_data_t *wisdom_of_the_wall_flurry_buff; const spell_data_t *wisdom_of_the_wall_mastery_buff; - const spell_data_t *wisdom_of_the_wall_flurry; } shado_pan; } talent;