mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-05 15:55:45 +00:00
Fix potential infinite recursion in ActionTeleport (Fixes #1840)
This commit is contained in:
parent
854491ac15
commit
b4fbaf1169
@ -1,4 +1,3 @@
|
||||
|
||||
#include "actionteleport.hpp"
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
@ -16,15 +15,19 @@ namespace MWWorld
|
||||
|
||||
void ActionTeleport::executeImp (const Ptr& actor)
|
||||
{
|
||||
MWBase::World* world = MWBase::Environment::get().getWorld();
|
||||
|
||||
//find any NPC that is following the actor and teleport him too
|
||||
std::list<MWWorld::Ptr> followers = MWBase::Environment::get().getMechanicsManager()->getActorsFollowing(actor);
|
||||
for(std::list<MWWorld::Ptr>::iterator it = followers.begin();it != followers.end();++it)
|
||||
{
|
||||
executeImp(*it);
|
||||
teleport(*it);
|
||||
}
|
||||
|
||||
teleport(actor);
|
||||
}
|
||||
|
||||
void ActionTeleport::teleport(const Ptr &actor)
|
||||
{
|
||||
MWBase::World* world = MWBase::Environment::get().getWorld();
|
||||
if(actor == world->getPlayerPtr())
|
||||
{
|
||||
world->getPlayer().setTeleported(true);
|
||||
|
@ -14,12 +14,16 @@ namespace MWWorld
|
||||
std::string mCellName;
|
||||
ESM::Position mPosition;
|
||||
|
||||
/// Teleports this actor and also teleports anyone following that actor.
|
||||
virtual void executeImp (const Ptr& actor);
|
||||
|
||||
/// Teleports only the given actor (internal use).
|
||||
void teleport(const Ptr &actor);
|
||||
|
||||
public:
|
||||
|
||||
ActionTeleport (const std::string& cellName, const ESM::Position& position);
|
||||
///< If cellName is empty, an exterior cell is asumed.
|
||||
///< If cellName is empty, an exterior cell is assumed.
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user