From 0535de6ca0093316d7d0a9d138bedd8300acf52f Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Sat, 26 Jan 2019 01:03:52 +0300 Subject: [PATCH] Make quest status update handling closer to vanilla (bug #4815) Don't update quest status if we're simply updating the quest index Update quest status if a new entry is added regardless of its index --- CHANGELOG.md | 1 + apps/openmw/mwdialogue/quest.cpp | 25 +++++++++++-------------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a712229897..0134253a61 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ Bug #4803: Stray special characters before begin statement break script compilation Bug #4804: Particle system with the "Has Sizes = false" causes an exception Bug #4813: Creatures with known file but no "Sound Gen Creature" assigned use default sounds + Bug #4815: "Finished" journal entry with lower index doesn't close journal, SetJournalIndex closes journal Bug #4820: Spell absorption is broken Bug #4827: NiUVController is handled incorrectly Bug #4828: Potion looping effects VFX are not shown for NPCs diff --git a/apps/openmw/mwdialogue/quest.cpp b/apps/openmw/mwdialogue/quest.cpp index 8465978863..5f20a8abb2 100644 --- a/apps/openmw/mwdialogue/quest.cpp +++ b/apps/openmw/mwdialogue/quest.cpp @@ -41,19 +41,6 @@ namespace MWDialogue void Quest::setIndex (int index) { - const ESM::Dialogue *dialogue = - MWBase::Environment::get().getWorld()->getStore().get().find (mTopic); - - for (ESM::Dialogue::InfoContainer::const_iterator iter (dialogue->mInfo.begin()); - iter!=dialogue->mInfo.end(); ++iter) - if (iter->mData.mDisposition==index && iter->mQuestStatus!=ESM::DialInfo::QS_Name) - { - if (iter->mQuestStatus==ESM::DialInfo::QS_Finished) - mFinished = true; - else if (iter->mQuestStatus==ESM::DialInfo::QS_Restart) - mFinished = false; - } - // The index must be set even if no related journal entry was found mIndex = index; } @@ -81,8 +68,18 @@ namespace MWDialogue if (index==-1) throw std::runtime_error ("unknown journal entry for topic " + mTopic); + for (auto &info : dialogue->mInfo) + { + if (info.mData.mJournalIndex == index + && (info.mQuestStatus == ESM::DialInfo::QS_Finished || info.mQuestStatus == ESM::DialInfo::QS_Restart)) + { + mFinished = (info.mQuestStatus == ESM::DialInfo::QS_Finished); + break; + } + } + if (index > mIndex) - setIndex (index); + mIndex = index; for (TEntryIter iter (mEntries.begin()); iter!=mEntries.end(); ++iter) if (iter->mInfoId==entry.mInfoId)