diff --git a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp index 74ee44aa9b..d5af289644 100644 --- a/apps/openmw/mwdialogue/dialoguemanagerimp.cpp +++ b/apps/openmw/mwdialogue/dialoguemanagerimp.cpp @@ -137,13 +137,6 @@ namespace MWDialogue if(!selectCompare(comp,0,select.mI)) return false; break; - case 50://choice - if(choice) - { - if(!selectCompare(comp,mChoice,select.mI)) return false; - } - break; - case 60://PC Vampire if(!selectCompare(comp,0,select.mI)) return false; break; @@ -287,7 +280,7 @@ namespace MWDialogue const MWWorld::Store &dialogs = MWBase::Environment::get().getWorld()->getStore().get(); - Filter filter (actor); + Filter filter (actor, mChoice); MWWorld::Store::iterator it = dialogs.begin(); for (; it != dialogs.end(); ++it) @@ -391,7 +384,7 @@ namespace MWDialogue const MWWorld::Store &dialogs = MWBase::Environment::get().getWorld()->getStore().get(); - Filter filter (mActor); + Filter filter (mActor, mChoice); MWWorld::Store::iterator it = dialogs.begin(); for (; it != dialogs.end(); ++it) @@ -478,7 +471,7 @@ namespace MWDialogue ESM::Dialogue ndialogue = mDialogueMap[keyword]; if(ndialogue.mType == ESM::Dialogue::Topic) { - Filter filter (mActor); + Filter filter (mActor, mChoice); for (std::vector::const_iterator iter = ndialogue.mInfo.begin(); iter!=ndialogue.mInfo.end(); ++iter) @@ -525,7 +518,7 @@ namespace MWDialogue ESM::Dialogue ndialogue = mDialogueMap[mLastTopic]; if(ndialogue.mType == ESM::Dialogue::Topic) { - Filter filter (mActor); + Filter filter (mActor, mChoice); for (std::vector::const_iterator iter = ndialogue.mInfo.begin(); iter!=ndialogue.mInfo.end(); ++iter) diff --git a/apps/openmw/mwdialogue/filter.cpp b/apps/openmw/mwdialogue/filter.cpp index 1e03864bae..59027617ff 100644 --- a/apps/openmw/mwdialogue/filter.cpp +++ b/apps/openmw/mwdialogue/filter.cpp @@ -220,6 +220,10 @@ int MWDialogue::Filter::getSelectStructInteger (const SelectWrapper& select) con return MWBase::Environment::get().getMechanicsManager()->countDeaths (select.getName()); + case SelectWrapper::Function_Choice: + + return mChoice; + default: throw std::runtime_error ("unknown integer select function"); @@ -264,7 +268,7 @@ bool MWDialogue::Filter::getSelectStructBoolean (const SelectWrapper& select) co } } -MWDialogue::Filter::Filter (const MWWorld::Ptr& actor) : mActor (actor) {} +MWDialogue::Filter::Filter (const MWWorld::Ptr& actor, int choice) : mActor (actor), mChoice (choice) {} bool MWDialogue::Filter::operator() (const ESM::DialInfo& info) const { diff --git a/apps/openmw/mwdialogue/filter.hpp b/apps/openmw/mwdialogue/filter.hpp index 4263920cb2..a849dc0167 100644 --- a/apps/openmw/mwdialogue/filter.hpp +++ b/apps/openmw/mwdialogue/filter.hpp @@ -15,6 +15,7 @@ namespace MWDialogue class Filter { MWWorld::Ptr mActor; + int mChoice; bool testActor (const ESM::DialInfo& info) const; ///< Is this the right actor for this \a info? @@ -35,7 +36,7 @@ namespace MWDialogue public: - Filter (const MWWorld::Ptr& actor); + Filter (const MWWorld::Ptr& actor, int choice); bool operator() (const ESM::DialInfo& info) const; ///< \return does the dialogue match? diff --git a/apps/openmw/mwdialogue/selectwrapper.cpp b/apps/openmw/mwdialogue/selectwrapper.cpp index 1ffdd208cd..bfd7f8cf8c 100644 --- a/apps/openmw/mwdialogue/selectwrapper.cpp +++ b/apps/openmw/mwdialogue/selectwrapper.cpp @@ -59,7 +59,13 @@ MWDialogue::SelectWrapper::Function MWDialogue::SelectWrapper::decodeFunction() std::istringstream (mSelect.mSelectRule.substr(2,2)) >> index; - return static_cast (index); + switch (index) + { + case 46: return Function_SameFaction; + case 50: return Function_Choice; + } + + return Function_None; } MWDialogue::SelectWrapper::SelectWrapper (const ESM::DialInfo::SelectStruct& select) : mSelect (select) {} @@ -92,6 +98,7 @@ MWDialogue::SelectWrapper::Type MWDialogue::SelectWrapper::getType() const static const Function integerFunctions[] = { Function_Journal, Function_Item, Function_Dead, + Function_Choice, Function_None // end marker }; diff --git a/apps/openmw/mwdialogue/selectwrapper.hpp b/apps/openmw/mwdialogue/selectwrapper.hpp index 052f738376..4f105aa5a5 100644 --- a/apps/openmw/mwdialogue/selectwrapper.hpp +++ b/apps/openmw/mwdialogue/selectwrapper.hpp @@ -13,7 +13,7 @@ namespace MWDialogue enum Function { - Function_None = 0, + Function_None, Function_Journal, Function_Item, Function_Dead, @@ -24,7 +24,8 @@ namespace MWDialogue Function_Cell, Function_Local, Function_Global, - Function_SameFaction + Function_SameFaction, + Function_Choice }; enum Type