From 1da56e1790f084d267f802e32a746d4f61c1f2a7 Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Thu, 26 Dec 2013 18:28:24 +0100 Subject: [PATCH] checkin leveled items lists --- .../opencs/model/tools/referenceablecheck.cpp | 45 +++++++++++++++++-- .../opencs/model/tools/referenceablecheck.hpp | 2 + apps/opencs/model/world/refiddata.cpp | 5 +++ apps/opencs/model/world/refiddata.hpp | 1 + 4 files changed, 50 insertions(+), 3 deletions(-) diff --git a/apps/opencs/model/tools/referenceablecheck.cpp b/apps/opencs/model/tools/referenceablecheck.cpp index 0abebc709..e2091de2e 100644 --- a/apps/opencs/model/tools/referenceablecheck.cpp +++ b/apps/opencs/model/tools/referenceablecheck.cpp @@ -20,7 +20,8 @@ CSMTools::ReferenceableCheckStage::ReferenceableCheckStage(const CSMWorld::RefId mCreaturesSize(0), mDoorsSize(0), mIngredientsSize(0), - mCreaturesLevListsSize(0) + mCreaturesLevListsSize(0), + mItemLevelledListsSize(0) { setSizeVariables(); } @@ -38,6 +39,7 @@ void CSMTools::ReferenceableCheckStage::setSizeVariables() mDoorsSize = mReferencables.getDoors().getSize(); mIngredientsSize = mReferencables.getIngredients().getSize(); mCreaturesLevListsSize = mReferencables.getCreatureLevelledLists().getSize(); + mItemLevelledListsSize = mReferencables.getItemLevelledList().getSize(); } void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::string >& messages) @@ -122,6 +124,14 @@ void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::str } stage -= mCreaturesLevListsSize; + + if (stage < mItemLevelledListsSize) + { + mItemLevelledListCheck(stage, mReferencables.getItemLevelledList(), messages); + return; + } + + stage -= mItemLevelledListsSize; } int CSMTools::ReferenceableCheckStage::setup() @@ -625,6 +635,35 @@ void CSMTools::ReferenceableCheckStage::creaturesLevListCheck(int stage, const C { messages.push_back(id.toString() + "|" + CreatureLevList.mId + " chance to be empty is not beetween 0 and 100"); } - - //TODO(!) +} + +void CSMTools::ReferenceableCheckStage::mItemLevelledListCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::ItemLevList >& records, std::vector< std::string >& messages) +{ + const CSMWorld::RecordBase& baserecord = records.getRecord(stage); + + if (baserecord.isDeleted()) + { + return; + } + + const ESM::ItemLevList& ItemLevList = (static_cast& >(baserecord)).get(); + CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_ItemLevelledList, CreatureLevList.mId); + + for (int i = 0; i < ItemLevList.mList.size(); ++i) + { + if (ItemLevList.mList[i].mId.empty()) + { + messages.push_back(id.toString() + "|" + ItemLevList.mId + " contains item with empty Id"); + } + + if (ItemLevList.mList[i].mLevel < 1) + { + messages.push_back(id.toString() + "|" + ItemLevList.mId + " contains item with non-positive level"); + } + } + + if (ItemLevList.mChanceNone < 0 or ItemLevList.mChanceNone > 100) + { + messages.push_back(id.toString() + "|" + ItemLevList.mId + " chance to be empty is not beetween 0 and 100"); + } } diff --git a/apps/opencs/model/tools/referenceablecheck.hpp b/apps/opencs/model/tools/referenceablecheck.hpp index 8fd123b06..5a0d39ec5 100644 --- a/apps/opencs/model/tools/referenceablecheck.hpp +++ b/apps/opencs/model/tools/referenceablecheck.hpp @@ -28,6 +28,7 @@ namespace CSMTools void doorCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void ingredientCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void creaturesLevListCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); + void mItemLevelledListCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void setSizeVariables(); @@ -45,6 +46,7 @@ namespace CSMTools int mDoorsSize; int mIngredientsSize; int mCreaturesLevListsSize; + int mItemLevelledListsSize; }; } #endif // REFERENCEABLECHECKSTAGE_H diff --git a/apps/opencs/model/world/refiddata.cpp b/apps/opencs/model/world/refiddata.cpp index aec20b188..7f3e6506b 100644 --- a/apps/opencs/model/world/refiddata.cpp +++ b/apps/opencs/model/world/refiddata.cpp @@ -286,3 +286,8 @@ const CSMWorld::RefIdDataContainer< ESM::CreatureLevList >& CSMWorld::RefIdData: { return mCreatureLevelledLists; } + +const CSMWorld::RefIdDataContainer< ESM::ItemLevList >& CSMWorld::RefIdData::getItemLevelledList() const +{ + return mItemLevelledLists; +} diff --git a/apps/opencs/model/world/refiddata.hpp b/apps/opencs/model/world/refiddata.hpp index 02ca53953..6e7231a24 100644 --- a/apps/opencs/model/world/refiddata.hpp +++ b/apps/opencs/model/world/refiddata.hpp @@ -232,6 +232,7 @@ namespace CSMWorld const RefIdDataContainer& getDoors() const; const RefIdDataContainer& getIngredients() const; const RefIdDataContainer& getCreatureLevelledLists() const; + const RefIdDataContainer& getItemLevelledList() const; }; }