mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-16 19:19:56 +00:00
Merged pull request #1702
This commit is contained in:
commit
b7cce1a665
9 changed files with 170 additions and 149 deletions
|
@ -1040,45 +1040,47 @@ void Record<ESM::NPC>::print()
|
|||
|
||||
if (mData.mNpdtType == ESM::NPC::NPC_WITH_AUTOCALCULATED_STATS)
|
||||
{
|
||||
std::cout << " Level: " << mData.mNpdt12.mLevel << std::endl;
|
||||
std::cout << " Reputation: " << (int)mData.mNpdt12.mReputation << std::endl;
|
||||
std::cout << " Disposition: " << (int)mData.mNpdt12.mDisposition << std::endl;
|
||||
std::cout << " Rank: " << (int)mData.mNpdt12.mRank << std::endl;
|
||||
std::cout << " Unknown1: "
|
||||
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown1) << std::endl;
|
||||
std::cout << " Unknown2: "
|
||||
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown2) << std::endl;
|
||||
std::cout << " Unknown3: "
|
||||
<< (unsigned int)((unsigned char)mData.mNpdt12.mUnknown3) << std::endl;
|
||||
std::cout << " Gold: " << mData.mNpdt12.mGold << std::endl;
|
||||
std::cout << " Level: " << mData.mNpdt.mLevel << std::endl;
|
||||
std::cout << " Reputation: " << (int)mData.mNpdt.mReputation << std::endl;
|
||||
std::cout << " Disposition: " << (int)mData.mNpdt.mDisposition << std::endl;
|
||||
std::cout << " Rank: " << (int)mData.mNpdt.mRank << std::endl;
|
||||
//Why do we want to print these fields? They are padding in the struct and contain
|
||||
// nothing of real value. Now we don't deal with NPDTstruct12 in runtime either...
|
||||
//std::cout << " Unknown1: "
|
||||
// << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown1) << std::endl;
|
||||
//std::cout << " Unknown2: "
|
||||
// << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown2) << std::endl;
|
||||
//std::cout << " Unknown3: "
|
||||
// << (unsigned int)((unsigned char)mData.mNpdt12.mUnknown3) << std::endl;
|
||||
std::cout << " Gold: " << mData.mNpdt.mGold << std::endl;
|
||||
}
|
||||
else {
|
||||
std::cout << " Level: " << mData.mNpdt52.mLevel << std::endl;
|
||||
std::cout << " Reputation: " << (int)mData.mNpdt52.mReputation << std::endl;
|
||||
std::cout << " Disposition: " << (int)mData.mNpdt52.mDisposition << std::endl;
|
||||
std::cout << " Rank: " << (int)mData.mNpdt52.mRank << std::endl;
|
||||
std::cout << " FactionID: " << (int)mData.mNpdt52.mFactionID << std::endl;
|
||||
std::cout << " Level: " << mData.mNpdt.mLevel << std::endl;
|
||||
std::cout << " Reputation: " << (int)mData.mNpdt.mReputation << std::endl;
|
||||
std::cout << " Disposition: " << (int)mData.mNpdt.mDisposition << std::endl;
|
||||
std::cout << " Rank: " << (int)mData.mNpdt.mRank << std::endl;
|
||||
std::cout << " FactionID: " << (int)mData.mNpdt.mFactionID << std::endl;
|
||||
|
||||
std::cout << " Attributes:" << std::endl;
|
||||
std::cout << " Strength: " << (int)mData.mNpdt52.mStrength << std::endl;
|
||||
std::cout << " Intelligence: " << (int)mData.mNpdt52.mIntelligence << std::endl;
|
||||
std::cout << " Willpower: " << (int)mData.mNpdt52.mWillpower << std::endl;
|
||||
std::cout << " Agility: " << (int)mData.mNpdt52.mAgility << std::endl;
|
||||
std::cout << " Speed: " << (int)mData.mNpdt52.mSpeed << std::endl;
|
||||
std::cout << " Endurance: " << (int)mData.mNpdt52.mEndurance << std::endl;
|
||||
std::cout << " Personality: " << (int)mData.mNpdt52.mPersonality << std::endl;
|
||||
std::cout << " Luck: " << (int)mData.mNpdt52.mLuck << std::endl;
|
||||
std::cout << " Strength: " << (int)mData.mNpdt.mStrength << std::endl;
|
||||
std::cout << " Intelligence: " << (int)mData.mNpdt.mIntelligence << std::endl;
|
||||
std::cout << " Willpower: " << (int)mData.mNpdt.mWillpower << std::endl;
|
||||
std::cout << " Agility: " << (int)mData.mNpdt.mAgility << std::endl;
|
||||
std::cout << " Speed: " << (int)mData.mNpdt.mSpeed << std::endl;
|
||||
std::cout << " Endurance: " << (int)mData.mNpdt.mEndurance << std::endl;
|
||||
std::cout << " Personality: " << (int)mData.mNpdt.mPersonality << std::endl;
|
||||
std::cout << " Luck: " << (int)mData.mNpdt.mLuck << std::endl;
|
||||
|
||||
std::cout << " Skills:" << std::endl;
|
||||
for (int i = 0; i != ESM::Skill::Length; i++)
|
||||
std::cout << " " << skillLabel(i) << ": "
|
||||
<< (int)(mData.mNpdt52.mSkills[i]) << std::endl;
|
||||
<< (int)(mData.mNpdt.mSkills[i]) << std::endl;
|
||||
|
||||
std::cout << " Health: " << mData.mNpdt52.mHealth << std::endl;
|
||||
std::cout << " Magicka: " << mData.mNpdt52.mMana << std::endl;
|
||||
std::cout << " Fatigue: " << mData.mNpdt52.mFatigue << std::endl;
|
||||
std::cout << " Unknown: " << (int)mData.mNpdt52.mUnknown << std::endl;
|
||||
std::cout << " Gold: " << mData.mNpdt52.mGold << std::endl;
|
||||
std::cout << " Health: " << mData.mNpdt.mHealth << std::endl;
|
||||
std::cout << " Magicka: " << mData.mNpdt.mMana << std::endl;
|
||||
std::cout << " Fatigue: " << mData.mNpdt.mFatigue << std::endl;
|
||||
std::cout << " Unknown: " << (int)mData.mNpdt.mUnknown << std::endl;
|
||||
std::cout << " Gold: " << mData.mNpdt.mGold << std::endl;
|
||||
}
|
||||
|
||||
std::vector<ESM::ContItem>::iterator cit;
|
||||
|
|
|
@ -122,7 +122,7 @@ public:
|
|||
}
|
||||
else
|
||||
{
|
||||
mContext->mPlayer.mObject.mCreatureStats.mLevel = npc.mNpdt52.mLevel;
|
||||
mContext->mPlayer.mObject.mCreatureStats.mLevel = npc.mNpdt.mLevel;
|
||||
mContext->mPlayerBase = npc;
|
||||
ESM::SpellState::SpellParams empty;
|
||||
// FIXME: player start spells and birthsign spells aren't listed here,
|
||||
|
|
|
@ -377,7 +377,7 @@ namespace ESSImport
|
|||
profile.mPlayerClassName = context.mCustomPlayerClassName;
|
||||
else
|
||||
profile.mPlayerClassId = context.mPlayerBase.mClass;
|
||||
profile.mPlayerLevel = context.mPlayerBase.mNpdt52.mLevel;
|
||||
profile.mPlayerLevel = context.mPlayerBase.mNpdt.mLevel;
|
||||
profile.mPlayerName = header.mGameData.mPlayerName.toString();
|
||||
|
||||
writeScreenshot(header, profile);
|
||||
|
|
|
@ -619,12 +619,12 @@ void CSMTools::ReferenceableCheckStage::npcCheck (
|
|||
const ESM::NPC& npc = (dynamic_cast<const CSMWorld::Record<ESM::NPC>& >(baseRecord)).get();
|
||||
CSMWorld::UniversalId id (CSMWorld::UniversalId::Type_Npc, npc.mId);
|
||||
|
||||
short level(npc.mNpdt52.mLevel);
|
||||
char disposition(npc.mNpdt52.mDisposition);
|
||||
char reputation(npc.mNpdt52.mReputation);
|
||||
char rank(npc.mNpdt52.mRank);
|
||||
short level(npc.mNpdt.mLevel);
|
||||
char disposition(npc.mNpdt.mDisposition);
|
||||
char reputation(npc.mNpdt.mReputation);
|
||||
char rank(npc.mNpdt.mRank);
|
||||
//Don't know what unknown is for
|
||||
int gold(npc.mNpdt52.mGold);
|
||||
int gold(npc.mNpdt.mGold);
|
||||
|
||||
//Detect if player is present
|
||||
if (Misc::StringUtils::ciEqual(npc.mId, "player")) //Happy now, scrawl?
|
||||
|
@ -638,36 +638,36 @@ void CSMTools::ReferenceableCheckStage::npcCheck (
|
|||
return;
|
||||
}
|
||||
|
||||
level = npc.mNpdt12.mLevel;
|
||||
disposition = npc.mNpdt12.mDisposition;
|
||||
reputation = npc.mNpdt12.mReputation;
|
||||
rank = npc.mNpdt12.mRank;
|
||||
gold = npc.mNpdt12.mGold;
|
||||
level = npc.mNpdt.mLevel;
|
||||
disposition = npc.mNpdt.mDisposition;
|
||||
reputation = npc.mNpdt.mReputation;
|
||||
rank = npc.mNpdt.mRank;
|
||||
gold = npc.mNpdt.mGold;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (npc.mNpdt52.mAgility == 0)
|
||||
if (npc.mNpdt.mAgility == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " agility has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mEndurance == 0)
|
||||
if (npc.mNpdt.mEndurance == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " endurance has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mIntelligence == 0)
|
||||
if (npc.mNpdt.mIntelligence == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " intelligence has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mLuck == 0)
|
||||
if (npc.mNpdt.mLuck == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " luck has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mPersonality == 0)
|
||||
if (npc.mNpdt.mPersonality == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " personality has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mStrength == 0)
|
||||
if (npc.mNpdt.mStrength == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " strength has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mSpeed == 0)
|
||||
if (npc.mNpdt.mSpeed == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " speed has zero value"));
|
||||
|
||||
if (npc.mNpdt52.mWillpower == 0)
|
||||
if (npc.mNpdt.mWillpower == 0)
|
||||
messages.push_back (std::make_pair (id, npc.mId + " willpower has zero value"));
|
||||
}
|
||||
|
||||
|
|
|
@ -914,7 +914,7 @@ void CSMWorld::NpcAttributesRefIdAdapter::setNestedTable (const RefIdColumn* col
|
|||
ESM::NPC npc = record.get();
|
||||
|
||||
// store the whole struct
|
||||
npc.mNpdt52 =
|
||||
npc.mNpdt =
|
||||
static_cast<const NestedTableWrapper<std::vector<ESM::NPC::NPDTstruct52> > &>(nestedTable).mNestedTable.at(0);
|
||||
|
||||
record.setModified (npc);
|
||||
|
@ -928,7 +928,7 @@ CSMWorld::NestedTableWrapperBase* CSMWorld::NpcAttributesRefIdAdapter::nestedTab
|
|||
|
||||
// return the whole struct
|
||||
std::vector<ESM::NPC::NPDTstruct52> wrap;
|
||||
wrap.push_back(record.get().mNpdt52);
|
||||
wrap.push_back(record.get().mNpdt);
|
||||
// deleted by dtor of NestedTableStoring
|
||||
return new NestedTableWrapper<std::vector<ESM::NPC::NPDTstruct52> >(wrap);
|
||||
}
|
||||
|
@ -939,7 +939,7 @@ QVariant CSMWorld::NpcAttributesRefIdAdapter::getNestedData (const RefIdColumn *
|
|||
const Record<ESM::NPC>& record =
|
||||
static_cast<const Record<ESM::NPC>&> (data.getRecord (RefIdData::LocalIndex (index, UniversalId::Type_Npc)));
|
||||
|
||||
const ESM::NPC::NPDTstruct52& npcStruct = record.get().mNpdt52;
|
||||
const ESM::NPC::NPDTstruct52& npcStruct = record.get().mNpdt;
|
||||
|
||||
if (subColIndex == 0)
|
||||
return subRowIndex;
|
||||
|
@ -966,7 +966,7 @@ void CSMWorld::NpcAttributesRefIdAdapter::setNestedData (const RefIdColumn *colu
|
|||
Record<ESM::NPC>& record =
|
||||
static_cast<Record<ESM::NPC>&> (data.getRecord (RefIdData::LocalIndex (row, UniversalId::Type_Npc)));
|
||||
ESM::NPC npc = record.get();
|
||||
ESM::NPC::NPDTstruct52& npcStruct = npc.mNpdt52;
|
||||
ESM::NPC::NPDTstruct52& npcStruct = npc.mNpdt;
|
||||
|
||||
if (subColIndex == 1)
|
||||
switch(subRowIndex)
|
||||
|
@ -1021,7 +1021,7 @@ void CSMWorld::NpcSkillsRefIdAdapter::setNestedTable (const RefIdColumn* column,
|
|||
ESM::NPC npc = record.get();
|
||||
|
||||
// store the whole struct
|
||||
npc.mNpdt52 =
|
||||
npc.mNpdt =
|
||||
static_cast<const NestedTableWrapper<std::vector<ESM::NPC::NPDTstruct52> > &>(nestedTable).mNestedTable.at(0);
|
||||
|
||||
record.setModified (npc);
|
||||
|
@ -1035,7 +1035,7 @@ CSMWorld::NestedTableWrapperBase* CSMWorld::NpcSkillsRefIdAdapter::nestedTable (
|
|||
|
||||
// return the whole struct
|
||||
std::vector<ESM::NPC::NPDTstruct52> wrap;
|
||||
wrap.push_back(record.get().mNpdt52);
|
||||
wrap.push_back(record.get().mNpdt);
|
||||
// deleted by dtor of NestedTableStoring
|
||||
return new NestedTableWrapper<std::vector<ESM::NPC::NPDTstruct52> >(wrap);
|
||||
}
|
||||
|
@ -1046,7 +1046,7 @@ QVariant CSMWorld::NpcSkillsRefIdAdapter::getNestedData (const RefIdColumn *colu
|
|||
const Record<ESM::NPC>& record =
|
||||
static_cast<const Record<ESM::NPC>&> (data.getRecord (RefIdData::LocalIndex (index, UniversalId::Type_Npc)));
|
||||
|
||||
const ESM::NPC::NPDTstruct52& npcStruct = record.get().mNpdt52;
|
||||
const ESM::NPC::NPDTstruct52& npcStruct = record.get().mNpdt;
|
||||
|
||||
if (subRowIndex < 0 || subRowIndex >= ESM::Skill::Length)
|
||||
throw std::runtime_error ("index out of range");
|
||||
|
@ -1065,7 +1065,7 @@ void CSMWorld::NpcSkillsRefIdAdapter::setNestedData (const RefIdColumn *column,
|
|||
Record<ESM::NPC>& record =
|
||||
static_cast<Record<ESM::NPC>&> (data.getRecord (RefIdData::LocalIndex (row, UniversalId::Type_Npc)));
|
||||
ESM::NPC npc = record.get();
|
||||
ESM::NPC::NPDTstruct52& npcStruct = npc.mNpdt52;
|
||||
ESM::NPC::NPDTstruct52& npcStruct = npc.mNpdt;
|
||||
|
||||
if (subRowIndex < 0 || subRowIndex >= ESM::Skill::Length)
|
||||
throw std::runtime_error ("index out of range");
|
||||
|
@ -1130,30 +1130,30 @@ QVariant CSMWorld::NpcMiscRefIdAdapter::getNestedData (const RefIdColumn *column
|
|||
if (autoCalc)
|
||||
switch (subColIndex)
|
||||
{
|
||||
case 0: return static_cast<int>(record.get().mNpdt12.mLevel);
|
||||
case 0: return static_cast<int>(record.get().mNpdt.mLevel);
|
||||
case 1: return QVariant(QVariant::UserType);
|
||||
case 2: return QVariant(QVariant::UserType);
|
||||
case 3: return QVariant(QVariant::UserType);
|
||||
case 4: return QVariant(QVariant::UserType);
|
||||
case 5: return static_cast<int>(record.get().mNpdt12.mDisposition);
|
||||
case 6: return static_cast<int>(record.get().mNpdt12.mReputation);
|
||||
case 7: return static_cast<int>(record.get().mNpdt12.mRank);
|
||||
case 8: return record.get().mNpdt12.mGold;
|
||||
case 5: return static_cast<int>(record.get().mNpdt.mDisposition);
|
||||
case 6: return static_cast<int>(record.get().mNpdt.mReputation);
|
||||
case 7: return static_cast<int>(record.get().mNpdt.mRank);
|
||||
case 8: return record.get().mNpdt.mGold;
|
||||
case 9: return record.get().mPersistent == true;
|
||||
default: return QVariant(); // throw an exception here?
|
||||
}
|
||||
else
|
||||
switch (subColIndex)
|
||||
{
|
||||
case 0: return static_cast<int>(record.get().mNpdt52.mLevel);
|
||||
case 1: return static_cast<int>(record.get().mNpdt52.mFactionID);
|
||||
case 2: return static_cast<int>(record.get().mNpdt52.mHealth);
|
||||
case 3: return static_cast<int>(record.get().mNpdt52.mMana);
|
||||
case 4: return static_cast<int>(record.get().mNpdt52.mFatigue);
|
||||
case 5: return static_cast<int>(record.get().mNpdt52.mDisposition);
|
||||
case 6: return static_cast<int>(record.get().mNpdt52.mReputation);
|
||||
case 7: return static_cast<int>(record.get().mNpdt52.mRank);
|
||||
case 8: return record.get().mNpdt52.mGold;
|
||||
case 0: return static_cast<int>(record.get().mNpdt.mLevel);
|
||||
case 1: return static_cast<int>(record.get().mNpdt.mFactionID);
|
||||
case 2: return static_cast<int>(record.get().mNpdt.mHealth);
|
||||
case 3: return static_cast<int>(record.get().mNpdt.mMana);
|
||||
case 4: return static_cast<int>(record.get().mNpdt.mFatigue);
|
||||
case 5: return static_cast<int>(record.get().mNpdt.mDisposition);
|
||||
case 6: return static_cast<int>(record.get().mNpdt.mReputation);
|
||||
case 7: return static_cast<int>(record.get().mNpdt.mRank);
|
||||
case 8: return record.get().mNpdt.mGold;
|
||||
case 9: return record.get().mPersistent == true;
|
||||
default: return QVariant(); // throw an exception here?
|
||||
}
|
||||
|
@ -1171,30 +1171,30 @@ void CSMWorld::NpcMiscRefIdAdapter::setNestedData (const RefIdColumn *column,
|
|||
if (autoCalc)
|
||||
switch(subColIndex)
|
||||
{
|
||||
case 0: npc.mNpdt12.mLevel = static_cast<short>(value.toInt()); break;
|
||||
case 0: npc.mNpdt.mLevel = static_cast<short>(value.toInt()); break;
|
||||
case 1: return;
|
||||
case 2: return;
|
||||
case 3: return;
|
||||
case 4: return;
|
||||
case 5: npc.mNpdt12.mDisposition = static_cast<signed char>(value.toInt()); break;
|
||||
case 6: npc.mNpdt12.mReputation = static_cast<signed char>(value.toInt()); break;
|
||||
case 7: npc.mNpdt12.mRank = static_cast<signed char>(value.toInt()); break;
|
||||
case 8: npc.mNpdt12.mGold = value.toInt(); break;
|
||||
case 5: npc.mNpdt.mDisposition = static_cast<signed char>(value.toInt()); break;
|
||||
case 6: npc.mNpdt.mReputation = static_cast<signed char>(value.toInt()); break;
|
||||
case 7: npc.mNpdt.mRank = static_cast<signed char>(value.toInt()); break;
|
||||
case 8: npc.mNpdt.mGold = value.toInt(); break;
|
||||
case 9: npc.mPersistent = value.toBool(); break;
|
||||
default: return; // throw an exception here?
|
||||
}
|
||||
else
|
||||
switch(subColIndex)
|
||||
{
|
||||
case 0: npc.mNpdt52.mLevel = static_cast<short>(value.toInt()); break;
|
||||
case 1: npc.mNpdt52.mFactionID = static_cast<char>(value.toInt()); break;
|
||||
case 2: npc.mNpdt52.mHealth = static_cast<unsigned short>(value.toInt()); break;
|
||||
case 3: npc.mNpdt52.mMana = static_cast<unsigned short>(value.toInt()); break;
|
||||
case 4: npc.mNpdt52.mFatigue = static_cast<unsigned short>(value.toInt()); break;
|
||||
case 5: npc.mNpdt52.mDisposition = static_cast<signed char>(value.toInt()); break;
|
||||
case 6: npc.mNpdt52.mReputation = static_cast<signed char>(value.toInt()); break;
|
||||
case 7: npc.mNpdt52.mRank = static_cast<signed char>(value.toInt()); break;
|
||||
case 8: npc.mNpdt52.mGold = value.toInt(); break;
|
||||
case 0: npc.mNpdt.mLevel = static_cast<short>(value.toInt()); break;
|
||||
case 1: npc.mNpdt.mFactionID = static_cast<char>(value.toInt()); break;
|
||||
case 2: npc.mNpdt.mHealth = static_cast<unsigned short>(value.toInt()); break;
|
||||
case 3: npc.mNpdt.mMana = static_cast<unsigned short>(value.toInt()); break;
|
||||
case 4: npc.mNpdt.mFatigue = static_cast<unsigned short>(value.toInt()); break;
|
||||
case 5: npc.mNpdt.mDisposition = static_cast<signed char>(value.toInt()); break;
|
||||
case 6: npc.mNpdt.mReputation = static_cast<signed char>(value.toInt()); break;
|
||||
case 7: npc.mNpdt.mRank = static_cast<signed char>(value.toInt()); break;
|
||||
case 8: npc.mNpdt.mGold = value.toInt(); break;
|
||||
case 9: npc.mPersistent = value.toBool(); break;
|
||||
default: return; // throw an exception here?
|
||||
}
|
||||
|
|
|
@ -312,40 +312,40 @@ namespace MWClass
|
|||
int gold=0;
|
||||
if(ref->mBase->mNpdtType != ESM::NPC::NPC_WITH_AUTOCALCULATED_STATS)
|
||||
{
|
||||
gold = ref->mBase->mNpdt52.mGold;
|
||||
gold = ref->mBase->mNpdt.mGold;
|
||||
|
||||
for (unsigned int i=0; i< ESM::Skill::Length; ++i)
|
||||
data->mNpcStats.getSkill (i).setBase (ref->mBase->mNpdt52.mSkills[i]);
|
||||
data->mNpcStats.getSkill (i).setBase (ref->mBase->mNpdt.mSkills[i]);
|
||||
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Strength, ref->mBase->mNpdt52.mStrength);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Intelligence, ref->mBase->mNpdt52.mIntelligence);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Willpower, ref->mBase->mNpdt52.mWillpower);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Agility, ref->mBase->mNpdt52.mAgility);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Speed, ref->mBase->mNpdt52.mSpeed);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Endurance, ref->mBase->mNpdt52.mEndurance);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Personality, ref->mBase->mNpdt52.mPersonality);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Luck, ref->mBase->mNpdt52.mLuck);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Strength, ref->mBase->mNpdt.mStrength);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Intelligence, ref->mBase->mNpdt.mIntelligence);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Willpower, ref->mBase->mNpdt.mWillpower);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Agility, ref->mBase->mNpdt.mAgility);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Speed, ref->mBase->mNpdt.mSpeed);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Endurance, ref->mBase->mNpdt.mEndurance);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Personality, ref->mBase->mNpdt.mPersonality);
|
||||
data->mNpcStats.setAttribute(ESM::Attribute::Luck, ref->mBase->mNpdt.mLuck);
|
||||
|
||||
data->mNpcStats.setHealth (ref->mBase->mNpdt52.mHealth);
|
||||
data->mNpcStats.setMagicka (ref->mBase->mNpdt52.mMana);
|
||||
data->mNpcStats.setFatigue (ref->mBase->mNpdt52.mFatigue);
|
||||
data->mNpcStats.setHealth (ref->mBase->mNpdt.mHealth);
|
||||
data->mNpcStats.setMagicka (ref->mBase->mNpdt.mMana);
|
||||
data->mNpcStats.setFatigue (ref->mBase->mNpdt.mFatigue);
|
||||
|
||||
data->mNpcStats.setLevel(ref->mBase->mNpdt52.mLevel);
|
||||
data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt52.mDisposition);
|
||||
data->mNpcStats.setReputation(ref->mBase->mNpdt52.mReputation);
|
||||
data->mNpcStats.setLevel(ref->mBase->mNpdt.mLevel);
|
||||
data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt.mDisposition);
|
||||
data->mNpcStats.setReputation(ref->mBase->mNpdt.mReputation);
|
||||
|
||||
data->mNpcStats.setNeedRecalcDynamicStats(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
gold = ref->mBase->mNpdt12.mGold;
|
||||
gold = ref->mBase->mNpdt.mGold;
|
||||
|
||||
for (int i=0; i<3; ++i)
|
||||
data->mNpcStats.setDynamic (i, 10);
|
||||
|
||||
data->mNpcStats.setLevel(ref->mBase->mNpdt12.mLevel);
|
||||
data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt12.mDisposition);
|
||||
data->mNpcStats.setReputation(ref->mBase->mNpdt12.mReputation);
|
||||
data->mNpcStats.setLevel(ref->mBase->mNpdt.mLevel);
|
||||
data->mNpcStats.setBaseDisposition(ref->mBase->mNpdt.mDisposition);
|
||||
data->mNpcStats.setReputation(ref->mBase->mNpdt.mReputation);
|
||||
|
||||
autoCalculateAttributes(ref->mBase, data->mNpcStats);
|
||||
autoCalculateSkills(ref->mBase, data->mNpcStats, ptr);
|
||||
|
@ -1327,10 +1327,7 @@ namespace MWClass
|
|||
int Npc::getBaseGold(const MWWorld::ConstPtr& ptr) const
|
||||
{
|
||||
const MWWorld::LiveCellRef<ESM::NPC> *ref = ptr.get<ESM::NPC>();
|
||||
if(ref->mBase->mNpdtType != ESM::NPC::NPC_WITH_AUTOCALCULATED_STATS)
|
||||
return ref->mBase->mNpdt52.mGold;
|
||||
else
|
||||
return ref->mBase->mNpdt12.mGold;
|
||||
return ref->mBase->mNpdt.mGold;
|
||||
}
|
||||
|
||||
bool Npc::isClass(const MWWorld::ConstPtr& ptr, const std::string &className) const
|
||||
|
|
|
@ -79,21 +79,21 @@ namespace MWMechanics
|
|||
const ESM::NPC *player = ptr.get<ESM::NPC>()->mBase;
|
||||
|
||||
// reset
|
||||
creatureStats.setLevel(player->mNpdt52.mLevel);
|
||||
creatureStats.setLevel(player->mNpdt.mLevel);
|
||||
creatureStats.getSpells().clear();
|
||||
creatureStats.modifyMagicEffects(MagicEffects());
|
||||
|
||||
for (int i=0; i<27; ++i)
|
||||
npcStats.getSkill (i).setBase (player->mNpdt52.mSkills[i]);
|
||||
npcStats.getSkill (i).setBase (player->mNpdt.mSkills[i]);
|
||||
|
||||
creatureStats.setAttribute(ESM::Attribute::Strength, player->mNpdt52.mStrength);
|
||||
creatureStats.setAttribute(ESM::Attribute::Intelligence, player->mNpdt52.mIntelligence);
|
||||
creatureStats.setAttribute(ESM::Attribute::Willpower, player->mNpdt52.mWillpower);
|
||||
creatureStats.setAttribute(ESM::Attribute::Agility, player->mNpdt52.mAgility);
|
||||
creatureStats.setAttribute(ESM::Attribute::Speed, player->mNpdt52.mSpeed);
|
||||
creatureStats.setAttribute(ESM::Attribute::Endurance, player->mNpdt52.mEndurance);
|
||||
creatureStats.setAttribute(ESM::Attribute::Personality, player->mNpdt52.mPersonality);
|
||||
creatureStats.setAttribute(ESM::Attribute::Luck, player->mNpdt52.mLuck);
|
||||
creatureStats.setAttribute(ESM::Attribute::Strength, player->mNpdt.mStrength);
|
||||
creatureStats.setAttribute(ESM::Attribute::Intelligence, player->mNpdt.mIntelligence);
|
||||
creatureStats.setAttribute(ESM::Attribute::Willpower, player->mNpdt.mWillpower);
|
||||
creatureStats.setAttribute(ESM::Attribute::Agility, player->mNpdt.mAgility);
|
||||
creatureStats.setAttribute(ESM::Attribute::Speed, player->mNpdt.mSpeed);
|
||||
creatureStats.setAttribute(ESM::Attribute::Endurance, player->mNpdt.mEndurance);
|
||||
creatureStats.setAttribute(ESM::Attribute::Personality, player->mNpdt.mPersonality);
|
||||
creatureStats.setAttribute(ESM::Attribute::Luck, player->mNpdt.mLuck);
|
||||
const MWWorld::ESMStore &esmStore =
|
||||
MWBase::Environment::get().getWorld()->getStore();
|
||||
|
||||
|
|
|
@ -62,12 +62,23 @@ namespace ESM
|
|||
if (esm.getSubSize() == 52)
|
||||
{
|
||||
mNpdtType = NPC_DEFAULT;
|
||||
esm.getExact(&mNpdt52, 52);
|
||||
esm.getExact(&mNpdt, 52);
|
||||
}
|
||||
else if (esm.getSubSize() == 12)
|
||||
{
|
||||
//Reading into temporary NPDTstruct12 object
|
||||
NPDTstruct12 npdt12;
|
||||
mNpdtType = NPC_WITH_AUTOCALCULATED_STATS;
|
||||
esm.getExact(&mNpdt12, 12);
|
||||
esm.getExact(&npdt12, 12);
|
||||
|
||||
//Clearing the mNdpt struct to initialize all values
|
||||
blankNpdt();
|
||||
//Swiching to an internal representation
|
||||
mNpdt.mLevel = npdt12.mLevel;
|
||||
mNpdt.mDisposition = npdt12.mDisposition;
|
||||
mNpdt.mReputation = npdt12.mReputation;
|
||||
mNpdt.mRank = npdt12.mRank;
|
||||
mNpdt.mGold = npdt12.mGold;
|
||||
}
|
||||
else
|
||||
esm.fail("NPC_NPDT must be 12 or 52 bytes long");
|
||||
|
@ -135,9 +146,19 @@ namespace ESM
|
|||
esm.writeHNOCString("SCRI", mScript);
|
||||
|
||||
if (mNpdtType == NPC_DEFAULT)
|
||||
esm.writeHNT("NPDT", mNpdt52, 52);
|
||||
{
|
||||
esm.writeHNT("NPDT", mNpdt, 52);
|
||||
}
|
||||
else if (mNpdtType == NPC_WITH_AUTOCALCULATED_STATS)
|
||||
esm.writeHNT("NPDT", mNpdt12, 12);
|
||||
{
|
||||
NPDTstruct12 npdt12;
|
||||
npdt12.mLevel = mNpdt.mLevel;
|
||||
npdt12.mDisposition = mNpdt.mDisposition;
|
||||
npdt12.mReputation = mNpdt.mReputation;
|
||||
npdt12.mRank = mNpdt.mRank;
|
||||
npdt12.mGold = mNpdt.mGold;
|
||||
esm.writeHNT("NPDT", npdt12, 12);
|
||||
}
|
||||
|
||||
esm.writeHNT("FLAG", mFlags);
|
||||
|
||||
|
@ -171,25 +192,7 @@ namespace ESM
|
|||
void NPC::blank()
|
||||
{
|
||||
mNpdtType = NPC_DEFAULT;
|
||||
mNpdt52.mLevel = 0;
|
||||
mNpdt52.mStrength = mNpdt52.mIntelligence = mNpdt52.mWillpower = mNpdt52.mAgility =
|
||||
mNpdt52.mSpeed = mNpdt52.mEndurance = mNpdt52.mPersonality = mNpdt52.mLuck = 0;
|
||||
for (int i=0; i< Skill::Length; ++i) mNpdt52.mSkills[i] = 0;
|
||||
mNpdt52.mReputation = 0;
|
||||
mNpdt52.mHealth = mNpdt52.mMana = mNpdt52.mFatigue = 0;
|
||||
mNpdt52.mDisposition = 0;
|
||||
mNpdt52.mFactionID = 0;
|
||||
mNpdt52.mRank = 0;
|
||||
mNpdt52.mUnknown = 0;
|
||||
mNpdt52.mGold = 0;
|
||||
mNpdt12.mLevel = 0;
|
||||
mNpdt12.mDisposition = 0;
|
||||
mNpdt12.mReputation = 0;
|
||||
mNpdt12.mRank = 0;
|
||||
mNpdt12.mUnknown1 = 0;
|
||||
mNpdt12.mUnknown2 = 0;
|
||||
mNpdt12.mUnknown3 = 0;
|
||||
mNpdt12.mGold = 0;
|
||||
blankNpdt();
|
||||
mFlags = 0;
|
||||
mInventory.mList.clear();
|
||||
mSpells.mList.clear();
|
||||
|
@ -207,14 +210,27 @@ namespace ESM
|
|||
mHead.clear();
|
||||
}
|
||||
|
||||
void NPC::blankNpdt()
|
||||
{
|
||||
mNpdt.mLevel = 0;
|
||||
mNpdt.mStrength = mNpdt.mIntelligence = mNpdt.mWillpower = mNpdt.mAgility =
|
||||
mNpdt.mSpeed = mNpdt.mEndurance = mNpdt.mPersonality = mNpdt.mLuck = 0;
|
||||
for (int i=0; i< Skill::Length; ++i) mNpdt.mSkills[i] = 0;
|
||||
mNpdt.mReputation = 0;
|
||||
mNpdt.mHealth = mNpdt.mMana = mNpdt.mFatigue = 0;
|
||||
mNpdt.mDisposition = 0;
|
||||
mNpdt.mFactionID = 0;
|
||||
mNpdt.mRank = 0;
|
||||
mNpdt.mUnknown = 0;
|
||||
mNpdt.mGold = 0;
|
||||
}
|
||||
|
||||
int NPC::getFactionRank() const
|
||||
{
|
||||
if (mFaction.empty())
|
||||
return -1;
|
||||
else if (mNpdtType == ESM::NPC::NPC_WITH_AUTOCALCULATED_STATS)
|
||||
return mNpdt12.mRank;
|
||||
else // NPC_DEFAULT
|
||||
return mNpdt52.mRank;
|
||||
else
|
||||
return mNpdt.mRank;
|
||||
}
|
||||
|
||||
const std::vector<Transport::Dest>& NPC::getTransport() const
|
||||
|
|
|
@ -95,6 +95,8 @@ struct NPC
|
|||
int mGold;
|
||||
}; // 52 bytes
|
||||
|
||||
//Structure for autocalculated characters.
|
||||
// This is only used for load and save operations.
|
||||
struct NPDTstruct12
|
||||
{
|
||||
short mLevel;
|
||||
|
@ -106,8 +108,9 @@ struct NPC
|
|||
#pragma pack(pop)
|
||||
|
||||
unsigned char mNpdtType;
|
||||
NPDTstruct52 mNpdt52;
|
||||
NPDTstruct12 mNpdt12; //for autocalculated characters
|
||||
//Worth noting when saving the struct:
|
||||
// Although we might read a NPDTstruct12 in, we use NPDTstruct52 internally
|
||||
NPDTstruct52 mNpdt;
|
||||
|
||||
int getFactionRank() const; /// wrapper for mNpdt*, -1 = no rank
|
||||
|
||||
|
@ -141,6 +144,9 @@ struct NPC
|
|||
|
||||
void blank();
|
||||
///< Set record to default state (does not touch the ID).
|
||||
|
||||
/// Resets the mNpdt object
|
||||
void blankNpdt();
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue