diff --git a/apps/openmw/mwrender/objectpaging.cpp b/apps/openmw/mwrender/objectpaging.cpp index 8e29f0af4f..a5792d56b9 100644 --- a/apps/openmw/mwrender/objectpaging.cpp +++ b/apps/openmw/mwrender/objectpaging.cpp @@ -423,9 +423,17 @@ namespace MWRender cell->restore(esm[index], i); ESM::CellRef ref; ref.mRefNum.mContentFile = ESM::RefNum::RefNum_NoContentFile; + ESM::MovedCellRef cMRef; + cMRef.mRefNum.mIndex = 0; bool deleted = false; - while(cell->getNextRef(esm[index], ref, deleted)) + while(cell->getNextRef(esm[index], ref, deleted, /*ignoreMoves*/true, &cMRef)) { + if (cMRef.mRefNum.mIndex) + { + cMRef.mRefNum.mIndex = 0; + continue; // ignore refs that are moved + } + if (std::find(cell->mMovedRefs.begin(), cell->mMovedRefs.end(), ref.mRefNum) != cell->mMovedRefs.end()) continue; Misc::StringUtils::lowerCaseInPlace(ref.mRefID); int type = store.findStatic(ref.mRefID); diff --git a/apps/openmw/mwworld/cellstore.cpp b/apps/openmw/mwworld/cellstore.cpp index e8d46b1574..3aaf6061e3 100644 --- a/apps/openmw/mwworld/cellstore.cpp +++ b/apps/openmw/mwworld/cellstore.cpp @@ -553,12 +553,20 @@ namespace MWWorld ESM::CellRef ref; // Get each reference in turn + ESM::MovedCellRef cMRef; + cMRef.mRefNum.mIndex = 0; bool deleted = false; - while (mCell->getNextRef (esm[index], ref, deleted)) + while(mCell->getNextRef(esm[index], ref, deleted, /*ignoreMoves*/true, &cMRef)) { if (deleted) continue; + if (cMRef.mRefNum.mIndex) + { + cMRef.mRefNum.mIndex = 0; + continue; // ignore refs that are moved + } + // Don't list reference if it was moved to a different cell. ESM::MovedCellRefTracker::const_iterator iter = std::find(mCell->mMovedRefs.begin(), mCell->mMovedRefs.end(), ref.mRefNum);