mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-29 23:06:45 +00:00
Inherit NpcStats from CreatureStats
This commit is contained in:
parent
89c7f5bc70
commit
75b6515915
3 changed files with 31 additions and 32 deletions
|
@ -41,7 +41,6 @@ namespace
|
|||
struct CustomData : public MWWorld::CustomData
|
||||
{
|
||||
MWMechanics::NpcStats mNpcStats;
|
||||
MWMechanics::CreatureStats mCreatureStats;
|
||||
MWMechanics::Movement mMovement;
|
||||
MWWorld::InventoryStore mInventoryStore;
|
||||
|
||||
|
@ -188,45 +187,45 @@ namespace MWClass
|
|||
for (int i=0; i<27; ++i)
|
||||
data->mNpcStats.getSkill (i).setBase (ref->mBase->mNpdt52.mSkills[i]);
|
||||
|
||||
data->mCreatureStats.getAttribute(0).set (ref->mBase->mNpdt52.mStrength);
|
||||
data->mCreatureStats.getAttribute(1).set (ref->mBase->mNpdt52.mIntelligence);
|
||||
data->mCreatureStats.getAttribute(2).set (ref->mBase->mNpdt52.mWillpower);
|
||||
data->mCreatureStats.getAttribute(3).set (ref->mBase->mNpdt52.mAgility);
|
||||
data->mCreatureStats.getAttribute(4).set (ref->mBase->mNpdt52.mSpeed);
|
||||
data->mCreatureStats.getAttribute(5).set (ref->mBase->mNpdt52.mEndurance);
|
||||
data->mCreatureStats.getAttribute(6).set (ref->mBase->mNpdt52.mPersonality);
|
||||
data->mCreatureStats.getAttribute(7).set (ref->mBase->mNpdt52.mLuck);
|
||||
data->mCreatureStats.setHealth (ref->mBase->mNpdt52.mHealth);
|
||||
data->mCreatureStats.setMagicka (ref->mBase->mNpdt52.mMana);
|
||||
data->mCreatureStats.setFatigue (ref->mBase->mNpdt52.mFatigue);
|
||||
data->mNpcStats.getAttribute(0).set (ref->mBase->mNpdt52.mStrength);
|
||||
data->mNpcStats.getAttribute(1).set (ref->mBase->mNpdt52.mIntelligence);
|
||||
data->mNpcStats.getAttribute(2).set (ref->mBase->mNpdt52.mWillpower);
|
||||
data->mNpcStats.getAttribute(3).set (ref->mBase->mNpdt52.mAgility);
|
||||
data->mNpcStats.getAttribute(4).set (ref->mBase->mNpdt52.mSpeed);
|
||||
data->mNpcStats.getAttribute(5).set (ref->mBase->mNpdt52.mEndurance);
|
||||
data->mNpcStats.getAttribute(6).set (ref->mBase->mNpdt52.mPersonality);
|
||||
data->mNpcStats.getAttribute(7).set (ref->mBase->mNpdt52.mLuck);
|
||||
data->mNpcStats.setHealth (ref->mBase->mNpdt52.mHealth);
|
||||
data->mNpcStats.setMagicka (ref->mBase->mNpdt52.mMana);
|
||||
data->mNpcStats.setFatigue (ref->mBase->mNpdt52.mFatigue);
|
||||
|
||||
data->mCreatureStats.setLevel(ref->mBase->mNpdt52.mLevel);
|
||||
data->mNpcStats.setLevel(ref->mBase->mNpdt52.mLevel);
|
||||
data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt52.mDisposition);
|
||||
data->mNpcStats.setReputation(ref->mBase->mNpdt52.mReputation);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i=0; i<3; ++i)
|
||||
data->mCreatureStats.setDynamic (i, 10);
|
||||
data->mNpcStats.setDynamic (i, 10);
|
||||
|
||||
data->mCreatureStats.setLevel(ref->mBase->mNpdt12.mLevel);
|
||||
data->mNpcStats.setLevel(ref->mBase->mNpdt12.mLevel);
|
||||
data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt12.mDisposition);
|
||||
data->mNpcStats.setReputation(ref->mBase->mNpdt12.mReputation);
|
||||
|
||||
autoCalculateAttributes(ref->mBase, data->mCreatureStats);
|
||||
autoCalculateAttributes(ref->mBase, data->mNpcStats);
|
||||
}
|
||||
|
||||
data->mCreatureStats.getAiSequence().fill(ref->mBase->mAiPackage);
|
||||
data->mNpcStats.getAiSequence().fill(ref->mBase->mAiPackage);
|
||||
|
||||
data->mCreatureStats.setAiSetting (0, ref->mBase->mAiData.mHello);
|
||||
data->mCreatureStats.setAiSetting (1, ref->mBase->mAiData.mFight);
|
||||
data->mCreatureStats.setAiSetting (2, ref->mBase->mAiData.mFlee);
|
||||
data->mCreatureStats.setAiSetting (3, ref->mBase->mAiData.mAlarm);
|
||||
data->mNpcStats.setAiSetting (0, ref->mBase->mAiData.mHello);
|
||||
data->mNpcStats.setAiSetting (1, ref->mBase->mAiData.mFight);
|
||||
data->mNpcStats.setAiSetting (2, ref->mBase->mAiData.mFlee);
|
||||
data->mNpcStats.setAiSetting (3, ref->mBase->mAiData.mAlarm);
|
||||
|
||||
// spells
|
||||
for (std::vector<std::string>::const_iterator iter (ref->mBase->mSpells.mList.begin());
|
||||
iter!=ref->mBase->mSpells.mList.end(); ++iter)
|
||||
data->mCreatureStats.getSpells().add (*iter);
|
||||
data->mNpcStats.getSpells().add (*iter);
|
||||
|
||||
// inventory
|
||||
data->mInventoryStore.fill(ref->mBase->mInventory, getId(ptr),
|
||||
|
@ -307,7 +306,7 @@ namespace MWClass
|
|||
{
|
||||
ensureCustomData (ptr);
|
||||
|
||||
return dynamic_cast<CustomData&> (*ptr.getRefData().getCustomData()).mCreatureStats;
|
||||
return dynamic_cast<CustomData&> (*ptr.getRefData().getCustomData()).mNpcStats;
|
||||
}
|
||||
|
||||
MWMechanics::NpcStats& Npc::getNpcStats (const MWWorld::Ptr& ptr) const
|
||||
|
@ -679,11 +678,11 @@ namespace MWClass
|
|||
{
|
||||
const MWBase::World *world = MWBase::Environment::get().getWorld();
|
||||
const CustomData *npcdata = static_cast<const CustomData*>(ptr.getRefData().getCustomData());
|
||||
const MWMechanics::MagicEffects &mageffects = npcdata->mCreatureStats.getMagicEffects();
|
||||
const MWMechanics::MagicEffects &mageffects = npcdata->mNpcStats.getMagicEffects();
|
||||
|
||||
const float normalizedEncumbrance = Npc::getEncumbrance(ptr) / Npc::getCapacity(ptr);
|
||||
|
||||
float walkSpeed = fMinWalkSpeed->getFloat() + 0.01f*npcdata->mCreatureStats.getAttribute(ESM::Attribute::Speed).getModified()*
|
||||
float walkSpeed = fMinWalkSpeed->getFloat() + 0.01f*npcdata->mNpcStats.getAttribute(ESM::Attribute::Speed).getModified()*
|
||||
(fMaxWalkSpeed->getFloat() - fMinWalkSpeed->getFloat());
|
||||
walkSpeed *= 1.0f - fEncumberedMoveEffect->getFloat()*normalizedEncumbrance;
|
||||
walkSpeed = std::max(0.0f, walkSpeed);
|
||||
|
@ -700,7 +699,7 @@ namespace MWClass
|
|||
moveSpeed = 0.0f;
|
||||
else if(mageffects.get(MWMechanics::EffectKey(10/*levitate*/)).mMagnitude > 0)
|
||||
{
|
||||
float flySpeed = 0.01f*(npcdata->mCreatureStats.getAttribute(ESM::Attribute::Speed).getModified() +
|
||||
float flySpeed = 0.01f*(npcdata->mNpcStats.getAttribute(ESM::Attribute::Speed).getModified() +
|
||||
mageffects.get(MWMechanics::EffectKey(10/*levitate*/)).mMagnitude);
|
||||
flySpeed = fMinFlySpeed->getFloat() + flySpeed*(fMaxFlySpeed->getFloat() - fMinFlySpeed->getFloat());
|
||||
flySpeed *= 1.0f - fEncumberedMoveEffect->getFloat() * normalizedEncumbrance;
|
||||
|
@ -730,7 +729,7 @@ namespace MWClass
|
|||
float Npc::getJump(const MWWorld::Ptr &ptr) const
|
||||
{
|
||||
const CustomData *npcdata = static_cast<const CustomData*>(ptr.getRefData().getCustomData());
|
||||
const MWMechanics::MagicEffects &mageffects = npcdata->mCreatureStats.getMagicEffects();
|
||||
const MWMechanics::MagicEffects &mageffects = npcdata->mNpcStats.getMagicEffects();
|
||||
const float encumbranceTerm = fJumpEncumbranceBase->getFloat() +
|
||||
fJumpEncumbranceMultiplier->getFloat() *
|
||||
(1.0f - Npc::getEncumbrance(ptr)/Npc::getCapacity(ptr));
|
||||
|
@ -751,7 +750,7 @@ namespace MWClass
|
|||
|
||||
if(Npc::getStance(ptr, Run, false))
|
||||
x *= fJumpRunMultiplier->getFloat();
|
||||
x *= npcdata->mCreatureStats.getFatigueTerm();
|
||||
x *= npcdata->mNpcStats.getFatigueTerm();
|
||||
x -= -627.2f;/*gravity constant*/
|
||||
x /= 3.0f;
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#include "stat.hpp"
|
||||
#include "drawstate.hpp"
|
||||
|
||||
#include "creaturestats.hpp"
|
||||
|
||||
namespace ESM
|
||||
{
|
||||
struct Class;
|
||||
|
@ -18,12 +20,10 @@ namespace MWMechanics
|
|||
{
|
||||
/// \brief Additional stats for NPCs
|
||||
///
|
||||
/// For non-NPC-specific stats, see the CreatureStats struct.
|
||||
///
|
||||
/// \note For technical reasons the spell list and the currently selected spell is also handled by
|
||||
/// CreatureStats, even though they are actually NPC stats.
|
||||
|
||||
class NpcStats
|
||||
class NpcStats : public CreatureStats
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ namespace
|
|||
{
|
||||
MWWorld::Ptr actor = MWBase::Environment::get().getDialogueManager()->getActor();
|
||||
|
||||
MWMechanics::NpcStats stats = MWWorld::Class::get (actor).getNpcStats (actor);
|
||||
const MWMechanics::NpcStats &stats = MWWorld::Class::get (actor).getNpcStats (actor);
|
||||
|
||||
if (stats.getFactionRanks().empty())
|
||||
throw std::runtime_error (
|
||||
|
|
Loading…
Reference in a new issue