mirror of https://github.com/OpenMW/openmw.git
Merge branch 'verifiers' into 'master'
Complain about fishy local variable names, improve editor effect list handling See merge request OpenMW/openmw!4160pull/3236/head
commit
61772fa234
@ -0,0 +1,88 @@
|
||||
#include "effectlistcheck.hpp"
|
||||
|
||||
#include <components/esm/attr.hpp>
|
||||
#include <components/esm3/effectlist.hpp>
|
||||
#include <components/esm3/loadingr.hpp>
|
||||
#include <components/esm3/loadmgef.hpp>
|
||||
#include <components/esm3/loadskil.hpp>
|
||||
|
||||
#include <apps/opencs/model/doc/messages.hpp>
|
||||
#include <apps/opencs/model/world/universalid.hpp>
|
||||
|
||||
namespace CSMTools
|
||||
{
|
||||
void effectListCheck(
|
||||
const std::vector<ESM::IndexedENAMstruct>& list, CSMDoc::Messages& messages, const CSMWorld::UniversalId& id)
|
||||
{
|
||||
if (list.empty())
|
||||
{
|
||||
messages.add(id, "No magic effects", "", CSMDoc::Message::Severity_Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
size_t i = 1;
|
||||
for (const ESM::IndexedENAMstruct& effect : list)
|
||||
{
|
||||
const std::string number = std::to_string(i);
|
||||
|
||||
// At the time of writing this effects, attributes and skills are mostly hardcoded
|
||||
if (effect.mData.mEffectID < 0 || effect.mData.mEffectID >= ESM::MagicEffect::Length)
|
||||
messages.add(id, "Effect #" + number + ": invalid effect ID", "", CSMDoc::Message::Severity_Error);
|
||||
if (effect.mData.mSkill < -1 || effect.mData.mSkill >= ESM::Skill::Length)
|
||||
messages.add(id, "Effect #" + number + ": invalid skill", "", CSMDoc::Message::Severity_Error);
|
||||
if (effect.mData.mAttribute < -1 || effect.mData.mAttribute >= ESM::Attribute::Length)
|
||||
messages.add(id, "Effect #" + number + ": invalid attribute", "", CSMDoc::Message::Severity_Error);
|
||||
|
||||
if (effect.mData.mRange < ESM::RT_Self || effect.mData.mRange > ESM::RT_Target)
|
||||
messages.add(id, "Effect #" + number + ": invalid range", "", CSMDoc::Message::Severity_Error);
|
||||
|
||||
if (effect.mData.mArea < 0)
|
||||
messages.add(id, "Effect #" + number + ": negative area", "", CSMDoc::Message::Severity_Error);
|
||||
|
||||
if (effect.mData.mDuration < 0)
|
||||
messages.add(id, "Effect #" + number + ": negative duration", "", CSMDoc::Message::Severity_Error);
|
||||
|
||||
if (effect.mData.mMagnMin < 0)
|
||||
messages.add(
|
||||
id, "Effect #" + number + ": negative minimum magnitude", "", CSMDoc::Message::Severity_Error);
|
||||
|
||||
if (effect.mData.mMagnMax < 0)
|
||||
messages.add(
|
||||
id, "Effect #" + number + ": negative maximum magnitude", "", CSMDoc::Message::Severity_Error);
|
||||
else if (effect.mData.mMagnMax == 0)
|
||||
messages.add(
|
||||
id, "Effect #" + number + ": zero maximum magnitude", "", CSMDoc::Message::Severity_Warning);
|
||||
|
||||
if (effect.mData.mMagnMin > effect.mData.mMagnMax)
|
||||
messages.add(id, "Effect #" + number + ": minimum magnitude is higher than maximum magnitude", "",
|
||||
CSMDoc::Message::Severity_Error);
|
||||
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
void ingredientEffectListCheck(
|
||||
const ESM::Ingredient& ingredient, CSMDoc::Messages& messages, const CSMWorld::UniversalId& id)
|
||||
{
|
||||
bool hasEffects = false;
|
||||
|
||||
for (size_t i = 0; i < 4; i++)
|
||||
{
|
||||
if (ingredient.mData.mEffectID[i] == -1)
|
||||
continue;
|
||||
|
||||
hasEffects = true;
|
||||
|
||||
const std::string number = std::to_string(i + 1);
|
||||
if (ingredient.mData.mEffectID[i] < -1 || ingredient.mData.mEffectID[i] >= ESM::MagicEffect::Length)
|
||||
messages.add(id, "Effect #" + number + ": invalid effect ID", "", CSMDoc::Message::Severity_Error);
|
||||
if (ingredient.mData.mSkills[i] < -1 || ingredient.mData.mSkills[i] >= ESM::Skill::Length)
|
||||
messages.add(id, "Effect #" + number + ": invalid skill", "", CSMDoc::Message::Severity_Error);
|
||||
if (ingredient.mData.mAttributes[i] < -1 || ingredient.mData.mAttributes[i] >= ESM::Attribute::Length)
|
||||
messages.add(id, "Effect #" + number + ": invalid attribute", "", CSMDoc::Message::Severity_Error);
|
||||
}
|
||||
|
||||
if (!hasEffects)
|
||||
messages.add(id, "No magic effects", "", CSMDoc::Message::Severity_Warning);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
#ifndef CSM_TOOLS_EFFECTLISTCHECK_H
|
||||
#define CSM_TOOLS_EFFECTLISTCHECK_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace ESM
|
||||
{
|
||||
struct IndexedENAMstruct;
|
||||
struct Ingredient;
|
||||
}
|
||||
|
||||
namespace CSMDoc
|
||||
{
|
||||
class Messages;
|
||||
}
|
||||
|
||||
namespace CSMWorld
|
||||
{
|
||||
class UniversalId;
|
||||
}
|
||||
|
||||
namespace CSMTools
|
||||
{
|
||||
void effectListCheck(
|
||||
const std::vector<ESM::IndexedENAMstruct>& list, CSMDoc::Messages& messages, const CSMWorld::UniversalId& id);
|
||||
void ingredientEffectListCheck(
|
||||
const ESM::Ingredient& ingredient, CSMDoc::Messages& messages, const CSMWorld::UniversalId& id);
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue