Prevent attachments to be persisted in the destination region when the

avatar is not present there.
0.6.0-stable
Melanie Thielker 2008-10-03 13:45:54 +00:00
parent 5f8e241e81
commit 36097a8198
4 changed files with 17 additions and 5 deletions

View File

@ -258,7 +258,7 @@ namespace OpenSim.Region.Environment.Modules.ContentManagement
try try
{ {
// I thought that the DeleteGroup() function would handle all of this, but it doesn't. I'm not sure WHAT it handles. // I thought that the DeleteGroup() function would handle all of this, but it doesn't. I'm not sure WHAT it handles.
((SceneObjectGroup)scene.Entities[uuid]).DetachFromBackup((SceneObjectGroup)scene.Entities[uuid]); ((SceneObjectGroup)scene.Entities[uuid]).DetachFromBackup();
scene.PhysicsScene.RemovePrim(((SceneObjectGroup)scene.Entities[uuid]).RootPart.PhysActor); scene.PhysicsScene.RemovePrim(((SceneObjectGroup)scene.Entities[uuid]).RootPart.PhysActor);
scene.SendKiPrimitive(scene.Entities[uuid].LocalId); scene.SendKiPrimitive(scene.Entities[uuid].LocalId);
scene.m_innerScene.DeleteSceneObject(uuid, false); scene.m_innerScene.DeleteSceneObject(uuid, false);

View File

@ -517,6 +517,10 @@ namespace OpenSim.Region.Environment.Scenes
group.SetFromAssetID(newAssetID); group.SetFromAssetID(newAssetID);
} }
group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos); group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos);
// In case it is later dropped again, don't let
// it get cleaned up
//
group.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
} }
else else
{ {

View File

@ -2052,6 +2052,10 @@ namespace OpenSim.Region.Environment.Scenes
{ {
if (RootPrim.Shape.State != 0) if (RootPrim.Shape.State != 0)
{ {
// Never persist
grp.DetachFromBackup();
// Attachment // Attachment
ScenePresence sp = GetScenePresence(grp.OwnerID); ScenePresence sp = GetScenePresence(grp.OwnerID);
if (sp != null) if (sp != null)
@ -2063,6 +2067,10 @@ namespace OpenSim.Region.Environment.Scenes
grp.SetFromAssetID(grp.RootPart.LastOwnerID); grp.SetFromAssetID(grp.RootPart.LastOwnerID);
AttachObject(sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition); AttachObject(sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition);
} }
else
{
RootPrim.AddFlag(PrimFlags.TemporaryOnRez);
}
} }
} }
} }

View File

@ -713,7 +713,7 @@ namespace OpenSim.Region.Environment.Scenes
// don't attach attachments to child agents // don't attach attachments to child agents
if (avatar.IsChildAgent) return; if (avatar.IsChildAgent) return;
DetachFromBackup(this); DetachFromBackup();
m_rootPart.AttachedAvatar = agentID; m_rootPart.AttachedAvatar = agentID;
@ -955,7 +955,7 @@ namespace OpenSim.Region.Environment.Scenes
// code needs a redesign. // code needs a redesign.
m_isDeleted = true; m_isDeleted = true;
DetachFromBackup(this); DetachFromBackup();
lock (m_parts) lock (m_parts)
{ {
@ -1925,9 +1925,9 @@ namespace OpenSim.Region.Environment.Scenes
/// Stop this object from being persisted over server restarts. /// Stop this object from being persisted over server restarts.
/// </summary> /// </summary>
/// <param name="objectGroup"></param> /// <param name="objectGroup"></param>
public void DetachFromBackup(SceneObjectGroup objectGroup) public void DetachFromBackup()
{ {
m_scene.EventManager.OnBackup -= objectGroup.ProcessBackup; m_scene.EventManager.OnBackup -= ProcessBackup;
} }
private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation) private void LinkNonRootPart(SceneObjectPart part, Vector3 oldGroupPosition, Quaternion oldGroupRotation)