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.
remove-scene-viewer
Justin Clark-Casey (justincc) 2011-09-01 01:22:28 +01:00
parent 083ba72b28
commit 095b3e5756
16 changed files with 278 additions and 428 deletions

View File

@ -4756,10 +4756,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{ {
SceneObjectPart part = (SceneObjectPart)entity; SceneObjectPart part = (SceneObjectPart)entity;
if (part.ParentGroup != null)
attachPoint = part.ParentGroup.AttachmentPoint; attachPoint = part.ParentGroup.AttachmentPoint;
else
attachPoint = 0;
// m_log.DebugFormat( // m_log.DebugFormat(
// "[LLCLIENTVIEW]: Sending attachPoint {0} for {1} {2} to {3}", // "[LLCLIENTVIEW]: Sending attachPoint {0} for {1} {2} to {3}",
@ -4921,7 +4918,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
//update.JointType = 0; //update.JointType = 0;
update.Material = data.Material; update.Material = data.Material;
update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim 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.NameValue = Util.StringToBytes256("AttachItemID STRING RW SV " + data.FromItemID);
update.State = (byte)((data.ParentGroup.AttachmentPoint % 16) * 16 + (data.ParentGroup.AttachmentPoint / 16)); update.State = (byte)((data.ParentGroup.AttachmentPoint % 16) * 16 + (data.ParentGroup.AttachmentPoint / 16));

View File

@ -850,12 +850,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
{ {
SceneObjectPart prt = Scene.GetSceneObjectPart(obj); SceneObjectPart prt = Scene.GetSceneObjectPart(obj);
if (prt != null) if (prt != null)
{
if (prt.ParentGroup != null)
{ {
SceneObjectGroup sog = prt.ParentGroup; SceneObjectGroup sog = prt.ParentGroup;
if (sog != null)
{
LandStatReportItem lsri = new LandStatReportItem(); LandStatReportItem lsri = new LandStatReportItem();
lsri.LocationX = sog.AbsolutePosition.X; lsri.LocationX = sog.AbsolutePosition.X;
lsri.LocationY = sog.AbsolutePosition.Y; lsri.LocationY = sog.AbsolutePosition.Y;
@ -884,8 +880,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
} }
} }
}
}
remoteClient.SendLandStatReply(reportType, requestFlags, (uint)SceneReport.Count,SceneReport.ToArray()); remoteClient.SendLandStatReply(reportType, requestFlags, (uint)SceneReport.Count,SceneReport.ToArray());
if (uuidNameLookupList.Count > 0) if (uuidNameLookupList.Count > 0)

View File

@ -85,7 +85,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice) IClientAPI client, UUID agentID, UUID sessionID, uint localID, byte saleType, int salePrice)
{ {
SceneObjectPart part = m_scene.GetSceneObjectPart(localID); SceneObjectPart part = m_scene.GetSceneObjectPart(localID);
if (part == null || part.ParentGroup == null) if (part == null)
return; return;
if (part.ParentGroup.IsDeleted) if (part.ParentGroup.IsDeleted)
@ -111,9 +111,6 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
if (part == null) if (part == null)
return false; return false;
if (part.ParentGroup == null)
return false;
SceneObjectGroup group = part.ParentGroup; SceneObjectGroup group = part.ParentGroup;
switch (saleType) switch (saleType)

View File

@ -1131,7 +1131,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
SceneObjectPart part = scene.GetSceneObjectPart(objectID); SceneObjectPart part = scene.GetSceneObjectPart(objectID);
if (part.OwnerID != moverID) if (part.OwnerID != moverID)
{ {
if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) if (!part.ParentGroup.IsDeleted)
{ {
if (part.ParentGroup.IsAttachment) if (part.ParentGroup.IsAttachment)
return false; return false;

View File

@ -208,7 +208,6 @@ namespace OpenSim.Region.Framework.Scenes
if (entity is SceneObjectPart) if (entity is SceneObjectPart)
{ {
SceneObjectGroup group = (entity as SceneObjectPart).ParentGroup; SceneObjectGroup group = (entity as SceneObjectPart).ParentGroup;
if (group != null)
entityPos = group.AbsolutePosition; entityPos = group.AbsolutePosition;
} }

View File

@ -225,16 +225,8 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart part = GetSceneObjectPart(primId); SceneObjectPart part = GetSceneObjectPart(primId);
if (part == null) if (part == null)
return new ArrayList(); 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 // Retrieve item
TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId); TaskInventoryItem item = group.GetInventoryItem(part.LocalId, itemId);
@ -971,9 +963,8 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart part = GetSceneObjectPart(localID); SceneObjectPart part = GetSceneObjectPart(localID);
if (part == null) if (part == null)
return; return;
SceneObjectGroup group = part.ParentGroup; SceneObjectGroup group = part.ParentGroup;
if (group != null)
{
if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
return; return;
@ -990,15 +981,6 @@ namespace OpenSim.Region.Framework.Scenes
group.RemoveInventoryItem(localID, itemID); group.RemoveInventoryItem(localID, itemID);
part.GetProperties(remoteClient); part.GetProperties(remoteClient);
} }
else
{
m_log.ErrorFormat(
"[PRIM INVENTORY]: " +
"Removal of item {0} requested of prim {1} but this prim does not exist",
itemID,
localID);
}
}
private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId) private InventoryItemBase CreateAgentInventoryItemFromTask(UUID destAgent, SceneObjectPart part, UUID itemId)
{ {
@ -1770,7 +1752,7 @@ namespace OpenSim.Region.Framework.Scenes
continue; continue;
// Already deleted by someone else // Already deleted by someone else
if (part.ParentGroup == null || part.ParentGroup.IsDeleted) if (part.ParentGroup.IsDeleted)
continue; continue;
// Can't delete child prims // Can't delete child prims
@ -2034,6 +2016,7 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart part = GetSceneObjectPart(localID); SceneObjectPart part = GetSceneObjectPart(localID);
if (part == null) if (part == null)
continue; continue;
if (!groups.Contains(part.ParentGroup)) if (!groups.Contains(part.ParentGroup))
groups.Add(part.ParentGroup); groups.Add(part.ParentGroup);
} }

View File

@ -3012,8 +3012,6 @@ namespace OpenSim.Region.Framework.Scenes
Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z); Vector3 AXOrigin = new Vector3(RayStart.X, RayStart.Y, RayStart.Z);
Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z); Vector3 AXdirection = new Vector3(direction.X, direction.Y, direction.Z);
if (target2.ParentGroup != null)
{
pos = target2.AbsolutePosition; 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()); //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());
@ -3059,11 +3057,6 @@ namespace OpenSim.Region.Framework.Scenes
m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID); m_sceneGraph.DuplicateObject(localID, pos, target.GetEffectiveObjectFlags(), AgentID, GroupID);
} }
} }
return;
}
return;
} }
} }
@ -3233,12 +3226,13 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectPart part = GetSceneObjectPart(localID); SceneObjectPart part = GetSceneObjectPart(localID);
if (part != null) // It is a prim 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 if (part.ParentGroup.RootPart != part) // Child part
return; return;
} }
} }
ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); }); ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); });
} }

View File

@ -1630,15 +1630,12 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectGroup parentGroup = root.ParentGroup; SceneObjectGroup parentGroup = root.ParentGroup;
List<SceneObjectGroup> childGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> childGroups = new List<SceneObjectGroup>();
if (parentGroup != null)
{
// We do this in reverse to get the link order of the prims correct // We do this in reverse to get the link order of the prims correct
for (int i = children.Count - 1; i >= 0; i--) for (int i = children.Count - 1; i >= 0; i--)
{ {
SceneObjectGroup child = children[i].ParentGroup; SceneObjectGroup child = children[i].ParentGroup;
if (child != null)
{
// Make sure no child prim is set for sale // Make sure no child prim is set for sale
// So that, on delink, no prims are unwittingly // So that, on delink, no prims are unwittingly
// left for sale and sold off // left for sale and sold off
@ -1646,12 +1643,6 @@ namespace OpenSim.Region.Framework.Scenes
child.RootPart.SalePrice = 10; child.RootPart.SalePrice = 10;
childGroups.Add(child); childGroups.Add(child);
} }
}
}
else
{
return; // parent is null so not in this region
}
foreach (SceneObjectGroup child in childGroups) foreach (SceneObjectGroup child in childGroups)
{ {

View File

@ -302,7 +302,6 @@ namespace OpenSim.Region.Framework.Scenes
protected string m_name; protected string m_name;
protected Vector3 m_offsetPosition; protected Vector3 m_offsetPosition;
// FIXME, TODO, ERROR: 'ParentGroup' can't be in here, move it out.
protected SceneObjectGroup m_parentGroup; protected SceneObjectGroup m_parentGroup;
protected byte[] m_particleSystem = Utils.EmptyBytes; protected byte[] m_particleSystem = Utils.EmptyBytes;
protected ulong m_regionHandle; protected ulong m_regionHandle;
@ -592,6 +591,7 @@ namespace OpenSim.Region.Framework.Scenes
set set
{ {
m_passTouches = value; m_passTouches = value;
if (ParentGroup != null) if (ParentGroup != null)
ParentGroup.HasGroupChanged = true; ParentGroup.HasGroupChanged = true;
} }
@ -758,8 +758,6 @@ 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 // 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_sitTargetAvatar != UUID.Zero)
{
if (m_parentGroup != null) // TODO can there be a SOP without a SOG?
{ {
ScenePresence avatar; ScenePresence avatar;
if (m_parentGroup.Scene.TryGetScenePresence(m_sitTargetAvatar, out avatar)) if (m_parentGroup.Scene.TryGetScenePresence(m_sitTargetAvatar, out avatar))
@ -769,7 +767,6 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
}
public Vector3 OffsetPosition public Vector3 OffsetPosition
{ {
@ -854,6 +851,8 @@ namespace OpenSim.Region.Framework.Scenes
actor.Orientation = resultingrotation; actor.Orientation = resultingrotation;
//m_log.Info("[PART]: RO2:" + actor.Orientation.ToString()); //m_log.Info("[PART]: RO2:" + actor.Orientation.ToString());
} }
if (m_parentGroup != null)
m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor); m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(actor);
//} //}
} }
@ -862,7 +861,6 @@ namespace OpenSim.Region.Framework.Scenes
m_log.Error("[SCENEOBJECTPART]: ROTATIONOFFSET" + ex.Message); m_log.Error("[SCENEOBJECTPART]: ROTATIONOFFSET" + ex.Message);
} }
} }
} }
} }
@ -1018,7 +1016,7 @@ namespace OpenSim.Region.Framework.Scenes
m_shape.Scale = value; m_shape.Scale = value;
PhysicsActor actor = PhysActor; PhysicsActor actor = PhysActor;
if (actor != null && m_parentGroup != null) if (actor != null)
{ {
if (m_parentGroup.Scene != null) if (m_parentGroup.Scene != null)
{ {
@ -1107,7 +1105,6 @@ namespace OpenSim.Region.Framework.Scenes
set { m_sitTargetOrientation = value; } set { m_sitTargetOrientation = value; }
} }
public Vector3 SitTargetPosition public Vector3 SitTargetPosition
{ {
get { return m_sitTargetPosition; } get { return m_sitTargetPosition; }
@ -1262,7 +1259,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
get get
{ {
if (ParentGroup != null && ParentGroup.Scene != null) if (ParentGroup.Scene != null)
return ParentGroup.Scene.RegionInfo.RegionID; return ParentGroup.Scene.RegionInfo.RegionID;
else else
return UUID.Zero; return UUID.Zero;
@ -1277,15 +1274,14 @@ namespace OpenSim.Region.Framework.Scenes
get get
{ {
if (ParentGroup != null) if (ParentGroup != null)
{
_parentUUID = ParentGroup.UUID; _parentUUID = ParentGroup.UUID;
}
return _parentUUID; return _parentUUID;
} }
set { _parentUUID = value; } set { _parentUUID = value; }
} }
public string SitAnimation public string SitAnimation
{ {
get { return m_sitAnimation; } get { return m_sitAnimation; }
@ -1514,11 +1510,8 @@ namespace OpenSim.Region.Framework.Scenes
impulse = newimpulse; impulse = newimpulse;
} }
if (m_parentGroup != null)
{
m_parentGroup.applyAngularImpulse(impulse); m_parentGroup.applyAngularImpulse(impulse);
} }
}
/// <summary> /// <summary>
/// hook to the physics scene to apply angular impulse /// hook to the physics scene to apply angular impulse
@ -1540,11 +1533,8 @@ namespace OpenSim.Region.Framework.Scenes
impulse = newimpulse; impulse = newimpulse;
} }
if (m_parentGroup != null)
{
m_parentGroup.setAngularImpulse(impulse); m_parentGroup.setAngularImpulse(impulse);
} }
}
public Vector3 GetTorque() public Vector3 GetTorque()
{ {
@ -1951,8 +1941,6 @@ namespace OpenSim.Region.Framework.Scenes
public bool GetDieAtEdge() public bool GetDieAtEdge()
{ {
if (m_parentGroup == null)
return false;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return false; return false;
@ -1961,8 +1949,6 @@ namespace OpenSim.Region.Framework.Scenes
public bool GetReturnAtEdge() public bool GetReturnAtEdge()
{ {
if (m_parentGroup == null)
return false;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return false; return false;
@ -1971,8 +1957,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SetReturnAtEdge(bool p) public void SetReturnAtEdge(bool p)
{ {
if (m_parentGroup == null)
return;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return; return;
@ -1981,8 +1965,6 @@ namespace OpenSim.Region.Framework.Scenes
public bool GetBlockGrab() public bool GetBlockGrab()
{ {
if (m_parentGroup == null)
return false;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return false; return false;
@ -1991,8 +1973,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SetBlockGrab(bool p) public void SetBlockGrab(bool p)
{ {
if (m_parentGroup == null)
return;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return; return;
@ -2001,8 +1981,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SetStatusSandbox(bool p) public void SetStatusSandbox(bool p)
{ {
if (m_parentGroup == null)
return;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return; return;
StatusSandboxPos = m_parentGroup.RootPart.AbsolutePosition; StatusSandboxPos = m_parentGroup.RootPart.AbsolutePosition;
@ -2011,8 +1989,6 @@ namespace OpenSim.Region.Framework.Scenes
public bool GetStatusSandbox() public bool GetStatusSandbox()
{ {
if (m_parentGroup == null)
return false;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return false; return false;
@ -2089,13 +2065,9 @@ namespace OpenSim.Region.Framework.Scenes
} }
public UUID GetRootPartUUID() public UUID GetRootPartUUID()
{
if (m_parentGroup != null)
{ {
return m_parentGroup.UUID; return m_parentGroup.UUID;
} }
return UUID.Zero;
}
/// <summary> /// <summary>
/// Method for a prim to get it's world position from the group. /// Method for a prim to get it's world position from the group.
@ -2220,8 +2192,6 @@ namespace OpenSim.Region.Framework.Scenes
m_lastColliders.Remove(localID); m_lastColliders.Remove(localID);
} }
if (m_parentGroup == null)
return;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return; return;
@ -2242,9 +2212,6 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (localId == 0) if (localId == 0)
continue; 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) if (m_parentGroup.Scene == null)
return; return;
@ -2253,7 +2220,8 @@ namespace OpenSim.Region.Framework.Scenes
string data = ""; string data = "";
if (obj != null) 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); bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
//If it is 1, it is to accept ONLY collisions from this object //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 (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); bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1, out data);
//If it is 1, it is to accept ONLY collisions from this avatar //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) if (colliding.Count > 0)
{ {
StartCollidingMessage.Colliders = colliding; 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) if (m_parentGroup.Scene == null)
return; return;
if (m_parentGroup.PassCollision == true) if (m_parentGroup.PassCollision == true)
{ {
//TODO: Add pass to root prim! //TODO: Add pass to root prim!
@ -2375,9 +2342,6 @@ namespace OpenSim.Region.Framework.Scenes
if (localId == 0) if (localId == 0)
continue; continue;
if (m_parentGroup == null)
return;
if (m_parentGroup.Scene == null) if (m_parentGroup.Scene == null)
return; return;
@ -2385,7 +2349,8 @@ namespace OpenSim.Region.Framework.Scenes
string data = ""; string data = "";
if (obj != null) 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); bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1,out data);
//If it is 1, it is to accept ONLY collisions from this object //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 (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); bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1, out data);
//If it is 1, it is to accept ONLY collisions from this avatar //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) if (colliding.Count > 0)
{ {
CollidingMessage.Colliders = colliding; 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) if (m_parentGroup.Scene == null)
return; return;
@ -2503,11 +2466,9 @@ namespace OpenSim.Region.Framework.Scenes
if (localId == 0) if (localId == 0)
continue; 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) if (m_parentGroup.Scene == null)
return; return;
SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId); SceneObjectPart obj = m_parentGroup.Scene.GetSceneObjectPart(localId);
string data = ""; string data = "";
if (obj != null) if (obj != null)
@ -2559,7 +2520,8 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (av.LocalId == localId) 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); bool found = m_parentGroup.RootPart.CollisionFilter.TryGetValue(1, out data);
//If it is 1, it is to accept ONLY collisions from this avatar //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) if (colliding.Count > 0)
{ {
EndCollidingMessage.Colliders = colliding; 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) if (m_parentGroup.Scene == null)
return; return;
@ -2619,6 +2578,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_start) != 0) if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_start) != 0)
{ {
if (startedColliders.Count > 0) if (startedColliders.Count > 0)
@ -2646,9 +2606,6 @@ namespace OpenSim.Region.Framework.Scenes
if (colliding.Count > 0) if (colliding.Count > 0)
{ {
LandStartCollidingMessage.Colliders = colliding; 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) if (m_parentGroup.Scene == null)
return; return;
@ -2657,6 +2614,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision) != 0) if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision) != 0)
{ {
if (m_lastColliders.Count > 0) if (m_lastColliders.Count > 0)
@ -2684,9 +2642,6 @@ namespace OpenSim.Region.Framework.Scenes
if (colliding.Count > 0) if (colliding.Count > 0)
{ {
LandCollidingMessage.Colliders = colliding; 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) if (m_parentGroup.Scene == null)
return; return;
@ -2695,6 +2650,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_end) != 0) if ((m_parentGroup.RootPart.ScriptEvents & scriptEvents.land_collision_end) != 0)
{ {
if (endedColliders.Count > 0) if (endedColliders.Count > 0)
@ -2722,9 +2678,6 @@ namespace OpenSim.Region.Framework.Scenes
if (colliding.Count > 0) if (colliding.Count > 0)
{ {
LandEndCollidingMessage.Colliders = colliding; 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) if (m_parentGroup.Scene == null)
return; return;
@ -2748,10 +2701,12 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (PhysActor != null) if (PhysActor != null)
{ {
Vector3 newpos = new Vector3(PhysActor.Position.GetBytes(), 0); 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; m_parentGroup.AbsolutePosition = newpos;
return; return;
@ -2910,10 +2865,10 @@ namespace OpenSim.Region.Framework.Scenes
{ {
// m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); // m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId);
if (m_parentGroup != null) if (m_parentGroup == null)
{ return;
m_parentGroup.QueueForUpdateCheck(); m_parentGroup.QueueForUpdateCheck();
}
int timeNow = Util.UnixTimeSinceEpoch(); int timeNow = Util.UnixTimeSinceEpoch();
@ -2942,13 +2897,14 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary> /// </summary>
public void ScheduleTerseUpdate() public void ScheduleTerseUpdate()
{ {
if (m_parentGroup == null)
return;
if (m_updateFlag < 1) if (m_updateFlag < 1)
{
if (m_parentGroup != null)
{ {
m_parentGroup.HasGroupChanged = true; m_parentGroup.HasGroupChanged = true;
m_parentGroup.QueueForUpdateCheck(); m_parentGroup.QueueForUpdateCheck();
}
TimeStampTerse = (uint) Util.UnixTimeSinceEpoch(); TimeStampTerse = (uint) Util.UnixTimeSinceEpoch();
m_updateFlag = 1; m_updateFlag = 1;
@ -2960,9 +2916,6 @@ namespace OpenSim.Region.Framework.Scenes
public void ScriptSetPhysicsStatus(bool UsePhysics) 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
/// <param name="clientFlags"></param> /// <param name="clientFlags"></param>
protected internal void SendFullUpdate(IClientAPI remoteClient, uint clientFlags) protected internal void SendFullUpdate(IClientAPI remoteClient, uint clientFlags)
{ {
if (m_parentGroup == null)
return;
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SOG]: Sendinging part full update to {0} for {1} {2}", remoteClient.Name, part.Name, part.LocalId); // "[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
/// </summary> /// </summary>
public void SendFullUpdateToAllClients() public void SendFullUpdateToAllClients()
{ {
if (m_parentGroup == null)
return;
m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
{ {
SendFullUpdate(avatar.ControllingClient, avatar.GenerateClientFlags(UUID)); SendFullUpdate(avatar.ControllingClient, avatar.GenerateClientFlags(UUID));
@ -3040,6 +2999,9 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="agentID"></param> /// <param name="agentID"></param>
public void SendFullUpdateToAllClientsExcept(UUID agentID) public void SendFullUpdateToAllClientsExcept(UUID agentID)
{ {
if (m_parentGroup == null)
return;
m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
{ {
// Ugly reference :( // Ugly reference :(
@ -3068,6 +3030,9 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="clientFlags"></param> /// <param name="clientFlags"></param>
public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos, uint clientFlags) public void SendFullUpdateToClient(IClientAPI remoteClient, Vector3 lPos, uint clientFlags)
{ {
if (ParentGroup == null)
return;
// Suppress full updates during attachment editing // Suppress full updates during attachment editing
// //
if (ParentGroup.IsSelected && ParentGroup.IsAttachment) if (ParentGroup.IsSelected && ParentGroup.IsAttachment)
@ -3249,11 +3214,8 @@ namespace OpenSim.Region.Framework.Scenes
} }
public void SetAxisRotation(int axis, int rotate) 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. //Cannot use ScriptBaseClass constants as no referance to it currently.
if (axis == 2)//STATUS_ROTATE_X if (axis == 2)//STATUS_ROTATE_X
@ -3276,8 +3238,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SetDieAtEdge(bool p) public void SetDieAtEdge(bool p)
{ {
if (m_parentGroup == null)
return;
if (m_parentGroup.IsDeleted) if (m_parentGroup.IsDeleted)
return; return;
@ -3530,7 +3490,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
/// <summary> /// <summary>
/// /// Set the parent group of this prim.
/// </summary> /// </summary>
public void SetParent(SceneObjectGroup parent) public void SetParent(SceneObjectGroup parent)
{ {
@ -3587,9 +3547,12 @@ namespace OpenSim.Region.Framework.Scenes
{ {
Text = text; Text = text;
if (ParentGroup != null)
{
ParentGroup.HasGroupChanged = true; ParentGroup.HasGroupChanged = true;
ScheduleFullUpdate(); ScheduleFullUpdate();
} }
}
public void StopLookAt() public void StopLookAt()
{ {
@ -3632,7 +3595,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
if (!IgnoreUndoUpdate) if (!IgnoreUndoUpdate)
{ {
if (m_parentGroup != null) if (ParentGroup != null)
{ {
lock (m_undo) lock (m_undo)
{ {
@ -3644,18 +3607,18 @@ namespace OpenSim.Region.Framework.Scenes
// TODO: May need to fix for group comparison // TODO: May need to fix for group comparison
if (last.Compare(this)) if (last.Compare(this))
{ {
// m_log.DebugFormat( // 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}", // "[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); // Name, LocalId, m_undo.Count);
return; return;
} }
} }
} }
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}", // "[SCENE OBJECT PART]: Storing undo state for {0} {1}, forGroup {2}, initial stack size {3}",
// Name, LocalId, forGroup, m_undo.Count); // Name, LocalId, forGroup, m_undo.Count);
if (m_parentGroup.GetSceneMaxUndo() > 0) if (m_parentGroup.GetSceneMaxUndo() > 0)
{ {
@ -3666,9 +3629,9 @@ namespace OpenSim.Region.Framework.Scenes
if (m_redo.Count > 0) if (m_redo.Count > 0)
m_redo.Clear(); m_redo.Clear();
// m_log.DebugFormat( // m_log.DebugFormat(
// "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}", // "[SCENE OBJECT PART]: Stored undo state for {0} {1}, forGroup {2}, stack size now {3}",
// Name, LocalId, forGroup, m_undo.Count); // Name, LocalId, forGroup, m_undo.Count);
} }
} }
} }
@ -4245,9 +4208,12 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
if (ParentGroup != null)
{
ParentGroup.HasGroupChanged = true; ParentGroup.HasGroupChanged = true;
ScheduleFullUpdate(); ScheduleFullUpdate();
} }
}
public void UpdateGroupPosition(Vector3 pos) public void UpdateGroupPosition(Vector3 pos)
{ {
@ -4450,8 +4416,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!wasUsingPhysics) if (!wasUsingPhysics)
{ {
DoPhysicsPropertyUpdate(UsePhysics, false); 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)
@ -4461,7 +4426,6 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
}
else else
{ {
RemFlag(PrimFlags.Physics); RemFlag(PrimFlags.Physics);
@ -4510,8 +4474,6 @@ namespace OpenSim.Region.Framework.Scenes
PhysActor.SetMaterial(Material); PhysActor.SetMaterial(Material);
DoPhysicsPropertyUpdate(UsePhysics, true); 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)
@ -4519,7 +4481,6 @@ namespace OpenSim.Region.Framework.Scenes
m_parentGroup.CheckSculptAndLoad(); m_parentGroup.CheckSculptAndLoad();
} }
} }
}
if ( if (
((AggregateScriptEvents & scriptEvents.collision) != 0) || ((AggregateScriptEvents & scriptEvents.collision) != 0) ||
@ -4541,8 +4502,7 @@ namespace OpenSim.Region.Framework.Scenes
pa.IsPhysical = UsePhysics; pa.IsPhysical = UsePhysics;
DoPhysicsPropertyUpdate(UsePhysics, false); // Update physical status. If it's phantom this will remove the prim 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)
@ -4552,7 +4512,6 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
}
if (SetVD) if (SetVD)
{ {
@ -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()); // m_log.Debug("Update: PHY:" + UsePhysics.ToString() + ", T:" + IsTemporary.ToString() + ", PHA:" + IsPhantom.ToString() + " S:" + CastsShadows.ToString());
if (ParentGroup != null)
{
ParentGroup.HasGroupChanged = true; ParentGroup.HasGroupChanged = true;
ScheduleFullUpdate(); ScheduleFullUpdate();
}
// m_log.DebugFormat("[SCENE OBJECT PART]: Updated PrimFlags on {0} {1} to {2}", Name, LocalId, Flags); // m_log.DebugFormat("[SCENE OBJECT PART]: Updated PrimFlags on {0} {1} to {2}", Name, LocalId, Flags);
} }
@ -4605,10 +4567,14 @@ namespace OpenSim.Region.Framework.Scenes
(rot.W != RotationOffset.W)) (rot.W != RotationOffset.W))
{ {
RotationOffset = rot; RotationOffset = rot;
if (ParentGroup != null)
{
ParentGroup.HasGroupChanged = true; ParentGroup.HasGroupChanged = true;
ScheduleTerseUpdate(); ScheduleTerseUpdate();
} }
} }
}
/// <summary> /// <summary>
/// Update the shape of this part. /// Update the shape of this part.
@ -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) //if ((GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0)
//{ //{
// m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting; // m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting;
@ -4829,38 +4787,24 @@ namespace OpenSim.Region.Framework.Scenes
} }
public int registerTargetWaypoint(Vector3 target, float tolerance) public int registerTargetWaypoint(Vector3 target, float tolerance)
{
if (m_parentGroup != null)
{ {
return m_parentGroup.registerTargetWaypoint(target, tolerance); return m_parentGroup.registerTargetWaypoint(target, tolerance);
} }
return 0;
}
public void unregisterTargetWaypoint(int handle) public void unregisterTargetWaypoint(int handle)
{
if (m_parentGroup != null)
{ {
m_parentGroup.unregisterTargetWaypoint(handle); m_parentGroup.unregisterTargetWaypoint(handle);
} }
}
public int registerRotTargetWaypoint(Quaternion target, float tolerance) public int registerRotTargetWaypoint(Quaternion target, float tolerance)
{
if (m_parentGroup != null)
{ {
return m_parentGroup.registerRotTargetWaypoint(target, tolerance); return m_parentGroup.registerRotTargetWaypoint(target, tolerance);
} }
return 0;
}
public void unregisterRotTargetWaypoint(int handle) public void unregisterRotTargetWaypoint(int handle)
{
if (m_parentGroup != null)
{ {
m_parentGroup.unregisterRotTargetWaypoint(handle); m_parentGroup.unregisterRotTargetWaypoint(handle);
} }
}
public void SetCameraAtOffset(Vector3 v) public void SetCameraAtOffset(Vector3 v)
{ {
@ -4901,7 +4845,7 @@ namespace OpenSim.Region.Framework.Scenes
public void SendTerseUpdateToClient(IClientAPI remoteClient) public void SendTerseUpdateToClient(IClientAPI remoteClient)
{ {
if (ParentGroup == null || ParentGroup.IsDeleted) if (ParentGroup.IsDeleted)
return; return;
if (ParentGroup.IsAttachment && ParentGroup.RootPart != this) if (ParentGroup.IsAttachment && ParentGroup.RootPart != this)

View File

@ -112,15 +112,17 @@ namespace OpenSim.Region.Framework.Scenes
} }
/// <summary> /// <summary>
/// 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.
/// </summary>
/// <remarks>
/// This involves either generating
/// new ones or setting existing UUIDs to the correct parent UUIDs. /// 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. /// If this method is called and there are inventory items, then we regard the inventory as having changed.
/// </summary> /// </remarks>
/// <param name="linkNum">Link number for the part</param>
public void ResetInventoryIDs() public void ResetInventoryIDs()
{ {
if (null == m_part || null == m_part.ParentGroup) if (null == m_part)
return; return;
lock (m_items) lock (m_items)

View File

@ -110,7 +110,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
SceneObjectPart part = m_partsUpdateQueue.Dequeue(); SceneObjectPart part = m_partsUpdateQueue.Dequeue();
if (part.ParentGroup == null || part.ParentGroup.IsDeleted) if (part.ParentGroup.IsDeleted)
continue; continue;
if (m_updateTimes.ContainsKey(part.UUID)) if (m_updateTimes.ContainsKey(part.UUID))

View File

@ -234,35 +234,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
switch (linkType) switch (linkType)
{ {
case ScriptBaseClass.LINK_SET: case ScriptBaseClass.LINK_SET:
if (m_host.ParentGroup != null)
{
return new List<SceneObjectPart>(m_host.ParentGroup.Parts); return new List<SceneObjectPart>(m_host.ParentGroup.Parts);
}
return ret;
case ScriptBaseClass.LINK_ROOT: case ScriptBaseClass.LINK_ROOT:
if (m_host.ParentGroup != null)
{
ret = new List<SceneObjectPart>(); ret = new List<SceneObjectPart>();
ret.Add(m_host.ParentGroup.RootPart); ret.Add(m_host.ParentGroup.RootPart);
return ret; return ret;
}
return ret;
case ScriptBaseClass.LINK_ALL_OTHERS: case ScriptBaseClass.LINK_ALL_OTHERS:
if (m_host.ParentGroup == null)
return new List<SceneObjectPart>();
ret = new List<SceneObjectPart>(m_host.ParentGroup.Parts); ret = new List<SceneObjectPart>(m_host.ParentGroup.Parts);
if (ret.Contains(m_host)) if (ret.Contains(m_host))
ret.Remove(m_host); ret.Remove(m_host);
return ret; return ret;
case ScriptBaseClass.LINK_ALL_CHILDREN: case ScriptBaseClass.LINK_ALL_CHILDREN:
if (m_host.ParentGroup == null)
return new List<SceneObjectPart>();
ret = new List<SceneObjectPart>(m_host.ParentGroup.Parts); ret = new List<SceneObjectPart>(m_host.ParentGroup.Parts);
if (ret.Contains(m_host.ParentGroup.RootPart)) if (ret.Contains(m_host.ParentGroup.RootPart))
@ -273,15 +260,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return ret; return ret;
default: default:
if (linkType < 0 || m_host.ParentGroup == null) if (linkType < 0)
return new List<SceneObjectPart>(); return new List<SceneObjectPart>();
SceneObjectPart target = m_host.ParentGroup.GetLinkNumPart(linkType); SceneObjectPart target = m_host.ParentGroup.GetLinkNumPart(linkType);
if (target == null) if (target == null)
return new List<SceneObjectPart>(); return new List<SceneObjectPart>();
ret = new List<SceneObjectPart>(); ret = new List<SceneObjectPart>();
ret.Add(target); ret.Add(target);
return ret; return ret;
} }
} }
@ -1199,8 +1186,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (value != 0) if (value != 0)
{ {
SceneObjectGroup group = m_host.ParentGroup; SceneObjectGroup group = m_host.ParentGroup;
if (group == null)
return;
bool allow = true; bool allow = true;
foreach (SceneObjectPart part in group.Parts) foreach (SceneObjectPart part in group.Parts)
@ -1214,15 +1199,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (!allow) if (!allow)
return; return;
m_host.ScriptSetPhysicsStatus(true); m_host.ScriptSetPhysicsStatus(true);
} }
else else
{
m_host.ScriptSetPhysicsStatus(false); m_host.ScriptSetPhysicsStatus(false);
} }
}
if ((status & ScriptBaseClass.STATUS_PHANTOM) == ScriptBaseClass.STATUS_PHANTOM) 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);
} }
@ -1365,8 +1352,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
protected void SetScale(SceneObjectPart part, LSL_Vector scale) protected void SetScale(SceneObjectPart part, LSL_Vector scale)
{ {
// TODO: this needs to trigger a persistance save as well // 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; return;
if (scale.x < 0.01) if (scale.x < 0.01)
scale.x = 0.01; scale.x = 0.01;
if (scale.y < 0.01) if (scale.y < 0.01)
@ -1409,7 +1397,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
m_host.ClickAction = (byte)action; m_host.ClickAction = (byte)action;
if (m_host.ParentGroup != null) m_host.ParentGroup.HasGroupChanged = true; m_host.ParentGroup.HasGroupChanged = true;
m_host.ScheduleFullUpdate(); m_host.ScheduleFullUpdate();
return; return;
} }
@ -2033,16 +2021,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
else 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. // 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; SceneObjectPart rootPart = m_host.ParentGroup.RootPart;
if (group != null) // a bit paranoid, maybe 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));
} }
} }
}
ScriptSleep(200); ScriptSleep(200);
} }
@ -2128,8 +2112,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (m_host.ParentGroup != null)
{
if (!m_host.ParentGroup.IsDeleted) if (!m_host.ParentGroup.IsDeleted)
{ {
if (local != 0) if (local != 0)
@ -2138,7 +2120,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
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));
} }
} }
}
public LSL_Vector llGetForce() public LSL_Vector llGetForce()
{ {
@ -2146,8 +2127,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
m_host.AddScriptLPS(1); 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(); Vector3 tmpForce = m_host.ParentGroup.RootPart.GetForce();
@ -2155,7 +2134,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
force.y = tmpForce.Y; force.y = tmpForce.Y;
force.z = tmpForce.Z; force.z = tmpForce.Z;
} }
}
return force; return force;
} }
@ -3163,14 +3141,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llSetBuoyancy(double buoyancy) public void llSetBuoyancy(double buoyancy)
{ {
m_host.AddScriptLPS(1); 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);
} }
} }
}
/// <summary> /// <summary>
/// Attempt to clamp the object on the Z axis at the given height over tau seconds. /// Attempt to clamp the object on the Z axis at the given height over tau seconds.
@ -6238,14 +6214,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llSetVehicleType(int type) public void llSetVehicleType(int type)
{ {
m_host.AddScriptLPS(1); 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);
} }
} }
}
//CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in
//CFK 9/28: so these are not complete yet. //CFK 9/28: so these are not complete yet.
@ -6253,68 +6227,56 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
m_host.AddScriptLPS(1); 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);
} }
} }
}
//CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in
//CFK 9/28: so these are not complete yet. //CFK 9/28: so these are not complete yet.
public void llSetVehicleVectorParam(int param, LSL_Vector vec) public void llSetVehicleVectorParam(int param, LSL_Vector vec)
{ {
m_host.AddScriptLPS(1); 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, m_host.ParentGroup.RootPart.SetVehicleVectorParam(param,
new Vector3((float)vec.x, (float)vec.y, (float)vec.z)); new Vector3((float)vec.x, (float)vec.y, (float)vec.z));
} }
} }
}
//CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in //CFK 9/28: Most, but not all of the underlying plumbing between here and the physics modules is in
//CFK 9/28: so these are not complete yet. //CFK 9/28: so these are not complete yet.
public void llSetVehicleRotationParam(int param, LSL_Rotation rot) public void llSetVehicleRotationParam(int param, LSL_Rotation rot)
{ {
m_host.AddScriptLPS(1); 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, m_host.ParentGroup.RootPart.SetVehicleRotationParam(param, Rot2Quaternion(rot));
Rot2Quaternion(rot));
}
} }
} }
public void llSetVehicleFlags(int flags) public void llSetVehicleFlags(int flags)
{ {
m_host.AddScriptLPS(1); 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) public void llRemoveVehicleFlags(int flags)
{ {
m_host.AddScriptLPS(1); 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);
} }
} }
}
public void llSitTarget(LSL_Vector offset, LSL_Rotation rot) public void llSitTarget(LSL_Vector offset, LSL_Rotation rot)
{ {
@ -6467,12 +6429,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public void llVolumeDetect(int detect) public void llVolumeDetect(int detect)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (m_host.ParentGroup != null)
{
if (!m_host.ParentGroup.IsDeleted) if (!m_host.ParentGroup.IsDeleted)
m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0); m_host.ParentGroup.ScriptSetVolumeDetect(detect != 0);
} }
}
/// <summary> /// <summary>
/// This is a depecated function so this just replicates the result of /// This is a depecated function so this just replicates the result of
@ -7022,16 +6982,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
else 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. // 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; SceneObjectPart rootPart = part.ParentGroup.RootPart;
if (group != null) // a bit paranoid, maybe 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));
} }
} }
}
break; break;
@ -7282,8 +7238,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return; return;
string ph = rules.Data[idx++].ToString(); 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; break;
@ -7307,7 +7261,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return; return;
string temp = rules.Data[idx++].ToString(); 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; break;

View File

@ -672,14 +672,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
CheckThreatLevel(ThreatLevel.VeryLow, "osSetPrimFloatOnWater"); CheckThreatLevel(ThreatLevel.VeryLow, "osSetPrimFloatOnWater");
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);
if (m_host.ParentGroup != null)
{
if (m_host.ParentGroup.RootPart != null) if (m_host.ParentGroup.RootPart != null)
{
m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN); m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN);
} }
}
}
// Teleport functions // Teleport functions
public void osTeleportAgent(string agent, string regionName, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat) public void osTeleportAgent(string agent, string regionName, LSL_Types.Vector3 position, LSL_Types.Vector3 lookat)

View File

@ -197,7 +197,7 @@ namespace OpenSim.Region.ScriptEngine.Shared
return; return;
} }
part=part.ParentGroup.RootPart; // We detect objects only part = part.ParentGroup.RootPart; // We detect objects only
LinkNum = 0; // Not relevant LinkNum = 0; // Not relevant

View File

@ -766,13 +766,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException))
{ {
m_InSelfDelete = true; m_InSelfDelete = true;
if (part != null && part.ParentGroup != null) if (part != null)
m_Engine.World.DeleteSceneObject(part.ParentGroup, false); m_Engine.World.DeleteSceneObject(part.ParentGroup, false);
} }
else if ((e is TargetInvocationException) && (e.InnerException is ScriptDeleteException)) else if ((e is TargetInvocationException) && (e.InnerException is ScriptDeleteException))
{ {
m_InSelfDelete = true; m_InSelfDelete = true;
if (part != null && part.ParentGroup != null) if (part != null)
part.Inventory.RemoveInventoryItem(m_ItemID); part.Inventory.RemoveInventoryItem(m_ItemID);
} }
} }

View File

@ -97,7 +97,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
return; return;
m_log.Debug("Paid: " + objectID + " from " + agentID + ", amount " + amount); m_log.Debug("Paid: " + objectID + " from " + agentID + ", amount " + amount);
if (part.ParentGroup != null)
part = part.ParentGroup.RootPart; part = part.ParentGroup.RootPart;
if (part != null) if (part != null)