From 86f689b73fe2542489bf65903d1a8fbbd26577f3 Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Sat, 24 Jan 2026 15:29:49 +0100 Subject: [PATCH] Remove duplicate effects naturally instead of immediately --- apps/openmw/mwmechanics/activespells.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwmechanics/activespells.cpp b/apps/openmw/mwmechanics/activespells.cpp index ff52465180..33dff30479 100644 --- a/apps/openmw/mwmechanics/activespells.cpp +++ b/apps/openmw/mwmechanics/activespells.cpp @@ -381,6 +381,11 @@ namespace MWMechanics std::optional reflected; for (auto it = spellIt->mEffects.begin(); it != spellIt->mEffects.end();) { + if (it->mFlags & ESM::ActiveEffect::Flag_Remove && it->mTimeLeft <= 0.f) + { + ++it; + continue; + } auto result = applyMagicEffect(ptr, caster, *spellIt, *it, duration, context.mPlayNonLooping); if (result.mType == MagicApplicationResult::Type::REFLECTED) { @@ -490,10 +495,8 @@ namespace MWMechanics { if (merge(found->mEffects, spell.mEffects)) return; - auto params = *found; - mSpells.erase(found); - for (const auto& effect : params.mEffects) - onMagicEffectRemoved(ptr, params, effect); + for (auto& effect : found->mEffects) + effect.mTimeLeft = 0.f; } } initParams(ptr, spell, context);