mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-13 21:09:39 +00:00
Added aditional checks for books. Activator check.
This commit is contained in:
parent
8085fcc792
commit
f69465d7e0
4 changed files with 74 additions and 6 deletions
|
@ -4,26 +4,27 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
#include <components/esm/loadbook.hpp>
|
|
||||||
#include "../world/record.hpp"
|
#include "../world/record.hpp"
|
||||||
|
|
||||||
#include "../world/universalid.hpp"
|
#include "../world/universalid.hpp"
|
||||||
|
|
||||||
CSMTools::ReferenceableCheckStage::ReferenceableCheckStage(const CSMWorld::RefIdData& referenceable) :
|
CSMTools::ReferenceableCheckStage::ReferenceableCheckStage(const CSMWorld::RefIdData& referenceable) :
|
||||||
mReferencables(referenceable),
|
mReferencables(referenceable),
|
||||||
mBooksSize(0)
|
mBooksSize(0),
|
||||||
|
mActivatorsSize(0)
|
||||||
{
|
{
|
||||||
setSizeVariables();
|
setSizeVariables();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::string >& messages)
|
void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::string >& messages)
|
||||||
{
|
{
|
||||||
//Checks for books, than, when stage is above mBooksSize goes to other checks, with stage - minus prev sizes as stage.
|
//Checks for books, than, when stage is above mBooksSize goes to other checks, with (stage - PrevSum) as stage.
|
||||||
bool CheckPerformed = false;
|
bool CheckPerformed = false;
|
||||||
|
int PrevSum(0);
|
||||||
|
|
||||||
if (stage <= mBooksSize)
|
if (stage <= mBooksSize)
|
||||||
{
|
{
|
||||||
bookCheck(stage, mReferencables.getBooks(), messages);
|
bookCheck(stage, mReferencables.getBooks(), messages);
|
||||||
CheckPerformed = true;
|
CheckPerformed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +32,21 @@ void CSMTools::ReferenceableCheckStage::perform(int stage, std::vector< std::str
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PrevSum += mBooksSize;
|
||||||
|
|
||||||
|
if ((stage - PrevSum) <= mActivatorsSize)
|
||||||
|
{
|
||||||
|
activatorCheck(stage - PrevSum, mReferencables.getActivator(), messages);
|
||||||
|
CheckPerformed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CheckPerformed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrevSum += mActivatorsSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
int CSMTools::ReferenceableCheckStage::setup()
|
int CSMTools::ReferenceableCheckStage::setup()
|
||||||
|
@ -55,9 +71,53 @@ void CSMTools::ReferenceableCheckStage::bookCheck(int stage, const CSMWorld::Ref
|
||||||
{
|
{
|
||||||
messages.push_back(id.toString() + "|" + Book.mId + " has an empty name");
|
messages.push_back(id.toString() + "|" + Book.mId + " has an empty name");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Checking for weight
|
||||||
|
if (Book.mData.mWeight < 0)
|
||||||
|
{
|
||||||
|
messages.push_back(id.toString() + "|" + Book.mId + " has a negative weight");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Checking for value
|
||||||
|
if (Book.mData.mValue < 0)
|
||||||
|
{
|
||||||
|
messages.push_back(id.toString() + "|" + Book.mId + " has a negative value");
|
||||||
|
}
|
||||||
|
|
||||||
|
//checking for model
|
||||||
|
if (Book.mModel.empty())
|
||||||
|
{
|
||||||
|
messages.push_back(id.toString() + "|" + Book.mId + " has no model");
|
||||||
|
}
|
||||||
|
|
||||||
|
//checking for icon
|
||||||
|
if (Book.mIcon.empty())
|
||||||
|
{
|
||||||
|
messages.push_back(id.toString() + "|" + Book.mId + " has no icon");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSMTools::ReferenceableCheckStage::activatorCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::Activator >& records, std::vector< std::string >& messages)
|
||||||
|
{
|
||||||
|
const CSMWorld::RecordBase& baserecord = records.getRecord(stage);
|
||||||
|
|
||||||
|
if (baserecord.isDeleted())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ESM::Activator& Activator = (static_cast<const CSMWorld::Record<ESM::Activator>& >(baserecord)).get();
|
||||||
|
CSMWorld::UniversalId id(CSMWorld::UniversalId::Type_Activator, Activator.mId);
|
||||||
|
|
||||||
|
//Checking for model, IIRC all activators should have a model
|
||||||
|
if (Activator.mModel.empty())
|
||||||
|
{
|
||||||
|
messages.push_back(id.toString() + "|" + Activator.mId + " has no model");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSMTools::ReferenceableCheckStage::setSizeVariables()
|
void CSMTools::ReferenceableCheckStage::setSizeVariables()
|
||||||
{
|
{
|
||||||
mBooksSize = mReferencables.getBooks().getSize();
|
mBooksSize = mReferencables.getBooks().getSize();
|
||||||
|
mActivatorsSize = mReferencables.getActivator().getSize();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,12 @@ namespace CSMTools
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void bookCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::Book >& records, std::vector< std::string >& messages);
|
void bookCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::Book >& records, std::vector< std::string >& messages);
|
||||||
|
void activatorCheck(int stage, const CSMWorld::RefIdDataContainer< ESM::Activator >& records, std::vector< std::string >& messages);
|
||||||
void setSizeVariables();
|
void setSizeVariables();
|
||||||
|
|
||||||
const CSMWorld::RefIdData mReferencables;
|
const CSMWorld::RefIdData mReferencables;
|
||||||
int mBooksSize;
|
int mBooksSize;
|
||||||
|
int mActivatorsSize;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif // REFERENCEABLECHECKSTAGE_H
|
#endif // REFERENCEABLECHECKSTAGE_H
|
||||||
|
|
|
@ -236,3 +236,8 @@ const CSMWorld::RefIdDataContainer< ESM::Book >& CSMWorld::RefIdData::getBooks()
|
||||||
{
|
{
|
||||||
return mBooks;
|
return mBooks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CSMWorld::RefIdDataContainer< ESM::Activator >& CSMWorld::RefIdData::getActivator() const
|
||||||
|
{
|
||||||
|
return mActivators;
|
||||||
|
}
|
||||||
|
|
|
@ -222,6 +222,7 @@ namespace CSMWorld
|
||||||
|
|
||||||
//RECORD CONTAINERS ACCESS METHODS
|
//RECORD CONTAINERS ACCESS METHODS
|
||||||
const RefIdDataContainer<ESM::Book>& getBooks() const;
|
const RefIdDataContainer<ESM::Book>& getBooks() const;
|
||||||
|
const RefIdDataContainer<ESM::Activator>& getActivator() const;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue