From 36ba56d037f20ac49b902f1e071c5185b99f114f Mon Sep 17 00:00:00 2001 From: scrawl Date: Mon, 11 Aug 2014 02:01:20 +0200 Subject: [PATCH] Make Position instruction move non-player actors within their cell only (Fixes #1791) --- apps/openmw/mwscript/transformationextensions.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/apps/openmw/mwscript/transformationextensions.cpp b/apps/openmw/mwscript/transformationextensions.cpp index 528a6b9b94..3355e705fd 100644 --- a/apps/openmw/mwscript/transformationextensions.cpp +++ b/apps/openmw/mwscript/transformationextensions.cpp @@ -363,8 +363,19 @@ namespace MWScript runtime.pop(); int cx,cy; MWBase::Environment::get().getWorld()->positionToIndex(x,y,cx,cy); - MWBase::Environment::get().getWorld()->moveObject(ptr, - MWBase::Environment::get().getWorld()->getExterior(cx,cy),x,y,z); + + // another morrowind oddity: player will be moved to the exterior cell at this location, + // non-player actors will move within the cell they are in. + if (ptr.getRefData().getHandle() == "player") + { + MWBase::Environment::get().getWorld()->moveObject(ptr, + MWBase::Environment::get().getWorld()->getExterior(cx,cy),x,y,z); + } + else + { + MWBase::Environment::get().getWorld()->moveObject(ptr, x, y, z); + } + float ax = Ogre::Radian(ptr.getRefData().getPosition().rot[0]).valueDegrees(); float ay = Ogre::Radian(ptr.getRefData().getPosition().rot[1]).valueDegrees(); if(ptr.getTypeName() == typeid(ESM::NPC).name())//some morrowind oddity