mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-21 00:39:58 +00:00
Merge pull request #3025 from akortunov/iterator
Do not remove active effects in the active effects loop
This commit is contained in:
commit
6efa7eea5a
@ -10,6 +10,7 @@
|
||||
Bug #2976 [reopened]: Issues combining settings from the command line and both config files
|
||||
Bug #3676: NiParticleColorModifier isn't applied properly
|
||||
Bug #3714: Savegame fails to load due to conflict between SpellState and MagicEffects
|
||||
Bug #3789: Crash in visitEffectSources while in battle
|
||||
Bug #3862: Random container contents behave differently than vanilla
|
||||
Bug #3929: Leveled list merchant containers respawn on barter
|
||||
Bug #4021: Attributes and skills are not stored as floats
|
||||
|
@ -381,6 +381,37 @@ namespace MWMechanics
|
||||
target.getClass().getCreatureStats(target).getActiveSpells().purgeAll(magnitude, true);
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && effectId == ESM::MagicEffect::CurePoison)
|
||||
{
|
||||
target.getClass().getCreatureStats(target).getActiveSpells().purgeEffect(ESM::MagicEffect::Poison);
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && effectId == ESM::MagicEffect::CureParalyzation)
|
||||
{
|
||||
target.getClass().getCreatureStats(target).getActiveSpells().purgeEffect(ESM::MagicEffect::Paralyze);
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && effectId == ESM::MagicEffect::CureCommonDisease)
|
||||
{
|
||||
target.getClass().getCreatureStats(target).getSpells().purgeCommonDisease();
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && effectId == ESM::MagicEffect::CureBlightDisease)
|
||||
{
|
||||
target.getClass().getCreatureStats(target).getSpells().purgeBlightDisease();
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && effectId == ESM::MagicEffect::CureCorprusDisease)
|
||||
{
|
||||
target.getClass().getCreatureStats(target).getActiveSpells().purgeCorprusDisease();
|
||||
target.getClass().getCreatureStats(target).getSpells().purgeCorprusDisease();
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && effectId == ESM::MagicEffect::RemoveCurse)
|
||||
{
|
||||
target.getClass().getCreatureStats(target).getSpells().purgeCurses();
|
||||
return true;
|
||||
}
|
||||
else if (target.getClass().isActor() && target == getPlayer())
|
||||
{
|
||||
MWRender::Animation* anim = MWBase::Environment::get().getWorld()->getAnimation(mCaster);
|
||||
|
@ -205,24 +205,6 @@ namespace MWMechanics
|
||||
break;
|
||||
}
|
||||
|
||||
case ESM::MagicEffect::CurePoison:
|
||||
actor.getClass().getCreatureStats(actor).getActiveSpells().purgeEffect(ESM::MagicEffect::Poison);
|
||||
break;
|
||||
case ESM::MagicEffect::CureParalyzation:
|
||||
actor.getClass().getCreatureStats(actor).getActiveSpells().purgeEffect(ESM::MagicEffect::Paralyze);
|
||||
break;
|
||||
case ESM::MagicEffect::CureCommonDisease:
|
||||
actor.getClass().getCreatureStats(actor).getSpells().purgeCommonDisease();
|
||||
break;
|
||||
case ESM::MagicEffect::CureBlightDisease:
|
||||
actor.getClass().getCreatureStats(actor).getSpells().purgeBlightDisease();
|
||||
break;
|
||||
case ESM::MagicEffect::CureCorprusDisease:
|
||||
actor.getClass().getCreatureStats(actor).getSpells().purgeCorprusDisease();
|
||||
break;
|
||||
case ESM::MagicEffect::RemoveCurse:
|
||||
actor.getClass().getCreatureStats(actor).getSpells().purgeCurses();
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ namespace MWMechanics
|
||||
struct EffectKey;
|
||||
|
||||
/// Apply a magic effect that is applied in tick intervals until its remaining time ends or it is removed
|
||||
/// Note: this function works in loop, so magic effects should not be removed here to avoid iterator invalidation.
|
||||
/// @return Was the effect a tickable effect with a magnitude?
|
||||
bool effectTick(CreatureStats& creatureStats, const MWWorld::Ptr& actor, const EffectKey& effectKey, float magnitude);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user