Merge remote-tracking branch 'scrawl/magic'

This commit is contained in:
Marc Zinnschlag 2013-11-09 17:00:27 +01:00
commit a198751f21
4 changed files with 20 additions and 1 deletions

View file

@ -69,7 +69,7 @@ add_openmw_dir (mwclass
add_openmw_dir (mwmechanics
mechanicsmanagerimp stat character creaturestats magiceffects movement actors objects
drawstate spells activespells npcstats aipackage aisequence alchemy aiwander aitravel aifollow
aiescort aiactivate repair enchanting pathfinding security
aiescort aiactivate repair enchanting pathfinding security spellsuccess
)
add_openmw_dir (mwbase

View file

@ -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<float>& 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();

View file

@ -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);

View file

@ -2077,6 +2077,7 @@ namespace MWWorld
return;
}
actor.getClass().skillUsageSucceeded(actor, MWMechanics::spellSchoolToSkill(MWMechanics::getSpellSchool(selectedSpell, actor)), 0);
actor.getClass().getCreatureStats(actor).getActiveSpells().addSpell(selectedSpell, actor, ESM::RT_Self);
// TODO: RT_Range, RT_Touch