diff --git a/CHANGELOG.md b/CHANGELOG.md index fc150f344..33ba3e461 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,12 +44,13 @@ Bug #4457: Item without CanCarry flag prevents shield autoequipping in dark areas Bug #4458: AiWander console command handles idle chances incorrectly Bug #4459: NotCell dialogue condition doesn't support partial matches - Feature #4256: Implement ToggleBorders (TB) console command Feature #3276: Editor: Search- Show number of (remaining) search results and indicate a search without any results Feature #4222: 360° screenshots + Feature #4256: Implement ToggleBorders (TB) console command Feature #4324: Add CFBundleIdentifier in Info.plist to allow for macOS function key shortcuts Feature #4345: Add equivalents for the command line commands to Launcher Feature #4444: Per-group KF-animation files support + Feature #4466: (OpenMW-CS) Add option to ignore "Base" records when running verifier 0.44.0 ------ diff --git a/apps/opencs/model/prefs/state.cpp b/apps/opencs/model/prefs/state.cpp index 6f64da72e..e1236a0e4 100644 --- a/apps/opencs/model/prefs/state.cpp +++ b/apps/opencs/model/prefs/state.cpp @@ -123,6 +123,7 @@ void CSMPrefs::State::declare() declareEnum ("double-s", "Shift Double Click", actionRemove).addValues (reportValues); declareEnum ("double-c", "Control Double Click", actionEditAndRemove).addValues (reportValues); declareEnum ("double-sc", "Shift Control Double Click", actionNone).addValues (reportValues); + declareBool("ignore-base-records", "Ignore base records in verifier", false); declareCategory ("Search & Replace"); declareInt ("char-before", "Characters before search string", 10). diff --git a/apps/opencs/model/tools/birthsigncheck.cpp b/apps/opencs/model/tools/birthsigncheck.cpp index 9898352f1..5fe2479cd 100644 --- a/apps/opencs/model/tools/birthsigncheck.cpp +++ b/apps/opencs/model/tools/birthsigncheck.cpp @@ -5,14 +5,20 @@ #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::BirthsignCheckStage::BirthsignCheckStage (const CSMWorld::IdCollection& birthsigns) : mBirthsigns (birthsigns) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::BirthsignCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mBirthsigns.getSize(); } @@ -20,7 +26,8 @@ void CSMTools::BirthsignCheckStage::perform (int stage, CSMDoc::Messages& messag { const CSMWorld::Record& record = mBirthsigns.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::BirthSign& birthsign = record.get(); diff --git a/apps/opencs/model/tools/birthsigncheck.hpp b/apps/opencs/model/tools/birthsigncheck.hpp index 16d4c666f..a8a7a2c14 100644 --- a/apps/opencs/model/tools/birthsigncheck.hpp +++ b/apps/opencs/model/tools/birthsigncheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class BirthsignCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mBirthsigns; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/bodypartcheck.cpp b/apps/opencs/model/tools/bodypartcheck.cpp index 68a09485f..8d19ef489 100644 --- a/apps/opencs/model/tools/bodypartcheck.cpp +++ b/apps/opencs/model/tools/bodypartcheck.cpp @@ -1,5 +1,7 @@ #include "bodypartcheck.hpp" +#include "../prefs/state.hpp" + CSMTools::BodyPartCheckStage::BodyPartCheckStage( const CSMWorld::IdCollection &bodyParts, const CSMWorld::Resources &meshes, @@ -7,10 +9,14 @@ CSMTools::BodyPartCheckStage::BodyPartCheckStage( mBodyParts(bodyParts), mMeshes(meshes), mRaces(races) -{ } +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::BodyPartCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mBodyParts.getSize(); } @@ -18,7 +24,8 @@ void CSMTools::BodyPartCheckStage::perform (int stage, CSMDoc::Messages &message { const CSMWorld::Record &record = mBodyParts.getRecord(stage); - if ( record.isDeleted() ) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::BodyPart &bodyPart = record.get(); diff --git a/apps/opencs/model/tools/bodypartcheck.hpp b/apps/opencs/model/tools/bodypartcheck.hpp index dbab5f5c6..5c8ae2929 100644 --- a/apps/opencs/model/tools/bodypartcheck.hpp +++ b/apps/opencs/model/tools/bodypartcheck.hpp @@ -17,6 +17,7 @@ namespace CSMTools const CSMWorld::IdCollection &mBodyParts; const CSMWorld::Resources &mMeshes; const CSMWorld::IdCollection &mRaces; + bool mIgnoreBaseRecords; public: BodyPartCheckStage( diff --git a/apps/opencs/model/tools/classcheck.cpp b/apps/opencs/model/tools/classcheck.cpp index 79cb704bf..82007c860 100644 --- a/apps/opencs/model/tools/classcheck.cpp +++ b/apps/opencs/model/tools/classcheck.cpp @@ -6,14 +6,20 @@ #include #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::ClassCheckStage::ClassCheckStage (const CSMWorld::IdCollection& classes) : mClasses (classes) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::ClassCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mClasses.getSize(); } @@ -21,7 +27,8 @@ void CSMTools::ClassCheckStage::perform (int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mClasses.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::Class& class_ = record.get(); diff --git a/apps/opencs/model/tools/classcheck.hpp b/apps/opencs/model/tools/classcheck.hpp index b76da3f13..ba0a07047 100644 --- a/apps/opencs/model/tools/classcheck.hpp +++ b/apps/opencs/model/tools/classcheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class ClassCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mClasses; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/factioncheck.cpp b/apps/opencs/model/tools/factioncheck.cpp index 621b28070..2cf88fc0e 100644 --- a/apps/opencs/model/tools/factioncheck.cpp +++ b/apps/opencs/model/tools/factioncheck.cpp @@ -6,14 +6,20 @@ #include #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::FactionCheckStage::FactionCheckStage (const CSMWorld::IdCollection& factions) : mFactions (factions) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::FactionCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mFactions.getSize(); } @@ -21,7 +27,8 @@ void CSMTools::FactionCheckStage::perform (int stage, CSMDoc::Messages& messages { const CSMWorld::Record& record = mFactions.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::Faction& faction = record.get(); diff --git a/apps/opencs/model/tools/factioncheck.hpp b/apps/opencs/model/tools/factioncheck.hpp index 321a4d6d8..b26d19717 100644 --- a/apps/opencs/model/tools/factioncheck.hpp +++ b/apps/opencs/model/tools/factioncheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class FactionCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mFactions; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/gmstcheck.cpp b/apps/opencs/model/tools/gmstcheck.cpp index 0c32c0056..e3b4777bf 100644 --- a/apps/opencs/model/tools/gmstcheck.cpp +++ b/apps/opencs/model/tools/gmstcheck.cpp @@ -2,14 +2,20 @@ #include +#include "../prefs/state.hpp" + #include "../world/defaultgmsts.hpp" CSMTools::GmstCheckStage::GmstCheckStage(const CSMWorld::IdCollection& gameSettings) : mGameSettings(gameSettings) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::GmstCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mGameSettings.getSize(); } @@ -17,7 +23,8 @@ void CSMTools::GmstCheckStage::perform(int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mGameSettings.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::GameSetting& gmst = record.get(); diff --git a/apps/opencs/model/tools/gmstcheck.hpp b/apps/opencs/model/tools/gmstcheck.hpp index 0d4f7f204..27bd61317 100644 --- a/apps/opencs/model/tools/gmstcheck.hpp +++ b/apps/opencs/model/tools/gmstcheck.hpp @@ -25,6 +25,7 @@ namespace CSMTools private: const CSMWorld::IdCollection& mGameSettings; + bool mIgnoreBaseRecords; std::string varTypeToString(ESM::VarType); diff --git a/apps/opencs/model/tools/journalcheck.cpp b/apps/opencs/model/tools/journalcheck.cpp index bdd14ddf0..a565f3786 100644 --- a/apps/opencs/model/tools/journalcheck.cpp +++ b/apps/opencs/model/tools/journalcheck.cpp @@ -3,13 +3,19 @@ #include #include +#include "../prefs/state.hpp" + CSMTools::JournalCheckStage::JournalCheckStage(const CSMWorld::IdCollection &journals, const CSMWorld::InfoCollection& journalInfos) : mJournals(journals), mJournalInfos(journalInfos) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::JournalCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mJournals.getSize(); } @@ -17,7 +23,8 @@ void CSMTools::JournalCheckStage::perform(int stage, CSMDoc::Messages& messages) { const CSMWorld::Record &journalRecord = mJournals.getRecord(stage); - if (journalRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && journalRecord.isBaseOnly()) || journalRecord.isDeleted()) return; const ESM::Dialogue &journal = journalRecord.get(); @@ -43,6 +50,10 @@ void CSMTools::JournalCheckStage::perform(int stage, CSMDoc::Messages& messages) statusNamedCount += 1; } + // Skip "Base" records (setting!) + if (mIgnoreBaseRecords && infoRecord.isBaseOnly()) + continue; + if (journalInfo.mResponse.empty()) { CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_JournalInfo, journalInfo.mId); diff --git a/apps/opencs/model/tools/journalcheck.hpp b/apps/opencs/model/tools/journalcheck.hpp index c9f619698..661edcaef 100644 --- a/apps/opencs/model/tools/journalcheck.hpp +++ b/apps/opencs/model/tools/journalcheck.hpp @@ -28,6 +28,7 @@ namespace CSMTools const CSMWorld::IdCollection& mJournals; const CSMWorld::InfoCollection& mJournalInfos; + bool mIgnoreBaseRecords; }; } diff --git a/apps/opencs/model/tools/magiceffectcheck.cpp b/apps/opencs/model/tools/magiceffectcheck.cpp index ab8b3b68b..f9e83aa23 100644 --- a/apps/opencs/model/tools/magiceffectcheck.cpp +++ b/apps/opencs/model/tools/magiceffectcheck.cpp @@ -2,6 +2,8 @@ #include +#include "../prefs/state.hpp" + #include "../world/resources.hpp" #include "../world/data.hpp" @@ -77,16 +79,26 @@ CSMTools::MagicEffectCheckStage::MagicEffectCheckStage(const CSMWorld::IdCollect mReferenceables(referenceables), mIcons(icons), mTextures(textures) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::MagicEffectCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mMagicEffects.getSize(); } void CSMTools::MagicEffectCheckStage::perform(int stage, CSMDoc::Messages &messages) { - ESM::MagicEffect effect = mMagicEffects.getRecord(stage).get(); + const CSMWorld::Record &record = mMagicEffects.getRecord(stage); + + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) + return; + + ESM::MagicEffect effect = record.get(); CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_MagicEffect, effect.mId); if (effect.mData.mBaseCost < 0.0f) diff --git a/apps/opencs/model/tools/magiceffectcheck.hpp b/apps/opencs/model/tools/magiceffectcheck.hpp index 0ad6760d3..28a406283 100644 --- a/apps/opencs/model/tools/magiceffectcheck.hpp +++ b/apps/opencs/model/tools/magiceffectcheck.hpp @@ -24,6 +24,7 @@ namespace CSMTools const CSMWorld::RefIdCollection &mReferenceables; const CSMWorld::Resources &mIcons; const CSMWorld::Resources &mTextures; + bool mIgnoreBaseRecords; private: bool isTextureExists(const std::string &texture, bool isIcon) const; diff --git a/apps/opencs/model/tools/pathgridcheck.cpp b/apps/opencs/model/tools/pathgridcheck.cpp index be4d37792..53293fa79 100644 --- a/apps/opencs/model/tools/pathgridcheck.cpp +++ b/apps/opencs/model/tools/pathgridcheck.cpp @@ -3,6 +3,8 @@ #include #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" #include "../world/idcollection.hpp" #include "../world/subcellcollection.hpp" @@ -10,10 +12,14 @@ CSMTools::PathgridCheckStage::PathgridCheckStage (const CSMWorld::SubCellCollection& pathgrids) : mPathgrids (pathgrids) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::PathgridCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mPathgrids.getSize(); } @@ -21,7 +27,8 @@ void CSMTools::PathgridCheckStage::perform (int stage, CSMDoc::Messages& message { const CSMWorld::Record& record = mPathgrids.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const CSMWorld::Pathgrid& pathgrid = record.get(); diff --git a/apps/opencs/model/tools/pathgridcheck.hpp b/apps/opencs/model/tools/pathgridcheck.hpp index f45b5bc93..3e2fdd0ab 100644 --- a/apps/opencs/model/tools/pathgridcheck.hpp +++ b/apps/opencs/model/tools/pathgridcheck.hpp @@ -25,6 +25,7 @@ namespace CSMTools { const CSMWorld::SubCellCollection >& mPathgrids; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/racecheck.cpp b/apps/opencs/model/tools/racecheck.cpp index b30088620..c7fd83224 100644 --- a/apps/opencs/model/tools/racecheck.cpp +++ b/apps/opencs/model/tools/racecheck.cpp @@ -4,6 +4,8 @@ #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" void CSMTools::RaceCheckStage::performPerRecord (int stage, CSMDoc::Messages& messages) @@ -15,6 +17,14 @@ void CSMTools::RaceCheckStage::performPerRecord (int stage, CSMDoc::Messages& me const ESM::Race& race = record.get(); + // Consider mPlayable flag even when "Base" records are ignored + if (race.mData.mFlags & 0x1) + mPlayable = true; + + // Skip "Base" records (setting!) + if (mIgnoreBaseRecords && record.isBaseOnly()) + return; + CSMWorld::UniversalId id (CSMWorld::UniversalId::Type_Race, race.mId); // test for empty name and description @@ -38,10 +48,6 @@ void CSMTools::RaceCheckStage::performPerRecord (int stage, CSMDoc::Messages& me if (race.mData.mWeight.mFemale<0) messages.push_back (std::make_pair (id, "female " + race.mId + " has negative weight")); - // remember playable flag - if (race.mData.mFlags & 0x1) - mPlayable = true; - /// \todo check data members that can't be edited in the table view } @@ -55,11 +61,15 @@ void CSMTools::RaceCheckStage::performFinal (CSMDoc::Messages& messages) CSMTools::RaceCheckStage::RaceCheckStage (const CSMWorld::IdCollection& races) : mRaces (races), mPlayable (false) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::RaceCheckStage::setup() { mPlayable = false; + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mRaces.getSize()+1; } diff --git a/apps/opencs/model/tools/racecheck.hpp b/apps/opencs/model/tools/racecheck.hpp index 3e67b7577..55c283611 100644 --- a/apps/opencs/model/tools/racecheck.hpp +++ b/apps/opencs/model/tools/racecheck.hpp @@ -14,6 +14,7 @@ namespace CSMTools { const CSMWorld::IdCollection& mRaces; bool mPlayable; + bool mIgnoreBaseRecords; void performPerRecord (int stage, CSMDoc::Messages& messages); diff --git a/apps/opencs/model/tools/referenceablecheck.cpp b/apps/opencs/model/tools/referenceablecheck.cpp index 1e86dfe37..0c9a32b5c 100644 --- a/apps/opencs/model/tools/referenceablecheck.cpp +++ b/apps/opencs/model/tools/referenceablecheck.cpp @@ -2,6 +2,8 @@ #include +#include "../prefs/state.hpp" + #include "../world/record.hpp" #include "../world/universalid.hpp" @@ -18,6 +20,7 @@ CSMTools::ReferenceableCheckStage::ReferenceableCheckStage( mScripts(scripts), mPlayerPresent(false) { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); } void CSMTools::ReferenceableCheckStage::perform (int stage, CSMDoc::Messages& messages) @@ -228,6 +231,8 @@ void CSMTools::ReferenceableCheckStage::perform (int stage, CSMDoc::Messages& me int CSMTools::ReferenceableCheckStage::setup() { mPlayerPresent = false; + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mReferencables.getSize() + 1; } @@ -238,7 +243,8 @@ void CSMTools::ReferenceableCheckStage::bookCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Book& book = (dynamic_cast& >(baseRecord)).get(); @@ -257,7 +263,8 @@ void CSMTools::ReferenceableCheckStage::activatorCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Activator& activator = (dynamic_cast& >(baseRecord)).get(); @@ -278,7 +285,8 @@ void CSMTools::ReferenceableCheckStage::potionCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Potion& potion = (dynamic_cast& >(baseRecord)).get(); @@ -299,7 +307,8 @@ void CSMTools::ReferenceableCheckStage::apparatusCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Apparatus& apparatus = (dynamic_cast& >(baseRecord)).get(); @@ -320,7 +329,8 @@ void CSMTools::ReferenceableCheckStage::armorCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Armor& armor = (dynamic_cast& >(baseRecord)).get(); @@ -347,7 +357,8 @@ void CSMTools::ReferenceableCheckStage::clothingCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Clothing& clothing = (dynamic_cast& >(baseRecord)).get(); @@ -365,7 +376,8 @@ void CSMTools::ReferenceableCheckStage::containerCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Container& container = (dynamic_cast& >(baseRecord)).get(); @@ -397,7 +409,8 @@ void CSMTools::ReferenceableCheckStage::creatureCheck ( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Creature& creature = (dynamic_cast&>(baseRecord)).get(); @@ -473,7 +486,8 @@ void CSMTools::ReferenceableCheckStage::doorCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Door& door = (dynamic_cast&>(baseRecord)).get(); @@ -497,7 +511,8 @@ void CSMTools::ReferenceableCheckStage::ingredientCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Ingredient& ingredient = (dynamic_cast& >(baseRecord)).get(); @@ -516,10 +531,9 @@ void CSMTools::ReferenceableCheckStage::creaturesLevListCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) - { + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; - } const ESM::CreatureLevList& CreatureLevList = (dynamic_cast& >(baseRecord)).get(); CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_CreatureLevelledList, CreatureLevList.mId); //CreatureLevList but Type_CreatureLevelledList :/ @@ -534,10 +548,9 @@ void CSMTools::ReferenceableCheckStage::itemLevelledListCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) - { + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; - } const ESM::ItemLevList& ItemLevList = (dynamic_cast& >(baseRecord)).get(); CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_ItemLevelledList, ItemLevList.mId); @@ -551,7 +564,8 @@ void CSMTools::ReferenceableCheckStage::lightCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Light& light = (dynamic_cast& >(baseRecord)).get(); @@ -574,7 +588,8 @@ void CSMTools::ReferenceableCheckStage::lockpickCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Lockpick& lockpick = (dynamic_cast& >(baseRecord)).get(); @@ -595,7 +610,8 @@ void CSMTools::ReferenceableCheckStage::miscCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Miscellaneous& miscellaneous = (dynamic_cast& >(baseRecord)).get(); @@ -619,6 +635,14 @@ void CSMTools::ReferenceableCheckStage::npcCheck ( const ESM::NPC& npc = (dynamic_cast& >(baseRecord)).get(); CSMWorld::UniversalId id (CSMWorld::UniversalId::Type_Npc, npc.mId); + //Detect if player is present + if (Misc::StringUtils::ciEqual(npc.mId, "player")) //Happy now, scrawl? + mPlayerPresent = true; + + // Skip "Base" records (setting!) + if (mIgnoreBaseRecords && baseRecord.isBaseOnly()) + return; + short level(npc.mNpdt.mLevel); char disposition(npc.mNpdt.mDisposition); char reputation(npc.mNpdt.mReputation); @@ -626,10 +650,6 @@ void CSMTools::ReferenceableCheckStage::npcCheck ( //Don't know what unknown is for int gold(npc.mNpdt.mGold); - //Detect if player is present - if (Misc::StringUtils::ciEqual(npc.mId, "player")) //Happy now, scrawl? - mPlayerPresent = true; - if (npc.mNpdtType == ESM::NPC::NPC_WITH_AUTOCALCULATED_STATS) //12 = autocalculated { if ((npc.mFlags & ESM::NPC::Autocalc) == 0) //0x0010 = autocalculated flag @@ -728,7 +748,8 @@ void CSMTools::ReferenceableCheckStage::weaponCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord (stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Weapon& weapon = (dynamic_cast& >(baseRecord)).get(); @@ -808,7 +829,8 @@ void CSMTools::ReferenceableCheckStage::probeCheck( { const CSMWorld::RecordBase& baseRecord = records.getRecord(stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Probe& probe = (dynamic_cast& >(baseRecord)).get(); @@ -827,7 +849,8 @@ void CSMTools::ReferenceableCheckStage::repairCheck ( { const CSMWorld::RecordBase& baseRecord = records.getRecord (stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Repair& repair = (dynamic_cast& >(baseRecord)).get(); @@ -846,7 +869,8 @@ void CSMTools::ReferenceableCheckStage::staticCheck ( { const CSMWorld::RecordBase& baseRecord = records.getRecord (stage); - if (baseRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && baseRecord.isBaseOnly()) || baseRecord.isDeleted()) return; const ESM::Static& staticElement = (dynamic_cast& >(baseRecord)).get(); diff --git a/apps/opencs/model/tools/referenceablecheck.hpp b/apps/opencs/model/tools/referenceablecheck.hpp index 4356e50b2..f9341bd9c 100644 --- a/apps/opencs/model/tools/referenceablecheck.hpp +++ b/apps/opencs/model/tools/referenceablecheck.hpp @@ -82,6 +82,7 @@ namespace CSMTools const CSMWorld::IdCollection& mFactions; const CSMWorld::IdCollection& mScripts; bool mPlayerPresent; + bool mIgnoreBaseRecords; }; } #endif // REFERENCEABLECHECKSTAGE_H diff --git a/apps/opencs/model/tools/referencecheck.cpp b/apps/opencs/model/tools/referencecheck.cpp index 7f247741c..347a8a399 100644 --- a/apps/opencs/model/tools/referencecheck.cpp +++ b/apps/opencs/model/tools/referencecheck.cpp @@ -1,5 +1,7 @@ #include "referencecheck.hpp" +#include "../prefs/state.hpp" + CSMTools::ReferenceCheckStage::ReferenceCheckStage( const CSMWorld::RefCollection& references, const CSMWorld::RefIdCollection& referencables, @@ -12,13 +14,15 @@ CSMTools::ReferenceCheckStage::ReferenceCheckStage( mCells(cells), mFactions(factions) { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); } void CSMTools::ReferenceCheckStage::perform(int stage, CSMDoc::Messages &messages) { const CSMWorld::Record& record = mReferences.getRecord(stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const CSMWorld::CellRef& cellRef = record.get(); @@ -100,5 +104,7 @@ void CSMTools::ReferenceCheckStage::perform(int stage, CSMDoc::Messages &message int CSMTools::ReferenceCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mReferences.getSize(); } diff --git a/apps/opencs/model/tools/referencecheck.hpp b/apps/opencs/model/tools/referencecheck.hpp index 70ef02916..5e25924f3 100644 --- a/apps/opencs/model/tools/referencecheck.hpp +++ b/apps/opencs/model/tools/referencecheck.hpp @@ -23,6 +23,7 @@ namespace CSMTools const CSMWorld::RefIdData& mDataSet; const CSMWorld::IdCollection& mCells; const CSMWorld::IdCollection& mFactions; + bool mIgnoreBaseRecords; }; } diff --git a/apps/opencs/model/tools/regioncheck.cpp b/apps/opencs/model/tools/regioncheck.cpp index 734861080..45b311414 100644 --- a/apps/opencs/model/tools/regioncheck.cpp +++ b/apps/opencs/model/tools/regioncheck.cpp @@ -5,14 +5,20 @@ #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::RegionCheckStage::RegionCheckStage (const CSMWorld::IdCollection& regions) : mRegions (regions) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::RegionCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mRegions.getSize(); } @@ -20,7 +26,8 @@ void CSMTools::RegionCheckStage::perform (int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mRegions.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::Region& region = record.get(); diff --git a/apps/opencs/model/tools/regioncheck.hpp b/apps/opencs/model/tools/regioncheck.hpp index 8ba32e137..4c12727f0 100644 --- a/apps/opencs/model/tools/regioncheck.hpp +++ b/apps/opencs/model/tools/regioncheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class RegionCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mRegions; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/scriptcheck.cpp b/apps/opencs/model/tools/scriptcheck.cpp index 268aea379..bf5d48f65 100644 --- a/apps/opencs/model/tools/scriptcheck.cpp +++ b/apps/opencs/model/tools/scriptcheck.cpp @@ -60,6 +60,8 @@ CSMTools::ScriptCheckStage::ScriptCheckStage (const CSMDoc::Document& document) Compiler::registerExtensions (mExtensions); mContext.setExtensions (&mExtensions); + + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); } int CSMTools::ScriptCheckStage::setup() @@ -78,17 +80,25 @@ int CSMTools::ScriptCheckStage::setup() mId.clear(); Compiler::ErrorHandler::reset(); + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mDocument.getData().getScripts().getSize(); } void CSMTools::ScriptCheckStage::perform (int stage, CSMDoc::Messages& messages) { + const CSMWorld::Record &record = mDocument.getData().getScripts().getRecord(stage); + mId = mDocument.getData().getScripts().getId (stage); if (mDocument.isBlacklisted ( CSMWorld::UniversalId (CSMWorld::UniversalId::Type_Script, mId))) return; + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) + return; + mMessages = &messages; switch (mWarningMode) @@ -100,10 +110,8 @@ void CSMTools::ScriptCheckStage::perform (int stage, CSMDoc::Messages& messages) try { - const CSMWorld::Data& data = mDocument.getData(); - - mFile = data.getScripts().getRecord (stage).get().mId; - std::istringstream input (data.getScripts().getRecord (stage).get().mScriptText); + mFile = record.get().mId; + std::istringstream input (record.get().mScriptText); Compiler::Scanner scanner (*this, input, mContext.getExtensions()); diff --git a/apps/opencs/model/tools/scriptcheck.hpp b/apps/opencs/model/tools/scriptcheck.hpp index f58215800..8f4ac9763 100644 --- a/apps/opencs/model/tools/scriptcheck.hpp +++ b/apps/opencs/model/tools/scriptcheck.hpp @@ -32,6 +32,7 @@ namespace CSMTools std::string mFile; CSMDoc::Messages *mMessages; WarningMode mWarningMode; + bool mIgnoreBaseRecords; CSMDoc::Message::Severity getSeverity (Type type); diff --git a/apps/opencs/model/tools/skillcheck.cpp b/apps/opencs/model/tools/skillcheck.cpp index 77ba8d4a2..2214ec11a 100644 --- a/apps/opencs/model/tools/skillcheck.cpp +++ b/apps/opencs/model/tools/skillcheck.cpp @@ -4,14 +4,20 @@ #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::SkillCheckStage::SkillCheckStage (const CSMWorld::IdCollection& skills) : mSkills (skills) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::SkillCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mSkills.getSize(); } @@ -19,7 +25,8 @@ void CSMTools::SkillCheckStage::perform (int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mSkills.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::Skill& skill = record.get(); diff --git a/apps/opencs/model/tools/skillcheck.hpp b/apps/opencs/model/tools/skillcheck.hpp index 93b06fe71..edd6b79a0 100644 --- a/apps/opencs/model/tools/skillcheck.hpp +++ b/apps/opencs/model/tools/skillcheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class SkillCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mSkills; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/soundcheck.cpp b/apps/opencs/model/tools/soundcheck.cpp index 3dbd3ef11..b21341333 100644 --- a/apps/opencs/model/tools/soundcheck.cpp +++ b/apps/opencs/model/tools/soundcheck.cpp @@ -4,14 +4,20 @@ #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::SoundCheckStage::SoundCheckStage (const CSMWorld::IdCollection& sounds) : mSounds (sounds) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::SoundCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mSounds.getSize(); } @@ -19,7 +25,8 @@ void CSMTools::SoundCheckStage::perform (int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mSounds.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::Sound& sound = record.get(); diff --git a/apps/opencs/model/tools/soundcheck.hpp b/apps/opencs/model/tools/soundcheck.hpp index 52f2d3714..d6fff5263 100644 --- a/apps/opencs/model/tools/soundcheck.hpp +++ b/apps/opencs/model/tools/soundcheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class SoundCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mSounds; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/soundgencheck.cpp b/apps/opencs/model/tools/soundgencheck.cpp index a36c494a1..acd245016 100644 --- a/apps/opencs/model/tools/soundgencheck.cpp +++ b/apps/opencs/model/tools/soundgencheck.cpp @@ -2,6 +2,8 @@ #include +#include "../prefs/state.hpp" + #include "../world/refiddata.hpp" #include "../world/universalid.hpp" @@ -11,20 +13,24 @@ CSMTools::SoundGenCheckStage::SoundGenCheckStage(const CSMWorld::IdCollection &record = mSoundGens.getRecord(stage); - if (record.isDeleted()) - { + + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; - } const ESM::SoundGenerator& soundGen = record.get(); CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_SoundGen, soundGen.mId); diff --git a/apps/opencs/model/tools/soundgencheck.hpp b/apps/opencs/model/tools/soundgencheck.hpp index 91b08f979..19388cb91 100644 --- a/apps/opencs/model/tools/soundgencheck.hpp +++ b/apps/opencs/model/tools/soundgencheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools const CSMWorld::IdCollection &mSoundGens; const CSMWorld::IdCollection &mSounds; const CSMWorld::RefIdCollection &mReferenceables; + bool mIgnoreBaseRecords; public: SoundGenCheckStage(const CSMWorld::IdCollection &soundGens, diff --git a/apps/opencs/model/tools/spellcheck.cpp b/apps/opencs/model/tools/spellcheck.cpp index 91aed37ed..6fb38138b 100644 --- a/apps/opencs/model/tools/spellcheck.cpp +++ b/apps/opencs/model/tools/spellcheck.cpp @@ -5,14 +5,20 @@ #include +#include "../prefs/state.hpp" + #include "../world/universalid.hpp" CSMTools::SpellCheckStage::SpellCheckStage (const CSMWorld::IdCollection& spells) : mSpells (spells) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::SpellCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mSpells.getSize(); } @@ -20,7 +26,8 @@ void CSMTools::SpellCheckStage::perform (int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mSpells.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; const ESM::Spell& spell = record.get(); diff --git a/apps/opencs/model/tools/spellcheck.hpp b/apps/opencs/model/tools/spellcheck.hpp index 9c3ea8885..03513adc3 100644 --- a/apps/opencs/model/tools/spellcheck.hpp +++ b/apps/opencs/model/tools/spellcheck.hpp @@ -13,6 +13,7 @@ namespace CSMTools class SpellCheckStage : public CSMDoc::Stage { const CSMWorld::IdCollection& mSpells; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/startscriptcheck.cpp b/apps/opencs/model/tools/startscriptcheck.cpp index 220751797..64c1c9209 100644 --- a/apps/opencs/model/tools/startscriptcheck.cpp +++ b/apps/opencs/model/tools/startscriptcheck.cpp @@ -1,18 +1,23 @@ #include "startscriptcheck.hpp" +#include "../prefs/state.hpp" + #include CSMTools::StartScriptCheckStage::StartScriptCheckStage ( const CSMWorld::IdCollection& startScripts, const CSMWorld::IdCollection& scripts) : mStartScripts (startScripts), mScripts (scripts) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} void CSMTools::StartScriptCheckStage::perform(int stage, CSMDoc::Messages& messages) { const CSMWorld::Record& record = mStartScripts.getRecord (stage); - if (record.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && record.isBaseOnly()) || record.isDeleted()) return; std::string scriptId = record.get().mId; @@ -26,5 +31,7 @@ void CSMTools::StartScriptCheckStage::perform(int stage, CSMDoc::Messages& messa int CSMTools::StartScriptCheckStage::setup() { + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mStartScripts.getSize(); } diff --git a/apps/opencs/model/tools/startscriptcheck.hpp b/apps/opencs/model/tools/startscriptcheck.hpp index cb82cbae7..a7d70ee5a 100644 --- a/apps/opencs/model/tools/startscriptcheck.hpp +++ b/apps/opencs/model/tools/startscriptcheck.hpp @@ -14,6 +14,7 @@ namespace CSMTools { const CSMWorld::IdCollection& mStartScripts; const CSMWorld::IdCollection& mScripts; + bool mIgnoreBaseRecords; public: diff --git a/apps/opencs/model/tools/topicinfocheck.cpp b/apps/opencs/model/tools/topicinfocheck.cpp index 05f02c763..69ebec96b 100644 --- a/apps/opencs/model/tools/topicinfocheck.cpp +++ b/apps/opencs/model/tools/topicinfocheck.cpp @@ -2,6 +2,8 @@ #include +#include "../prefs/state.hpp" + #include "../world/infoselectwrapper.hpp" CSMTools::TopicInfoCheckStage::TopicInfoCheckStage( @@ -29,7 +31,9 @@ CSMTools::TopicInfoCheckStage::TopicInfoCheckStage( mTopics(topics), mReferencables(referencables), mSoundFiles(soundFiles) -{} +{ + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); +} int CSMTools::TopicInfoCheckStage::setup() { @@ -67,6 +71,8 @@ int CSMTools::TopicInfoCheckStage::setup() } } + mIgnoreBaseRecords = CSMPrefs::get()["Reports"]["ignore-base-records"].isTrue(); + return mTopicInfos.getSize(); } @@ -74,7 +80,8 @@ void CSMTools::TopicInfoCheckStage::perform(int stage, CSMDoc::Messages& message { const CSMWorld::Record& infoRecord = mTopicInfos.getRecord(stage); - if (infoRecord.isDeleted()) + // Skip "Base" records (setting!) and "Deleted" records + if ((mIgnoreBaseRecords && infoRecord.isBaseOnly()) || infoRecord.isDeleted()) return; const CSMWorld::Info& topicInfo = infoRecord.get(); diff --git a/apps/opencs/model/tools/topicinfocheck.hpp b/apps/opencs/model/tools/topicinfocheck.hpp index 510901dac..dbd5fe1c5 100644 --- a/apps/opencs/model/tools/topicinfocheck.hpp +++ b/apps/opencs/model/tools/topicinfocheck.hpp @@ -65,6 +65,8 @@ namespace CSMTools std::set mCellNames; + bool mIgnoreBaseRecords; + // These return false when not successful and write an error bool verifyActor(const std::string& name, const CSMWorld::UniversalId& id, CSMDoc::Messages& messages); bool verifyCell(const std::string& name, const CSMWorld::UniversalId& id, CSMDoc::Messages& messages); diff --git a/apps/opencs/model/world/record.cpp b/apps/opencs/model/world/record.cpp index f13a36afc..3291b0462 100644 --- a/apps/opencs/model/world/record.cpp +++ b/apps/opencs/model/world/record.cpp @@ -2,6 +2,11 @@ CSMWorld::RecordBase::~RecordBase() {} +bool CSMWorld::RecordBase::isBaseOnly() const +{ + return mState == State_BaseOnly; +} + bool CSMWorld::RecordBase::isDeleted() const { return mState==State_Deleted || mState==State_Erased; diff --git a/apps/opencs/model/world/record.hpp b/apps/opencs/model/world/record.hpp index 3362f9f96..0468bf8e7 100644 --- a/apps/opencs/model/world/record.hpp +++ b/apps/opencs/model/world/record.hpp @@ -27,6 +27,8 @@ namespace CSMWorld virtual void assign (const RecordBase& record) = 0; ///< Will throw an exception if the types don't match. + bool isBaseOnly() const; + bool isDeleted() const; bool isErased() const;