From 2965d8a03ad6a72eba3861ebd732daa108156f77 Mon Sep 17 00:00:00 2001 From: Rushi <44952533+Skyliegirl33@users.noreply.github.com> Date: Fri, 21 Jun 2024 16:12:33 +0200 Subject: [PATCH] Add function to remove multiple statuseffects by id --- .../statuseffect/StatusEffectDefiance.cpp | 7 +------ src/world/Actor/Chara.cpp | 18 ++++++++++++++++++ src/world/Actor/Chara.h | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/scripts/statuseffect/StatusEffectDefiance.cpp b/src/scripts/statuseffect/StatusEffectDefiance.cpp index 9f26421a..207ccec0 100644 --- a/src/scripts/statuseffect/StatusEffectDefiance.cpp +++ b/src/scripts/statuseffect/StatusEffectDefiance.cpp @@ -15,12 +15,7 @@ public: void onExpire( Entity::Chara& actor ) override { - actor.removeSingleStatusEffectById( Unchained ); - actor.removeSingleStatusEffectById( Wrath ); - actor.removeSingleStatusEffectById( WrathII ); - actor.removeSingleStatusEffectById( WrathIII ); - actor.removeSingleStatusEffectById( WrathIV ); - actor.removeSingleStatusEffectById( Infuriated ); + actor.removeStatusEffectById( { Unchained, Wrath, WrathII, WrathIII, WrathIV, Infuriated } ); } }; diff --git a/src/world/Actor/Chara.cpp b/src/world/Actor/Chara.cpp index 845f0b1d..2d6abf28 100644 --- a/src/world/Actor/Chara.cpp +++ b/src/world/Actor/Chara.cpp @@ -559,6 +559,24 @@ void Chara::removeSingleStatusEffectById( uint32_t id ) } } +void Chara::removeStatusEffectById( std::vector< uint32_t > ids ) +{ + for( auto effectIt = m_statusEffectMap.begin(); effectIt != m_statusEffectMap.end(); ) + { + auto foundStatus = std::find( ids.begin(), ids.end(), effectIt->second->getId() ); + + if( foundStatus != ids.end() ) + { + effectIt = removeStatusEffect( effectIt->first ); + ids.erase( foundStatus ); + } + else + { + ++effectIt; + } + } +} + void Chara::removeStatusEffectByFlag( Common::StatusEffectFlag flag ) { for( auto effectIt = m_statusEffectMap.begin(); effectIt != m_statusEffectMap.end(); ) diff --git a/src/world/Actor/Chara.h b/src/world/Actor/Chara.h index 722f4af3..8ee157de 100644 --- a/src/world/Actor/Chara.h +++ b/src/world/Actor/Chara.h @@ -114,6 +114,8 @@ namespace Sapphire::Entity void removeSingleStatusEffectById( uint32_t id ); + void removeStatusEffectById( std::vector< uint32_t > ids ); + void removeStatusEffectByFlag( Common::StatusEffectFlag flag ); void updateStatusEffects();