From b997e28e57413a68cdda4271c559a69000cf9152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Sat, 19 Feb 2022 14:56:51 +0200 Subject: [PATCH] Fix #6633: AiSequence packages being removed incorrectly --- apps/openmw/mwmechanics/aisequence.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwmechanics/aisequence.cpp b/apps/openmw/mwmechanics/aisequence.cpp index 0cb1e97603..bf01936f90 100644 --- a/apps/openmw/mwmechanics/aisequence.cpp +++ b/apps/openmw/mwmechanics/aisequence.cpp @@ -315,9 +315,16 @@ void AiSequence::execute (const MWWorld::Ptr& actor, CharacterController& charac mPackages.push_back(package->clone()); } - // To account for the rare case where AiPackage::execute() queued another AI package - // (e.g. AiPursue executing a dialogue script that uses startCombat) - erase(mPackages.begin()); + // The active package is typically the first entry, this is however not always the case + // e.g. AiPursue executing a dialogue script that uses startCombat adds a combat package to the front + // due to the priority. + auto activePackageIt = std::find_if(mPackages.begin(), mPackages.end(), [&](auto& entry) + { + return entry.get() == package; + }); + + erase(activePackageIt); + if (isActualAiPackage(packageTypeId)) mDone = true; }