From 01775dd6f05ddb81290d5d609d1aef7f2e348bee Mon Sep 17 00:00:00 2001 From: elsid Date: Sun, 4 Jun 2023 22:27:33 +0200 Subject: [PATCH] Try create CellStore for interior cell when not found --- apps/openmw/mwworld/worldmodel.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwworld/worldmodel.cpp b/apps/openmw/mwworld/worldmodel.cpp index 22860a175c..6e478b800f 100644 --- a/apps/openmw/mwworld/worldmodel.cpp +++ b/apps/openmw/mwworld/worldmodel.cpp @@ -175,12 +175,27 @@ namespace MWWorld CellStore* WorldModel::findInterior(std::string_view name, bool forceLoad) const { const auto it = mInteriors.find(name); + CellStore* cellStore = nullptr; + if (it == mInteriors.end()) - return nullptr; - assert(it->second != nullptr); - if (forceLoad && it->second->getState() != CellStore::State_Loaded) - it->second->load(); - return it->second; + { + if (const ESM::Cell* cell = mStore.get().search(name)) + cellStore = &emplaceCellStore(cell->mId, *cell, mStore, mReaders, mCells); + else if (const ESM4::Cell* cell4 = mStore.get().searchCellName(name)) + cellStore = &emplaceCellStore(cell4->mId, *cell4, mStore, mReaders, mCells); + else + return nullptr; + } + else + { + assert(it->second != nullptr); + cellStore = it->second; + } + + if (forceLoad && cellStore->getState() != CellStore::State_Loaded) + cellStore->load(); + + return cellStore; } CellStore& WorldModel::getInterior(std::string_view name, bool forceLoad) const