You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/components/esm/player.cpp

87 lines
2.1 KiB
C++

#include "player.hpp"
#include "esmreader.hpp"
#include "esmwriter.hpp"
void ESM::Player::load (ESMReader &esm)
{
mObject.mRef.loadId(esm, true);
mObject.load (esm);
mCellId.load (esm);
esm.getHNT (mLastKnownExteriorPosition, "LKEP", 12);
if (esm.isNextSub ("MARK"))
{
mHasMark = true;
esm.getHT (mMarkedPosition, 24);
mMarkedCell.load (esm);
}
else
mHasMark = false;
// Automove, no longer used.
if (esm.isNextSub("AMOV"))
esm.skipHSub();
mBirthsign = esm.getHNString ("SIGN");
mCurrentCrimeId = -1;
esm.getHNOT (mCurrentCrimeId, "CURD");
mPaidCrimeId = -1;
esm.getHNOT (mPaidCrimeId, "PAYD");
bool checkPrevItems = true;
while (checkPrevItems)
{
std::string boundItemId = esm.getHNOString("BOUN");
std::string prevItemId = esm.getHNOString("PREV");
if (!boundItemId.empty())
mPreviousItems[boundItemId] = prevItemId;
else
checkPrevItems = false;
}
bool intFallback = esm.getFormat() < 11;
if (esm.hasMoreSubs())
{
for (int i=0; i<ESM::Attribute::Length; ++i)
mSaveAttributes[i].load(esm, intFallback);
for (int i=0; i<ESM::Skill::Length; ++i)
mSaveSkills[i].load(esm, intFallback);
}
}
void ESM::Player::save (ESMWriter &esm) const
{
mObject.save (esm);
mCellId.save (esm);
esm.writeHNT ("LKEP", mLastKnownExteriorPosition);
if (mHasMark)
{
esm.writeHNT ("MARK", mMarkedPosition, 24);
mMarkedCell.save (esm);
}
esm.writeHNString ("SIGN", mBirthsign);
esm.writeHNT ("CURD", mCurrentCrimeId);
esm.writeHNT ("PAYD", mPaidCrimeId);
for (PreviousItems::const_iterator it=mPreviousItems.begin(); it != mPreviousItems.end(); ++it)
{
esm.writeHNString ("BOUN", it->first);
esm.writeHNString ("PREV", it->second);
}
for (int i=0; i<ESM::Attribute::Length; ++i)
mSaveAttributes[i].save(esm);
for (int i=0; i<ESM::Skill::Length; ++i)
mSaveSkills[i].save(esm);
}