mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-28 20:06:41 +00:00
Merge remote-tracking branch 'zini/master' into nifogre
This commit is contained in:
commit
cac793758b
32 changed files with 214 additions and 68 deletions
|
@ -22,7 +22,7 @@ opencs_units (model/world
|
||||||
|
|
||||||
|
|
||||||
opencs_units_noqt (model/world
|
opencs_units_noqt (model/world
|
||||||
universalid data record idcollection commands columnbase scriptcontext
|
universalid data record idcollection commands columnbase scriptcontext cell
|
||||||
)
|
)
|
||||||
|
|
||||||
opencs_hdrs_noqt (model/world
|
opencs_hdrs_noqt (model/world
|
||||||
|
|
20
apps/opencs/model/world/cell.cpp
Normal file
20
apps/opencs/model/world/cell.cpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
#include "cell.hpp"
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
void CSMWorld::Cell::load (ESM::ESMReader &esm)
|
||||||
|
{
|
||||||
|
mName = mId;
|
||||||
|
|
||||||
|
ESM::Cell::load (esm, true); /// \todo set this to false, once the bug in ESM::Cell::load is fixed
|
||||||
|
|
||||||
|
if (!(mData.mFlags & Interior))
|
||||||
|
{
|
||||||
|
std::ostringstream stream;
|
||||||
|
|
||||||
|
stream << "#" << mData.mX << " " << mData.mY;
|
||||||
|
|
||||||
|
mId = stream.str();
|
||||||
|
}
|
||||||
|
}
|
17
apps/opencs/model/world/cell.hpp
Normal file
17
apps/opencs/model/world/cell.hpp
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#ifndef CSM_WOLRD_CELL_H
|
||||||
|
#define CSM_WOLRD_CELL_H
|
||||||
|
|
||||||
|
#include <components/esm/loadcell.hpp>
|
||||||
|
|
||||||
|
namespace CSMWorld
|
||||||
|
{
|
||||||
|
/// \brief Wrapper for Cell record
|
||||||
|
struct Cell : public ESM::Cell
|
||||||
|
{
|
||||||
|
std::string mId;
|
||||||
|
|
||||||
|
void load (ESM::ESMReader &esm);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -748,6 +748,31 @@ namespace CSMWorld
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename ESXRecordT>
|
||||||
|
struct RegionColumn : public Column<ESXRecordT>
|
||||||
|
{
|
||||||
|
RegionColumn() : Column<ESXRecordT> ("Region", ColumnBase::Display_String) {}
|
||||||
|
|
||||||
|
virtual QVariant get (const Record<ESXRecordT>& record) const
|
||||||
|
{
|
||||||
|
return QString::fromUtf8 (record.get().mRegion.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void set (Record<ESXRecordT>& record, const QVariant& data)
|
||||||
|
{
|
||||||
|
ESXRecordT record2 = record.get();
|
||||||
|
|
||||||
|
record2.mRegion = data.toString().toUtf8().constData();
|
||||||
|
|
||||||
|
record.setModified (record2);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool isEditable() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -119,6 +119,15 @@ CSMWorld::Data::Data()
|
||||||
mSpells.addColumn (new FlagColumn<ESM::Spell> ("Starter Spell", 0x2));
|
mSpells.addColumn (new FlagColumn<ESM::Spell> ("Starter Spell", 0x2));
|
||||||
mSpells.addColumn (new FlagColumn<ESM::Spell> ("Always Succeeds", 0x4));
|
mSpells.addColumn (new FlagColumn<ESM::Spell> ("Always Succeeds", 0x4));
|
||||||
|
|
||||||
|
mCells.addColumn (new StringIdColumn<Cell>);
|
||||||
|
mCells.addColumn (new RecordStateColumn<Cell>);
|
||||||
|
mCells.addColumn (new FixedRecordTypeColumn<Cell> (UniversalId::Type_Cell));
|
||||||
|
mCells.addColumn (new NameColumn<Cell>);
|
||||||
|
mCells.addColumn (new FlagColumn<Cell> ("Sleep forbidden", ESM::Cell::NoSleep));
|
||||||
|
mCells.addColumn (new FlagColumn<Cell> ("Interior Water", ESM::Cell::HasWater));
|
||||||
|
mCells.addColumn (new FlagColumn<Cell> ("Interior Sky", ESM::Cell::QuasiEx));
|
||||||
|
mCells.addColumn (new RegionColumn<Cell>);
|
||||||
|
|
||||||
addModel (new IdTable (&mGlobals), UniversalId::Type_Globals, UniversalId::Type_Global);
|
addModel (new IdTable (&mGlobals), UniversalId::Type_Globals, UniversalId::Type_Global);
|
||||||
addModel (new IdTable (&mGmsts), UniversalId::Type_Gmsts, UniversalId::Type_Gmst);
|
addModel (new IdTable (&mGmsts), UniversalId::Type_Gmsts, UniversalId::Type_Gmst);
|
||||||
addModel (new IdTable (&mSkills), UniversalId::Type_Skills, UniversalId::Type_Skill);
|
addModel (new IdTable (&mSkills), UniversalId::Type_Skills, UniversalId::Type_Skill);
|
||||||
|
@ -130,6 +139,7 @@ CSMWorld::Data::Data()
|
||||||
addModel (new IdTable (&mRegions), UniversalId::Type_Regions, UniversalId::Type_Region);
|
addModel (new IdTable (&mRegions), UniversalId::Type_Regions, UniversalId::Type_Region);
|
||||||
addModel (new IdTable (&mBirthsigns), UniversalId::Type_Birthsigns, UniversalId::Type_Birthsign);
|
addModel (new IdTable (&mBirthsigns), UniversalId::Type_Birthsigns, UniversalId::Type_Birthsign);
|
||||||
addModel (new IdTable (&mSpells), UniversalId::Type_Spells, UniversalId::Type_Spell);
|
addModel (new IdTable (&mSpells), UniversalId::Type_Spells, UniversalId::Type_Spell);
|
||||||
|
addModel (new IdTable (&mCells), UniversalId::Type_Cells, UniversalId::Type_Cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSMWorld::Data::~Data()
|
CSMWorld::Data::~Data()
|
||||||
|
@ -248,6 +258,16 @@ CSMWorld::IdCollection<ESM::Spell>& CSMWorld::Data::getSpells()
|
||||||
return mSpells;
|
return mSpells;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CSMWorld::IdCollection<CSMWorld::Cell>& CSMWorld::Data::getCells() const
|
||||||
|
{
|
||||||
|
return mCells;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSMWorld::IdCollection<CSMWorld::Cell>& CSMWorld::Data::getCells()
|
||||||
|
{
|
||||||
|
return mCells;
|
||||||
|
}
|
||||||
|
|
||||||
QAbstractItemModel *CSMWorld::Data::getTableModel (const UniversalId& id)
|
QAbstractItemModel *CSMWorld::Data::getTableModel (const UniversalId& id)
|
||||||
{
|
{
|
||||||
std::map<UniversalId::Type, QAbstractItemModel *>::iterator iter = mModelIndex.find (id.getType());
|
std::map<UniversalId::Type, QAbstractItemModel *>::iterator iter = mModelIndex.find (id.getType());
|
||||||
|
@ -293,6 +313,7 @@ void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
||||||
case ESM::REC_REGN: mRegions.load (reader, base); break;
|
case ESM::REC_REGN: mRegions.load (reader, base); break;
|
||||||
case ESM::REC_BSGN: mBirthsigns.load (reader, base); break;
|
case ESM::REC_BSGN: mBirthsigns.load (reader, base); break;
|
||||||
case ESM::REC_SPEL: mSpells.load (reader, base); break;
|
case ESM::REC_SPEL: mSpells.load (reader, base); break;
|
||||||
|
case ESM::REC_CELL: mCells.load (reader, base); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "idcollection.hpp"
|
#include "idcollection.hpp"
|
||||||
#include "universalid.hpp"
|
#include "universalid.hpp"
|
||||||
|
#include "cell.hpp"
|
||||||
|
|
||||||
class QAbstractItemModel;
|
class QAbstractItemModel;
|
||||||
|
|
||||||
|
@ -38,6 +39,7 @@ namespace CSMWorld
|
||||||
IdCollection<ESM::Region> mRegions;
|
IdCollection<ESM::Region> mRegions;
|
||||||
IdCollection<ESM::BirthSign> mBirthsigns;
|
IdCollection<ESM::BirthSign> mBirthsigns;
|
||||||
IdCollection<ESM::Spell> mSpells;
|
IdCollection<ESM::Spell> mSpells;
|
||||||
|
IdCollection<Cell> mCells;
|
||||||
std::vector<QAbstractItemModel *> mModels;
|
std::vector<QAbstractItemModel *> mModels;
|
||||||
std::map<UniversalId::Type, QAbstractItemModel *> mModelIndex;
|
std::map<UniversalId::Type, QAbstractItemModel *> mModelIndex;
|
||||||
|
|
||||||
|
@ -98,6 +100,10 @@ namespace CSMWorld
|
||||||
|
|
||||||
IdCollection<ESM::Spell>& getSpells();
|
IdCollection<ESM::Spell>& getSpells();
|
||||||
|
|
||||||
|
const IdCollection<Cell>& getCells() const;
|
||||||
|
|
||||||
|
IdCollection<Cell>& getCells();
|
||||||
|
|
||||||
QAbstractItemModel *getTableModel (const UniversalId& id);
|
QAbstractItemModel *getTableModel (const UniversalId& id);
|
||||||
///< If no table model is available for \a id, an exception is thrown.
|
///< If no table model is available for \a id, an exception is thrown.
|
||||||
///
|
///
|
||||||
|
|
|
@ -325,10 +325,10 @@ namespace CSMWorld
|
||||||
{
|
{
|
||||||
std::string id = reader.getHNOString ("NAME");
|
std::string id = reader.getHNOString ("NAME");
|
||||||
|
|
||||||
int index = searchId (id);
|
|
||||||
|
|
||||||
if (reader.isNextSub ("DELE"))
|
if (reader.isNextSub ("DELE"))
|
||||||
{
|
{
|
||||||
|
int index = searchId (id);
|
||||||
|
|
||||||
reader.skipRecord();
|
reader.skipRecord();
|
||||||
|
|
||||||
if (index==-1)
|
if (index==-1)
|
||||||
|
@ -354,6 +354,8 @@ namespace CSMWorld
|
||||||
record.mId = id;
|
record.mId = id;
|
||||||
record.load (reader);
|
record.load (reader);
|
||||||
|
|
||||||
|
int index = searchId (record.mId);
|
||||||
|
|
||||||
if (index==-1)
|
if (index==-1)
|
||||||
{
|
{
|
||||||
// new record
|
// new record
|
||||||
|
|
|
@ -28,6 +28,7 @@ namespace
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Regions, "Regions" },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Regions, "Regions" },
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Birthsigns, "Birthsigns" },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Birthsigns, "Birthsigns" },
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Spells, "Spells" },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Spells, "Spells" },
|
||||||
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Cells, "Cells" },
|
||||||
|
|
||||||
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker
|
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker
|
||||||
};
|
};
|
||||||
|
@ -45,6 +46,7 @@ namespace
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Region, "Region" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Region, "Region" },
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Birthsign, "Birthsign" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Birthsign, "Birthsign" },
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Spell, "Spell" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Spell, "Spell" },
|
||||||
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Cell, "Cell" },
|
||||||
|
|
||||||
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker
|
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker
|
||||||
};
|
};
|
||||||
|
|
|
@ -55,7 +55,9 @@ namespace CSMWorld
|
||||||
Type_Birthsigns,
|
Type_Birthsigns,
|
||||||
Type_Birthsign,
|
Type_Birthsign,
|
||||||
Type_Spells,
|
Type_Spells,
|
||||||
Type_Spell
|
Type_Spell,
|
||||||
|
Type_Cells,
|
||||||
|
Type_Cell
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -125,6 +125,10 @@ void CSVDoc::View::setupWorldMenu()
|
||||||
QAction *spells = new QAction (tr ("Spells"), this);
|
QAction *spells = new QAction (tr ("Spells"), this);
|
||||||
connect (spells, SIGNAL (triggered()), this, SLOT (addSpellsSubView()));
|
connect (spells, SIGNAL (triggered()), this, SLOT (addSpellsSubView()));
|
||||||
world->addAction (spells);
|
world->addAction (spells);
|
||||||
|
|
||||||
|
QAction *cells = new QAction (tr ("Cells"), this);
|
||||||
|
connect (cells, SIGNAL (triggered()), this, SLOT (addCellsSubView()));
|
||||||
|
world->addAction (cells);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVDoc::View::setupUi()
|
void CSVDoc::View::setupUi()
|
||||||
|
@ -325,6 +329,11 @@ void CSVDoc::View::addSpellsSubView()
|
||||||
addSubView (CSMWorld::UniversalId::Type_Spells);
|
addSubView (CSMWorld::UniversalId::Type_Spells);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVDoc::View::addCellsSubView()
|
||||||
|
{
|
||||||
|
addSubView (CSMWorld::UniversalId::Type_Cells);
|
||||||
|
}
|
||||||
|
|
||||||
void CSVDoc::View::abortOperation (int type)
|
void CSVDoc::View::abortOperation (int type)
|
||||||
{
|
{
|
||||||
mDocument->abortOperation (type);
|
mDocument->abortOperation (type);
|
||||||
|
|
|
@ -133,6 +133,8 @@ namespace CSVDoc
|
||||||
void addBirthsignsSubView();
|
void addBirthsignsSubView();
|
||||||
|
|
||||||
void addSpellsSubView();
|
void addSpellsSubView();
|
||||||
|
|
||||||
|
void addCellsSubView();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||||
CSMWorld::UniversalId::Type_Regions,
|
CSMWorld::UniversalId::Type_Regions,
|
||||||
CSMWorld::UniversalId::Type_Birthsigns,
|
CSMWorld::UniversalId::Type_Birthsigns,
|
||||||
CSMWorld::UniversalId::Type_Spells,
|
CSMWorld::UniversalId::Type_Spells,
|
||||||
|
CSMWorld::UniversalId::Type_Cells,
|
||||||
|
|
||||||
CSMWorld::UniversalId::Type_None // end marker
|
CSMWorld::UniversalId::Type_None // end marker
|
||||||
};
|
};
|
||||||
|
|
|
@ -368,6 +368,7 @@ void OMW::Engine::prepareEngine (Settings::Manager & settings)
|
||||||
mEnvironment.setWorld( new MWWorld::World (*mOgre, mFileCollections, mMaster, mPlugins,
|
mEnvironment.setWorld( new MWWorld::World (*mOgre, mFileCollections, mMaster, mPlugins,
|
||||||
mResDir, mCfgMgr.getCachePath(), mNewGame, mEncoder, mFallbackMap,
|
mResDir, mCfgMgr.getCachePath(), mNewGame, mEncoder, mFallbackMap,
|
||||||
mActivationDistanceOverride));
|
mActivationDistanceOverride));
|
||||||
|
MWBase::Environment::get().getWorld()->setupPlayer(mNewGame);
|
||||||
|
|
||||||
//Load translation data
|
//Load translation data
|
||||||
mTranslationDataStorage.setEncoder(mEncoder);
|
mTranslationDataStorage.setEncoder(mEncoder);
|
||||||
|
|
|
@ -321,6 +321,7 @@ namespace MWBase
|
||||||
virtual void changeVanityModeScale(float factor) = 0;
|
virtual void changeVanityModeScale(float factor) = 0;
|
||||||
virtual bool vanityRotateCamera(float * rot) = 0;
|
virtual bool vanityRotateCamera(float * rot) = 0;
|
||||||
|
|
||||||
|
virtual void setupPlayer(bool newGame) = 0;
|
||||||
virtual void renderPlayer() = 0;
|
virtual void renderPlayer() = 0;
|
||||||
|
|
||||||
virtual void setupExternalRendering (MWRender::ExternalRendering& rendering) = 0;
|
virtual void setupExternalRendering (MWRender::ExternalRendering& rendering) = 0;
|
||||||
|
|
|
@ -292,7 +292,7 @@ namespace MWClass
|
||||||
ref->mBase = record;
|
ref->mBase = record;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Armor::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
std::pair<int, std::string> Armor::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
||||||
{
|
{
|
||||||
MWWorld::InventoryStore& invStore = MWWorld::Class::get(npc).getInventoryStore(npc);
|
MWWorld::InventoryStore& invStore = MWWorld::Class::get(npc).getInventoryStore(npc);
|
||||||
|
|
||||||
|
@ -317,10 +317,7 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
if((*itr).mPart == ESM::PRT_Head)
|
if((*itr).mPart == ESM::PRT_Head)
|
||||||
{
|
{
|
||||||
if(npc == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
|
return std::make_pair(0, "#{sNotifyMessage13}");
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage13}");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -331,9 +328,7 @@ namespace MWClass
|
||||||
{
|
{
|
||||||
if((*itr).mPart == ESM::PRT_LFoot || (*itr).mPart == ESM::PRT_RFoot)
|
if((*itr).mPart == ESM::PRT_LFoot || (*itr).mPart == ESM::PRT_RFoot)
|
||||||
{
|
{
|
||||||
if(npc == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
|
return std::make_pair(0, "#{sNotifyMessage14}");
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage14}");
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -344,7 +339,7 @@ namespace MWClass
|
||||||
MWWorld::ContainerStoreIterator weapon = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
MWWorld::ContainerStoreIterator weapon = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||||
|
|
||||||
if(weapon == invStore.end())
|
if(weapon == invStore.end())
|
||||||
return 1;
|
return std::make_pair(1,"");
|
||||||
|
|
||||||
if(weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::LongBladeTwoHand ||
|
if(weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::LongBladeTwoHand ||
|
||||||
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::BluntTwoClose ||
|
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::BluntTwoClose ||
|
||||||
|
@ -354,12 +349,12 @@ namespace MWClass
|
||||||
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanBow ||
|
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanBow ||
|
||||||
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanCrossbow)
|
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanCrossbow)
|
||||||
{
|
{
|
||||||
return 3;
|
return std::make_pair(3,"");
|
||||||
}
|
}
|
||||||
return 1;
|
return std::make_pair(1,"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return std::make_pair(1,"");
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> Armor::use (const MWWorld::Ptr& ptr) const
|
boost::shared_ptr<MWWorld::Action> Armor::use (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -67,8 +67,9 @@ namespace MWClass
|
||||||
|
|
||||||
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
||||||
|
|
||||||
virtual int canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
virtual std::pair<int, std::string> canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
||||||
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that. \n
|
||||||
|
/// Second item in the pair specifies the error message
|
||||||
|
|
||||||
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
|
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
|
||||||
const;
|
const;
|
||||||
|
|
|
@ -238,7 +238,7 @@ namespace MWClass
|
||||||
ref->mBase = record;
|
ref->mBase = record;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Clothing::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
std::pair<int, std::string> Clothing::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
||||||
{
|
{
|
||||||
// slots that this item can be equipped in
|
// slots that this item can be equipped in
|
||||||
std::pair<std::vector<int>, bool> slots = MWWorld::Class::get(ptr).getEquipmentSlots(ptr);
|
std::pair<std::vector<int>, bool> slots = MWWorld::Class::get(ptr).getEquipmentSlots(ptr);
|
||||||
|
@ -260,12 +260,7 @@ namespace MWClass
|
||||||
for(std::vector<ESM::PartReference>::iterator itr = parts.begin(); itr != parts.end(); ++itr)
|
for(std::vector<ESM::PartReference>::iterator itr = parts.begin(); itr != parts.end(); ++itr)
|
||||||
{
|
{
|
||||||
if((*itr).mPart == ESM::PRT_Head)
|
if((*itr).mPart == ESM::PRT_Head)
|
||||||
{
|
return std::make_pair(0, "#{sNotifyMessage13}");
|
||||||
if(npc == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
|
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage13}");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,19 +269,12 @@ namespace MWClass
|
||||||
for(std::vector<ESM::PartReference>::iterator itr = parts.begin(); itr != parts.end(); ++itr)
|
for(std::vector<ESM::PartReference>::iterator itr = parts.begin(); itr != parts.end(); ++itr)
|
||||||
{
|
{
|
||||||
if((*itr).mPart == ESM::PRT_LFoot || (*itr).mPart == ESM::PRT_RFoot)
|
if((*itr).mPart == ESM::PRT_LFoot || (*itr).mPart == ESM::PRT_RFoot)
|
||||||
{
|
return std::make_pair(0, "#{sNotifyMessage15}");
|
||||||
if(npc == MWBase::Environment::get().getWorld()->getPlayer().getPlayer() )
|
|
||||||
{
|
|
||||||
MWBase::Environment::get().getWindowManager()->messageBox ("#{sNotifyMessage15}");
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return std::make_pair (1, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> Clothing::use (const MWWorld::Ptr& ptr) const
|
boost::shared_ptr<MWWorld::Action> Clothing::use (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -61,8 +61,9 @@ namespace MWClass
|
||||||
|
|
||||||
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
||||||
|
|
||||||
virtual int canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
virtual std::pair<int, std::string> canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
||||||
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
||||||
|
/// Second item in the pair specifies the error message
|
||||||
|
|
||||||
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
|
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
|
||||||
const;
|
const;
|
||||||
|
|
|
@ -384,7 +384,7 @@ namespace MWClass
|
||||||
ref->mBase = record;
|
ref->mBase = record;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Weapon::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
std::pair<int, std::string> Weapon::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
||||||
{
|
{
|
||||||
std::pair<std::vector<int>, bool> slots = MWWorld::Class::get(ptr).getEquipmentSlots(ptr);
|
std::pair<std::vector<int>, bool> slots = MWWorld::Class::get(ptr).getEquipmentSlots(ptr);
|
||||||
|
|
||||||
|
@ -402,12 +402,12 @@ namespace MWClass
|
||||||
ptr.get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanBow ||
|
ptr.get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanBow ||
|
||||||
ptr.get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanCrossbow)
|
ptr.get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanCrossbow)
|
||||||
{
|
{
|
||||||
return 2;
|
return std::make_pair (2, "");
|
||||||
}
|
}
|
||||||
return 1;
|
return std::make_pair (1, "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return std::make_pair (0, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::shared_ptr<MWWorld::Action> Weapon::use (const MWWorld::Ptr& ptr) const
|
boost::shared_ptr<MWWorld::Action> Weapon::use (const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -67,8 +67,9 @@ namespace MWClass
|
||||||
|
|
||||||
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
||||||
|
|
||||||
virtual int canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
virtual std::pair<int, std::string> canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
||||||
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
||||||
|
/// Second item in the pair specifies the error message
|
||||||
|
|
||||||
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
|
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr)
|
||||||
const;
|
const;
|
||||||
|
|
|
@ -141,21 +141,22 @@ namespace MWGui
|
||||||
int x,y;
|
int x,y;
|
||||||
bool interior = _sender->getUserString("interior") == "y";
|
bool interior = _sender->getUserString("interior") == "y";
|
||||||
MWBase::Environment::get().getWorld()->positionToIndex(pos.pos[0],pos.pos[1],x,y);
|
MWBase::Environment::get().getWorld()->positionToIndex(pos.pos[0],pos.pos[1],x,y);
|
||||||
MWWorld::CellStore* cell;
|
if(interior)
|
||||||
if(interior) cell = MWBase::Environment::get().getWorld()->getInterior(cellname);
|
MWBase::Environment::get().getWorld()->changeToInteriorCell(cellname, pos);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cell = MWBase::Environment::get().getWorld()->getExterior(x,y);
|
ESM::Position playerPos = player.getRefData().getPosition();
|
||||||
ESM::Position PlayerPos = player.getRefData().getPosition();
|
float d = Ogre::Vector3(pos.pos[0], pos.pos[1], 0).distance(
|
||||||
float d = sqrt( pow(pos.pos[0] - PlayerPos.pos[0],2) + pow(pos.pos[1] - PlayerPos.pos[1],2) + pow(pos.pos[2] - PlayerPos.pos[2],2) );
|
Ogre::Vector3(playerPos.pos[0], playerPos.pos[1], 0));
|
||||||
int time = int(d /MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fTravelTimeMult")->getFloat());
|
int hours = static_cast<int>(d /MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find("fTravelTimeMult")->getFloat());
|
||||||
for(int i = 0;i < time;i++)
|
for(int i = 0;i < hours;i++)
|
||||||
{
|
{
|
||||||
MWBase::Environment::get().getMechanicsManager ()->restoreDynamicStats ();
|
MWBase::Environment::get().getMechanicsManager ()->restoreDynamicStats ();
|
||||||
}
|
}
|
||||||
MWBase::Environment::get().getWorld()->advanceTime(time);
|
MWBase::Environment::get().getWorld()->advanceTime(hours);
|
||||||
|
|
||||||
|
MWBase::Environment::get().getWorld()->changeToExteriorCell(pos);
|
||||||
}
|
}
|
||||||
MWBase::Environment::get().getWorld()->moveObject(player,*cell,pos.pos[0],pos.pos[1],pos.pos[2]);
|
|
||||||
|
|
||||||
MWWorld::Class::get(player).adjustPosition(player);
|
MWWorld::Class::get(player).adjustPosition(player);
|
||||||
MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Travel);
|
MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Travel);
|
||||||
|
|
|
@ -155,6 +155,18 @@ namespace MWMechanics
|
||||||
stat.setCurrent (stat.getModified());
|
stat.setCurrent (stat.getModified());
|
||||||
creatureStats.setDynamic (i, stat);
|
creatureStats.setDynamic (i, stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unequip any items that may not be equipped. we need this for when the race is changed to a beast race
|
||||||
|
MWWorld::InventoryStore& invStore = MWWorld::Class::get(ptr).getInventoryStore(ptr);
|
||||||
|
for (int i=0; i<MWWorld::InventoryStore::Slots; ++i)
|
||||||
|
{
|
||||||
|
MWWorld::ContainerStoreIterator it = invStore.getSlot(i);
|
||||||
|
if (it != invStore.end())
|
||||||
|
{
|
||||||
|
if (!MWWorld::Class::get(*it).canBeEquipped(*it, ptr).first)
|
||||||
|
invStore.equip(i, invStore.end());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MechanicsManager::MechanicsManager()
|
MechanicsManager::MechanicsManager()
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace MWMechanics
|
||||||
const ESM::Spell *spell =
|
const ESM::Spell *spell =
|
||||||
MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find (iter->first);
|
MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find (iter->first);
|
||||||
|
|
||||||
if (spell->mData.mFlags & ESM::Spell::ST_Disease)
|
if (spell->mData.mType == ESM::Spell::ST_Disease)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ namespace MWMechanics
|
||||||
const ESM::Spell *spell =
|
const ESM::Spell *spell =
|
||||||
MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find (iter->first);
|
MWBase::Environment::get().getWorld()->getStore().get<ESM::Spell>().find (iter->first);
|
||||||
|
|
||||||
if (spell->mData.mFlags & ESM::Spell::ST_Blight)
|
if (spell->mData.mType == ESM::Spell::ST_Blight)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,13 @@ namespace MWWorld
|
||||||
MWWorld::Ptr object = getTarget();
|
MWWorld::Ptr object = getTarget();
|
||||||
MWWorld::InventoryStore& invStore = MWWorld::Class::get(actor).getInventoryStore(actor);
|
MWWorld::InventoryStore& invStore = MWWorld::Class::get(actor).getInventoryStore(actor);
|
||||||
|
|
||||||
switch(MWWorld::Class::get (object).canBeEquipped (object, actor))
|
std::pair <int, std::string> result = MWWorld::Class::get (object).canBeEquipped (object, actor);
|
||||||
|
|
||||||
|
// display error message if the player tried to equip something
|
||||||
|
if (!result.second.empty() && actor == MWBase::Environment::get().getWorld()->getPlayer().getPlayer())
|
||||||
|
MWBase::Environment::get().getWindowManager()->messageBox(result.second);
|
||||||
|
|
||||||
|
switch(result.first)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
return;
|
return;
|
||||||
|
@ -48,8 +54,6 @@ namespace MWWorld
|
||||||
|
|
||||||
assert(it != invStore.end());
|
assert(it != invStore.end());
|
||||||
|
|
||||||
std::string npcRace = actor.get<ESM::NPC>()->mBase->mRace;
|
|
||||||
|
|
||||||
bool equipped = false;
|
bool equipped = false;
|
||||||
|
|
||||||
// equip the item in the first free slot
|
// equip the item in the first free slot
|
||||||
|
|
|
@ -165,6 +165,7 @@ MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name, Ptr::CellStore& ce
|
||||||
else
|
else
|
||||||
return Ptr();
|
return Ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
MWWorld::Ptr ptr;
|
MWWorld::Ptr ptr;
|
||||||
|
|
||||||
if (MWWorld::LiveCellRef<ESM::Activator> *ref = cell.mActivators.find (name))
|
if (MWWorld::LiveCellRef<ESM::Activator> *ref = cell.mActivators.find (name))
|
||||||
|
@ -246,16 +247,16 @@ MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then check cells that are already listed
|
// Then check cells that are already listed
|
||||||
for (std::map<std::string, Ptr::CellStore>::iterator iter = mInteriors.begin();
|
for (std::map<std::pair<int, int>, Ptr::CellStore>::iterator iter = mExteriors.begin();
|
||||||
iter!=mInteriors.end(); ++iter)
|
iter!=mExteriors.end(); ++iter)
|
||||||
{
|
{
|
||||||
Ptr ptr = getPtrAndCache (name, iter->second);
|
Ptr ptr = getPtrAndCache (name, iter->second);
|
||||||
if (!ptr.isEmpty())
|
if (!ptr.isEmpty())
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (std::map<std::pair<int, int>, Ptr::CellStore>::iterator iter = mExteriors.begin();
|
for (std::map<std::string, Ptr::CellStore>::iterator iter = mInteriors.begin();
|
||||||
iter!=mExteriors.end(); ++iter)
|
iter!=mInteriors.end(); ++iter)
|
||||||
{
|
{
|
||||||
Ptr ptr = getPtrAndCache (name, iter->second);
|
Ptr ptr = getPtrAndCache (name, iter->second);
|
||||||
if (!ptr.isEmpty())
|
if (!ptr.isEmpty())
|
||||||
|
@ -266,7 +267,7 @@ MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name)
|
||||||
const MWWorld::Store<ESM::Cell> &cells = mStore.get<ESM::Cell>();
|
const MWWorld::Store<ESM::Cell> &cells = mStore.get<ESM::Cell>();
|
||||||
MWWorld::Store<ESM::Cell>::iterator iter;
|
MWWorld::Store<ESM::Cell>::iterator iter;
|
||||||
|
|
||||||
for (iter = cells.intBegin(); iter != cells.intEnd(); ++iter)
|
for (iter = cells.extBegin(); iter != cells.extEnd(); ++iter)
|
||||||
{
|
{
|
||||||
Ptr::CellStore *cellStore = getCellStore (&(*iter));
|
Ptr::CellStore *cellStore = getCellStore (&(*iter));
|
||||||
|
|
||||||
|
@ -276,7 +277,7 @@ MWWorld::Ptr MWWorld::Cells::getPtr (const std::string& name)
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (iter = cells.extBegin(); iter != cells.extEnd(); ++iter)
|
for (iter = cells.intBegin(); iter != cells.intEnd(); ++iter)
|
||||||
{
|
{
|
||||||
Ptr::CellStore *cellStore = getCellStore (&(*iter));
|
Ptr::CellStore *cellStore = getCellStore (&(*iter));
|
||||||
|
|
||||||
|
|
|
@ -264,9 +264,9 @@ namespace MWWorld
|
||||||
throw std::runtime_error ("class can't be enchanted");
|
throw std::runtime_error ("class can't be enchanted");
|
||||||
}
|
}
|
||||||
|
|
||||||
int Class::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
std::pair<int, std::string> Class::canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const
|
||||||
{
|
{
|
||||||
return 1;
|
return std::make_pair (1, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Class::adjustPosition(const MWWorld::Ptr& ptr) const
|
void Class::adjustPosition(const MWWorld::Ptr& ptr) const
|
||||||
|
|
|
@ -245,8 +245,9 @@ namespace MWWorld
|
||||||
|
|
||||||
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
virtual void applyEnchantment(const MWWorld::Ptr &ptr, const std::string& enchId, int enchCharge, const std::string& newName) const;
|
||||||
|
|
||||||
virtual int canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
virtual std::pair<int, std::string> canBeEquipped(const MWWorld::Ptr &ptr, const MWWorld::Ptr &npc) const;
|
||||||
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
///< Return 0 if player cannot equip item. 1 if can equip. 2 if it's twohanded weapon. 3 if twohanded weapon conflicts with that.
|
||||||
|
/// Second item in the pair specifies the error message
|
||||||
|
|
||||||
virtual Ptr
|
virtual Ptr
|
||||||
copyToCell(const Ptr &ptr, CellStore &cell) const;
|
copyToCell(const Ptr &ptr, CellStore &cell) const;
|
||||||
|
|
|
@ -186,7 +186,7 @@ void MWWorld::InventoryStore::autoEquip (const MWWorld::Ptr& npc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(MWWorld::Class::get (test).canBeEquipped (test, npc))
|
switch(MWWorld::Class::get (test).canBeEquipped (test, npc).first)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "manualref.hpp"
|
#include "manualref.hpp"
|
||||||
#include "cellfunctors.hpp"
|
#include "cellfunctors.hpp"
|
||||||
#include "containerstore.hpp"
|
#include "containerstore.hpp"
|
||||||
|
#include "inventorystore.hpp"
|
||||||
|
|
||||||
using namespace Ogre;
|
using namespace Ogre;
|
||||||
|
|
||||||
|
@ -210,9 +211,6 @@ namespace MWWorld
|
||||||
|
|
||||||
mStore.setUp();
|
mStore.setUp();
|
||||||
|
|
||||||
mPlayer = new MWWorld::Player (mStore.get<ESM::NPC>().find ("player"), *this);
|
|
||||||
mRendering->attachCameraTo(mPlayer->getPlayer());
|
|
||||||
|
|
||||||
// global variables
|
// global variables
|
||||||
mGlobalVariables = new Globals (mStore);
|
mGlobalVariables = new Globals (mStore);
|
||||||
|
|
||||||
|
@ -1369,6 +1367,18 @@ namespace MWWorld
|
||||||
return mRendering->vanityRotateCamera(rot);
|
return mRendering->vanityRotateCamera(rot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::setupPlayer(bool newGame)
|
||||||
|
{
|
||||||
|
const ESM::NPC* player = mStore.get<ESM::NPC>().find ("player");
|
||||||
|
mPlayer = new MWWorld::Player (player, *this);
|
||||||
|
mRendering->attachCameraTo(mPlayer->getPlayer());
|
||||||
|
if (newGame)
|
||||||
|
{
|
||||||
|
MWWorld::Class::get(mPlayer->getPlayer()).getContainerStore(mPlayer->getPlayer()).fill(player->mInventory, "", mStore);
|
||||||
|
MWWorld::Class::get(mPlayer->getPlayer()).getInventoryStore(mPlayer->getPlayer()).autoEquip (mPlayer->getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void World::renderPlayer()
|
void World::renderPlayer()
|
||||||
{
|
{
|
||||||
mRendering->renderPlayer(mPlayer->getPlayer());
|
mRendering->renderPlayer(mPlayer->getPlayer());
|
||||||
|
|
|
@ -363,6 +363,7 @@ namespace MWWorld
|
||||||
|
|
||||||
virtual bool vanityRotateCamera(float * rot);
|
virtual bool vanityRotateCamera(float * rot);
|
||||||
|
|
||||||
|
virtual void setupPlayer(bool newGame);
|
||||||
virtual void renderPlayer();
|
virtual void renderPlayer();
|
||||||
|
|
||||||
virtual void setupExternalRendering (MWRender::ExternalRendering& rendering);
|
virtual void setupExternalRendering (MWRender::ExternalRendering& rendering);
|
||||||
|
|
|
@ -356,4 +356,22 @@ bool Cell::getNextMVRF(ESMReader &esm, MovedCellRef &mref)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Cell::blank()
|
||||||
|
{
|
||||||
|
mName.clear();
|
||||||
|
mRegion.clear();
|
||||||
|
mWater = 0;
|
||||||
|
mWaterInt = false;
|
||||||
|
mMapColor = 0;
|
||||||
|
mNAM0 = 0;
|
||||||
|
|
||||||
|
mData.mFlags = 0;
|
||||||
|
mData.mX = 0;
|
||||||
|
mData.mY = 0;
|
||||||
|
|
||||||
|
mAmbi.mAmbient = 0;
|
||||||
|
mAmbi.mSunlight = 0;
|
||||||
|
mAmbi.mFog = 0;
|
||||||
|
mAmbi.mFogDensity = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,6 +140,9 @@ struct Cell
|
||||||
* Since they are comparably rare, we use a separate method for this.
|
* Since they are comparably rare, we use a separate method for this.
|
||||||
*/
|
*/
|
||||||
static bool getNextMVRF(ESMReader &esm, MovedCellRef &mref);
|
static bool getNextMVRF(ESMReader &esm, MovedCellRef &mref);
|
||||||
|
|
||||||
|
void blank();
|
||||||
|
///< Set record to default state (does not touch the ID/index).
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue