diff options
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> |