1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-31 19:20:26 +00:00

Remove redundant mPersistent member from ESM::NPC and ESM::Creature, replaced by mRecordFlags. Fixed the editing of the persistence flag value.

This commit is contained in:
cc9cii 2021-06-30 08:20:29 +10:00
parent 2a76634f5f
commit f2a301653c
11 changed files with 8 additions and 30 deletions

View File

@ -294,7 +294,6 @@ namespace CSMWorld
{ ColumnId_NpcReputation, "Reputation" }, { ColumnId_NpcReputation, "Reputation" },
{ ColumnId_NpcRank, "NPC Rank" }, { ColumnId_NpcRank, "NPC Rank" },
{ ColumnId_Gold, "Gold" }, { ColumnId_Gold, "Gold" },
{ ColumnId_NpcPersistence, "Persistent" },
{ ColumnId_RaceAttributes, "Race Attributes" }, { ColumnId_RaceAttributes, "Race Attributes" },
{ ColumnId_Male, "Male" }, { ColumnId_Male, "Male" },

View File

@ -280,7 +280,7 @@ namespace CSMWorld
ColumnId_NpcReputation = 258, ColumnId_NpcReputation = 258,
ColumnId_NpcRank = 259, ColumnId_NpcRank = 259,
ColumnId_Gold = 260, ColumnId_Gold = 260,
ColumnId_NpcPersistence = 261, // unused
ColumnId_RaceAttributes = 262, ColumnId_RaceAttributes = 262,
ColumnId_Male = 263, ColumnId_Male = 263,

View File

@ -1108,7 +1108,6 @@ QVariant CSMWorld::NpcMiscRefIdAdapter::getNestedData (const RefIdColumn *column
case 5: return static_cast<int>(record.get().mNpdt.mReputation); case 5: return static_cast<int>(record.get().mNpdt.mReputation);
case 6: return static_cast<int>(record.get().mNpdt.mRank); case 6: return static_cast<int>(record.get().mNpdt.mRank);
case 7: return record.get().mNpdt.mGold; case 7: return record.get().mNpdt.mGold;
case 8: return record.get().mPersistent == true;
default: return QVariant(); // throw an exception here? default: return QVariant(); // throw an exception here?
} }
else else
@ -1122,7 +1121,6 @@ QVariant CSMWorld::NpcMiscRefIdAdapter::getNestedData (const RefIdColumn *column
case 5: return static_cast<int>(record.get().mNpdt.mReputation); case 5: return static_cast<int>(record.get().mNpdt.mReputation);
case 6: return static_cast<int>(record.get().mNpdt.mRank); case 6: return static_cast<int>(record.get().mNpdt.mRank);
case 7: return record.get().mNpdt.mGold; case 7: return record.get().mNpdt.mGold;
case 8: return record.get().mPersistent == true;
default: return QVariant(); // throw an exception here? default: return QVariant(); // throw an exception here?
} }
} }
@ -1147,7 +1145,6 @@ void CSMWorld::NpcMiscRefIdAdapter::setNestedData (const RefIdColumn *column,
case 5: npc.mNpdt.mReputation = static_cast<signed char>(value.toInt()); break; case 5: npc.mNpdt.mReputation = static_cast<signed char>(value.toInt()); break;
case 6: npc.mNpdt.mRank = static_cast<signed char>(value.toInt()); break; case 6: npc.mNpdt.mRank = static_cast<signed char>(value.toInt()); break;
case 7: npc.mNpdt.mGold = value.toInt(); break; case 7: npc.mNpdt.mGold = value.toInt(); break;
case 8: npc.mPersistent = value.toBool(); break;
default: return; // throw an exception here? default: return; // throw an exception here?
} }
else else
@ -1161,7 +1158,6 @@ void CSMWorld::NpcMiscRefIdAdapter::setNestedData (const RefIdColumn *column,
case 5: npc.mNpdt.mReputation = static_cast<signed char>(value.toInt()); break; case 5: npc.mNpdt.mReputation = static_cast<signed char>(value.toInt()); break;
case 6: npc.mNpdt.mRank = static_cast<signed char>(value.toInt()); break; case 6: npc.mNpdt.mRank = static_cast<signed char>(value.toInt()); break;
case 7: npc.mNpdt.mGold = value.toInt(); break; case 7: npc.mNpdt.mGold = value.toInt(); break;
case 8: npc.mPersistent = value.toBool(); break;
default: return; // throw an exception here? default: return; // throw an exception here?
} }

View File

@ -153,10 +153,7 @@ namespace CSMWorld
return QString::fromUtf8 (record.get().mModel.c_str()); return QString::fromUtf8 (record.get().mModel.c_str());
if (column==mModel.mPersistence) if (column==mModel.mPersistence)
{ return (record.get().mRecordFlags & 0x00000400) != 0;
bool isPersistent = (record.get().mRecordFlags & 0x00000400) != 0;
return QString::fromUtf8 (isPersistent ? "Yes" : "No");
}
return BaseRefIdAdapter<RecordT>::getData (column, data, index); return BaseRefIdAdapter<RecordT>::getData (column, data, index);
} }
@ -173,14 +170,10 @@ namespace CSMWorld
record2.mModel = value.toString().toUtf8().constData(); record2.mModel = value.toString().toUtf8().constData();
else if (column==mModel.mPersistence) else if (column==mModel.mPersistence)
{ {
unsigned int flag = record2.mRecordFlags; if (value.toInt() != 0)
std::string val = value.toString().toUtf8().constData(); record2.mRecordFlags |= 0x00000400;
if (val == "Yes") else
flag |= 0x00000400; record2.mRecordFlags &= ~0x00000400;
else if (val == "No")
flag &= ~0x00000400;
record2.mRecordFlags = flag;
} }
else else
{ {

View File

@ -551,8 +551,6 @@ CSMWorld::RefIdCollection::RefIdCollection()
new RefIdColumn (Columns::ColumnId_NpcRank, CSMWorld::ColumnBase::Display_UnsignedInteger8)); new RefIdColumn (Columns::ColumnId_NpcRank, CSMWorld::ColumnBase::Display_UnsignedInteger8));
mColumns.back().addColumn( mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_Gold, CSMWorld::ColumnBase::Display_Integer)); new RefIdColumn (Columns::ColumnId_Gold, CSMWorld::ColumnBase::Display_Integer));
mColumns.back().addColumn(
new RefIdColumn (Columns::ColumnId_NpcPersistence, CSMWorld::ColumnBase::Display_Boolean));
WeaponColumns weaponColumns (enchantableColumns); WeaponColumns weaponColumns (enchantableColumns);

View File

@ -588,7 +588,7 @@ namespace MWClass
bool Creature::isPersistent(const MWWorld::ConstPtr &actor) const bool Creature::isPersistent(const MWWorld::ConstPtr &actor) const
{ {
const MWWorld::LiveCellRef<ESM::Creature>* ref = actor.get<ESM::Creature>(); const MWWorld::LiveCellRef<ESM::Creature>* ref = actor.get<ESM::Creature>();
return ref->mBase->mPersistent; return (ref->mBase->mRecordFlags & 0x0400) != 0;
} }
std::string Creature::getSoundIdFromSndGen(const MWWorld::Ptr &ptr, const std::string &name) const std::string Creature::getSoundIdFromSndGen(const MWWorld::Ptr &ptr, const std::string &name) const

View File

@ -403,7 +403,7 @@ namespace MWClass
bool Npc::isPersistent(const MWWorld::ConstPtr &actor) const bool Npc::isPersistent(const MWWorld::ConstPtr &actor) const
{ {
const MWWorld::LiveCellRef<ESM::NPC>* ref = actor.get<ESM::NPC>(); const MWWorld::LiveCellRef<ESM::NPC>* ref = actor.get<ESM::NPC>();
return ref->mBase->mPersistent; return (ref->mBase->mRecordFlags & 0x0400) != 0;
} }
std::string Npc::getModel(const MWWorld::ConstPtr &ptr) const std::string Npc::getModel(const MWWorld::ConstPtr &ptr) const

View File

@ -15,8 +15,6 @@ namespace ESM {
isDeleted = false; isDeleted = false;
mRecordFlags = esm.getRecordFlags(); mRecordFlags = esm.getRecordFlags();
mPersistent = (mRecordFlags & 0x0400) != 0;
mAiPackage.mList.clear(); mAiPackage.mList.clear();
mInventory.mList.clear(); mInventory.mList.clear();
mSpells.mList.clear(); mSpells.mList.clear();

View File

@ -76,8 +76,6 @@ struct Creature
int mBloodType; int mBloodType;
unsigned char mFlags; unsigned char mFlags;
bool mPersistent;
float mScale; float mScale;
unsigned int mRecordFlags; unsigned int mRecordFlags;

View File

@ -13,8 +13,6 @@ namespace ESM
isDeleted = false; isDeleted = false;
mRecordFlags = esm.getRecordFlags(); mRecordFlags = esm.getRecordFlags();
mPersistent = (mRecordFlags & 0x0400) != 0;
mSpells.mList.clear(); mSpells.mList.clear();
mInventory.mList.clear(); mInventory.mList.clear();
mTransport.mList.clear(); mTransport.mList.clear();

View File

@ -116,8 +116,6 @@ struct NPC
int mBloodType; int mBloodType;
unsigned char mFlags; unsigned char mFlags;
bool mPersistent;
InventoryList mInventory; InventoryList mInventory;
SpellList mSpells; SpellList mSpells;