From 3902149e1b3954ea92e0a2dce1e6a9da3c42b6e8 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 3 Oct 2008 15:32:44 +0000 Subject: Implement temp-on-rez objecte really being temporary --- OpenSim/Region/Environment/Scenes/Scene.cs | 32 ++++++++++++++++++++++ .../Region/Environment/Scenes/SceneObjectGroup.cs | 7 +++-- .../Region/Environment/Scenes/SceneObjectPart.cs | 16 ++++++++--- 3 files changed, 49 insertions(+), 6 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 09ebbee..2e28cca 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -760,6 +760,10 @@ namespace OpenSim.Region.Environment.Scenes if (m_frame % m_update_presences == 0) m_innerScene.UpdatePresences(); + // Delete temp-on-rez stuff + if (m_frame % m_update_backup == 0) + CleanTempObjects(); + if (Region_Status != RegionStatus.SlaveScene) { if (m_frame % m_update_events == 0) @@ -2069,6 +2073,12 @@ namespace OpenSim.Region.Environment.Scenes } else { + // Remove, then add, to ensure the expire + // time is refreshed. Wouldn't do to + // have it poof before the avatar gets + // there. + // + RootPrim.RemFlag(PrimFlags.TemporaryOnRez); RootPrim.AddFlag(PrimFlags.TemporaryOnRez); } } @@ -4183,5 +4193,27 @@ namespace OpenSim.Region.Environment.Scenes break; } } + + public void CleanTempObjects() + { + List objs = GetEntities(); + + foreach (EntityBase obj in objs) + { + if (obj is SceneObjectGroup) + { + SceneObjectGroup grp = (SceneObjectGroup)obj; + + if (grp.RootPart != null) + { + if ((grp.RootPart.Flags & PrimFlags.TemporaryOnRez) != 0) + { + if (grp.RootPart.Expires <= DateTime.Now) + DeleteSceneObject(grp); + } + } + } + } + } } } diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index ebd79e2..9a418b8 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -1809,7 +1809,7 @@ namespace OpenSim.Region.Environment.Scenes linkPart.LinkNum = m_parts.Count; linkPart.SetParent(this); - linkPart.AddFlag(PrimFlags.CreateSelected); + linkPart.AddFlag(PrimFlags.CreateSelected); //if (linkPart.PhysActor != null) //{ @@ -2081,6 +2081,9 @@ namespace OpenSim.Region.Environment.Scenes { SceneObjectPart selectionPart = GetChildPart(localID); + if (data[47] != 0) // Temporary + DetachFromBackup(); + if (selectionPart != null) { lock (m_parts) @@ -2089,7 +2092,7 @@ namespace OpenSim.Region.Environment.Scenes { if (part.Scale.X > 10.0 || part.Scale.Y > 10.0 || part.Scale.Z > 10.0) { - data[47] = 0; // Reset physics + data[46] = 0; // Reset physics break; } } diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 9458908..a214884 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -361,6 +361,7 @@ namespace OpenSim.Region.Environment.Scenes private uint _everyoneMask = (uint)PermissionMask.None; private uint _nextOwnerMask = (uint)PermissionMask.All; private PrimFlags _flags = 0; + private DateTime m_expires; public UUID CreatorID { get @@ -451,6 +452,13 @@ namespace OpenSim.Region.Environment.Scenes set { m_particleSystem = value; } } + [XmlIgnore] + public DateTime Expires + { + get { return m_expires; } + set { m_expires = value; } + } + /// /// The position of the entire group that this prim belongs to. /// @@ -1050,15 +1058,15 @@ namespace OpenSim.Region.Environment.Scenes public void AddFlag(PrimFlags flag) { // PrimFlags prevflag = Flags; - //uint objflags = Flags; if ((ObjectFlags & (uint) flag) == 0) { //Console.WriteLine("Adding flag: " + ((PrimFlags) flag).ToString()); _flags |= flag; + + if (flag == PrimFlags.TemporaryOnRez) + Expires = DateTime.Now + new TimeSpan(600000000); } - //uint currflag = (uint)Flags; - //System.Console.WriteLine("Aprev: " + prevflag.ToString() + " curr: " + Flags.ToString()); - //ScheduleFullUpdate(); + // System.Console.WriteLine("Aprev: " + prevflag.ToString() + " curr: " + Flags.ToString()); } /// -- cgit v1.1