From 3bf0d10f46aa236439703c32ceace63e3dabd2da Mon Sep 17 00:00:00 2001 From: Arma Date: Tue, 17 Feb 2026 23:10:41 -0800 Subject: [PATCH 1/2] [Warrior] Fix Fatality --- engine/class_modules/sc_warrior.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/engine/class_modules/sc_warrior.cpp b/engine/class_modules/sc_warrior.cpp index 215f1ef60da..f200c1cb825 100644 --- a/engine/class_modules/sc_warrior.cpp +++ b/engine/class_modules/sc_warrior.cpp @@ -4080,6 +4080,9 @@ struct execute_damage_t : public warrior_attack_t if ( p()->talents.shared.deep_wounds->ok() ) p()->active.deep_wounds->execute_on_target( state->target ); + + if( p()->talents.arms.fatality.ok() && td( state->target )->debuffs_fatal_mark->check() ) + p()->active.fatality->execute_on_target( state->target ); } }; @@ -4215,14 +4218,6 @@ struct execute_arms_t : public warrior_attack_t p()->buff.executioners_precision->trigger(); } - void impact( action_state_t* state ) override - { - warrior_attack_t::impact( state ); - - if( p()->talents.arms.fatality.ok() && td( state->target )->debuffs_fatal_mark->check() ) - p()->active.fatality->execute_on_target( state->target ); - } - bool target_ready( player_t* candidate_target ) override { // Sudden Death allow execution on any target From b2be5e2b714649629fec774b646ec7c881587631 Mon Sep 17 00:00:00 2001 From: Arma Date: Wed, 18 Feb 2026 02:15:38 -0800 Subject: [PATCH 2/2] [Warrior] Adjust master of warfare proc rates --- engine/class_modules/sc_warrior.cpp | 52 ++++++++++++++++------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/engine/class_modules/sc_warrior.cpp b/engine/class_modules/sc_warrior.cpp index f200c1cb825..1e0400bd3be 100644 --- a/engine/class_modules/sc_warrior.cpp +++ b/engine/class_modules/sc_warrior.cpp @@ -3049,12 +3049,6 @@ struct mortal_strike_t : public warrior_attack_t if( !background ) p()->buff.tactical_edge->decrement(); - if ( !background && p()->talents.arms.master_of_warfare_1.ok() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) - { - p()->buff.master_of_warfare_proc->trigger(); - p()->master_of_warfare_attempts_since_last_proc = 0; - } - if ( !background ) p()->buff.battlelord->expire(); } @@ -3110,6 +3104,12 @@ struct mortal_strike_t : public warrior_attack_t { target_data->debuffs_colossus_smash->extend_duration_or_trigger( p()->sets->set( WARRIOR_ARMS, MID1, B4 )->effectN( 1 ).time_value() ); } + + if ( !background && p()->talents.arms.master_of_warfare_1.ok() && !p()->buff.master_of_warfare_proc->up() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) + { + p()->buff.master_of_warfare_proc->trigger(); + p()->master_of_warfare_attempts_since_last_proc = 0; + } } bool ready() override @@ -3433,6 +3433,16 @@ struct slam_base_t : public warrior_attack_t return warrior_attack_t::cost(); } + void impact( action_state_t* state ) override + { + warrior_attack_t::impact( state ); + if ( !background && p()->talents.arms.master_of_warfare_1.ok() && !p()->buff.master_of_warfare_proc->up() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) + { + p()->buff.master_of_warfare_proc->trigger(); + p()->master_of_warfare_attempts_since_last_proc = 0; + } + } + void execute() override { warrior_attack_t::execute(); @@ -3444,12 +3454,6 @@ struct slam_base_t : public warrior_attack_t if ( p()->talents.arms.martial_prowess.ok() ) p()->buff.martial_prowess->trigger(); - - if ( !background && p()->talents.arms.master_of_warfare_1.ok() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) - { - p()->buff.master_of_warfare_proc->trigger(); - p()->master_of_warfare_attempts_since_last_proc = 0; - } } bool ready() override @@ -4083,6 +4087,12 @@ struct execute_damage_t : public warrior_attack_t if( p()->talents.arms.fatality.ok() && td( state->target )->debuffs_fatal_mark->check() ) p()->active.fatality->execute_on_target( state->target ); + + if ( !background && p()->talents.arms.master_of_warfare_1.ok() && !p()->buff.master_of_warfare_proc->up() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) + { + p()->buff.master_of_warfare_proc->trigger(); + p()->master_of_warfare_attempts_since_last_proc = 0; + } } }; @@ -4206,12 +4216,6 @@ struct execute_arms_t : public warrior_attack_t { lightning_strike->execute(); } - - if ( !background && p()->talents.arms.master_of_warfare_1.ok() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) - { - p()->buff.master_of_warfare_proc->trigger(); - p()->master_of_warfare_attempts_since_last_proc = 0; - } } if ( p()->talents.arms.executioners_precision.ok() ) @@ -5270,6 +5274,12 @@ struct overpower_t : public warrior_attack_t { dreadnaught->execute_on_target( s->target ); } + + if ( !background && p()->talents.arms.master_of_warfare_1.ok() && !p()->buff.master_of_warfare_proc->up() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) + { + p()->buff.master_of_warfare_proc->trigger(); + p()->master_of_warfare_attempts_since_last_proc = 0; + } } void execute() override @@ -5290,12 +5300,6 @@ struct overpower_t : public warrior_attack_t if ( p()->talents.arms.martial_prowess.ok() ) p()->buff.martial_prowess->trigger(); - - if ( !background && p()->talents.arms.master_of_warfare_1.ok() && p()->rng().roll( master_of_warfare_proc_chance * ++p()->master_of_warfare_attempts_since_last_proc ) ) - { - p()->buff.master_of_warfare_proc->trigger(); - p()->master_of_warfare_attempts_since_last_proc = 0; - } } bool ready() override