1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-21 19:09:41 +00:00

handle IDs that don't exist anymore after loading

This commit is contained in:
Marc Zinnschlag 2014-02-16 16:22:09 +01:00
parent 9788bbcab9
commit c18c3e51ee

View file

@ -467,18 +467,21 @@ void MWMechanics::NpcStats::writeState (ESM::NpcStats& state) const
void MWMechanics::NpcStats::readState (const ESM::NpcStats& state) void MWMechanics::NpcStats::readState (const ESM::NpcStats& state)
{ {
const MWWorld::ESMStore& store = MWBase::Environment::get().getWorld()->getStore();
for (std::map<std::string, ESM::NpcStats::Faction>::const_iterator iter (state.mFactions.begin()); for (std::map<std::string, ESM::NpcStats::Faction>::const_iterator iter (state.mFactions.begin());
iter!=state.mFactions.end(); ++iter) iter!=state.mFactions.end(); ++iter)
{ if (store.get<ESM::Faction>().search (iter->first))
if (iter->second.mExpelled) {
mExpelled.insert (iter->first); if (iter->second.mExpelled)
mExpelled.insert (iter->first);
if (iter->second.mRank) if (iter->second.mRank)
mFactionRank.insert (std::make_pair (iter->first, iter->second.mRank)); mFactionRank.insert (std::make_pair (iter->first, iter->second.mRank));
if (iter->second.mReputation) if (iter->second.mReputation)
mFactionReputation.insert (std::make_pair (iter->first, iter->second.mReputation)); mFactionReputation.insert (std::make_pair (iter->first, iter->second.mReputation));
} }
mDisposition = state.mDisposition; mDisposition = state.mDisposition;
@ -498,7 +501,10 @@ void MWMechanics::NpcStats::readState (const ESM::NpcStats& state)
for (int i=0; i<8; ++i) for (int i=0; i<8; ++i)
mSkillIncreases[i] = state.mSkillIncrease[i]; mSkillIncreases[i] = state.mSkillIncrease[i];
std::copy (state.mUsedIds.begin(), state.mUsedIds.end(), std::inserter (mUsedIds, mUsedIds.begin())); for (std::vector<std::string>::const_iterator iter (state.mUsedIds.begin());
iter!=state.mUsedIds.end(); ++iter)
if (store.find (*iter))
mUsedIds.insert (*iter);
mTimeToStartDrowning = state.mTimeToStartDrowning; mTimeToStartDrowning = state.mTimeToStartDrowning;
mLastDrowningHit = state.mLastDrowningHit; mLastDrowningHit = state.mLastDrowningHit;