Fix potential infinite recursion in ActionTeleport (Fixes #1840)

deque
scrawl 11 years ago
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…
Cancel
Save