From 6c95cea4c48c1e2dcde5819481715070b5289a65 Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Thu, 26 Dec 2013 15:24:52 +0100 Subject: [PATCH] Added ingredient check --- .../opencs/model/tools/referenceablecheck.cpp | 61 ++++++++++++++++--- .../opencs/model/tools/referenceablecheck.hpp | 2 + apps/opencs/model/world/refiddata.cpp | 4 ++ apps/opencs/model/world/refiddata.hpp | 1 + 4 files changed, 61 insertions(+), 7 deletions(-) diff --git a/apps/opencs/model/tools/referenceablecheck.cpp b/apps/opencs/model/tools/referenceablecheck.cpp index 03efb59cc..589372f8a 100644 --- a/apps/opencs/model/tools/referenceablecheck.cpp +++ b/apps/opencs/model/tools/referenceablecheck.cpp @@ -18,7 +18,8 @@ CSMTools::ReferenceableCheckStage::ReferenceableCheckStage(const CSMWorld::RefId mClothingSize(0), mContainersSize(0), mCreaturesSize(0), - mDoorsSize(0) + mDoorsSize(0), + mIngredientsSize(0) { setSizeVariables(); } @@ -34,6 +35,7 @@ void CSMTools::ReferenceableCheckStage::setSizeVariables() mContainersSize = mReferencables.getContainers().getSize(); mCreaturesSize = mReferencables.getCreatures().getSize(); mDoorsSize = mReferencables.getDoors().getSize(); + mIngredientsSize = mReferencables.getIngredients().getSize(); } void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::string >& messages) @@ -94,13 +96,13 @@ void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::str } stage -= mContainersSize; - + if (stage < mDoorsSize) { - doorCheck(stage, mReferencables.getDoors(), messages); - return; + doorCheck(stage, mReferencables.getDoors(), messages); + return; } - + stage -= mDoorsSize; } @@ -516,9 +518,9 @@ void CSMTools::ReferenceableCheckStage::doorCheck(int stage, const CSMWorld::Ref return; } - const ESM::Door& Door= (static_cast&>(baserecord)).get(); + const ESM::Door& Door = (static_cast&>(baserecord)).get(); CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_Door, Door.mId); - + //usual, name and model if (Door.mName.empty()) { @@ -529,4 +531,49 @@ void CSMTools::ReferenceableCheckStage::doorCheck(int stage, const CSMWorld::Ref { messages.push_back(id.toString() + "|" + Door.mId + " has no model"); } + + //TODO, check what static unsigned int sRecordId; is for +} + +void CSMTools::ReferenceableCheckStage::ingredientCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::Ingredient >& records, std::vector< std::string >& messages) +{ + const CSMWorld::RecordBase& baserecord = records.getRecord(stage); + + if (baserecord.isDeleted()) + { + return; + } + + const ESM::Ingredient& Ingredient = (static_cast& >(baserecord)).get(); + CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_Ingredient, Ingredient.mId); + + //Checking for name + if (Ingredient.mName.empty()) + { + messages.push_back(id.toString() + "|" + Ingredient.mId + " has an empty name"); + } + + //Checking for weight + if (Ingredient.mData.mWeight < 0) + { + messages.push_back(id.toString() + "|" + Ingredient.mId + " has negative weight"); + } + + //Checking for value + if (Ingredient.mData.mValue < 0) + { + messages.push_back(id.toString() + "|" + Ingredient.mId + " has negative value"); + } + +//checking for model + if (Ingredient.mModel.empty()) + { + messages.push_back(id.toString() + "|" + Ingredient.mId + " has no model"); + } + + //checking for icon + if (Ingredient.mIcon.empty()) + { + messages.push_back(id.toString() + "|" + Ingredient.mId + " has no icon"); + } } diff --git a/apps/opencs/model/tools/referenceablecheck.hpp b/apps/opencs/model/tools/referenceablecheck.hpp index 3a0b2a4b8..c7c418ff6 100644 --- a/apps/opencs/model/tools/referenceablecheck.hpp +++ b/apps/opencs/model/tools/referenceablecheck.hpp @@ -26,6 +26,7 @@ namespace CSMTools void containerCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void creatureCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void doorCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); + void ingredientCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void setSizeVariables(); @@ -41,6 +42,7 @@ namespace CSMTools int mContainersSize; int mCreaturesSize; int mDoorsSize; + int mIngredientsSize; }; } #endif // REFERENCEABLECHECKSTAGE_H diff --git a/apps/opencs/model/world/refiddata.cpp b/apps/opencs/model/world/refiddata.cpp index 83ff79cc8..8af42703e 100644 --- a/apps/opencs/model/world/refiddata.cpp +++ b/apps/opencs/model/world/refiddata.cpp @@ -277,3 +277,7 @@ const CSMWorld::RefIdDataContainer< ESM::Door >& CSMWorld::RefIdData::getDoors() return mDoors; } +const CSMWorld::RefIdDataContainer< ESM::Ingredient >& CSMWorld::RefIdData::getIngredients() const +{ + return mIngredients; +} diff --git a/apps/opencs/model/world/refiddata.hpp b/apps/opencs/model/world/refiddata.hpp index 87818c9c9..6a67ed1c8 100644 --- a/apps/opencs/model/world/refiddata.hpp +++ b/apps/opencs/model/world/refiddata.hpp @@ -230,6 +230,7 @@ namespace CSMWorld const RefIdDataContainer& getContainers() const; const RefIdDataContainer& getCreatures() const; const RefIdDataContainer& getDoors() const; + const RefIdDataContainer& getIngredients() const; }; }