diff --git a/apps/openmw/mwworld/esmstore.cpp b/apps/openmw/mwworld/esmstore.cpp index 7262805f81..1f41ff3d2c 100644 --- a/apps/openmw/mwworld/esmstore.cpp +++ b/apps/openmw/mwworld/esmstore.cpp @@ -738,9 +738,9 @@ namespace MWWorld case ESM::REC_LEVI: case ESM::REC_LEVC: case ESM::REC_LIGH: + case ESM::REC_NPC_: mStoreImp->mRecNameToStore[type]->read(reader); return true; - case ESM::REC_NPC_: case ESM::REC_CREA: case ESM::REC_CONT: mStoreImp->mRecNameToStore[type]->read(reader, true); diff --git a/apps/openmw/mwworld/store.cpp b/apps/openmw/mwworld/store.cpp index c088a4ef1f..80bcdb056a 100644 --- a/apps/openmw/mwworld/store.cpp +++ b/apps/openmw/mwworld/store.cpp @@ -269,13 +269,15 @@ namespace MWWorld list.push_back((*it)->mId); } } - template - T* TypedDynamicStore::insert(const T& item, bool /*overrideOnly*/) + template + T* TypedDynamicStore::insert(const T& item, bool overrideOnly) { - // Check if the ID already exists in static or dynamic stores - auto itStatic = mStatic.find(item.mId); - auto itDynamic = mDynamic.find(item.mId); - + if (overrideOnly) + { + auto it = mStatic.find(item.mId); + if (it == mStatic.end()) + return nullptr; + } std::pair result = mDynamic.insert_or_assign(item.mId, item); T* ptr = &result.first->second; if (result.second)