forked from teamnwah/openmw-tes3coop
write references in cells to saved game file
This commit is contained in:
parent
dd7d80ffbc
commit
419e3a7d30
4 changed files with 54 additions and 1 deletions
|
@ -73,7 +73,7 @@ void MWWorld::Cells::writeCell (ESM::ESMWriter& writer, const CellStore& cell) c
|
||||||
writer.startRecord (ESM::REC_CSTA);
|
writer.startRecord (ESM::REC_CSTA);
|
||||||
cellState.mId.save (writer);
|
cellState.mId.save (writer);
|
||||||
cellState.save (writer);
|
cellState.save (writer);
|
||||||
/// \todo write references
|
cell.writeReferences (writer);
|
||||||
writer.endRecord (ESM::REC_CSTA);
|
writer.endRecord (ESM::REC_CSTA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
#include <components/esm/cellstate.hpp>
|
#include <components/esm/cellstate.hpp>
|
||||||
#include <components/esm/cellid.hpp>
|
#include <components/esm/cellid.hpp>
|
||||||
|
#include <components/esm/esmwriter.hpp>
|
||||||
|
#include <components/esm/objectstate.hpp>
|
||||||
|
|
||||||
#include "../mwbase/environment.hpp"
|
#include "../mwbase/environment.hpp"
|
||||||
#include "../mwbase/world.hpp"
|
#include "../mwbase/world.hpp"
|
||||||
|
@ -32,6 +34,30 @@ namespace
|
||||||
|
|
||||||
return MWWorld::Ptr();
|
return MWWorld::Ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename RecordType, typename T>
|
||||||
|
void writeReferenceCollection (ESM::ESMWriter& writer,
|
||||||
|
const MWWorld::CellRefList<T>& collection)
|
||||||
|
{
|
||||||
|
if (!collection.mList.empty())
|
||||||
|
{
|
||||||
|
// section header
|
||||||
|
writer.writeHNT ("CSEC", collection.mList.front().mBase->sRecordId);
|
||||||
|
|
||||||
|
// references
|
||||||
|
for (typename MWWorld::CellRefList<T>::List::const_iterator
|
||||||
|
iter (collection.mList.begin());
|
||||||
|
iter!=collection.mList.end(); ++iter)
|
||||||
|
{
|
||||||
|
RecordType state;
|
||||||
|
iter->save (state);
|
||||||
|
|
||||||
|
writer.startRecord (ESM::REC_OBJE);
|
||||||
|
state.save (writer);
|
||||||
|
writer.endRecord (ESM::REC_OBJE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWWorld
|
namespace MWWorld
|
||||||
|
@ -251,4 +277,28 @@ namespace MWWorld
|
||||||
|
|
||||||
state.mWaterLevel = mWaterLevel;
|
state.mWaterLevel = mWaterLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CellStore::writeReferences (ESM::ESMWriter& writer) const
|
||||||
|
{
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mActivators);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mPotions);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mAppas);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mArmors);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mBooks);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mClothes);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mContainers);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mCreatures);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mDoors);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mIngreds);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mCreatureLists);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mItemLists);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mLights);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mLockpicks);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mMiscItems);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mNpcs);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mProbes);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mRepairs);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mStatics);
|
||||||
|
writeReferenceCollection<ESM::ObjectState> (writer, mWeapons);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,6 +142,8 @@ namespace MWWorld
|
||||||
|
|
||||||
void saveState (ESM::CellState& state) const;
|
void saveState (ESM::CellState& state) const;
|
||||||
|
|
||||||
|
void writeReferences (ESM::ESMWriter& writer) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
template<class Functor, class List>
|
template<class Functor, class List>
|
||||||
|
|
|
@ -90,6 +90,7 @@ enum RecNameInts
|
||||||
REC_GSCR = 0x52435347,
|
REC_GSCR = 0x52435347,
|
||||||
REC_PLAY = 0x59414c50,
|
REC_PLAY = 0x59414c50,
|
||||||
REC_CSTA = 0x41545343,
|
REC_CSTA = 0x41545343,
|
||||||
|
REC_OBJE = 0x454a424f,
|
||||||
|
|
||||||
// format 1
|
// format 1
|
||||||
REC_FILT = 0x544C4946
|
REC_FILT = 0x544C4946
|
||||||
|
|
Loading…
Reference in a new issue