aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-09-01 02:09:41 +0100
committerJustin Clark-Casey (justincc)2011-09-01 02:11:00 +0100
commit7eca929686bd2db1cb42f5c9740fd1d186cdc8b1 (patch)
tree775f07f365acb56bc6043831d5832c2dac468ade
parentrefactor: use ParentGroup.UUID directly instead of SOP.GetRootPartUUID() (diff)
downloadopensim-SC-7eca929686bd2db1cb42f5c9740fd1d186cdc8b1.zip
opensim-SC-7eca929686bd2db1cb42f5c9740fd1d186cdc8b1.tar.gz
opensim-SC-7eca929686bd2db1cb42f5c9740fd1d186cdc8b1.tar.bz2
opensim-SC-7eca929686bd2db1cb42f5c9740fd1d186cdc8b1.tar.xz
Eliminate pointless checks of SOG.RootPart != null
It's never possible for SOG to have no RootPart, except in the first few picosends of the big bang when it's pulled from region persistence or deserialized
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs6
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs2
-rw-r--r--OpenSim/Region/DataSnapshot/ObjectSnapshot.cs83
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs194
-rw-r--r--OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs1
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs3
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/EventManager.cs6
12 files changed, 119 insertions, 205 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs
index 15139a3..1c47f0e 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/ObjectCaps/ObjectAdd.cs
@@ -322,8 +322,6 @@ namespace OpenSim.Region.ClientStack.Linden
322 rootpart.NextOwnerMask = next_owner_mask; 322 rootpart.NextOwnerMask = next_owner_mask;
323 rootpart.Material = (byte)material; 323 rootpart.Material = (byte)material;
324 324
325
326
327 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor); 325 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
328 326
329 responsedata["int_response_code"] = 200; //501; //410; //404; 327 responsedata["int_response_code"] = 200; //501; //410; //404;
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index 587f35e..ffe76a8 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -470,12 +470,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
470 return; 470 return;
471 } 471 }
472 472
473 if (null == att.RootPart)
474 {
475 m_log.Error("[ATTACHMENTS MODULE]: Unable to save attachment for a prim without the rootpart!");
476 return;
477 }
478
479 InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID); 473 InventoryItemBase item = new InventoryItemBase(itemID, sp.UUID);
480 item = m_scene.InventoryService.GetItem(item); 474 item = m_scene.InventoryService.GetItem(item);
481 bool changed = sp.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID); 475 bool changed = sp.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID);
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 82bdf20..766656c 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1772,7 +1772,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1772 foreach (SceneObjectGroup gobj in m_attachments) 1772 foreach (SceneObjectGroup gobj in m_attachments)
1773 { 1773 {
1774 // If the prim group is null then something must have happened to it! 1774 // If the prim group is null then something must have happened to it!
1775 if (gobj != null && gobj.RootPart != null) 1775 if (gobj != null)
1776 { 1776 {
1777 // Set the parent localID to 0 so it transfers over properly. 1777 // Set the parent localID to 0 so it transfers over properly.
1778 gobj.RootPart.SetParentLocalId(0); 1778 gobj.RootPart.SetParentLocalId(0);
diff --git a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs
index 5e75cae..0bb4044 100644
--- a/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs
+++ b/OpenSim/Region/DataSnapshot/ObjectSnapshot.cs
@@ -118,59 +118,56 @@ namespace OpenSim.Region.DataSnapshot.Providers
118 { 118 {
119 SceneObjectPart m_rootPart = obj.RootPart; 119 SceneObjectPart m_rootPart = obj.RootPart;
120 120
121 if (m_rootPart != null) 121 ILandObject land = m_scene.LandChannel.GetLandObject(m_rootPart.AbsolutePosition.X, m_rootPart.AbsolutePosition.Y);
122 {
123 ILandObject land = m_scene.LandChannel.GetLandObject(m_rootPart.AbsolutePosition.X, m_rootPart.AbsolutePosition.Y);
124 122
125 XmlNode xmlobject = nodeFactory.CreateNode(XmlNodeType.Element, "object", ""); 123 XmlNode xmlobject = nodeFactory.CreateNode(XmlNodeType.Element, "object", "");
126 node = nodeFactory.CreateNode(XmlNodeType.Element, "uuid", ""); 124 node = nodeFactory.CreateNode(XmlNodeType.Element, "uuid", "");
127 node.InnerText = obj.UUID.ToString(); 125 node.InnerText = obj.UUID.ToString();
128 xmlobject.AppendChild(node); 126 xmlobject.AppendChild(node);
129 127
130 node = nodeFactory.CreateNode(XmlNodeType.Element, "title", ""); 128 node = nodeFactory.CreateNode(XmlNodeType.Element, "title", "");
131 node.InnerText = m_rootPart.Name; 129 node.InnerText = m_rootPart.Name;
132 xmlobject.AppendChild(node); 130 xmlobject.AppendChild(node);
133
134 node = nodeFactory.CreateNode(XmlNodeType.Element, "description", "");
135 node.InnerText = m_rootPart.Description;
136 xmlobject.AppendChild(node);
137 131
138 node = nodeFactory.CreateNode(XmlNodeType.Element, "flags", ""); 132 node = nodeFactory.CreateNode(XmlNodeType.Element, "description", "");
139 node.InnerText = String.Format("{0:x}", (uint)m_rootPart.Flags); 133 node.InnerText = m_rootPart.Description;
140 xmlobject.AppendChild(node); 134 xmlobject.AppendChild(node);
141 135
142 node = nodeFactory.CreateNode(XmlNodeType.Element, "regionuuid", ""); 136 node = nodeFactory.CreateNode(XmlNodeType.Element, "flags", "");
143 node.InnerText = m_scene.RegionInfo.RegionSettings.RegionUUID.ToString(); 137 node.InnerText = String.Format("{0:x}", (uint)m_rootPart.Flags);
144 xmlobject.AppendChild(node); 138 xmlobject.AppendChild(node);
145 139
146 if (land != null && land.LandData != null) 140 node = nodeFactory.CreateNode(XmlNodeType.Element, "regionuuid", "");
147 { 141 node.InnerText = m_scene.RegionInfo.RegionSettings.RegionUUID.ToString();
148 node = nodeFactory.CreateNode(XmlNodeType.Element, "parceluuid", ""); 142 xmlobject.AppendChild(node);
149 node.InnerText = land.LandData.GlobalID.ToString();
150 xmlobject.AppendChild(node);
151 }
152 else
153 {
154 // Something is wrong with this object. Let's not list it.
155 m_log.WarnFormat("[DATASNAPSHOT]: Bad data for object {0} ({1}) in region {2}", obj.Name, obj.UUID, m_scene.RegionInfo.RegionName);
156 continue;
157 }
158 143
159 node = nodeFactory.CreateNode(XmlNodeType.Element, "location", ""); 144 if (land != null && land.LandData != null)
160 Vector3 loc = obj.AbsolutePosition; 145 {
161 node.InnerText = loc.X.ToString() + "/" + loc.Y.ToString() + "/" + loc.Z.ToString(); 146 node = nodeFactory.CreateNode(XmlNodeType.Element, "parceluuid", "");
147 node.InnerText = land.LandData.GlobalID.ToString();
162 xmlobject.AppendChild(node); 148 xmlobject.AppendChild(node);
149 }
150 else
151 {
152 // Something is wrong with this object. Let's not list it.
153 m_log.WarnFormat("[DATASNAPSHOT]: Bad data for object {0} ({1}) in region {2}", obj.Name, obj.UUID, m_scene.RegionInfo.RegionName);
154 continue;
155 }
163 156
164 string bestImage = GuessImage(obj); 157 node = nodeFactory.CreateNode(XmlNodeType.Element, "location", "");
165 if (bestImage != string.Empty) 158 Vector3 loc = obj.AbsolutePosition;
166 { 159 node.InnerText = loc.X.ToString() + "/" + loc.Y.ToString() + "/" + loc.Z.ToString();
167 node = nodeFactory.CreateNode(XmlNodeType.Element, "image", ""); 160 xmlobject.AppendChild(node);
168 node.InnerText = bestImage;
169 xmlobject.AppendChild(node);
170 }
171 161
172 parent.AppendChild(xmlobject); 162 string bestImage = GuessImage(obj);
163 if (bestImage != string.Empty)
164 {
165 node = nodeFactory.CreateNode(XmlNodeType.Element, "image", "");
166 node.InnerText = bestImage;
167 xmlobject.AppendChild(node);
173 } 168 }
169
170 parent.AppendChild(xmlobject);
174 } 171 }
175 #pragma warning disable 0612 172 #pragma warning disable 0612
176 } 173 }
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index 44472b2..29d01d6 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -191,10 +191,6 @@ namespace OpenSim.Region.Framework.Scenes
191 if (part == null) 191 if (part == null)
192 return; 192 return;
193 193
194 // The prim is in the process of being deleted.
195 if (null == part.ParentGroup.RootPart)
196 return;
197
198 // A deselect packet contains all the local prims being deselected. However, since selection is still 194 // A deselect packet contains all the local prims being deselected. However, since selection is still
199 // group based we only want the root prim to trigger a full update - otherwise on objects with many prims 195 // group based we only want the root prim to trigger a full update - otherwise on objects with many prims
200 // we end up sending many duplicate ObjectUpdates 196 // we end up sending many duplicate ObjectUpdates
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 7f5aea7..9794a34 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1743,14 +1743,6 @@ namespace OpenSim.Region.Framework.Scenes
1743 foreach (SceneObjectGroup group in PrimsFromDB) 1743 foreach (SceneObjectGroup group in PrimsFromDB)
1744 { 1744 {
1745 EventManager.TriggerOnSceneObjectLoaded(group); 1745 EventManager.TriggerOnSceneObjectLoaded(group);
1746
1747 if (group.RootPart == null)
1748 {
1749 m_log.ErrorFormat(
1750 "[SCENE]: Found a SceneObjectGroup with m_rootPart == null and {0} children",
1751 group.Parts == null ? 0 : group.PrimCount);
1752 }
1753
1754 AddRestoredSceneObject(group, true, true); 1746 AddRestoredSceneObject(group, true, true);
1755 SceneObjectPart rootPart = group.GetChildPart(group.UUID); 1747 SceneObjectPart rootPart = group.GetChildPart(group.UUID);
1756 rootPart.Flags &= ~PrimFlags.Scripted; 1748 rootPart.Flags &= ~PrimFlags.Scripted;
@@ -4215,7 +4207,7 @@ namespace OpenSim.Region.Framework.Scenes
4215 // their scripts will actually run. 4207 // their scripts will actually run.
4216 // -- Leaf, Tue Aug 12 14:17:05 EDT 2008 4208 // -- Leaf, Tue Aug 12 14:17:05 EDT 2008
4217 SceneObjectPart parent = part.ParentGroup.RootPart; 4209 SceneObjectPart parent = part.ParentGroup.RootPart;
4218 if (parent != null && part.ParentGroup.IsAttachment) 4210 if (part.ParentGroup.IsAttachment)
4219 return ScriptDanger(parent, parent.GetWorldPosition()); 4211 return ScriptDanger(parent, parent.GetWorldPosition());
4220 else 4212 else
4221 return ScriptDanger(part, part.GetWorldPosition()); 4213 return ScriptDanger(part, part.GetWorldPosition());
@@ -5015,7 +5007,9 @@ namespace OpenSim.Region.Framework.Scenes
5015 if (rootPart.GroupPosition.Z < 0.0 || rootPart.GroupPosition.Z > 10000.0) 5007 if (rootPart.GroupPosition.Z < 0.0 || rootPart.GroupPosition.Z > 10000.0)
5016 { 5008 {
5017 delete = true; 5009 delete = true;
5018 } else { 5010 }
5011 else
5012 {
5019 ILandObject parcel = LandChannel.GetLandObject(rootPart.GroupPosition.X, rootPart.GroupPosition.Y); 5013 ILandObject parcel = LandChannel.GetLandObject(rootPart.GroupPosition.X, rootPart.GroupPosition.Y);
5020 5014
5021 if (parcel == null || parcel.LandData.Name == "NO LAND") 5015 if (parcel == null || parcel.LandData.Name == "NO LAND")
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 17a1bcc..6f963ac 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -362,7 +362,7 @@ namespace OpenSim.Region.Framework.Scenes
362 /// </returns> 362 /// </returns>
363 protected bool AddSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates) 363 protected bool AddSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
364 { 364 {
365 if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero) 365 if (sceneObject == null || sceneObject.RootPart.UUID == UUID.Zero)
366 return false; 366 return false;
367 367
368 if (Entities.ContainsKey(sceneObject.UUID)) 368 if (Entities.ContainsKey(sceneObject.UUID))
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 74e8783..fca42c8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -254,14 +254,7 @@ namespace OpenSim.Region.Framework.Scenes
254 /// </summary> 254 /// </summary>
255 public override string Name 255 public override string Name
256 { 256 {
257 get 257 get { return RootPart.Name; }
258 {
259 if (RootPart == null)
260 return String.Empty;
261 else
262 return RootPart.Name;
263 }
264
265 set { RootPart.Name = value; } 258 set { RootPart.Name = value; }
266 } 259 }
267 260
@@ -1054,7 +1047,7 @@ namespace OpenSim.Region.Framework.Scenes
1054 { 1047 {
1055 part.SetParent(this); 1048 part.SetParent(this);
1056 part.LinkNum = m_parts.Add(part.UUID, part); 1049 part.LinkNum = m_parts.Add(part.UUID, part);
1057 if (part.LinkNum == 2 && RootPart != null) 1050 if (part.LinkNum == 2)
1058 RootPart.LinkNum = 1; 1051 RootPart.LinkNum = 1;
1059 } 1052 }
1060 1053
@@ -1537,137 +1530,93 @@ namespace OpenSim.Region.Framework.Scenes
1537 1530
1538 public void applyImpulse(Vector3 impulse) 1531 public void applyImpulse(Vector3 impulse)
1539 { 1532 {
1540 // We check if rootpart is null here because scripts don't delete if you delete the host. 1533 if (IsAttachment)
1541 // This means that unfortunately, we can pass a null physics actor to Simulate!
1542 // Make sure we don't do that!
1543 SceneObjectPart rootpart = m_rootPart;
1544 if (rootpart != null)
1545 { 1534 {
1546 if (IsAttachment) 1535 ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar);
1536 if (avatar != null)
1547 { 1537 {
1548 ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); 1538 avatar.PushForce(impulse);
1549 if (avatar != null)
1550 {
1551 avatar.PushForce(impulse);
1552 }
1553 } 1539 }
1554 else 1540 }
1541 else
1542 {
1543 if (RootPart.PhysActor != null)
1555 { 1544 {
1556 if (rootpart.PhysActor != null) 1545 RootPart.PhysActor.AddForce(impulse, true);
1557 { 1546 m_scene.PhysicsScene.AddPhysicsActorTaint(RootPart.PhysActor);
1558 rootpart.PhysActor.AddForce(impulse, true);
1559 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
1560 }
1561 } 1547 }
1562 } 1548 }
1563 } 1549 }
1564 1550
1565 public void applyAngularImpulse(Vector3 impulse) 1551 public void applyAngularImpulse(Vector3 impulse)
1566 { 1552 {
1567 // We check if rootpart is null here because scripts don't delete if you delete the host. 1553 if (RootPart.PhysActor != null)
1568 // This means that unfortunately, we can pass a null physics actor to Simulate!
1569 // Make sure we don't do that!
1570 SceneObjectPart rootpart = m_rootPart;
1571 if (rootpart != null)
1572 { 1554 {
1573 if (rootpart.PhysActor != null) 1555 if (!IsAttachment)
1574 { 1556 {
1575 if (!IsAttachment) 1557 RootPart.PhysActor.AddAngularForce(impulse, true);
1576 { 1558 m_scene.PhysicsScene.AddPhysicsActorTaint(RootPart.PhysActor);
1577 rootpart.PhysActor.AddAngularForce(impulse, true);
1578 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
1579 }
1580 } 1559 }
1581 } 1560 }
1582 } 1561 }
1583 1562
1584 public void setAngularImpulse(Vector3 impulse) 1563 public void setAngularImpulse(Vector3 impulse)
1585 { 1564 {
1586 // We check if rootpart is null here because scripts don't delete if you delete the host. 1565 if (RootPart.PhysActor != null)
1587 // This means that unfortunately, we can pass a null physics actor to Simulate!
1588 // Make sure we don't do that!
1589 SceneObjectPart rootpart = m_rootPart;
1590 if (rootpart != null)
1591 { 1566 {
1592 if (rootpart.PhysActor != null) 1567 if (!IsAttachment)
1593 { 1568 {
1594 if (!IsAttachment) 1569 RootPart.PhysActor.Torque = impulse;
1595 { 1570 m_scene.PhysicsScene.AddPhysicsActorTaint(RootPart.PhysActor);
1596 rootpart.PhysActor.Torque = impulse;
1597 m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor);
1598 }
1599 } 1571 }
1600 } 1572 }
1601 } 1573 }
1602 1574
1603 public Vector3 GetTorque() 1575 public Vector3 GetTorque()
1604 { 1576 {
1605 // We check if rootpart is null here because scripts don't delete if you delete the host. 1577 if (RootPart.PhysActor != null)
1606 // This means that unfortunately, we can pass a null physics actor to Simulate!
1607 // Make sure we don't do that!
1608 SceneObjectPart rootpart = m_rootPart;
1609 if (rootpart != null)
1610 { 1578 {
1611 if (rootpart.PhysActor != null) 1579 if (!IsAttachment)
1612 { 1580 {
1613 if (!IsAttachment) 1581 Vector3 torque = RootPart.PhysActor.Torque;
1614 { 1582 return torque;
1615 Vector3 torque = rootpart.PhysActor.Torque;
1616 return torque;
1617 }
1618 } 1583 }
1619 } 1584 }
1585
1620 return Vector3.Zero; 1586 return Vector3.Zero;
1621 } 1587 }
1622 1588
1623 public void moveToTarget(Vector3 target, float tau) 1589 public void moveToTarget(Vector3 target, float tau)
1624 { 1590 {
1625 SceneObjectPart rootpart = m_rootPart; 1591 if (IsAttachment)
1626 if (rootpart != null)
1627 { 1592 {
1628 if (IsAttachment) 1593 ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar);
1594 if (avatar != null)
1629 { 1595 {
1630 ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); 1596 avatar.MoveToTarget(target, false);
1631 if (avatar != null)
1632 {
1633 avatar.MoveToTarget(target, false);
1634 }
1635 } 1597 }
1636 else 1598 }
1599 else
1600 {
1601 if (RootPart.PhysActor != null)
1637 { 1602 {
1638 if (rootpart.PhysActor != null) 1603 RootPart.PhysActor.PIDTarget = target;
1639 { 1604 RootPart.PhysActor.PIDTau = tau;
1640 rootpart.PhysActor.PIDTarget = target; 1605 RootPart.PhysActor.PIDActive = true;
1641 rootpart.PhysActor.PIDTau = tau;
1642 rootpart.PhysActor.PIDActive = true;
1643 }
1644 } 1606 }
1645 } 1607 }
1646 } 1608 }
1647 1609
1648 public void stopMoveToTarget() 1610 public void stopMoveToTarget()
1649 { 1611 {
1650 SceneObjectPart rootpart = m_rootPart; 1612 if (RootPart.PhysActor != null)
1651 if (rootpart != null) 1613 RootPart.PhysActor.PIDActive = false;
1652 {
1653 if (rootpart.PhysActor != null)
1654 {
1655 rootpart.PhysActor.PIDActive = false;
1656 }
1657 }
1658 } 1614 }
1659 1615
1660 public void stopLookAt() 1616 public void stopLookAt()
1661 { 1617 {
1662 SceneObjectPart rootpart = m_rootPart; 1618 if (RootPart.PhysActor != null)
1663 if (rootpart != null) 1619 RootPart.PhysActor.APIDActive = false;
1664 {
1665 if (rootpart.PhysActor != null)
1666 {
1667 rootpart.PhysActor.APIDActive = false;
1668 }
1669 }
1670
1671 } 1620 }
1672 1621
1673 /// <summary> 1622 /// <summary>
@@ -1678,22 +1627,18 @@ namespace OpenSim.Region.Framework.Scenes
1678 /// <param name="tau">Number of seconds over which to reach target</param> 1627 /// <param name="tau">Number of seconds over which to reach target</param>
1679 public void SetHoverHeight(float height, PIDHoverType hoverType, float tau) 1628 public void SetHoverHeight(float height, PIDHoverType hoverType, float tau)
1680 { 1629 {
1681 SceneObjectPart rootpart = m_rootPart; 1630 if (RootPart.PhysActor != null)
1682 if (rootpart != null)
1683 { 1631 {
1684 if (rootpart.PhysActor != null) 1632 if (height != 0f)
1685 { 1633 {
1686 if (height != 0f) 1634 RootPart.PhysActor.PIDHoverHeight = height;
1687 { 1635 RootPart.PhysActor.PIDHoverType = hoverType;
1688 rootpart.PhysActor.PIDHoverHeight = height; 1636 RootPart.PhysActor.PIDTau = tau;
1689 rootpart.PhysActor.PIDHoverType = hoverType; 1637 RootPart.PhysActor.PIDHoverActive = true;
1690 rootpart.PhysActor.PIDTau = tau; 1638 }
1691 rootpart.PhysActor.PIDHoverActive = true; 1639 else
1692 } 1640 {
1693 else 1641 RootPart.PhysActor.PIDHoverActive = false;
1694 {
1695 rootpart.PhysActor.PIDHoverActive = false;
1696 }
1697 } 1642 }
1698 } 1643 }
1699 } 1644 }
@@ -3056,28 +3001,23 @@ namespace OpenSim.Region.Framework.Scenes
3056 int yaxis = 4; 3001 int yaxis = 4;
3057 int zaxis = 8; 3002 int zaxis = 8;
3058 3003
3059 if (m_rootPart != null) 3004 setX = ((axis & xaxis) != 0) ? true : false;
3060 { 3005 setY = ((axis & yaxis) != 0) ? true : false;
3061 setX = ((axis & xaxis) != 0) ? true : false; 3006 setZ = ((axis & zaxis) != 0) ? true : false;
3062 setY = ((axis & yaxis) != 0) ? true : false;
3063 setZ = ((axis & zaxis) != 0) ? true : false;
3064
3065 float setval = (rotate10 > 0) ? 1f : 0f;
3066 3007
3067 if (setX) 3008 float setval = (rotate10 > 0) ? 1f : 0f;
3068 m_rootPart.RotationAxis.X = setval;
3069 if (setY)
3070 m_rootPart.RotationAxis.Y = setval;
3071 if (setZ)
3072 m_rootPart.RotationAxis.Z = setval;
3073 3009
3074 if (setX || setY || setZ) 3010 if (setX)
3075 { 3011 RootPart.RotationAxis.X = setval;
3076 m_rootPart.SetPhysicsAxisRotation(); 3012 if (setY)
3077 } 3013 RootPart.RotationAxis.Y = setval;
3014 if (setZ)
3015 RootPart.RotationAxis.Z = setval;
3078 3016
3079 } 3017 if (setX || setY || setZ)
3018 RootPart.SetPhysicsAxisRotation();
3080 } 3019 }
3020
3081 public int registerRotTargetWaypoint(Quaternion target, float tolerance) 3021 public int registerRotTargetWaypoint(Quaternion target, float tolerance)
3082 { 3022 {
3083 scriptRotTarget waypoint = new scriptRotTarget(); 3023 scriptRotTarget waypoint = new scriptRotTarget();
@@ -3205,7 +3145,13 @@ namespace OpenSim.Region.Framework.Scenes
3205 foreach (uint idx in m_rotTargets.Keys) 3145 foreach (uint idx in m_rotTargets.Keys)
3206 { 3146 {
3207 scriptRotTarget target = m_rotTargets[idx]; 3147 scriptRotTarget target = m_rotTargets[idx];
3208 double angle = Math.Acos(target.targetRot.X * m_rootPart.RotationOffset.X + target.targetRot.Y * m_rootPart.RotationOffset.Y + target.targetRot.Z * m_rootPart.RotationOffset.Z + target.targetRot.W * m_rootPart.RotationOffset.W) * 2; 3148 double angle
3149 = Math.Acos(
3150 target.targetRot.X * m_rootPart.RotationOffset.X
3151 + target.targetRot.Y * m_rootPart.RotationOffset.Y
3152 + target.targetRot.Z * m_rootPart.RotationOffset.Z
3153 + target.targetRot.W * m_rootPart.RotationOffset.W)
3154 * 2;
3209 if (angle < 0) angle = -angle; 3155 if (angle < 0) angle = -angle;
3210 if (angle > Math.PI) angle = (Math.PI * 2 - angle); 3156 if (angle > Math.PI) angle = (Math.PI * 2 - angle);
3211 if (angle <= target.tolerance) 3157 if (angle <= target.tolerance)
diff --git a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
index 421da36..feca7d3 100644
--- a/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
+++ b/OpenSim/Region/OptionalModules/World/TreePopulator/TreePopulatorModule.cs
@@ -381,7 +381,6 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
381 { 381 {
382 SceneObjectPart selectedTree = ((SceneObjectGroup)m_scene.Entities[tree]).RootPart; 382 SceneObjectPart selectedTree = ((SceneObjectGroup)m_scene.Entities[tree]).RootPart;
383 383
384
385 m_scene.DeleteSceneObject(selectedTree.ParentGroup, false); 384 m_scene.DeleteSceneObject(selectedTree.ParentGroup, false);
386 m_scene.ForEachClient(delegate(IClientAPI controller) 385 m_scene.ForEachClient(delegate(IClientAPI controller)
387 { 386 {
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 8d95546..2fd98f6 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2767,8 +2767,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2767 // If either of these are null, then there was an unknown error. 2767 // If either of these are null, then there was an unknown error.
2768 if (new_group == null) 2768 if (new_group == null)
2769 continue; 2769 continue;
2770 if (new_group.RootPart == null)
2771 continue;
2772 2770
2773 // objects rezzed with this method are die_at_edge by default. 2771 // objects rezzed with this method are die_at_edge by default.
2774 new_group.RootPart.SetDieAtEdge(true); 2772 new_group.RootPart.SetDieAtEdge(true);
@@ -6983,10 +6981,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6983 { 6981 {
6984 // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask. 6982 // we are a child. The rotation values will be set to the one of root modified by rot, as in SL. Don't ask.
6985 SceneObjectPart rootPart = part.ParentGroup.RootPart; 6983 SceneObjectPart rootPart = part.ParentGroup.RootPart;
6986 if (rootPart != null) // better safe than sorry 6984 SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q));
6987 {
6988 SetRot(part, rootPart.RotationOffset * Rot2Quaternion(q));
6989 }
6990 } 6985 }
6991 6986
6992 break; 6987 break;
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 7f3d84d..3ddd79b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -673,8 +673,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
673 673
674 m_host.AddScriptLPS(1); 674 m_host.AddScriptLPS(1);
675 675
676 if (m_host.ParentGroup.RootPart != null) 676 m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN);
677 m_host.ParentGroup.RootPart.SetFloatOnWater(floatYN);
678 } 677 }
679 678
680 // Teleport functions 679 // Teleport functions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
index 08dc71e..5c4174e 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
@@ -99,11 +99,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
99 m_log.Debug("Paid: " + objectID + " from " + agentID + ", amount " + amount); 99 m_log.Debug("Paid: " + objectID + " from " + agentID + ", amount " + amount);
100 100
101 part = part.ParentGroup.RootPart; 101 part = part.ParentGroup.RootPart;
102 102 money(part.LocalId, agentID, amount);
103 if (part != null)
104 {
105 money(part.LocalId, agentID, amount);
106 }
107 } 103 }
108 104
109 /// <summary> 105 /// <summary>