/// <summary> /// Called when objects or attachments cross the border, or teleport, between regions. /// </summary> /// <param name="sog"></param> /// <returns></returns> public virtual bool IncomingCreateObject(UUID regionID, ISceneObject sog) { Scene scene = GetScene(regionID); if (scene == null) { return(false); } //m_log.Debug(" >>> IncomingCreateObject(sog) <<< " + ((SceneObjectGroup)sog).AbsolutePosition + " deleted? " + ((SceneObjectGroup)sog).IsDeleted); SceneObjectGroup newObject; try { newObject = (SceneObjectGroup)sog; } catch (Exception e) { m_log.WarnFormat("[EntityTransferModule]: Problem casting object: {0}", e.Message); return(false); } if (!AddSceneObject(scene, newObject)) { m_log.WarnFormat("[EntityTransferModule]: Problem adding scene object {0} in {1} ", sog.UUID, scene.RegionInfo.RegionName); return(false); } newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, 1, UUID.Zero); newObject.RootPart.ParentGroup.ResumeScripts(); if (newObject.RootPart.SitTargetAvatar.Count != 0) { lock (newObject.RootPart.SitTargetAvatar) { foreach (UUID avID in newObject.RootPart.SitTargetAvatar) { IScenePresence SP = scene.GetScenePresence(avID); while (SP == null) { Thread.Sleep(20); } SP.AbsolutePosition = newObject.AbsolutePosition; SP.CrossSittingAgent(SP.ControllingClient, newObject.RootPart.UUID); } } } return(true); }