Removed redundant code in AttachmentsModule and simplified interfaces which converted back and forth between ScenePresence and IClientAPI. More to be done still.
							parent
							
								
									e77c919290
								
							
						
					
					
						commit
						460946ad62
					
				| 
						 | 
				
			
			@ -152,7 +152,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
                    if (sp.PresenceType == PresenceType.Npc)
 | 
			
		||||
                        RezSingleAttachmentFromInventoryInternal(sp, UUID.Zero, attach.AssetID, p);
 | 
			
		||||
                    else
 | 
			
		||||
                        RezSingleAttachmentFromInventory(sp.ControllingClient, attach.ItemID, p);
 | 
			
		||||
                        RezSingleAttachmentFromInventory(sp, attach.ItemID, p);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
        /// <param name="objectLocalID"></param>
 | 
			
		||||
        /// <param name="AttachmentPt"></param>
 | 
			
		||||
        /// <param name="silent"></param>
 | 
			
		||||
        public void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, bool silent)
 | 
			
		||||
        private void AttachObject(IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, bool silent)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[ATTACHMENTS MODULE]: Attaching object local id {0} to {1} point {2} from ground (silent = {3})",
 | 
			
		||||
| 
						 | 
				
			
			@ -258,25 +258,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
                m_log.ErrorFormat("[ATTACHMENTS MODULE]: exception upon Attach Object {0}{1}", e.Message, e.StackTrace);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool AttachObject(IClientAPI remoteClient, SceneObjectGroup group, uint AttachmentPt, bool silent)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return false;
 | 
			
		||||
 | 
			
		||||
            ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId);
 | 
			
		||||
 | 
			
		||||
            if (sp == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[ATTACHMENTS MODULE]: Could not find presence for client {0} {1}", remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return AttachObject(sp, group, AttachmentPt, silent);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        private bool AttachObject(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent)
 | 
			
		||||
        public bool AttachObject(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent)
 | 
			
		||||
        {
 | 
			
		||||
            lock (sp.AttachmentsSyncLock)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -356,29 +339,31 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void RezMultipleAttachmentsFromInventory(IClientAPI remoteClient, List<KeyValuePair<UUID, uint>> rezlist)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            ScenePresence sp;
 | 
			
		||||
            if (m_scene.TryGetScenePresence(remoteClient.AgentId, out sp))
 | 
			
		||||
                RezMultipleAttachmentsFromInventory(sp, rezlist);
 | 
			
		||||
            else
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[ATTACHMENTS MODULE]: Could not find presence for client {0} {1} in RezMultipleAttachmentsFromInventory()",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RezMultipleAttachmentsFromInventory(
 | 
			
		||||
            IClientAPI remoteClient, 
 | 
			
		||||
            List<KeyValuePair<UUID, uint>> rezlist)
 | 
			
		||||
        public void RezMultipleAttachmentsFromInventory(IScenePresence sp, List<KeyValuePair<UUID, uint>> rezlist)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            ScenePresence sp = m_scene.GetScenePresence(remoteClient.AgentId);
 | 
			
		||||
 | 
			
		||||
            if (sp == null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[ATTACHMENTS MODULE]: Could not find presence for client {0} {1} in RezMultipleAttachmentsFromInventory()",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
//                m_log.DebugFormat("[ATTACHMENTS MODULE]: Rezzing multiple attachments from inventory for {0}", sp.Name);
 | 
			
		||||
            lock (sp.AttachmentsSyncLock)
 | 
			
		||||
            {
 | 
			
		||||
//                m_log.DebugFormat("[ATTACHMENTS MODULE]: Rezzing multiple attachments from inventory for {0}", sp.Name);
 | 
			
		||||
 | 
			
		||||
                foreach (KeyValuePair<UUID, uint> rez in rezlist)
 | 
			
		||||
                {
 | 
			
		||||
                    RezSingleAttachmentFromInventory(sp, rez.Key, rez.Value);
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +371,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public ISceneEntity RezSingleAttachmentFromInventory(IClientAPI remoteClient, UUID itemID, uint AttachmentPt)
 | 
			
		||||
        private ISceneEntity RezSingleAttachmentFromInventory(IClientAPI remoteClient, UUID itemID, uint AttachmentPt)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +393,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
            return RezSingleAttachmentFromInventory(sp, itemID, AttachmentPt);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public ISceneEntity RezSingleAttachmentFromInventory(ScenePresence sp, UUID itemID, uint AttachmentPt)
 | 
			
		||||
        public ISceneEntity RezSingleAttachmentFromInventory(IScenePresence sp, UUID itemID, uint AttachmentPt)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -593,23 +578,33 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
                    DetachSingleAttachmentToInv(itemID, presence);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DetachSingleAttachmentToGround(uint soLocalId, IClientAPI remoteClient)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            ScenePresence sp;
 | 
			
		||||
            if (m_scene.TryGetScenePresence(remoteClient.AgentId, out sp))
 | 
			
		||||
                DetachSingleAttachmentToGround(sp, soLocalId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void DetachSingleAttachmentToGround(uint soLocalId, IClientAPI remoteClient)
 | 
			
		||||
        public void DetachSingleAttachmentToGround(IScenePresence sp, uint soLocalId)
 | 
			
		||||
        {
 | 
			
		||||
            if (!Enabled)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[ATTACHMENTS MODULE]: DetachSingleAttachmentToGround() for {0}, object {1}",
 | 
			
		||||
//                remoteClient.Name, soLocalId);
 | 
			
		||||
//                sp.UUID, soLocalId);
 | 
			
		||||
 | 
			
		||||
            SceneObjectGroup so = m_scene.GetGroupByPrim(soLocalId);
 | 
			
		||||
 | 
			
		||||
            if (so == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            if (so.AttachedAvatar != remoteClient.AgentId)
 | 
			
		||||
            if (so.AttachedAvatar != sp.UUID)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            UUID inventoryID = so.GetFromItemID();
 | 
			
		||||
| 
						 | 
				
			
			@ -618,57 +613,40 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
//                "[ATTACHMENTS MODULE]: In DetachSingleAttachmentToGround(), object is {0} {1}, associated item is {2}",
 | 
			
		||||
//                so.Name, so.LocalId, inventoryID);
 | 
			
		||||
 | 
			
		||||
            ScenePresence presence;
 | 
			
		||||
            if (m_scene.TryGetScenePresence(remoteClient.AgentId, out presence))
 | 
			
		||||
            lock (sp.AttachmentsSyncLock)
 | 
			
		||||
            {
 | 
			
		||||
                lock (presence.AttachmentsSyncLock)
 | 
			
		||||
                {
 | 
			
		||||
                    if (!m_scene.Permissions.CanRezObject(
 | 
			
		||||
                        so.PrimCount, remoteClient.AgentId, presence.AbsolutePosition))
 | 
			
		||||
                        return;
 | 
			
		||||
                if (!m_scene.Permissions.CanRezObject(
 | 
			
		||||
                    so.PrimCount, sp.UUID, sp.AbsolutePosition))
 | 
			
		||||
                    return;
 | 
			
		||||
 | 
			
		||||
                bool changed = sp.Appearance.DetachAttachment(inventoryID);
 | 
			
		||||
                if (changed && m_scene.AvatarFactory != null)
 | 
			
		||||
                    m_scene.AvatarFactory.QueueAppearanceSave(sp.UUID);
 | 
			
		||||
 | 
			
		||||
                sp.RemoveAttachment(so);
 | 
			
		||||
 | 
			
		||||
                SceneObjectPart rootPart = so.RootPart;
 | 
			
		||||
                rootPart.FromItemID = UUID.Zero;
 | 
			
		||||
                so.AbsolutePosition = sp.AbsolutePosition;
 | 
			
		||||
                so.AttachedAvatar = UUID.Zero;
 | 
			
		||||
                rootPart.SetParentLocalId(0);
 | 
			
		||||
                so.ClearPartAttachmentData();
 | 
			
		||||
                rootPart.ApplyPhysics(rootPart.GetEffectiveObjectFlags(), rootPart.VolumeDetectActive, m_scene.m_physicalPrim);
 | 
			
		||||
                so.HasGroupChanged = true;
 | 
			
		||||
                rootPart.Rezzed = DateTime.Now;
 | 
			
		||||
                rootPart.RemFlag(PrimFlags.TemporaryOnRez);
 | 
			
		||||
                so.AttachToBackup();
 | 
			
		||||
                m_scene.EventManager.TriggerParcelPrimCountTainted();
 | 
			
		||||
                rootPart.ScheduleFullUpdate();
 | 
			
		||||
                rootPart.ClearUndoState();
 | 
			
		||||
 | 
			
		||||
                    bool changed = presence.Appearance.DetachAttachment(inventoryID);
 | 
			
		||||
                    if (changed && m_scene.AvatarFactory != null)
 | 
			
		||||
                        m_scene.AvatarFactory.QueueAppearanceSave(remoteClient.AgentId);
 | 
			
		||||
 | 
			
		||||
                    presence.RemoveAttachment(so);
 | 
			
		||||
                    DetachSceneObjectToGround(so, presence);
 | 
			
		||||
 | 
			
		||||
                    List<UUID> uuids = new List<UUID>();
 | 
			
		||||
                    uuids.Add(inventoryID);
 | 
			
		||||
                    m_scene.InventoryService.DeleteItems(remoteClient.AgentId, uuids);
 | 
			
		||||
                    remoteClient.SendRemoveInventoryItem(inventoryID);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                m_scene.EventManager.TriggerOnAttach(so.LocalId, so.UUID, UUID.Zero);
 | 
			
		||||
                List<UUID> uuids = new List<UUID>();
 | 
			
		||||
                uuids.Add(inventoryID);
 | 
			
		||||
                m_scene.InventoryService.DeleteItems(sp.UUID, uuids);
 | 
			
		||||
                sp.ControllingClient.SendRemoveInventoryItem(inventoryID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Detach the given scene object to the ground.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <remarks>
 | 
			
		||||
        /// The caller has to take care of all the other work in updating avatar appearance, inventory, etc.
 | 
			
		||||
        /// </remarks>
 | 
			
		||||
        /// <param name="so">The scene object to detach.</param>
 | 
			
		||||
        /// <param name="sp">The scene presence from which the scene object is being detached.</param>
 | 
			
		||||
        private void DetachSceneObjectToGround(SceneObjectGroup so, ScenePresence sp)
 | 
			
		||||
        {
 | 
			
		||||
            SceneObjectPart rootPart = so.RootPart;
 | 
			
		||||
 | 
			
		||||
            rootPart.FromItemID = UUID.Zero;
 | 
			
		||||
            so.AbsolutePosition = sp.AbsolutePosition;
 | 
			
		||||
            so.AttachedAvatar = UUID.Zero;
 | 
			
		||||
            rootPart.SetParentLocalId(0);
 | 
			
		||||
            so.ClearPartAttachmentData();
 | 
			
		||||
            rootPart.ApplyPhysics(rootPart.GetEffectiveObjectFlags(), rootPart.VolumeDetectActive, m_scene.m_physicalPrim);
 | 
			
		||||
            so.HasGroupChanged = true;
 | 
			
		||||
            rootPart.Rezzed = DateTime.Now;
 | 
			
		||||
            rootPart.RemFlag(PrimFlags.TemporaryOnRez);
 | 
			
		||||
            so.AttachToBackup();
 | 
			
		||||
            m_scene.EventManager.TriggerParcelPrimCountTainted();
 | 
			
		||||
            rootPart.ScheduleFullUpdate();
 | 
			
		||||
            rootPart.ClearUndoState();
 | 
			
		||||
            m_scene.EventManager.TriggerOnAttach(so.LocalId, so.UUID, UUID.Zero);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // What makes this method odd and unique is it tries to detach using an UUID....     Yay for standards.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,7 +106,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
 | 
			
		|||
 | 
			
		||||
            SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, attName).ParentGroup;
 | 
			
		||||
 | 
			
		||||
            m_attMod.AttachObject(m_presence.ControllingClient, so, (uint)AttachmentPoint.Chest, false);
 | 
			
		||||
            m_attMod.AttachObject(m_presence, so, (uint)AttachmentPoint.Chest, false);
 | 
			
		||||
 | 
			
		||||
            // Check status on scene presence
 | 
			
		||||
            Assert.That(m_presence.HasAttachments(), Is.True);
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
 | 
			
		|||
                scene, attName, attItemId, attAssetId, m_presence.UUID, InventoryType.Object);
 | 
			
		||||
 | 
			
		||||
            m_attMod.RezSingleAttachmentFromInventory(
 | 
			
		||||
                m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
                m_presence, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
 | 
			
		||||
            // Check scene presence status
 | 
			
		||||
            Assert.That(m_presence.HasAttachments(), Is.True);
 | 
			
		||||
| 
						 | 
				
			
			@ -174,8 +174,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
 | 
			
		|||
                scene, attName, attItemId, attAssetId, m_presence.UUID, InventoryType.Object);
 | 
			
		||||
 | 
			
		||||
            ISceneEntity so = m_attMod.RezSingleAttachmentFromInventory(
 | 
			
		||||
                m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
            m_attMod.DetachSingleAttachmentToGround(so.LocalId, m_presence.ControllingClient);
 | 
			
		||||
                m_presence, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
            m_attMod.DetachSingleAttachmentToGround(m_presence, so.LocalId);
 | 
			
		||||
 | 
			
		||||
            // Check scene presence status
 | 
			
		||||
            Assert.That(m_presence.HasAttachments(), Is.False);
 | 
			
		||||
| 
						 | 
				
			
			@ -208,7 +208,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
 | 
			
		|||
                scene, attName, attItemId, attAssetId, m_presence.UUID, InventoryType.Object);
 | 
			
		||||
 | 
			
		||||
            m_attMod.RezSingleAttachmentFromInventory(
 | 
			
		||||
                m_presence.ControllingClient, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
                m_presence, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
            m_attMod.DetachSingleAttachmentToInv(attItemId, m_presence.ControllingClient);
 | 
			
		||||
 | 
			
		||||
            // Check status on scene presence
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,17 +57,6 @@ namespace OpenSim.Region.Framework.Interfaces
 | 
			
		|||
        /// <param name="silent"></param>
 | 
			
		||||
        void DeleteAttachmentsFromScene(IScenePresence sp, bool silent);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Attach an object to an avatar from the world.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="controllingClient"></param>
 | 
			
		||||
        /// <param name="localID"></param>
 | 
			
		||||
        /// <param name="attachPoint"></param>
 | 
			
		||||
        /// <param name="rot"></param>
 | 
			
		||||
        /// <param name="silent"></param>
 | 
			
		||||
        void AttachObject(
 | 
			
		||||
            IClientAPI remoteClient, uint objectLocalID, uint AttachmentPt, bool silent);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Attach an object to an avatar
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -76,17 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
 | 
			
		|||
        /// <param name="AttachmentPt"></param>
 | 
			
		||||
        /// <param name="silent"></param>
 | 
			
		||||
        /// <returns>true if the object was successfully attached, false otherwise</returns>
 | 
			
		||||
        bool AttachObject(
 | 
			
		||||
            IClientAPI remoteClient, SceneObjectGroup grp, uint AttachmentPt, bool silent);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Rez an attachment from user inventory and change inventory status to match.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="remoteClient"></param>
 | 
			
		||||
        /// <param name="itemID"></param>
 | 
			
		||||
        /// <param name="AttachmentPt"></param>
 | 
			
		||||
        /// <returns>The scene object that was attached.  Null if the scene object could not be found</returns>
 | 
			
		||||
        ISceneEntity RezSingleAttachmentFromInventory(IClientAPI remoteClient, UUID itemID, uint AttachmentPt);
 | 
			
		||||
        bool AttachObject(IScenePresence sp, SceneObjectGroup grp, uint AttachmentPt, bool silent);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Rez an attachment from user inventory and change inventory status to match.
 | 
			
		||||
| 
						 | 
				
			
			@ -95,17 +74,15 @@ namespace OpenSim.Region.Framework.Interfaces
 | 
			
		|||
        /// <param name="itemID"></param>
 | 
			
		||||
        /// <param name="AttachmentPt"></param>
 | 
			
		||||
        /// <returns>The scene object that was attached.  Null if the scene object could not be found</returns>
 | 
			
		||||
        ISceneEntity RezSingleAttachmentFromInventory(ScenePresence sp, UUID itemID, uint AttachmentPt);
 | 
			
		||||
        ISceneEntity RezSingleAttachmentFromInventory(IScenePresence sp, UUID itemID, uint AttachmentPt);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Rez multiple attachments from a user's inventory
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="remoteClient"></param>
 | 
			
		||||
        /// <param name="sp"></param>
 | 
			
		||||
        /// <param name="header"></param>
 | 
			
		||||
        /// <param name="objects"></param>
 | 
			
		||||
        void RezMultipleAttachmentsFromInventory(
 | 
			
		||||
            IClientAPI remoteClient,
 | 
			
		||||
            List<KeyValuePair<UUID, uint>> rezlist);
 | 
			
		||||
        void RezMultipleAttachmentsFromInventory(IScenePresence sp,List<KeyValuePair<UUID, uint>> rezlist);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Detach an object from the avatar.
 | 
			
		||||
| 
						 | 
				
			
			@ -121,9 +98,9 @@ namespace OpenSim.Region.Framework.Interfaces
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// Detach the given item to the ground.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sp"></param>
 | 
			
		||||
        /// <param name="objectLocalID"></param>
 | 
			
		||||
        /// <param name="remoteClient"></param>
 | 
			
		||||
        void DetachSingleAttachmentToGround(uint objectLocalID, IClientAPI remoteClient);
 | 
			
		||||
        void DetachSingleAttachmentToGround(IScenePresence sp, uint objectLocalID);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Detach the given item so that it remains in the user's inventory.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2451,7 +2451,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
 | 
			
		||||
                    
 | 
			
		||||
                    if (AttachmentsModule != null)
 | 
			
		||||
                        AttachmentsModule.AttachObject(sp.ControllingClient, grp, 0, false);
 | 
			
		||||
                        AttachmentsModule.AttachObject(sp, grp, 0, false);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,11 +132,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC.Tests
 | 
			
		|||
            UUID attAssetId = TestHelpers.ParseTail(0x3);
 | 
			
		||||
            string attName = "att";
 | 
			
		||||
 | 
			
		||||
            UserInventoryHelpers.CreateInventoryItem(
 | 
			
		||||
                scene, attName, attItemId, attAssetId, sp.UUID, InventoryType.Object);
 | 
			
		||||
            UserInventoryHelpers.CreateInventoryItem(scene, attName, attItemId, attAssetId, sp.UUID, InventoryType.Object);
 | 
			
		||||
 | 
			
		||||
            am.RezSingleAttachmentFromInventory(
 | 
			
		||||
                sp.ControllingClient, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
            am.RezSingleAttachmentFromInventory(sp, attItemId, (uint)AttachmentPoint.Chest);
 | 
			
		||||
 | 
			
		||||
            INPCModule npcModule = scene.RequestModuleInterface<INPCModule>();
 | 
			
		||||
            UUID npcId = npcModule.CreateNPC("John", "Smith", new Vector3(128, 128, 30), scene, sp.Appearance);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2966,8 +2966,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
 | 
			
		||||
                IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
 | 
			
		||||
                if (attachmentsModule != null)
 | 
			
		||||
                    attachmentsModule.AttachObject(presence.ControllingClient,
 | 
			
		||||
                            grp, (uint)attachment, false);
 | 
			
		||||
                    attachmentsModule.AttachObject(presence, grp, (uint)attachment, false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue