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++) { std::cout << "teleporting someone!" << (*it).getCellRef().mRefID; executeImp(*it); } if(actor == world->getPlayerPtr()) { world->getPlayer().setTeleported(true); if (mCellName.empty()) world->changeToExteriorCell (mPosition); else world->changeToInteriorCell (mCellName, mPosition); } else { if (mCellName.empty()) { int cellX; int cellY; world->positionToIndex(mPosition.pos[0],mPosition.pos[1],cellX,cellY); world->moveObject(actor,world->getExterior(cellX,cellY), mPosition.pos[0],mPosition.pos[1],mPosition.pos[2]); } else world->moveObject(actor,world->getInterior(mCellName),mPosition.pos[0],mPosition.pos[1],mPosition.pos[2]); } }
void MWWorld::Action::execute (const Ptr& actor) { if (!mSoundId.empty()) { if (mKeepSound && actor == MWBase::Environment::get().getWorld()->getPlayerPtr()) MWBase::Environment::get().getSoundManager()->playSound(mSoundId, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal,mSoundOffset); else { bool local = mTarget.isEmpty() || !mTarget.isInCell(); // no usable target MWBase::Environment::get().getSoundManager()->playSound3D(local ? actor : mTarget, mSoundId, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx, mKeepSound ? MWBase::SoundManager::Play_NoTrack : MWBase::SoundManager::Play_Normal, mSoundOffset); } } executeImp (actor); }
void MWWorld::Action::execute (const Ptr& actor) { if (!mSoundId.empty()) { if (mKeepSound && actor.getRefData().getHandle()=="player") { // sound moves with player when teleporting MWBase::Environment::get().getSoundManager()->playSound(mSoundId, 1.0, 1.0, MWBase::SoundManager::Play_NoTrack); } else { bool local = mTarget.isEmpty() || !mTarget.isInCell(); // no usable target MWBase::Environment::get().getSoundManager()->playSound3D (local ? actor : mTarget, mSoundId, 1.0, 1.0, mKeepSound ? MWBase::SoundManager::Play_NoTrack : MWBase::SoundManager::Play_Normal); } } executeImp (actor); }