mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-03 18:15:35 +00:00
Don't teleport followers when using teleportation spells
This commit is contained in:
parent
d27b92e9f1
commit
d1b6289cad
6 changed files with 21 additions and 16 deletions
|
@ -147,7 +147,7 @@ namespace MWClass
|
|||
|
||||
if (ptr.getCellRef().getTeleport())
|
||||
{
|
||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTeleport (ptr.getCellRef().getDestCell(), ptr.getCellRef().getDoorDest()));
|
||||
boost::shared_ptr<MWWorld::Action> action(new MWWorld::ActionTeleport (ptr.getCellRef().getDestCell(), ptr.getCellRef().getDoorDest(), true));
|
||||
|
||||
action->setSound(openSound);
|
||||
|
||||
|
|
|
@ -183,7 +183,7 @@ namespace MWGui
|
|||
MWBase::Environment::get().getDialogueManager()->goodbyeSelected();
|
||||
|
||||
// Teleports any followers, too.
|
||||
MWWorld::ActionTeleport action(interior ? cellname : "", pos);
|
||||
MWWorld::ActionTeleport action(interior ? cellname : "", pos, true);
|
||||
action.execute(player);
|
||||
|
||||
MWBase::Environment::get().getWindowManager()->fadeScreenOut(0);
|
||||
|
|
|
@ -679,7 +679,7 @@ namespace MWMechanics
|
|||
if (markedCell)
|
||||
{
|
||||
MWWorld::ActionTeleport action(markedCell->isExterior() ? "" : markedCell->getCell()->mName,
|
||||
markedPosition);
|
||||
markedPosition, false);
|
||||
action.execute(target);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,12 +25,14 @@ namespace
|
|||
namespace MWWorld
|
||||
{
|
||||
ActionTeleport::ActionTeleport (const std::string& cellName,
|
||||
const ESM::Position& position)
|
||||
: Action (true), mCellName (cellName), mPosition (position)
|
||||
const ESM::Position& position, bool teleportFollowers)
|
||||
: Action (true), mCellName (cellName), mPosition (position), mTeleportFollowers(teleportFollowers)
|
||||
{
|
||||
}
|
||||
|
||||
void ActionTeleport::executeImp (const Ptr& actor)
|
||||
{
|
||||
if (mTeleportFollowers)
|
||||
{
|
||||
//find any NPC that is following the actor and teleport him too
|
||||
std::set<MWWorld::Ptr> followers;
|
||||
|
@ -43,6 +45,7 @@ namespace MWWorld
|
|||
<= 800*800)
|
||||
teleport(*it);
|
||||
}
|
||||
}
|
||||
|
||||
teleport(actor);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ namespace MWWorld
|
|||
{
|
||||
std::string mCellName;
|
||||
ESM::Position mPosition;
|
||||
bool mTeleportFollowers;
|
||||
|
||||
/// Teleports this actor and also teleports anyone following that actor.
|
||||
virtual void executeImp (const Ptr& actor);
|
||||
|
@ -22,8 +23,9 @@ namespace MWWorld
|
|||
|
||||
public:
|
||||
|
||||
ActionTeleport (const std::string& cellName, const ESM::Position& position);
|
||||
ActionTeleport (const std::string& cellName, const ESM::Position& position, bool teleportFollowers);
|
||||
///< If cellName is empty, an exterior cell is assumed.
|
||||
/// @param teleportFollowers Whether to teleport any following actors of the target actor as well.
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -2921,7 +2921,7 @@ namespace MWWorld
|
|||
if ( !closestMarker.mCell->isExterior() )
|
||||
cellName = closestMarker.mCell->getCell()->mName;
|
||||
|
||||
MWWorld::ActionTeleport action(cellName, closestMarker.getRefData().getPosition());
|
||||
MWWorld::ActionTeleport action(cellName, closestMarker.getRefData().getPosition(), false);
|
||||
action.execute(ptr);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue