diff --git a/CHANGELOG.md b/CHANGELOG.md index b20cdd75e..99c2b8972 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,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 846597886..5f20a8abb 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)