diff --git a/apps/openmw/mwmechanics/activespells.cpp b/apps/openmw/mwmechanics/activespells.cpp index 9e64996e46..0f361f7ffc 100644 --- a/apps/openmw/mwmechanics/activespells.cpp +++ b/apps/openmw/mwmechanics/activespells.cpp @@ -267,7 +267,7 @@ namespace MWMechanics if (spell->mData.mType != ESM::Spell::ST_Spell && spell->mData.mType != ESM::Spell::ST_Power && !isSpellActive(spell->mId)) { - mSpells.emplace_back(ActiveSpellParams{ spell, ptr }); + mSpells.emplace_back(ActiveSpellParams{ spell, ptr, true }); mSpells.back().setActiveSpellId(MWBase::Environment::get().getESMStore()->generateId()); } } @@ -506,9 +506,9 @@ namespace MWMechanics mQueue.emplace_back(params); } - void ActiveSpells::addSpell(const ESM::Spell* spell, const MWWorld::Ptr& actor) + void ActiveSpells::addSpell(const ESM::Spell* spell, const MWWorld::Ptr& actor, bool ignoreResistances) { - mQueue.emplace_back(ActiveSpellParams{ spell, actor, true }); + mQueue.emplace_back(ActiveSpellParams{ spell, actor, ignoreResistances }); } void ActiveSpells::purge(ParamsPredicate predicate, const MWWorld::Ptr& ptr) diff --git a/apps/openmw/mwmechanics/activespells.hpp b/apps/openmw/mwmechanics/activespells.hpp index e4fa60ddb6..3e4dafdb26 100644 --- a/apps/openmw/mwmechanics/activespells.hpp +++ b/apps/openmw/mwmechanics/activespells.hpp @@ -137,8 +137,8 @@ namespace MWMechanics /// void addSpell(const ActiveSpellParams& params); - /// Bypasses resistances - void addSpell(const ESM::Spell* spell, const MWWorld::Ptr& actor); + /// Force resistances + void addSpell(const ESM::Spell* spell, const MWWorld::Ptr& actor, bool ignoreResistances = true); /// Removes the active effects from this spell/potion/.. with \a id void removeEffectsBySourceSpellId(const MWWorld::Ptr& ptr, const ESM::RefId& id); diff --git a/apps/openmw/mwmechanics/disease.hpp b/apps/openmw/mwmechanics/disease.hpp index c793d5d540..262f813916 100644 --- a/apps/openmw/mwmechanics/disease.hpp +++ b/apps/openmw/mwmechanics/disease.hpp @@ -66,7 +66,9 @@ namespace MWMechanics if (Misc::Rng::rollDice(10000, prng) < x) { // Contracted disease! - actor.getClass().getCreatureStats(actor).getSpells().add(spell); + MWMechanics::CreatureStats& creatureStats = actor.getClass().getCreatureStats(actor); + creatureStats.getSpells().add(spell); + creatureStats.getActiveSpells().addSpell(spell, actor, false); MWBase::Environment::get().getWorld()->applyLoopingParticles(actor); std::string msg = MWBase::Environment::get()