diff --git a/apps/opencs/model/tools/referenceablecheck.cpp b/apps/opencs/model/tools/referenceablecheck.cpp index 8a1103c3d..d3901ac88 100644 --- a/apps/opencs/model/tools/referenceablecheck.cpp +++ b/apps/opencs/model/tools/referenceablecheck.cpp @@ -1,6 +1,7 @@ #include "referenceablecheck.hpp" #include +#include #include "../prefs/state.hpp" @@ -12,13 +13,15 @@ CSMTools::ReferenceableCheckStage::ReferenceableCheckStage( const CSMWorld::IdCollection& classes, const CSMWorld::IdCollection& faction, const CSMWorld::IdCollection& scripts, - const CSMWorld::Resources& models) + const CSMWorld::Resources& models, + const CSMWorld::Resources& icons) :mObjects(referenceable), mRaces(races), mClasses(classes), mFactions(faction), mScripts(scripts), mModels(models), + mIcons(icons), mPlayerPresent(false) { mIgnoreBaseRecords = false; @@ -953,7 +956,13 @@ template void CSMTools::ReferenceableCheckStage::inventoryItemChe //checking for icon if (someItem.mIcon.empty()) - messages.push_back (std::make_pair (someID, "Icon is missing")); // ADD CHECK HERE + messages.push_back (std::make_pair (someID, "Icon is missing")); + else if (mIcons.searchId(someItem.mIcon) == -1) + { + std::string ddsIcon = someItem.mIcon; + if (!(Misc::ResourceHelpers::changeExtensionToDds(ddsIcon) && mIcons.searchId(ddsIcon) != -1)) + messages.push_back(std::make_pair(someID, "Icon '" + someItem.mIcon + "' does not exist")); + } if (enchantable && someItem.mData.mEnchant < 0) messages.push_back (std::make_pair (someID, "Enchantment points number is negative")); @@ -981,7 +990,13 @@ template void CSMTools::ReferenceableCheckStage::inventoryItemChe //checking for icon if (someItem.mIcon.empty()) - messages.push_back (std::make_pair (someID, "Icon is missing")); // ADD CHECK HERE + messages.push_back (std::make_pair (someID, "Icon is missing")); + else if (mIcons.searchId(someItem.mIcon) == -1) + { + std::string ddsIcon = someItem.mIcon; + if (!(Misc::ResourceHelpers::changeExtensionToDds(ddsIcon) && mIcons.searchId(ddsIcon) != -1)) + messages.push_back(std::make_pair(someID, "Icon '" + someItem.mIcon + "' does not exist")); + } } template void CSMTools::ReferenceableCheckStage::toolCheck ( diff --git a/apps/opencs/model/tools/referenceablecheck.hpp b/apps/opencs/model/tools/referenceablecheck.hpp index 24f73176c..5da737875 100644 --- a/apps/opencs/model/tools/referenceablecheck.hpp +++ b/apps/opencs/model/tools/referenceablecheck.hpp @@ -18,7 +18,8 @@ namespace CSMTools const CSMWorld::IdCollection& classes, const CSMWorld::IdCollection& factions, const CSMWorld::IdCollection& scripts, - const CSMWorld::Resources& models); + const CSMWorld::Resources& models, + const CSMWorld::Resources& icons); virtual void perform(int stage, CSMDoc::Messages& messages); virtual int setup(); @@ -84,6 +85,7 @@ namespace CSMTools const CSMWorld::IdCollection& mFactions; const CSMWorld::IdCollection& mScripts; const CSMWorld::Resources& mModels; + const CSMWorld::Resources& mIcons; bool mPlayerPresent; bool mIgnoreBaseRecords; }; diff --git a/apps/opencs/model/tools/tools.cpp b/apps/opencs/model/tools/tools.cpp index 2e471d66f..87b5041e0 100644 --- a/apps/opencs/model/tools/tools.cpp +++ b/apps/opencs/model/tools/tools.cpp @@ -83,7 +83,7 @@ CSMDoc::OperationHolder *CSMTools::Tools::getVerifier() mVerifierOperation->appendStage (new SpellCheckStage (mData.getSpells())); mVerifierOperation->appendStage (new ReferenceableCheckStage (mData.getReferenceables().getDataSet(), mData.getRaces(), mData.getClasses(), mData.getFactions(), mData.getScripts(), - mData.getResources (CSMWorld::UniversalId::Type_Meshes))); + mData.getResources (CSMWorld::UniversalId::Type_Meshes), mData.getResources (CSMWorld::UniversalId::Type_Icons))); mVerifierOperation->appendStage (new ReferenceCheckStage(mData.getReferences(), mData.getReferenceables(), mData.getCells(), mData.getFactions()));