diff --git a/engine/buff/buff.cpp b/engine/buff/buff.cpp index 08982745e08..9451cd60f5f 100644 --- a/engine/buff/buff.cpp +++ b/engine/buff/buff.cpp @@ -1100,6 +1100,9 @@ buff_t* buff_t::set_period( timespan_t period ) // Recheck tick behaviour, which is dependent on buff_period. set_tick_behavior( tick_behavior ); + // Tick behavior can affect refresh behavior, recheck refresh behavior once tick behavior has been set + set_refresh_behavior( buff_refresh_behavior::NONE ); + return this; } @@ -1311,9 +1314,13 @@ buff_t* buff_t::set_refresh_behavior( buff_refresh_behavior b ) if ( b == buff_refresh_behavior::NONE ) { // In wod, default behavior for ticking buffs is to pandemic-extend the duration - if ( tick_behavior == buff_tick_behavior::CLIP || tick_behavior == buff_tick_behavior::REFRESH ) + if ( buff_period > timespan_t::zero() && + ( tick_behavior == buff_tick_behavior::CLIP || tick_behavior == buff_tick_behavior::REFRESH ) ) { - refresh_behavior = buff_refresh_behavior::PANDEMIC; + if ( data().flags( spell_attribute::SX_REFRESH_EXTENDS_DURATION ) ) + refresh_behavior = buff_refresh_behavior::PANDEMIC; + else + refresh_behavior = buff_refresh_behavior::TICK; } // Otherwise, just do the full-duration refresh else