Skip to content

Commit cc8337d

Browse files
authored
[Warlock] Fix Shared Fate tick behaviors (simulationcraft#10055)
1 parent 221cdae commit cc8337d

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

engine/class_modules/warlock/sc_warlock.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,15 @@ warlock_td_t::warlock_td_t( player_t* target, warlock_t& p )
121121
debuffs_shared_fate = make_buff( *this, "shared_fate", p.hero.shared_fate_debuff )
122122
->set_tick_zero( false )
123123
->set_tick_time_behavior( buff_tick_time_behavior::HASTED )
124+
->set_tick_behavior( buff_tick_behavior::REFRESH )
125+
->set_refresh_behavior( buff_refresh_behavior::PANDEMIC )
126+
->set_partial_tick( true )
124127
->set_period( p.hero.shared_fate_debuff->effectN( 1 ).period() )
125-
->set_tick_callback( [ this, target ]( buff_t*, int, timespan_t )
126-
{ warlock.proc_actions.shared_fate->execute_on_target( target ); } );
128+
->set_tick_callback( [ this, target ]( buff_t* b, int, timespan_t actual_tick_time )
129+
{
130+
helpers::set_shared_fate_tick_factor( &warlock, actual_tick_time.total_seconds() / b->tick_time().total_seconds() );
131+
warlock.proc_actions.shared_fate->execute_on_target( target );
132+
} );
127133

128134
target->register_on_demise_callback( &p, [ this ]( player_t* ) { target_demise(); } );
129135
}

engine/class_modules/warlock/sc_warlock.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -980,5 +980,7 @@ namespace helpers
980980
void trigger_blackened_soul( warlock_t* p, bool malevolence );
981981

982982
void trigger_jackpot_ua( warlock_t* p );
983+
984+
void set_shared_fate_tick_factor( warlock_t* p, double f );
983985
}
984986
} // namespace warlock

engine/class_modules/warlock/sc_warlock_actions.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,12 +1559,24 @@ using namespace helpers;
15591559

15601560
struct shared_fate_t : public warlock_spell_t
15611561
{
1562+
double tick_factor;
1563+
15621564
shared_fate_t( warlock_t* p )
15631565
: warlock_spell_t( "Shared Fate", p, p->hero.shared_fate_dmg )
15641566
{
15651567
background = dual = true;
15661568
aoe = -1;
15671569
reduced_aoe_targets = p->hero.shared_fate->effectN( 1 ).base_value();
1570+
tick_factor = 1.0;
1571+
}
1572+
1573+
double composite_da_multiplier( const action_state_t* s ) const override
1574+
{
1575+
double m = warlock_spell_t::composite_da_multiplier( s );
1576+
1577+
m *= tick_factor;
1578+
1579+
return m;
15681580
}
15691581
};
15701582

@@ -4824,6 +4836,9 @@ using namespace helpers;
48244836
}
48254837
}
48264838

4839+
void helpers::set_shared_fate_tick_factor( warlock_t* p, double f )
4840+
{ debug_cast<shared_fate_t*>( p->proc_actions.shared_fate )->tick_factor = f; }
4841+
48274842
// Event for spawning Wild Imps for Demonology
48284843
imp_delay_event_t::imp_delay_event_t( warlock_t* p, double delay, double exp ) : player_event_t( *p, timespan_t::from_millis( delay ) )
48294844
{ diff = timespan_t::from_millis( exp - delay ); }

0 commit comments

Comments
 (0)