forked from teamnwah/openmw-tes3coop
replaced old abilities container in CreatureStats with a Spells object
This commit is contained in:
parent
750d79eaf0
commit
e04ccfced0
3 changed files with 7 additions and 53 deletions
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "stat.hpp"
|
||||
#include "magiceffects.hpp"
|
||||
#include "spells.hpp"
|
||||
|
||||
namespace MWMechanics
|
||||
{
|
||||
|
@ -14,7 +15,7 @@ namespace MWMechanics
|
|||
Stat<int> mAttributes[8];
|
||||
DynamicStat<int> mDynamic[3]; // health, magicka, fatigue
|
||||
int mLevel;
|
||||
std::set<std::string> mAbilities;
|
||||
Spells mSpells;
|
||||
MagicEffects mMagicEffects;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace MWMechanics
|
|||
|
||||
// reset
|
||||
creatureStats.mLevel = player->npdt52.level;
|
||||
creatureStats.mAbilities.clear();
|
||||
creatureStats.mSpells.clear();
|
||||
creatureStats.mMagicEffects = MagicEffects();
|
||||
|
||||
for (int i=0; i<27; ++i)
|
||||
|
@ -71,7 +71,7 @@ namespace MWMechanics
|
|||
for (std::vector<std::string>::const_iterator iter (race->powers.list.begin());
|
||||
iter!=race->powers.list.end(); ++iter)
|
||||
{
|
||||
insertSpell (*iter, ptr);
|
||||
creatureStats.mSpells.add (*iter, mEnvironment);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ namespace MWMechanics
|
|||
for (std::vector<std::string>::const_iterator iter (sign->powers.list.begin());
|
||||
iter!=sign->powers.list.end(); ++iter)
|
||||
{
|
||||
insertSpell (*iter, ptr);
|
||||
creatureStats.mSpells.add (*iter, mEnvironment);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -159,59 +159,14 @@ namespace MWMechanics
|
|||
creatureStats.mDynamic[i].setCurrent (creatureStats.mDynamic[i].getModified());
|
||||
}
|
||||
|
||||
void MechanicsManager::insertSpell (const std::string& id, MWWorld::Ptr& creature)
|
||||
{
|
||||
MWMechanics::CreatureStats& creatureStats =
|
||||
MWWorld::Class::get (creature).getCreatureStats (creature);
|
||||
|
||||
const ESM::Spell *spell = mEnvironment.mWorld->getStore().spells.find (id);
|
||||
|
||||
switch (spell->data.type)
|
||||
{
|
||||
case ESM::Spell::ST_Ability:
|
||||
|
||||
if (creatureStats.mAbilities.find (id)==creatureStats.mAbilities.end())
|
||||
{
|
||||
creatureStats.mAbilities.insert (id);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// TODO ST_SPELL, ST_Blight, ST_Disease, ST_Curse, ST_Power
|
||||
|
||||
default:
|
||||
|
||||
std::cout
|
||||
<< "adding unsupported spell type (" << spell->data.type
|
||||
<< ") to creature: " << id << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void MechanicsManager::adjustMagicEffects (MWWorld::Ptr& creature)
|
||||
{
|
||||
MWMechanics::CreatureStats& creatureStats =
|
||||
MWWorld::Class::get (creature).getCreatureStats (creature);
|
||||
|
||||
MagicEffects now;
|
||||
MagicEffects now = creatureStats.mSpells.getMagicEffects (mEnvironment);
|
||||
|
||||
for (std::set<std::string>::const_iterator iter (creatureStats.mAbilities.begin());
|
||||
iter!=creatureStats.mAbilities.end(); ++iter)
|
||||
{
|
||||
const ESM::Spell *spell = mEnvironment.mWorld->getStore().spells.find (*iter);
|
||||
|
||||
for (std::vector<ESM::ENAMstruct>::const_iterator iter = spell->effects.list.begin();
|
||||
iter!=spell->effects.list.end(); ++iter)
|
||||
{
|
||||
if (iter->range==0) // self
|
||||
{
|
||||
EffectParam param;
|
||||
param.mMagnitude = iter->magnMax; // TODO calculate magnitude
|
||||
now.add (EffectKey (*iter), param);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO add effects from other spell types, active spells and equipment
|
||||
/// \todo add effects from active spells and equipment
|
||||
|
||||
MagicEffects diff = MagicEffects::diff (creatureStats.mMagicEffects, now);
|
||||
|
||||
|
|
|
@ -37,8 +37,6 @@ namespace MWMechanics
|
|||
///< build player according to stored class/race/birthsign information. Will
|
||||
/// default to the values of the ESM::NPC object, if no explicit information is given.
|
||||
|
||||
void insertSpell (const std::string& id, MWWorld::Ptr& creature);
|
||||
|
||||
void adjustMagicEffects (MWWorld::Ptr& creature);
|
||||
|
||||
public:
|
||||
|
|
Loading…
Reference in a new issue