Fix some uninitialized data written to savegames

deque
scrawl 11 years ago
parent e274314548
commit 8a8ecce1e5

@ -201,6 +201,13 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot
writer.addMaster (*iter, 0); // not using the size information anyway -> use value of 0
writer.setFormat (ESM::Header::CurrentFormat);
// all unused
writer.setVersion(0);
writer.setType(0);
writer.setAuthor("");
writer.setDescription("");
int recordCount = 1 // saved game header
+MWBase::Environment::get().getJournal()->countSavedGameRecords()
+MWBase::Environment::get().getWorld()->countSavedGameRecords()

@ -108,13 +108,13 @@ void ESM::CellRef::save (ESMWriter &esm, bool wideRefNum, bool inInventory) cons
esm.writeHNT("NAM9", mGoldValue);
}
if (mTeleport && !inInventory)
if (!inInventory && mTeleport)
{
esm.writeHNT("DODT", mDoorDest);
esm.writeHNOCString("DNAM", mDestCell);
}
if (mLockLevel != 0 && !inInventory) {
if (!inInventory && mLockLevel != 0) {
esm.writeHNT("FLTV", mLockLevel);
}
@ -127,13 +127,13 @@ void ESM::CellRef::save (ESMWriter &esm, bool wideRefNum, bool inInventory) cons
if (mReferenceBlocked != -1)
esm.writeHNT("UNAM", mReferenceBlocked);
if (mFltv != 0 && !inInventory)
if (!inInventory && mFltv != 0)
esm.writeHNT("FLTV", mFltv);
if (!inInventory)
esm.writeHNT("DATA", mPos, 24);
if (mNam0 != 0 && !inInventory)
if (!inInventory && mNam0 != 0)
esm.writeHNT("NAM0", mNam0);
}
@ -158,6 +158,7 @@ void ESM::CellRef::blank()
mReferenceBlocked = 0;
mFltv = 0;
mNam0 = 0;
mTeleport = false;
for (int i=0; i<3; ++i)
{

@ -18,6 +18,11 @@ namespace ESM
mHeader.mData.version = ver;
}
void ESMWriter::setType(int type)
{
mHeader.mData.type = type;
}
void ESMWriter::setAuthor(const std::string& auth)
{
mHeader.mData.author.assign (auth);

@ -25,10 +25,15 @@ class ESMWriter
ESMWriter();
unsigned int getVersion() const;
// Set various header data (ESM::Header::Data). All of the below functions must be called before writing,
// otherwise this data will be left uninitialized.
void setVersion(unsigned int ver = 0x3fa66666);
void setType(int type);
void setEncoder(ToUTF8::Utf8Encoder *encoding);
void setAuthor(const std::string& author);
void setDescription(const std::string& desc);
// Set the record count for writing it in the file header
void setRecordCount (int count);
// Counts how many records we have actually written.

Loading…
Cancel
Save