mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-21 07:39:40 +00:00
Savegame: Don't fill CustomData from ESM records if the savegame overwrites it anyway
This gets rid of some junk in ContainerStores (since clear() only sets count to 0 and doesn't really delete references), and significantly speeds up loading savegames (by about 80% in my test)
This commit is contained in:
parent
4e71db7081
commit
2193977eec
3 changed files with 26 additions and 3 deletions
|
@ -286,7 +286,12 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
const ESM::ContainerState& state2 = dynamic_cast<const ESM::ContainerState&> (state);
|
const ESM::ContainerState& state2 = dynamic_cast<const ESM::ContainerState&> (state);
|
||||||
|
|
||||||
ensureCustomData (ptr);
|
if (!ptr.getRefData().getCustomData())
|
||||||
|
{
|
||||||
|
// Create a CustomData, but don't fill it from ESM records (not needed)
|
||||||
|
std::auto_ptr<ContainerCustomData> data (new ContainerCustomData);
|
||||||
|
ptr.getRefData().setCustomData (data.release());
|
||||||
|
}
|
||||||
|
|
||||||
dynamic_cast<ContainerCustomData&> (*ptr.getRefData().getCustomData()).mContainerStore.
|
dynamic_cast<ContainerCustomData&> (*ptr.getRefData().getCustomData()).mContainerStore.
|
||||||
readState (state2.mInventory);
|
readState (state2.mInventory);
|
||||||
|
|
|
@ -798,7 +798,20 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
const ESM::CreatureState& state2 = dynamic_cast<const ESM::CreatureState&> (state);
|
const ESM::CreatureState& state2 = dynamic_cast<const ESM::CreatureState&> (state);
|
||||||
|
|
||||||
ensureCustomData (ptr);
|
if (!ptr.getRefData().getCustomData())
|
||||||
|
{
|
||||||
|
// Create a CustomData, but don't fill it from ESM records (not needed)
|
||||||
|
std::auto_ptr<CreatureCustomData> data (new CreatureCustomData);
|
||||||
|
|
||||||
|
MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
|
||||||
|
|
||||||
|
if (ref->mBase->mFlags & ESM::Creature::Weapon)
|
||||||
|
data->mContainerStore = new MWWorld::InventoryStore();
|
||||||
|
else
|
||||||
|
data->mContainerStore = new MWWorld::ContainerStore();
|
||||||
|
|
||||||
|
ptr.getRefData().setCustomData (data.release());
|
||||||
|
}
|
||||||
|
|
||||||
CreatureCustomData& customData = dynamic_cast<CreatureCustomData&> (*ptr.getRefData().getCustomData());
|
CreatureCustomData& customData = dynamic_cast<CreatureCustomData&> (*ptr.getRefData().getCustomData());
|
||||||
|
|
||||||
|
|
|
@ -1293,7 +1293,12 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
const ESM::NpcState& state2 = dynamic_cast<const ESM::NpcState&> (state);
|
const ESM::NpcState& state2 = dynamic_cast<const ESM::NpcState&> (state);
|
||||||
|
|
||||||
ensureCustomData (ptr);
|
if (!ptr.getRefData().getCustomData())
|
||||||
|
{
|
||||||
|
// Create a CustomData, but don't fill it from ESM records (not needed)
|
||||||
|
std::auto_ptr<NpcCustomData> data (new NpcCustomData);
|
||||||
|
ptr.getRefData().setCustomData (data.release());
|
||||||
|
}
|
||||||
|
|
||||||
NpcCustomData& customData = dynamic_cast<NpcCustomData&> (*ptr.getRefData().getCustomData());
|
NpcCustomData& customData = dynamic_cast<NpcCustomData&> (*ptr.getRefData().getCustomData());
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue