From 16af9e69865632a88036ab32c70e6a6e3387ce40 Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Sun, 22 Dec 2013 14:42:17 +0100 Subject: [PATCH] added container check --- .../opencs/model/tools/referenceablecheck.cpp | 39 +++++++++++++++++++ .../opencs/model/tools/referenceablecheck.hpp | 1 + 2 files changed, 40 insertions(+) diff --git a/apps/opencs/model/tools/referenceablecheck.cpp b/apps/opencs/model/tools/referenceablecheck.cpp index 055244cab..f08aadf86 100644 --- a/apps/opencs/model/tools/referenceablecheck.cpp +++ b/apps/opencs/model/tools/referenceablecheck.cpp @@ -82,6 +82,14 @@ void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::str } stage -= mClothingSize; + + if (stage < mContainersSize) + { + containerCheck(stage, mReferencables.getContainers(), messages); + return; + } + + stage -= mContainersSize; } int CSMTools::ReferenceableCheckStage::setup() @@ -361,3 +369,34 @@ void CSMTools::ReferenceableCheckStage::clothingCheck(int stage, const CSMWorld: messages.push_back(id.toString() + "|" + Clothing.mId + " has negative enchantment"); } } + +void CSMTools::ReferenceableCheckStage::containerCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::Container >& records, std::vector< std::string >& messages) +{ + const CSMWorld::RecordBase& baserecord = records.getRecord(stage); + + if (baserecord.isDeleted()) + { + return; + } + + const ESM::Container& Container = (static_cast& >(baserecord)).get(); + CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_Container, Container.mId); + + //Checking for model, IIRC all containers should have a model + if (Container.mModel.empty()) + { + messages.push_back(id.toString() + "|" + Container.mId + " has no model"); + } + + //Checking for capacity (weight) + if (Container.mWeight < 0) //0 is allowed + { + messages.push_back(id.toString() + "|" + Container.mId + " has negative weight (capacity)"); + } + + //checking for name + if (Container.mName.empty()) + { + messages.push_back(id.toString() + "|" + Container.mId + " has an empty name"); + } +} diff --git a/apps/opencs/model/tools/referenceablecheck.hpp b/apps/opencs/model/tools/referenceablecheck.hpp index 1c88c8cfe..b55db38c6 100644 --- a/apps/opencs/model/tools/referenceablecheck.hpp +++ b/apps/opencs/model/tools/referenceablecheck.hpp @@ -23,6 +23,7 @@ namespace CSMTools void apparatusCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void armorCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void clothingCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); + void containerCheck(int stage, const CSMWorld::RefIdDataContainer& records, std::vector& messages); void setSizeVariables();