mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-04-02 08:06:49 +00:00
Do not remove active effects in loop (bug #3789)
This commit is contained in:
parent
53f91a3aa5
commit
c1d56d94c4
4 changed files with 33 additions and 18 deletions
|
@ -10,6 +10,7 @@
|
||||||
Bug #2976 [reopened]: Issues combining settings from the command line and both config files
|
Bug #2976 [reopened]: Issues combining settings from the command line and both config files
|
||||||
Bug #3676: NiParticleColorModifier isn't applied properly
|
Bug #3676: NiParticleColorModifier isn't applied properly
|
||||||
Bug #3714: Savegame fails to load due to conflict between SpellState and MagicEffects
|
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 #3862: Random container contents behave differently than vanilla
|
||||||
Bug #3929: Leveled list merchant containers respawn on barter
|
Bug #3929: Leveled list merchant containers respawn on barter
|
||||||
Bug #4021: Attributes and skills are not stored as floats
|
Bug #4021: Attributes and skills are not stored as floats
|
||||||
|
|
|
@ -381,6 +381,37 @@ namespace MWMechanics
|
||||||
target.getClass().getCreatureStats(target).getActiveSpells().purgeAll(magnitude, true);
|
target.getClass().getCreatureStats(target).getActiveSpells().purgeAll(magnitude, true);
|
||||||
return 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())
|
else if (target.getClass().isActor() && target == getPlayer())
|
||||||
{
|
{
|
||||||
MWRender::Animation* anim = MWBase::Environment::get().getWorld()->getAnimation(mCaster);
|
MWRender::Animation* anim = MWBase::Environment::get().getWorld()->getAnimation(mCaster);
|
||||||
|
|
|
@ -205,24 +205,6 @@ namespace MWMechanics
|
||||||
break;
|
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:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ namespace MWMechanics
|
||||||
struct EffectKey;
|
struct EffectKey;
|
||||||
|
|
||||||
/// Apply a magic effect that is applied in tick intervals until its remaining time ends or it is removed
|
/// 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?
|
/// @return Was the effect a tickable effect with a magnitude?
|
||||||
bool effectTick(CreatureStats& creatureStats, const MWWorld::Ptr& actor, const EffectKey& effectKey, float magnitude);
|
bool effectTick(CreatureStats& creatureStats, const MWWorld::Ptr& actor, const EffectKey& effectKey, float magnitude);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue