mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-30 19:45:40 +00:00
Fix #7491
This commit is contained in:
parent
d93e055bb1
commit
59d17d3eb6
2 changed files with 24 additions and 3 deletions
|
@ -277,9 +277,17 @@ namespace
|
|||
return;
|
||||
}
|
||||
|
||||
Log(Debug::Warning) << "Warning: Dropping reference to " << state.mRef.mRefID
|
||||
<< " (invalid content file link)";
|
||||
return;
|
||||
// Note: we preserve RefNum when picking up or dropping an item. So if this RefNum is not found
|
||||
// in this cell in content files, it doesn't mean that the instance is invalid.
|
||||
// But non-storable item are always stored in saves together with their original cell.
|
||||
// If a non-storable item references a content file, but is not found in this content file,
|
||||
// we should drop it.
|
||||
if (!MWWorld::ContainerStore::isStorableType<T>())
|
||||
{
|
||||
Log(Debug::Warning) << "Warning: Dropping reference to " << state.mRef.mRefID
|
||||
<< " (invalid content file link)";
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// new reference
|
||||
|
|
|
@ -99,6 +99,19 @@ namespace MWWorld
|
|||
|
||||
static const ESM::RefId sGoldId;
|
||||
|
||||
static constexpr bool isStorableType(unsigned int t)
|
||||
{
|
||||
return t == ESM::Potion::sRecordId || t == ESM::Apparatus::sRecordId || t == ESM::Armor::sRecordId
|
||||
|| t == ESM::Book::sRecordId || t == ESM::Clothing::sRecordId || t == ESM::Ingredient::sRecordId
|
||||
|| t == ESM::Light::sRecordId || t == ESM::Lockpick::sRecordId || t == ESM::Miscellaneous::sRecordId
|
||||
|| t == ESM::Probe::sRecordId || t == ESM::Repair::sRecordId || t == ESM::Weapon::sRecordId;
|
||||
}
|
||||
template <typename T>
|
||||
static constexpr bool isStorableType()
|
||||
{
|
||||
return isStorableType(T::sRecordId);
|
||||
}
|
||||
|
||||
protected:
|
||||
ContainerStoreListener* mListener;
|
||||
|
||||
|
|
Loading…
Reference in a new issue