From fde0f20a6f58e0a645e4c81b5a6e6139b56c02fd Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Fri, 26 Jun 2020 11:14:38 +0400 Subject: [PATCH 1/2] Fix faction requirement calculations (bug #5499) --- CHANGELOG.md | 1 + apps/openmw/mwmechanics/npcstats.cpp | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a65c25c0..421987e00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ Bug #5479: NPCs who should be walking around town are standing around without walking Bug #5484: Zero value items shouldn't be able to be bought or sold for 1 gold Bug #5490: Hits to carried left slot aren't redistributed if there's no shield equipped + Bug #5499: Faction advance is available when requirements not met Feature #390: 3rd person look "over the shoulder" Feature #2386: Distant Statics in the form of Object Paging Feature #5297: Add a search function to the "Datafiles" tab of the OpenMW launcher diff --git a/apps/openmw/mwmechanics/npcstats.cpp b/apps/openmw/mwmechanics/npcstats.cpp index 0e4b3f44c..1c0c0f17f 100644 --- a/apps/openmw/mwmechanics/npcstats.cpp +++ b/apps/openmw/mwmechanics/npcstats.cpp @@ -415,7 +415,18 @@ bool MWMechanics::NpcStats::hasSkillsForRank (const std::string& factionId, int if (skills.size() < 2) return true; - return *++iter>=rankData.mSkill2; + iter++; + if (*iter Date: Fri, 26 Jun 2020 11:47:59 +0400 Subject: [PATCH 2/2] Use meaningful names instead of mSkill1 and mSkill2 --- apps/esmtool/record.cpp | 4 ++-- apps/opencs/model/world/nestedcoladapterimp.cpp | 8 ++++---- apps/openmw/mwgui/statswindow.cpp | 8 ++++---- apps/openmw/mwmechanics/npcstats.cpp | 6 +++--- components/esm/loadfact.cpp | 2 +- components/esm/loadfact.hpp | 7 ++++--- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/apps/esmtool/record.cpp b/apps/esmtool/record.cpp index e6a3b765f..3679184a6 100644 --- a/apps/esmtool/record.cpp +++ b/apps/esmtool/record.cpp @@ -740,9 +740,9 @@ void Record::print() std::cout << " Attribute2 Requirement: " << mData.mData.mRankData[i].mAttribute2 << std::endl; std::cout << " One Skill at Level: " - << mData.mData.mRankData[i].mSkill1 << std::endl; + << mData.mData.mRankData[i].mPrimarySkill << std::endl; std::cout << " Two Skills at Level: " - << mData.mData.mRankData[i].mSkill2 << std::endl; + << mData.mData.mRankData[i].mFavouredSkill << std::endl; std::cout << " Faction Reaction: " << mData.mData.mRankData[i].mFactReaction << std::endl; } diff --git a/apps/opencs/model/world/nestedcoladapterimp.cpp b/apps/opencs/model/world/nestedcoladapterimp.cpp index edf325b49..e8b4102d7 100644 --- a/apps/opencs/model/world/nestedcoladapterimp.cpp +++ b/apps/opencs/model/world/nestedcoladapterimp.cpp @@ -1143,8 +1143,8 @@ namespace CSMWorld case 0: return QString(faction.mRanks[subRowIndex].c_str()); case 1: return rankData.mAttribute1; case 2: return rankData.mAttribute2; - case 3: return rankData.mSkill1; - case 4: return rankData.mSkill2; + case 3: return rankData.mPrimarySkill; + case 4: return rankData.mFavouredSkill; case 5: return rankData.mFactReaction; default: throw std::runtime_error("Rank subcolumn index out of range"); } @@ -1165,8 +1165,8 @@ namespace CSMWorld case 0: faction.mRanks[subRowIndex] = value.toString().toUtf8().constData(); break; case 1: rankData.mAttribute1 = value.toInt(); break; case 2: rankData.mAttribute2 = value.toInt(); break; - case 3: rankData.mSkill1 = value.toInt(); break; - case 4: rankData.mSkill2 = value.toInt(); break; + case 3: rankData.mPrimarySkill = value.toInt(); break; + case 4: rankData.mFavouredSkill = value.toInt(); break; case 5: rankData.mFactReaction = value.toInt(); break; default: throw std::runtime_error("Rank index out of range"); } diff --git a/apps/openmw/mwgui/statswindow.cpp b/apps/openmw/mwgui/statswindow.cpp index 4959396cc..2a3e2cd85 100644 --- a/apps/openmw/mwgui/statswindow.cpp +++ b/apps/openmw/mwgui/statswindow.cpp @@ -620,10 +620,10 @@ namespace MWGui text += "\n"; - if (rankData.mSkill1 > 0) - text += "\n#{sNeedOneSkill} " + MyGUI::utility::toString(rankData.mSkill1); - if (rankData.mSkill2 > 0) - text += " #{sand} #{sNeedTwoSkills} " + MyGUI::utility::toString(rankData.mSkill2); + if (rankData.mPrimarySkill > 0) + text += "\n#{sNeedOneSkill} " + MyGUI::utility::toString(rankData.mPrimarySkill); + if (rankData.mFavouredSkill > 0) + text += " #{sand} #{sNeedTwoSkills} " + MyGUI::utility::toString(rankData.mFavouredSkill); } } diff --git a/apps/openmw/mwmechanics/npcstats.cpp b/apps/openmw/mwmechanics/npcstats.cpp index 1c0c0f17f..5d19368bf 100644 --- a/apps/openmw/mwmechanics/npcstats.cpp +++ b/apps/openmw/mwmechanics/npcstats.cpp @@ -409,21 +409,21 @@ bool MWMechanics::NpcStats::hasSkillsForRank (const std::string& factionId, int const ESM::RankData& rankData = faction.mData.mRankData[rank]; - if (*iter