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
{
// 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.SendKiPrimitive(scene.Entities[uuid].LocalId);
scene.m_innerScene.DeleteSceneObject(uuid, false);

View File

@ -517,6 +517,10 @@ namespace OpenSim.Region.Environment.Scenes
group.SetFromAssetID(newAssetID);
}
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
{

View File

@ -2052,6 +2052,10 @@ namespace OpenSim.Region.Environment.Scenes
{
if (RootPrim.Shape.State != 0)
{
// Never persist
grp.DetachFromBackup();
// Attachment
ScenePresence sp = GetScenePresence(grp.OwnerID);
if (sp != null)
@ -2063,6 +2067,10 @@ namespace OpenSim.Region.Environment.Scenes
grp.SetFromAssetID(grp.RootPart.LastOwnerID);
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
if (avatar.IsChildAgent) return;
DetachFromBackup(this);
DetachFromBackup();
m_rootPart.AttachedAvatar = agentID;
@ -955,7 +955,7 @@ namespace OpenSim.Region.Environment.Scenes
// code needs a redesign.
m_isDeleted = true;
DetachFromBackup(this);
DetachFromBackup();
lock (m_parts)
{
@ -1925,9 +1925,9 @@ namespace OpenSim.Region.Environment.Scenes
/// Stop this object from being persisted over server restarts.
/// </summary>
/// <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)