From 095b3e5756bb3160b30c9c5670ba008fa13d2e66 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 1 Sep 2011 01:22:28 +0100 Subject: [PATCH] Remove pointless cluttering SOP.ParentGroup != null checks. The only times when ParentGroup might be null is during regression tests (which might not be a valid thing) and when scene objects are being constructed from the database. At all other times it's not possible for a SOP not to have a SOG parent. --- .../ClientStack/Linden/UDP/LLClientView.cs | 7 +- .../World/Estate/EstateManagementModule.cs | 50 ++-- .../World/Objects/BuySell/BuySellModule.cs | 5 +- .../World/Permissions/PermissionsModule.cs | 2 +- .../Region/Framework/Scenes/Prioritizer.cs | 3 +- .../Framework/Scenes/Scene.Inventory.cs | 51 ++-- OpenSim/Region/Framework/Scenes/Scene.cs | 88 +++--- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 29 +- .../Framework/Scenes/SceneObjectPart.cs | 282 +++++++----------- .../Scenes/SceneObjectPartInventory.cs | 10 +- .../Region/Framework/Scenes/SceneViewer.cs | 2 +- .../Shared/Api/Implementation/LSL_Api.cs | 157 ++++------ .../Shared/Api/Implementation/OSSL_Api.cs | 10 +- OpenSim/Region/ScriptEngine/Shared/Helpers.cs | 2 +- .../Shared/Instance/ScriptInstance.cs | 4 +- .../ScriptEngine/XEngine/EventManager.cs | 4 +- 16 files changed, 278 insertions(+), 428 deletions(-) diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 661e9db2e6..e9ee7be57f 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -4756,10 +4756,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { SceneObjectPart part = (SceneObjectPart)entity; - if (part.ParentGroup != null) - attachPoint = part.ParentGroup.AttachmentPoint; - else - attachPoint = 0; + attachPoint = part.ParentGroup.AttachmentPoint; // m_log.DebugFormat( // "[LLCLIENTVIEW]: Sending attachPoint {0} for {1} {2} to {3}", @@ -4921,7 +4918,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP //update.JointType = 0; update.Material = data.Material; update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim - if (data.ParentGroup != null && data.ParentGroup.IsAttachment) + if (data.ParentGroup.IsAttachment) { update.NameValue = Util.StringToBytes256("AttachItemID STRING RW SV " + data.FromItemID); update.State = (byte)((data.ParentGroup.AttachmentPoint % 16) * 16 + (data.ParentGroup.AttachmentPoint / 16)); diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index 3aed6bac8d..d0605e3bc9 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs @@ -851,41 +851,35 @@ namespace OpenSim.Region.CoreModules.World.Estate SceneObjectPart prt = Scene.GetSceneObjectPart(obj); if (prt != null) { - if (prt.ParentGroup != null) + SceneObjectGroup sog = prt.ParentGroup; + LandStatReportItem lsri = new LandStatReportItem(); + lsri.LocationX = sog.AbsolutePosition.X; + lsri.LocationY = sog.AbsolutePosition.Y; + lsri.LocationZ = sog.AbsolutePosition.Z; + lsri.Score = SceneData[obj]; + lsri.TaskID = sog.UUID; + lsri.TaskLocalID = sog.LocalId; + lsri.TaskName = sog.GetPartName(obj); + lsri.OwnerName = "waiting"; + lock (uuidNameLookupList) + uuidNameLookupList.Add(sog.OwnerID); + + if (filter.Length != 0) { - SceneObjectGroup sog = prt.ParentGroup; - if (sog != null) + if ((lsri.OwnerName.Contains(filter) || lsri.TaskName.Contains(filter))) { - LandStatReportItem lsri = new LandStatReportItem(); - lsri.LocationX = sog.AbsolutePosition.X; - lsri.LocationY = sog.AbsolutePosition.Y; - lsri.LocationZ = sog.AbsolutePosition.Z; - lsri.Score = SceneData[obj]; - lsri.TaskID = sog.UUID; - lsri.TaskLocalID = sog.LocalId; - lsri.TaskName = sog.GetPartName(obj); - lsri.OwnerName = "waiting"; - lock (uuidNameLookupList) - uuidNameLookupList.Add(sog.OwnerID); - - if (filter.Length != 0) - { - if ((lsri.OwnerName.Contains(filter) || lsri.TaskName.Contains(filter))) - { - } - else - { - continue; - } - } - - SceneReport.Add(lsri); + } + else + { + continue; } } - } + SceneReport.Add(lsri); + } } } + remoteClient.SendLandStatReply(reportType, requestFlags, (uint)SceneReport.Count,SceneReport.ToArray()); if (uuidNameLookupList.Count > 0) diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index be399ff65b..8b78701537 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -85,7 +85,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice) { SceneObjectPart part = m_scene.GetSceneObjectPart(localID); - if (part == null || part.ParentGroup == null) + if (part == null) return; if (part.ParentGroup.IsDeleted) @@ -111,9 +111,6 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell if (part == null) return false; - if (part.ParentGroup == null) - return false; - SceneObjectGroup group = part.ParentGroup; switch (saleType) diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 7cb375180e..b9bd9a4ca9 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs @@ -1131,7 +1131,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions SceneObjectPart part = scene.GetSceneObjectPart(objectID); if (part.OwnerID != moverID) { - if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) + if (!part.ParentGroup.IsDeleted) { if (part.ParentGroup.IsAttachment) return false; diff --git a/OpenSim/Region/Framework/Scenes/Prioritizer.cs b/OpenSim/Region/Framework/Scenes/Prioritizer.cs index 33407ec842..1b10e3cb85 100644 --- a/OpenSim/Region/Framework/Scenes/Prioritizer.cs +++ b/OpenSim/Region/Framework/Scenes/Prioritizer.cs @@ -208,8 +208,7 @@ namespace OpenSim.Region.Framework.Scenes if (entity is SceneObjectPart) { SceneObjectGroup group = (entity as SceneObjectPart).ParentGroup; - if (group != null) - entityPos = group.AbsolutePosition; + entityPos = group.AbsolutePosition; } // Use the camera position for local agents and avatar position for remote agents diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index addc20c811..4700c3bb1a 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -225,16 +225,8 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetSceneObjectPart(primId); if (part == null) return new ArrayList(); - SceneObjectGroup group = part.ParentGroup; - if (null == group) - { - m_log.ErrorFormat( - "[PRIM INVENTORY]: " + - "Prim inventory update requested for item ID {0} in prim ID {1} but this prim does not exist", - itemId, primId); - return new ArrayList(); - } + SceneObjectGroup group = part.ParentGroup; // Retrieve item TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId); @@ -971,33 +963,23 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetSceneObjectPart(localID); if (part == null) return; - SceneObjectGroup group = part.ParentGroup; - if (group != null) - { - if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) - return; - - TaskInventoryItem item = group.GetInventoryItem(localID, itemID); - if (item == null) - return; - if (item.Type == 10) - { - part.RemoveScriptEvents(itemID); - EventManager.TriggerRemoveScript(localID, itemID); - } - - group.RemoveInventoryItem(localID, itemID); - part.GetProperties(remoteClient); - } - else + SceneObjectGroup group = part.ParentGroup; + if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) + return; + + TaskInventoryItem item = group.GetInventoryItem(localID, itemID); + if (item == null) + return; + + if (item.Type == 10) { - m_log.ErrorFormat( - "[PRIM INVENTORY]: " + - "Removal of item {0} requested of prim {1} but this prim does not exist", - itemID, - localID); + part.RemoveScriptEvents(itemID); + EventManager.TriggerRemoveScript(localID, itemID); } + + group.RemoveInventoryItem(localID, itemID); + part.GetProperties(remoteClient); } private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId) @@ -1770,7 +1752,7 @@ namespace OpenSim.Region.Framework.Scenes continue; // Already deleted by someone else - if (part.ParentGroup == null || part.ParentGroup.IsDeleted) + if (part.ParentGroup.IsDeleted) continue; // Can't delete child prims @@ -2034,6 +2016,7 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetSceneObjectPart(localID); if (part == null) continue; + if (!groups.Contains(part.ParentGroup)) groups.Add(part.ParentGroup); } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 936828509e..7f5aea76d0 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -3012,58 +3012,51 @@ namespace OpenSim.Region.Framework.Scenes Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); - if (target2.ParentGroup != null) + pos = target2.AbsolutePosition; + //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString()); + + // TODO: Raytrace better here + + //EntityIntersection ei = m_sceneGraph.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection)); + Ray NewRay = new Ray(AXOrigin, AXdirection); + + // Ray Trace against target here + EntityIntersection ei = target2.TestIntersectionOBB(NewRay, Quaternion.Identity, frontFacesOnly, CopyCenters); + + // Un-comment out the following line to Get Raytrace results printed to the console. + //m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString()); + float ScaleOffset = 0.5f; + + // If we hit something + if (ei.HitTF) { - pos = target2.AbsolutePosition; - //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString()); + Vector3 scale = target.Scale; + Vector3 scaleComponent = new Vector3(ei.AAfaceNormal.X, ei.AAfaceNormal.Y, ei.AAfaceNormal.Z); + if (scaleComponent.X != 0) ScaleOffset = scale.X; + if (scaleComponent.Y != 0) ScaleOffset = scale.Y; + if (scaleComponent.Z != 0) ScaleOffset = scale.Z; + ScaleOffset = Math.Abs(ScaleOffset); + Vector3 intersectionpoint = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); + Vector3 normal = new Vector3(ei.normal.X, ei.normal.Y, ei.normal.Z); + Vector3 offset = normal * (ScaleOffset / 2f); + pos = intersectionpoint + offset; - // TODO: Raytrace better here - - //EntityIntersection ei = m_sceneGraph.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection)); - Ray NewRay = new Ray(AXOrigin, AXdirection); - - // Ray Trace against target here - EntityIntersection ei = target2.TestIntersectionOBB(NewRay, Quaternion.Identity, frontFacesOnly, CopyCenters); - - // Un-comment out the following line to Get Raytrace results printed to the console. - //m_log.Info("[RAYTRACERESULTS]: Hit:" + ei.HitTF.ToString() + " Point: " + ei.ipoint.ToString() + " Normal: " + ei.normal.ToString()); - float ScaleOffset = 0.5f; - - // If we hit something - if (ei.HitTF) + // stick in offset format from the original prim + pos = pos - target.ParentGroup.AbsolutePosition; + if (CopyRotates) { - Vector3 scale = target.Scale; - Vector3 scaleComponent = new Vector3(ei.AAfaceNormal.X, ei.AAfaceNormal.Y, ei.AAfaceNormal.Z); - if (scaleComponent.X != 0) ScaleOffset = scale.X; - if (scaleComponent.Y != 0) ScaleOffset = scale.Y; - if (scaleComponent.Z != 0) ScaleOffset = scale.Z; - ScaleOffset = Math.Abs(ScaleOffset); - Vector3 intersectionpoint = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); - Vector3 normal = new Vector3(ei.normal.X, ei.normal.Y, ei.normal.Z); - Vector3 offset = normal * (ScaleOffset / 2f); - pos = intersectionpoint + offset; + Quaternion worldRot = target2.GetWorldRotation(); - // stick in offset format from the original prim - pos = pos - target.ParentGroup.AbsolutePosition; - if (CopyRotates) - { - Quaternion worldRot = target2.GetWorldRotation(); - - // SceneObjectGroup obj = m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); - m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); - //obj.Rotation = worldRot; - //obj.UpdateGroupRotationR(worldRot); - } - else - { - m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID); - } + // SceneObjectGroup obj = m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); + m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID, worldRot); + //obj.Rotation = worldRot; + //obj.UpdateGroupRotationR(worldRot); + } + else + { + m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID); } - - return; } - - return; } } @@ -3233,12 +3226,13 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetSceneObjectPart(localID); if (part != null) // It is a prim { - if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) // Valid + if (!part.ParentGroup.IsDeleted) // Valid { if (part.ParentGroup.RootPart != part) // Child part return; } } + ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); }); } diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 76ed55c3e7..17a1bccc8a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -1630,27 +1630,18 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectGroup parentGroup = root.ParentGroup; List childGroups = new List(); - if (parentGroup != null) - { - // We do this in reverse to get the link order of the prims correct - for (int i = children.Count - 1; i >= 0; i--) - { - SceneObjectGroup child = children[i].ParentGroup; - if (child != null) - { - // Make sure no child prim is set for sale - // So that, on delink, no prims are unwittingly - // left for sale and sold off - child.RootPart.ObjectSaleType = 0; - child.RootPart.SalePrice = 10; - childGroups.Add(child); - } - } - } - else + // We do this in reverse to get the link order of the prims correct + for (int i = children.Count - 1; i >= 0; i--) { - return; // parent is null so not in this region + SceneObjectGroup child = children[i].ParentGroup; + + // Make sure no child prim is set for sale + // So that, on delink, no prims are unwittingly + // left for sale and sold off + child.RootPart.ObjectSaleType = 0; + child.RootPart.SalePrice = 10; + childGroups.Add(child); } foreach (SceneObjectGroup child in childGroups) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 71023a9a43..4e7504af32 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -302,7 +302,6 @@ namespace OpenSim.Region.Framework.Scenes protected string m_name; protected Vector3 m_offsetPosition; - // FIXME, TODO, ERROR: 'ParentGroup' can't be in here, move it out. protected SceneObjectGroup m_parentGroup; protected byte[] m_particleSystem = Utils.EmptyBytes; protected ulong m_regionHandle; @@ -592,6 +591,7 @@ namespace OpenSim.Region.Framework.Scenes set { m_passTouches = value; + if (ParentGroup != null) ParentGroup.HasGroupChanged = true; } @@ -759,13 +759,10 @@ namespace OpenSim.Region.Framework.Scenes // TODO if we decide to do sitting in a more SL compatible way (multiple avatars per prim), this has to be fixed, too if (m_sitTargetAvatar != UUID.Zero) { - if (m_parentGroup != null) // TODO can there be a SOP without a SOG? + ScenePresence avatar; + if (m_parentGroup.Scene.TryGetScenePresence(m_sitTargetAvatar, out avatar)) { - ScenePresence avatar; - if (m_parentGroup.Scene.TryGetScenePresence(m_sitTargetAvatar, out avatar)) - { - avatar.ParentPosition = GetWorldPosition(); - } + avatar.ParentPosition = GetWorldPosition(); } } } @@ -854,7 +851,9 @@ namespace OpenSim.Region.Framework.Scenes actor.Orientation = resultingrotation; //m_log.Info("[PART]: RO2:" + actor.Orientation.ToString()); } - m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor); + + if (m_parentGroup != null) + m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor); //} } catch (Exception ex) @@ -862,7 +861,6 @@ namespace OpenSim.Region.Framework.Scenes m_log.Error("[SCENEOBJECTPART]: ROTATIONOFFSET" + ex.Message); } } - } } @@ -1018,7 +1016,7 @@ namespace OpenSim.Region.Framework.Scenes m_shape.Scale = value; PhysicsActor actor = PhysActor; - if (actor != null && m_parentGroup != null) + if (actor != null) { if (m_parentGroup.Scene != null) { @@ -1059,7 +1057,7 @@ namespace OpenSim.Region.Framework.Scenes set { m_mediaUrl = value; - + if (ParentGroup != null) ParentGroup.HasGroupChanged = true; } @@ -1107,7 +1105,6 @@ namespace OpenSim.Region.Framework.Scenes set { m_sitTargetOrientation = value; } } - public Vector3 SitTargetPosition { get { return m_sitTargetPosition; } @@ -1262,7 +1259,7 @@ namespace OpenSim.Region.Framework.Scenes { get { - if (ParentGroup != null && ParentGroup.Scene != null) + if (ParentGroup.Scene != null) return ParentGroup.Scene.RegionInfo.RegionID; else return UUID.Zero; @@ -1277,14 +1274,13 @@ namespace OpenSim.Region.Framework.Scenes get { if (ParentGroup != null) - { _parentUUID = ParentGroup.UUID; - } + return _parentUUID; } + set { _parentUUID = value; } } - public string SitAnimation { @@ -1514,10 +1510,7 @@ namespace OpenSim.Region.Framework.Scenes impulse = newimpulse; } - if (m_parentGroup != null) - { - m_parentGroup.applyAngularImpulse(impulse); - } + m_parentGroup.applyAngularImpulse(impulse); } /// @@ -1540,10 +1533,7 @@ namespace OpenSim.Region.Framework.Scenes impulse = newimpulse; } - if (m_parentGroup != null) - { - m_parentGroup.setAngularImpulse(impulse); - } + m_parentGroup.setAngularImpulse(impulse); } public Vector3 GetTorque() @@ -1951,8 +1941,6 @@ namespace OpenSim.Region.Framework.Scenes public bool GetDieAtEdge() { - if (m_parentGroup == null) - return false; if (m_parentGroup.IsDeleted) return false; @@ -1961,8 +1949,6 @@ namespace OpenSim.Region.Framework.Scenes public bool GetReturnAtEdge() { - if (m_parentGroup == null) - return false; if (m_parentGroup.IsDeleted) return false; @@ -1971,8 +1957,6 @@ namespace OpenSim.Region.Framework.Scenes public void SetReturnAtEdge(bool p) { - if (m_parentGroup == null) - return; if (m_parentGroup.IsDeleted) return; @@ -1981,8 +1965,6 @@ namespace OpenSim.Region.Framework.Scenes public bool GetBlockGrab() { - if (m_parentGroup == null) - return false; if (m_parentGroup.IsDeleted) return false; @@ -1991,8 +1973,6 @@ namespace OpenSim.Region.Framework.Scenes public void SetBlockGrab(bool p) { - if (m_parentGroup == null) - return; if (m_parentGroup.IsDeleted) return; @@ -2001,8 +1981,6 @@ namespace OpenSim.Region.Framework.Scenes public void SetStatusSandbox(bool p) { - if (m_parentGroup == null) - return; if (m_parentGroup.IsDeleted) return; StatusSandboxPos = m_parentGroup.RootPart.AbsolutePosition; @@ -2011,8 +1989,6 @@ namespace OpenSim.Region.Framework.Scenes public bool GetStatusSandbox() { - if (m_parentGroup == null) - return false; if (m_parentGroup.IsDeleted) return false; @@ -2090,11 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes public UUID GetRootPartUUID() { - if (m_parentGroup != null) - { - return m_parentGroup.UUID; - } - return UUID.Zero; + return m_parentGroup.UUID; } /// @@ -2220,8 +2192,6 @@ namespace OpenSim.Region.Framework.Scenes m_lastColliders.Remove(localID); } - if (m_parentGroup == null) - return; if (m_parentGroup.IsDeleted) return; @@ -2242,9 +2212,6 @@ namespace OpenSim.Region.Framework.Scenes { if (localId == 0) continue; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2253,7 +2220,8 @@ namespace OpenSim.Region.Framework.Scenes string data = ""; if (obj != null) { - if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) + if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) + || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) { bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); //If it is 1, it is to accept ONLY collisions from this object @@ -2300,7 +2268,8 @@ namespace OpenSim.Region.Framework.Scenes { if (av.LocalId == localId) { - if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) + if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) + || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) { bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1, out data); //If it is 1, it is to accept ONLY collisions from this avatar @@ -2348,12 +2317,10 @@ namespace OpenSim.Region.Framework.Scenes if (colliding.Count > 0) { StartCollidingMessage.Colliders = colliding; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; + if (m_parentGroup.PassCollision == true) { //TODO: Add pass to root prim! @@ -2374,9 +2341,6 @@ namespace OpenSim.Region.Framework.Scenes // always running this check because if the user deletes the object it would return a null reference. if (localId == 0) continue; - - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2385,7 +2349,8 @@ namespace OpenSim.Region.Framework.Scenes string data = ""; if (obj != null) { - if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) + if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.UUID.ToString()) + || m_parentGroup.RootPart.CollisionFilter.ContainsValue(obj.Name)) { bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data); //If it is 1, it is to accept ONLY collisions from this object @@ -2432,7 +2397,8 @@ namespace OpenSim.Region.Framework.Scenes { if (av.LocalId == localId) { - if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) + if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) + || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) { bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1, out data); //If it is 1, it is to accept ONLY collisions from this avatar @@ -2480,9 +2446,6 @@ namespace OpenSim.Region.Framework.Scenes if (colliding.Count > 0) { CollidingMessage.Colliders = colliding; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2503,11 +2466,9 @@ namespace OpenSim.Region.Framework.Scenes if (localId == 0) continue; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; + SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); string data = ""; if (obj != null) @@ -2559,7 +2520,8 @@ namespace OpenSim.Region.Framework.Scenes { if (av.LocalId == localId) { - if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) + if (m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.UUID.ToString()) + || m_parentGroup.RootPart.CollisionFilter.ContainsValue(av.Name)) { bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1, out data); //If it is 1, it is to accept ONLY collisions from this avatar @@ -2608,9 +2570,6 @@ namespace OpenSim.Region.Framework.Scenes if (colliding.Count > 0) { EndCollidingMessage.Colliders = colliding; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2619,6 +2578,7 @@ namespace OpenSim.Region.Framework.Scenes } } } + if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_start) != 0) { if (startedColliders.Count > 0) @@ -2646,9 +2606,6 @@ namespace OpenSim.Region.Framework.Scenes if (colliding.Count > 0) { LandStartCollidingMessage.Colliders = colliding; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2657,6 +2614,7 @@ namespace OpenSim.Region.Framework.Scenes } } } + if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision) != 0) { if (m_lastColliders.Count > 0) @@ -2684,9 +2642,6 @@ namespace OpenSim.Region.Framework.Scenes if (colliding.Count > 0) { LandCollidingMessage.Colliders = colliding; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2695,6 +2650,7 @@ namespace OpenSim.Region.Framework.Scenes } } } + if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_end) != 0) { if (endedColliders.Count > 0) @@ -2722,9 +2678,6 @@ namespace OpenSim.Region.Framework.Scenes if (colliding.Count > 0) { LandEndCollidingMessage.Colliders = colliding; - // always running this check because if the user deletes the object it would return a null reference. - if (m_parentGroup == null) - return; if (m_parentGroup.Scene == null) return; @@ -2748,10 +2701,12 @@ namespace OpenSim.Region.Framework.Scenes { if (PhysActor != null) { - Vector3 newpos = new Vector3(PhysActor.Position.GetBytes(), 0); - if (m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.N) | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.S) | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.E) | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.W)) + if (m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.N) + | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.S) + | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.E) + | m_parentGroup.Scene.TestBorderCross(newpos, Cardinals.W)) { m_parentGroup.AbsolutePosition = newpos; return; @@ -2909,11 +2864,11 @@ namespace OpenSim.Region.Framework.Scenes public void ScheduleFullUpdate() { // m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); - - if (m_parentGroup != null) - { - m_parentGroup.QueueForUpdateCheck(); - } + + if (m_parentGroup == null) + return; + + m_parentGroup.QueueForUpdateCheck(); int timeNow = Util.UnixTimeSinceEpoch(); @@ -2942,13 +2897,14 @@ namespace OpenSim.Region.Framework.Scenes /// public void ScheduleTerseUpdate() { + if (m_parentGroup == null) + return; + if (m_updateFlag < 1) { - if (m_parentGroup != null) - { - m_parentGroup.HasGroupChanged = true; - m_parentGroup.QueueForUpdateCheck(); - } + m_parentGroup.HasGroupChanged = true; + m_parentGroup.QueueForUpdateCheck(); + TimeStampTerse = (uint) Util.UnixTimeSinceEpoch(); m_updateFlag = 1; @@ -2960,10 +2916,7 @@ namespace OpenSim.Region.Framework.Scenes public void ScriptSetPhysicsStatus(bool UsePhysics) { - if (m_parentGroup == null) - DoPhysicsPropertyUpdate(UsePhysics, false); - else - m_parentGroup.ScriptSetPhysicsStatus(UsePhysics); + m_parentGroup.ScriptSetPhysicsStatus(UsePhysics); } /// @@ -3003,6 +2956,9 @@ namespace OpenSim.Region.Framework.Scenes /// protected internal void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) { + if (m_parentGroup == null) + return; + // m_log.DebugFormat( // "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); @@ -3028,6 +2984,9 @@ namespace OpenSim.Region.Framework.Scenes /// public void SendFullUpdateToAllClients() { + if (m_parentGroup == null) + return; + m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) { SendFullUpdate(avatar.ControllingClient, avatar.GenerateClientFlags(UUID)); @@ -3040,6 +2999,9 @@ namespace OpenSim.Region.Framework.Scenes /// public void SendFullUpdateToAllClientsExcept(UUID agentID) { + if (m_parentGroup == null) + return; + m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) { // Ugly reference :( @@ -3068,6 +3030,9 @@ namespace OpenSim.Region.Framework.Scenes /// public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos, uint clientFlags) { + if (ParentGroup == null) + return; + // Suppress full updates during attachment editing // if (ParentGroup.IsSelected && ParentGroup.IsAttachment) @@ -3250,10 +3215,7 @@ namespace OpenSim.Region.Framework.Scenes public void SetAxisRotation(int axis, int rotate) { - if (m_parentGroup != null) - { - m_parentGroup.SetAxisRotation(axis, rotate); - } + m_parentGroup.SetAxisRotation(axis, rotate); //Cannot use ScriptBaseClass constants as no referance to it currently. if (axis == 2)//STATUS_ROTATE_X @@ -3276,8 +3238,6 @@ namespace OpenSim.Region.Framework.Scenes public void SetDieAtEdge(bool p) { - if (m_parentGroup == null) - return; if (m_parentGroup.IsDeleted) return; @@ -3530,7 +3490,7 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// + /// Set the parent group of this prim. /// public void SetParent(SceneObjectGroup parent) { @@ -3587,8 +3547,11 @@ namespace OpenSim.Region.Framework.Scenes { Text = text; - ParentGroup.HasGroupChanged = true; - ScheduleFullUpdate(); + if (ParentGroup != null) + { + ParentGroup.HasGroupChanged = true; + ScheduleFullUpdate(); + } } public void StopLookAt() @@ -3632,7 +3595,7 @@ namespace OpenSim.Region.Framework.Scenes { if (!IgnoreUndoUpdate) { - if (m_parentGroup != null) + if (ParentGroup != null) { lock (m_undo) { @@ -3644,31 +3607,31 @@ namespace OpenSim.Region.Framework.Scenes // TODO: May need to fix for group comparison if (last.Compare(this)) { -// m_log.DebugFormat( -// "[SCENE OBJECT PART]: Not storing undo for {0} {1} since current state is same as last undo state, initial stack size {2}", -// Name, LocalId, m_undo.Count); - + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Not storing undo for {0} {1} since current state is same as last undo state, initial stack size {2}", + // Name, LocalId, m_undo.Count); + return; } } } - -// m_log.DebugFormat( -// "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}", -// Name, LocalId, forGroup, m_undo.Count); - + + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}", + // Name, LocalId, forGroup, m_undo.Count); + if (m_parentGroup.GetSceneMaxUndo() > 0) { UndoState nUndo = new UndoState(this, forGroup); - + m_undo.Push(nUndo); - + if (m_redo.Count > 0) m_redo.Clear(); - -// m_log.DebugFormat( -// "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", -// Name, LocalId, forGroup, m_undo.Count); + + // m_log.DebugFormat( + // "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", + // Name, LocalId, forGroup, m_undo.Count); } } } @@ -4245,8 +4208,11 @@ namespace OpenSim.Region.Framework.Scenes } } - ParentGroup.HasGroupChanged = true; - ScheduleFullUpdate(); + if (ParentGroup != null) + { + ParentGroup.HasGroupChanged = true; + ScheduleFullUpdate(); + } } public void UpdateGroupPosition(Vector3 pos) @@ -4450,14 +4416,12 @@ namespace OpenSim.Region.Framework.Scenes if (!wasUsingPhysics) { DoPhysicsPropertyUpdate(UsePhysics, false); - if (m_parentGroup != null) + + if (!m_parentGroup.IsDeleted) { - if (!m_parentGroup.IsDeleted) + if (LocalId == m_parentGroup.RootPart.LocalId) { - if (LocalId == m_parentGroup.RootPart.LocalId) - { - m_parentGroup.CheckSculptAndLoad(); - } + m_parentGroup.CheckSculptAndLoad(); } } } @@ -4510,14 +4474,11 @@ namespace OpenSim.Region.Framework.Scenes PhysActor.SetMaterial(Material); DoPhysicsPropertyUpdate(UsePhysics, true); - if (m_parentGroup != null) + if (!m_parentGroup.IsDeleted) { - if (!m_parentGroup.IsDeleted) + if (LocalId == m_parentGroup.RootPart.LocalId) { - if (LocalId == m_parentGroup.RootPart.LocalId) - { - m_parentGroup.CheckSculptAndLoad(); - } + m_parentGroup.CheckSculptAndLoad(); } } @@ -4541,14 +4502,12 @@ namespace OpenSim.Region.Framework.Scenes pa.IsPhysical = UsePhysics; DoPhysicsPropertyUpdate(UsePhysics, false); // Update physical status. If it's phantom this will remove the prim - if (m_parentGroup != null) + + if (!m_parentGroup.IsDeleted) { - if (!m_parentGroup.IsDeleted) + if (LocalId == m_parentGroup.RootPart.LocalId) { - if (LocalId == m_parentGroup.RootPart.LocalId) - { - m_parentGroup.CheckSculptAndLoad(); - } + m_parentGroup.CheckSculptAndLoad(); } } } @@ -4591,8 +4550,11 @@ namespace OpenSim.Region.Framework.Scenes } // m_log.Debug("Update: PHY:" + UsePhysics.ToString() + ", T:" + IsTemporary.ToString() + ", PHA:" + IsPhantom.ToString() + " S:" + CastsShadows.ToString()); - ParentGroup.HasGroupChanged = true; - ScheduleFullUpdate(); + if (ParentGroup != null) + { + ParentGroup.HasGroupChanged = true; + ScheduleFullUpdate(); + } // m_log.DebugFormat("[SCENE OBJECT PART]: Updated PrimFlags on {0} {1} to {2}", Name, LocalId, Flags); } @@ -4605,8 +4567,12 @@ namespace OpenSim.Region.Framework.Scenes (rot.W != RotationOffset.W)) { RotationOffset = rot; - ParentGroup.HasGroupChanged = true; - ScheduleTerseUpdate(); + + if (ParentGroup != null) + { + ParentGroup.HasGroupChanged = true; + ScheduleTerseUpdate(); + } } } @@ -4797,14 +4763,6 @@ namespace OpenSim.Region.Framework.Scenes } } - if (m_parentGroup == null) - { -// m_log.DebugFormat( -// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents() since m_parentGroup == null", Name, LocalId); - ScheduleFullUpdate(); - return; - } - //if ((GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0) //{ // m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting; @@ -4830,36 +4788,22 @@ namespace OpenSim.Region.Framework.Scenes public int registerTargetWaypoint(Vector3 target, float tolerance) { - if (m_parentGroup != null) - { - return m_parentGroup.registerTargetWaypoint(target, tolerance); - } - return 0; + return m_parentGroup.registerTargetWaypoint(target, tolerance); } public void unregisterTargetWaypoint(int handle) { - if (m_parentGroup != null) - { - m_parentGroup.unregisterTargetWaypoint(handle); - } + m_parentGroup.unregisterTargetWaypoint(handle); } public int registerRotTargetWaypoint(Quaternion target, float tolerance) { - if (m_parentGroup != null) - { - return m_parentGroup.registerRotTargetWaypoint(target, tolerance); - } - return 0; + return m_parentGroup.registerRotTargetWaypoint(target, tolerance); } public void unregisterRotTargetWaypoint(int handle) { - if (m_parentGroup != null) - { - m_parentGroup.unregisterRotTargetWaypoint(handle); - } + m_parentGroup.unregisterRotTargetWaypoint(handle); } public void SetCameraAtOffset(Vector3 v) @@ -4901,7 +4845,7 @@ namespace OpenSim.Region.Framework.Scenes public void SendTerseUpdateToClient(IClientAPI remoteClient) { - if (ParentGroup == null || ParentGroup.IsDeleted) + if (ParentGroup.IsDeleted) return; if (ParentGroup.IsAttachment && ParentGroup.RootPart != this) diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 108089e870..e40e57d5b9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs @@ -112,15 +112,17 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Reset UUIDs for all the items in the prim's inventory. This involves either generating + /// Reset UUIDs for all the items in the prim's inventory. + /// + /// + /// This involves either generating /// new ones or setting existing UUIDs to the correct parent UUIDs. /// /// If this method is called and there are inventory items, then we regard the inventory as having changed. - /// - /// Link number for the part + /// public void ResetInventoryIDs() { - if (null == m_part || null == m_part.ParentGroup) + if (null == m_part) return; lock (m_items) diff --git a/OpenSim/Region/Framework/Scenes/SceneViewer.cs b/OpenSim/Region/Framework/Scenes/SceneViewer.cs index 997845b4e2..e2ea830ca1 100644 --- a/OpenSim/Region/Framework/Scenes/SceneViewer.cs +++ b/OpenSim/Region/Framework/Scenes/SceneViewer.cs @@ -110,7 +110,7 @@ namespace OpenSim.Region.Framework.Scenes { SceneObjectPart part = m_partsUpdateQueue.Dequeue(); - if (part.ParentGroup == null || part.ParentGroup.IsDeleted) + if (part.ParentGroup.IsDeleted) continue; if (m_updateTimes.ContainsKey(part.UUID)) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index a7f08d90cb..dff7269763 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -234,35 +234,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api switch (linkType) { case ScriptBaseClass.LINK_SET: - if (m_host.ParentGroup != null) - { - return new List(m_host.ParentGroup.Parts); - } - return ret; + return new List(m_host.ParentGroup.Parts); case ScriptBaseClass.LINK_ROOT: - if (m_host.ParentGroup != null) - { - ret = new List(); - ret.Add(m_host.ParentGroup.RootPart); - return ret; - } + ret = new List(); + ret.Add(m_host.ParentGroup.RootPart); return ret; case ScriptBaseClass.LINK_ALL_OTHERS: - if (m_host.ParentGroup == null) - return new List(); - ret = new List(m_host.ParentGroup.Parts); if (ret.Contains(m_host)) ret.Remove(m_host); + return ret; case ScriptBaseClass.LINK_ALL_CHILDREN: - if (m_host.ParentGroup == null) - return new List(); - ret = new List(m_host.ParentGroup.Parts); if (ret.Contains(m_host.ParentGroup.RootPart)) @@ -273,15 +260,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return ret; default: - if (linkType < 0 || m_host.ParentGroup == null) + if (linkType < 0) return new List(); + SceneObjectPart target = m_host.ParentGroup.GetLinkNumPart(linkType); if (target == null) return new List(); ret = new List(); ret.Add(target); return ret; - } } @@ -1199,8 +1186,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (value != 0) { SceneObjectGroup group = m_host.ParentGroup; - if (group == null) - return; bool allow = true; foreach (SceneObjectPart part in group.Parts) @@ -1214,16 +1199,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (!allow) return; + m_host.ScriptSetPhysicsStatus(true); } else + { m_host.ScriptSetPhysicsStatus(false); + } } if ((status & ScriptBaseClass.STATUS_PHANTOM) == ScriptBaseClass.STATUS_PHANTOM) { - if (m_host.ParentGroup != null) - m_host.ParentGroup.ScriptSetPhantomStatus(value != 0); + m_host.ParentGroup.ScriptSetPhantomStatus(value != 0); } if ((status & ScriptBaseClass.STATUS_CAST_SHADOWS) == ScriptBaseClass.STATUS_CAST_SHADOWS) @@ -1365,8 +1352,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api protected void SetScale(SceneObjectPart part, LSL_Vector scale) { // TODO: this needs to trigger a persistance save as well - if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) + if (part == null || part.ParentGroup.IsDeleted) return; + if (scale.x < 0.01) scale.x = 0.01; if (scale.y < 0.01) @@ -1409,7 +1397,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); m_host.ClickAction = (byte)action; - if (m_host.ParentGroup != null) m_host.ParentGroup.HasGroupChanged = true; + m_host.ParentGroup.HasGroupChanged = true; m_host.ScheduleFullUpdate(); return; } @@ -2033,14 +2021,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api else { // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. - SceneObjectGroup group = m_host.ParentGroup; - if (group != null) // a bit paranoid, maybe + SceneObjectPart rootPart = m_host.ParentGroup.RootPart; + if (rootPart != null) // better safe than sorry { - SceneObjectPart rootPart = group.RootPart; - if (rootPart != null) // again, better safe than sorry - { - SetRot(m_host, rootPart.RotationOffset * Rot2Quaternion(rot)); - } + SetRot(m_host, rootPart.RotationOffset * Rot2Quaternion(rot)); } } @@ -2128,15 +2112,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - if (local != 0) - force *= llGetRot(); + if (local != 0) + force *= llGetRot(); - m_host.ParentGroup.RootPart.SetForce(new Vector3((float)force.x, (float)force.y, (float)force.z)); - } + m_host.ParentGroup.RootPart.SetForce(new Vector3((float)force.x, (float)force.y, (float)force.z)); } } @@ -2146,15 +2127,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - Vector3 tmpForce = m_host.ParentGroup.RootPart.GetForce(); - force.x = tmpForce.X; - force.y = tmpForce.Y; - force.z = tmpForce.Z; - } + Vector3 tmpForce = m_host.ParentGroup.RootPart.GetForce(); + force.x = tmpForce.X; + force.y = tmpForce.Y; + force.z = tmpForce.Z; } return force; @@ -3163,12 +3141,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetBuoyancy(double buoyancy) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); - } + m_host.ParentGroup.RootPart.SetBuoyancy((float)buoyancy); } } @@ -6238,12 +6214,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetVehicleType(int type) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleType(type); - } + m_host.ParentGroup.RootPart.SetVehicleType(type); } } @@ -6253,12 +6227,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleFloatParam(param, (float)value); - } + m_host.ParentGroup.RootPart.SetVehicleFloatParam(param, (float)value); } } @@ -6267,13 +6238,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetVehicleVectorParam(int param, LSL_Vector vec) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, - new Vector3((float)vec.x, (float)vec.y, (float)vec.z)); - } + m_host.ParentGroup.RootPart.SetVehicleVectorParam(param, + new Vector3((float)vec.x, (float)vec.y, (float)vec.z)); } } @@ -6282,37 +6251,30 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llSetVehicleRotationParam(int param, LSL_Rotation rot) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, - Rot2Quaternion(rot)); - } + m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, Rot2Quaternion(rot)); } } public void llSetVehicleFlags(int flags) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false); - } + m_host.ParentGroup.RootPart.SetVehicleFlags(flags, false); } } public void llRemoveVehicleFlags(int flags) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) + + if (!m_host.ParentGroup.IsDeleted) { - if (!m_host.ParentGroup.IsDeleted) - { - m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true); - } + m_host.ParentGroup.RootPart.SetVehicleFlags(flags, true); } } @@ -6467,11 +6429,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public void llVolumeDetect(int detect) { m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) - { - if (!m_host.ParentGroup.IsDeleted) - m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0); - } + + if (!m_host.ParentGroup.IsDeleted) + m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0); } /// @@ -7022,14 +6982,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api else { // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. - SceneObjectGroup group = part.ParentGroup; - if (group != null) // a bit paranoid, maybe + SceneObjectPart rootPart = part.ParentGroup.RootPart; + if (rootPart != null) // better safe than sorry { - SceneObjectPart rootPart = group.RootPart; - if (rootPart != null) // again, better safe than sorry - { - SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q)); - } + SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q)); } } @@ -7278,13 +7234,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api break; case (int)ScriptBaseClass.PRIM_PHANTOM: - if (remain < 1) + if (remain < 1) return; string ph = rules.Data[idx++].ToString(); - - if (m_host.ParentGroup != null) - m_host.ParentGroup.ScriptSetPhantomStatus(ph.Equals("1")); + m_host.ParentGroup.ScriptSetPhantomStatus(ph.Equals("1")); break; @@ -7307,8 +7261,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return; string temp = rules.Data[idx++].ToString(); - if (m_host.ParentGroup != null) - m_host.ParentGroup.ScriptSetTemporaryStatus(temp.Equals("1")); + m_host.ParentGroup.ScriptSetTemporaryStatus(temp.Equals("1")); break; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index d791885ea3..7f3d84d1dd 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -672,13 +672,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api CheckThreatLevel(ThreatLevel.VeryLow, "osSetPrimFloatOnWater"); m_host.AddScriptLPS(1); - if (m_host.ParentGroup != null) - { - if (m_host.ParentGroup.RootPart != null) - { - m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN); - } - } + + if (m_host.ParentGroup.RootPart != null) + m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN); } // Teleport functions diff --git a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs index 3575889d3c..8cebb4a7f0 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Helpers.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Helpers.cs @@ -197,7 +197,7 @@ namespace OpenSim.Region.ScriptEngine.Shared return; } - part=part.ParentGroup.RootPart; // We detect objects only + part = part.ParentGroup.RootPart; // We detect objects only LinkNum = 0; // Not relevant diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index ef9b2aca6c..6e9f3ecf9d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs @@ -766,13 +766,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) { m_InSelfDelete = true; - if (part != null && part.ParentGroup != null) + if (part != null) m_Engine.World.DeleteSceneObject(part.ParentGroup, false); } else if ((e is TargetInvocationException) && (e.InnerException is ScriptDeleteException)) { m_InSelfDelete = true; - if (part != null && part.ParentGroup != null) + if (part != null) part.Inventory.RemoveInventoryItem(m_ItemID); } } diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs index 0ac8b5c043..08dc71eb0a 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs @@ -97,8 +97,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine return; m_log.Debug("Paid: " + objectID + " from " + agentID + ", amount " + amount); - if (part.ParentGroup != null) - part = part.ParentGroup.RootPart; + + part = part.ParentGroup.RootPart; if (part != null) {