diff --git a/apps/openmw/mwmechanics/actors.cpp b/apps/openmw/mwmechanics/actors.cpp index 82f60221b..2dd8fb79a 100644 --- a/apps/openmw/mwmechanics/actors.cpp +++ b/apps/openmw/mwmechanics/actors.cpp @@ -1447,6 +1447,8 @@ namespace MWMechanics continue; if (followTarget == actor) list.push_back(iter->first); + else + break; } else if ((*it)->getTypeId() != MWMechanics::AiPackage::TypeIdCombat) break; diff --git a/apps/openmw/mwworld/actionteleport.cpp b/apps/openmw/mwworld/actionteleport.cpp index 3368aa1c0..7fd6ba024 100644 --- a/apps/openmw/mwworld/actionteleport.cpp +++ b/apps/openmw/mwworld/actionteleport.cpp @@ -5,6 +5,23 @@ #include "../mwbase/mechanicsmanager.hpp" #include "player.hpp" +namespace +{ + + void getFollowers (const MWWorld::Ptr& actor, std::set& out) + { + std::list followers = MWBase::Environment::get().getMechanicsManager()->getActorsFollowing(actor); + for(std::list::iterator it = followers.begin();it != followers.end();++it) + { + if (out.insert(*it).second) + { + getFollowers(*it, out); + } + } + } + +} + namespace MWWorld { ActionTeleport::ActionTeleport (const std::string& cellName, @@ -16,8 +33,9 @@ namespace MWWorld void ActionTeleport::executeImp (const Ptr& actor) { //find any NPC that is following the actor and teleport him too - std::list followers = MWBase::Environment::get().getMechanicsManager()->getActorsFollowing(actor); - for(std::list::iterator it = followers.begin();it != followers.end();++it) + std::set followers; + getFollowers(actor, followers); + for(std::set::iterator it = followers.begin();it != followers.end();++it) { teleport(*it); }