From c18c3e51ee81e50247fdfa5e8a945a3b0660dc90 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 16 Feb 2014 16:22:09 +0100 Subject: [PATCH] handle IDs that don't exist anymore after loading --- apps/openmw/mwmechanics/npcstats.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/apps/openmw/mwmechanics/npcstats.cpp b/apps/openmw/mwmechanics/npcstats.cpp index eee27272a..8918bfbe7 100644 --- a/apps/openmw/mwmechanics/npcstats.cpp +++ b/apps/openmw/mwmechanics/npcstats.cpp @@ -467,18 +467,21 @@ void MWMechanics::NpcStats::writeState (ESM::NpcStats& state) const void MWMechanics::NpcStats::readState (const ESM::NpcStats& state) { + const MWWorld::ESMStore& store = MWBase::Environment::get().getWorld()->getStore(); + for (std::map::const_iterator iter (state.mFactions.begin()); iter!=state.mFactions.end(); ++iter) - { - if (iter->second.mExpelled) - mExpelled.insert (iter->first); + if (store.get().search (iter->first)) + { + if (iter->second.mExpelled) + mExpelled.insert (iter->first); - if (iter->second.mRank) - mFactionRank.insert (std::make_pair (iter->first, iter->second.mRank)); + if (iter->second.mRank) + mFactionRank.insert (std::make_pair (iter->first, iter->second.mRank)); - if (iter->second.mReputation) - mFactionReputation.insert (std::make_pair (iter->first, iter->second.mReputation)); - } + if (iter->second.mReputation) + mFactionReputation.insert (std::make_pair (iter->first, iter->second.mReputation)); + } mDisposition = state.mDisposition; @@ -498,7 +501,10 @@ void MWMechanics::NpcStats::readState (const ESM::NpcStats& state) for (int i=0; i<8; ++i) mSkillIncreases[i] = state.mSkillIncrease[i]; - std::copy (state.mUsedIds.begin(), state.mUsedIds.end(), std::inserter (mUsedIds, mUsedIds.begin())); + for (std::vector::const_iterator iter (state.mUsedIds.begin()); + iter!=state.mUsedIds.end(); ++iter) + if (store.find (*iter)) + mUsedIds.insert (*iter); mTimeToStartDrowning = state.mTimeToStartDrowning; mLastDrowningHit = state.mLastDrowningHit;