diff --git a/apps/essimporter/convertplayer.cpp b/apps/essimporter/convertplayer.cpp index eeb1ecbc11..29c49451fd 100644 --- a/apps/essimporter/convertplayer.cpp +++ b/apps/essimporter/convertplayer.cpp @@ -25,11 +25,11 @@ namespace ESSImport faction.mReputation = essFaction.mReputation; out.mObject.mNpcStats.mFactions[ESM::RefId::stringRefId(essFaction.mFactionName.toString())] = faction; } - for (int i = 0; i < 3; ++i) + for (size_t i = 0; i < out.mObject.mNpcStats.mSpecIncreases.size(); ++i) out.mObject.mNpcStats.mSpecIncreases[i] = pcdt.mPNAM.mSpecIncreases[i]; - for (int i = 0; i < 8; ++i) + for (size_t i = 0; i < out.mObject.mNpcStats.mSkillIncrease.size(); ++i) out.mObject.mNpcStats.mSkillIncrease[i] = pcdt.mPNAM.mSkillIncreases[i]; - for (int i = 0; i < 27; ++i) + for (size_t i = 0; i < out.mObject.mNpcStats.mSkills.size(); ++i) out.mObject.mNpcStats.mSkills[i].mProgress = pcdt.mPNAM.mSkillProgress[i]; out.mObject.mNpcStats.mLevelProgress = pcdt.mPNAM.mLevelProgress; diff --git a/apps/openmw/mwmechanics/npcstats.cpp b/apps/openmw/mwmechanics/npcstats.cpp index 242f87591c..e9812e7931 100644 --- a/apps/openmw/mwmechanics/npcstats.cpp +++ b/apps/openmw/mwmechanics/npcstats.cpp @@ -470,7 +470,7 @@ void MWMechanics::NpcStats::writeState(ESM::NpcStats& state) const state.mDisposition = mDisposition; - for (int i = 0; i < ESM::Skill::Length; ++i) + for (size_t i = 0; i < state.mSkills.size(); ++i) mSkill[i].writeState(state.mSkills[i]); state.mIsWerewolf = mIsWerewolf; @@ -489,10 +489,10 @@ void MWMechanics::NpcStats::writeState(ESM::NpcStats& state) const state.mWerewolfKills = mWerewolfKills; state.mLevelProgress = mLevelProgress; - for (int i = 0; i < ESM::Attribute::Length; ++i) + for (size_t i = 0; i < state.mSkillIncrease.size(); ++i) state.mSkillIncrease[i] = mSkillIncreases[i]; - for (int i = 0; i < 3; ++i) + for (size_t i = 0; i < state.mSpecIncreases.size(); ++i) state.mSpecIncreases[i] = mSpecIncreases[i]; std::copy(mUsedIds.begin(), mUsedIds.end(), std::back_inserter(state.mUsedIds)); @@ -523,7 +523,7 @@ void MWMechanics::NpcStats::readState(const ESM::NpcStats& state) mDisposition = state.mDisposition; - for (int i = 0; i < ESM::Skill::Length; ++i) + for (size_t i = 0; i < state.mSkills.size(); ++i) mSkill[i].readState(state.mSkills[i]); mIsWerewolf = state.mIsWerewolf; @@ -534,10 +534,10 @@ void MWMechanics::NpcStats::readState(const ESM::NpcStats& state) mWerewolfKills = state.mWerewolfKills; mLevelProgress = state.mLevelProgress; - for (int i = 0; i < ESM::Attribute::Length; ++i) + for (size_t i = 0; i < state.mSkillIncrease.size(); ++i) mSkillIncreases[i] = state.mSkillIncrease[i]; - for (int i = 0; i < 3; ++i) + for (size_t i = 0; i < state.mSpecIncreases.size(); ++i) mSpecIncreases[i] = state.mSpecIncreases[i]; for (auto iter(state.mUsedIds.begin()); iter != state.mUsedIds.end(); ++iter) diff --git a/components/esm3/npcstats.cpp b/components/esm3/npcstats.cpp index 0f271556bb..e2ee4f50d4 100644 --- a/components/esm3/npcstats.cpp +++ b/components/esm3/npcstats.cpp @@ -31,15 +31,15 @@ namespace ESM esm.getHNOT(faction.mReputation, "FARE"); - mFactions.insert(std::make_pair(id, faction)); + mFactions.emplace(id, faction); } mDisposition = 0; esm.getHNOT(mDisposition, "DISP"); const bool intFallback = esm.getFormatVersion() <= MaxIntFallbackFormatVersion; - for (int i = 0; i < 27; ++i) - mSkills[i].load(esm, intFallback); + for (auto& skill : mSkills) + skill.load(esm, intFallback); mWerewolfDeprecatedData = false; if (esm.getFormatVersion() <= MaxWerewolfDeprecatedDataFormatVersion && esm.peekNextSub("STBA")) @@ -47,9 +47,9 @@ namespace ESM // we have deprecated werewolf skills, stored interleaved // Load into one big vector, then remove every 2nd value mWerewolfDeprecatedData = true; - std::vector> skills(mSkills, mSkills + sizeof(mSkills) / sizeof(mSkills[0])); + std::vector> skills(mSkills.begin(), mSkills.end()); - for (int i = 0; i < 27; ++i) + for (int i = 0; i < ESM::Skill::Length; ++i) { StatState skill; skill.load(esm, intFallback); @@ -67,7 +67,7 @@ namespace ESM if (skills.size() != std::size(mSkills)) throw std::runtime_error( "Invalid number of skill for werewolf deprecated data: " + std::to_string(skills.size())); - std::copy(skills.begin(), skills.end(), mSkills); + std::copy(skills.begin(), skills.end(), mSkills.begin()); } // No longer used @@ -76,7 +76,7 @@ namespace ESM if (hasWerewolfAttributes) { StatState dummy; - for (int i = 0; i < 8; ++i) + for (int i = 0; i < ESM::Attribute::Length; ++i) dummy.load(esm, intFallback); mWerewolfDeprecatedData = true; } @@ -104,12 +104,10 @@ namespace ESM mLevelProgress = 0; esm.getHNOT(mLevelProgress, "LPRO"); - for (int i = 0; i < 8; ++i) - mSkillIncrease[i] = 0; + mSkillIncrease.fill(0); esm.getHNOT(mSkillIncrease, "INCR"); - for (int i = 0; i < 3; ++i) - mSpecIncreases[i] = 0; + mSpecIncreases.fill(0); esm.getHNOT(mSpecIncreases, "SPEC"); while (esm.isNextSub("USED")) @@ -152,8 +150,8 @@ namespace ESM if (mDisposition) esm.writeHNT("DISP", mDisposition); - for (int i = 0; i < 27; ++i) - mSkills[i].save(esm); + for (const auto& skill : mSkills) + skill.save(esm); if (mIsWerewolf) esm.writeHNT("WOLF", mIsWerewolf); @@ -171,9 +169,9 @@ namespace ESM esm.writeHNT("LPRO", mLevelProgress); bool saveSkillIncreases = false; - for (int i = 0; i < 8; ++i) + for (int increase : mSkillIncrease) { - if (mSkillIncrease[i] != 0) + if (increase != 0) { saveSkillIncreases = true; break; @@ -204,10 +202,8 @@ namespace ESM mReputation = 0; mWerewolfKills = 0; mLevelProgress = 0; - for (int i = 0; i < 8; ++i) - mSkillIncrease[i] = 0; - for (int i = 0; i < 3; ++i) - mSpecIncreases[i] = 0; + mSkillIncrease.fill(0); + mSpecIncreases.fill(0); mTimeToStartDrowning = 20; mCrimeId = -1; } diff --git a/components/esm3/npcstats.hpp b/components/esm3/npcstats.hpp index b9e2e6bb9b..e80ec04c25 100644 --- a/components/esm3/npcstats.hpp +++ b/components/esm3/npcstats.hpp @@ -1,8 +1,12 @@ #ifndef OPENMW_ESM_NPCSTATS_H #define OPENMW_ESM_NPCSTATS_H +#include "loadskil.hpp" #include "statstate.hpp" +#include #include + +#include #include #include #include @@ -31,13 +35,13 @@ namespace ESM std::map mFactions; // lower case IDs int mDisposition; - StatState mSkills[27]; + std::array, ESM::Skill::Length> mSkills; int mBounty; int mReputation; int mWerewolfKills; int mLevelProgress; - int mSkillIncrease[8]; - int mSpecIncreases[3]; + std::array mSkillIncrease; + std::array mSpecIncreases; std::vector mUsedIds; // lower case IDs float mTimeToStartDrowning; int mCrimeId;