diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 42851dea3..39276e964 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -47,6 +47,7 @@ namespace MWMechanics if(!paused) { updateDrowning(ptr, duration); + calculateNpcStatModifiers(ptr); updateEquippedLight(ptr, duration); } } @@ -170,6 +171,20 @@ namespace MWMechanics } } + void Actors::calculateNpcStatModifiers (const MWWorld::Ptr& ptr) + { + NpcStats &npcStats = MWWorld::Class::get(ptr).getNpcStats(ptr); + const MagicEffects &effects = npcStats.getMagicEffects(); + + // skills + for(int i = 0;i < ESM::Skill::Length;++i) + { + Stat& skill = npcStats.getSkill(i); + skill.setModifier(effects.get(EffectKey(ESM::MagicEffect::FortifySkill, i)).mMagnitude - + effects.get(EffectKey(ESM::MagicEffect::DrainSkill, i)).mMagnitude); + } + } + void Actors::updateDrowning(const MWWorld::Ptr& ptr, float duration) { MWBase::World *world = MWBase::Environment::get().getWorld(); diff --git a/apps/openmw/mwmechanics/actors.hpp b/apps/openmw/mwmechanics/actors.hpp index a77e52ba3..eeef22635 100644 --- a/apps/openmw/mwmechanics/actors.hpp +++ b/apps/openmw/mwmechanics/actors.hpp @@ -34,11 +34,14 @@ namespace MWMechanics void updateNpc(const MWWorld::Ptr &ptr, float duration, bool paused); + + void adjustMagicEffects (const MWWorld::Ptr& creature); void calculateDynamicStats (const MWWorld::Ptr& ptr); void calculateCreatureStatModifiers (const MWWorld::Ptr& ptr); + void calculateNpcStatModifiers (const MWWorld::Ptr& ptr); void calculateRestoration (const MWWorld::Ptr& ptr, float duration);