diff --git a/src/world/StatusEffect/StatusEffect.cpp b/src/world/StatusEffect/StatusEffect.cpp index 0bb160a0..98be7dbe 100644 --- a/src/world/StatusEffect/StatusEffect.cpp +++ b/src/world/StatusEffect/StatusEffect.cpp @@ -147,14 +147,17 @@ void Sapphire::StatusEffect::StatusEffect::applyStatus() m_startTime = Util::getTimeMs(); auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref(); - for( const auto& mod : m_statusModifiers ) - { - if( mod.modifier != Common::ParamModifier::TickDamage && mod.modifier != Common::ParamModifier::TickHeal ) - setModifier( mod.modifier, mod.value ); - else if( mod.modifier == Common::ParamModifier::TickDamage ) - registerTickEffect( mod.modifier, mod.value ); - else if( mod.modifier == Common::ParamModifier::TickHeal ) - registerTickEffect( mod.modifier, mod.value ); + if( m_modifiers.empty() ) + { + for( const auto& mod : m_statusModifiers ) + { + if( mod.modifier != Common::ParamModifier::TickDamage && mod.modifier != Common::ParamModifier::TickHeal ) + setModifier( mod.modifier, mod.value ); + else if( mod.modifier == Common::ParamModifier::TickDamage ) + registerTickEffect( mod.modifier, mod.value ); + else if( mod.modifier == Common::ParamModifier::TickHeal ) + registerTickEffect( mod.modifier, mod.value ); + } } m_targetActor->calculateStats(); @@ -237,3 +240,14 @@ void Sapphire::StatusEffect::StatusEffect::setSlot( uint8_t slot ) { m_slot = slot; } + +void Sapphire::StatusEffect::StatusEffect::refresh() +{ + applyStatus(); +} + +void Sapphire::StatusEffect::StatusEffect::refresh( uint32_t newDuration ) +{ + m_duration = newDuration; + refresh(); +} \ No newline at end of file diff --git a/src/world/StatusEffect/StatusEffect.h b/src/world/StatusEffect/StatusEffect.h index f8a24dde..b72e7058 100644 --- a/src/world/StatusEffect/StatusEffect.h +++ b/src/world/StatusEffect/StatusEffect.h @@ -67,6 +67,8 @@ public: uint8_t getSlot() const; void setSlot( uint8_t slot ); + void refresh( uint32_t newDuration ); + private: uint32_t m_id; Entity::CharaPtr m_sourceActor; @@ -83,6 +85,7 @@ private: std::unordered_map< Common::ParamModifier, int32_t > m_modifiers; uint8_t m_slot; + void refresh(); }; }