Merge branch 'master' of /var/git/opensim/
						commit
						4ff3be90e0
					
				| 
						 | 
				
			
			@ -178,12 +178,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
 | 
			
		|||
                UUID itemID = UUID.Zero;
 | 
			
		||||
                if (sp != null)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (SceneObjectGroup grp in sp.GetAttachments(AttachmentPt))
 | 
			
		||||
                    foreach(SceneObjectGroup grp in sp.Attachments)
 | 
			
		||||
                    {
 | 
			
		||||
                        itemID = grp.GetFromItemID();
 | 
			
		||||
                        if (itemID != UUID.Zero)
 | 
			
		||||
                            DetachSingleAttachmentToInv(itemID, remoteClient);
 | 
			
		||||
                        if (grp.GetAttachmentPoint() == (byte)AttachmentPt)
 | 
			
		||||
                        {
 | 
			
		||||
                            itemID = grp.GetFromItemID();
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (itemID != UUID.Zero)
 | 
			
		||||
                        DetachSingleAttachmentToInv(itemID, remoteClient);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (group.GetFromItemID() == UUID.Zero)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -459,6 +459,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
 | 
			
		|||
                // Now let's make it officially a child agent
 | 
			
		||||
                sp.MakeChildAgent();
 | 
			
		||||
 | 
			
		||||
                sp.Scene.CleanDroppedAttachments();
 | 
			
		||||
 | 
			
		||||
                // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
 | 
			
		||||
 | 
			
		||||
                if (NeedsClosing(oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3162,6 +3162,9 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                m_eventManager.TriggerOnRemovePresence(agentID);
 | 
			
		||||
 | 
			
		||||
                CleanDroppedAttachments();
 | 
			
		||||
 | 
			
		||||
                ForEachClient(
 | 
			
		||||
                    delegate(IClientAPI client)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -3408,6 +3411,8 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
 | 
			
		||||
            if (vialogin) 
 | 
			
		||||
            {
 | 
			
		||||
                CleanDroppedAttachments();
 | 
			
		||||
 | 
			
		||||
                if (TestBorderCross(agent.startpos, Cardinals.E))
 | 
			
		||||
                {
 | 
			
		||||
                    Border crossedBorder = GetCrossedBorder(agent.startpos, Cardinals.E);
 | 
			
		||||
| 
						 | 
				
			
			@ -4984,5 +4989,36 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    throw new Exception(error);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void CleanDroppedAttachments()
 | 
			
		||||
        {
 | 
			
		||||
            List<SceneObjectGroup> objectsToDelete =
 | 
			
		||||
                    new List<SceneObjectGroup>();
 | 
			
		||||
 | 
			
		||||
            ForEachSOG(delegate (SceneObjectGroup grp)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (grp.RootPart.Shape.State != 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            if (grp.RootPart.Shape.PCode == 0 && grp.RootPart.Shape.State != 0 && (!objectsToDelete.Contains(grp)))
 | 
			
		||||
                            {
 | 
			
		||||
                                objectsToDelete.Add(grp);
 | 
			
		||||
                                return;
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            ScenePresence sp = GetScenePresence(agentID);
 | 
			
		||||
                            if (sp == null)
 | 
			
		||||
                            {
 | 
			
		||||
                                objectsToDelete.Add(grp);
 | 
			
		||||
                                return;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
            
 | 
			
		||||
            foreach (SceneObjectGroup grp in objectsToDelete)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.InfoFormat("[SCENE]: Deleting dropped attachment {0} of user {1}", grp.UUID, grp.OwnerID);
 | 
			
		||||
                DeleteSceneObject(grp, true);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue