From bf76faeb2d32da6726b166f4b40d3c119d283ab6 Mon Sep 17 00:00:00 2001 From: elsid Date: Fri, 27 May 2022 13:31:58 +0200 Subject: [PATCH] Increment iterator before fast forward When player is located in the exterior cell AiTravel::fastForward may move another actor into a cell outside active grid. This will remove the actor from MWMechanics::Actors::mActors which invalidates current iterator in the Actors::fastForwardAi loop. --- apps/openmw/mwmechanics/actors.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index a60d5ce0f3..2a0a4f2afc 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -2249,9 +2249,10 @@ namespace MWMechanics if (!MWBase::Environment::get().getMechanicsManager()->isAIActive()) return; - for (const Actor& actor : mActors) + for (auto it = mActors.begin(); it != mActors.end();) { - const MWWorld::Ptr ptr = actor.getPtr(); + const MWWorld::Ptr ptr = it->getPtr(); + ++it; if (ptr == getPlayer() || !isConscious(ptr) || ptr.getClass().getCreatureStats(ptr).isParalyzed())