aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs36
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs40
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs4
-rw-r--r--OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs1
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs24
-rw-r--r--OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs6
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs7
9 files changed, 87 insertions, 35 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index 9e72a98..437d150 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -258,10 +258,25 @@ namespace OpenSim.ApplicationPlugins.RemoteController
258 { 258 {
259 m_log.Info("[RADMIN]: Request to restart Region."); 259 m_log.Info("[RADMIN]: Request to restart Region.");
260 260
261 CheckRegionParams(requestData, responseData);
262
263 Scene rebootedScene = null; 261 Scene rebootedScene = null;
264 GetSceneFromRegionParams(requestData, responseData, out rebootedScene); 262 bool restartAll = false;
263
264 IConfig startupConfig = m_configSource.Configs["Startup"];
265 if (startupConfig != null)
266 {
267 if (startupConfig.GetBoolean("InworldRestartShutsDown", false))
268 {
269 rebootedScene = m_application.SceneManager.CurrentOrFirstScene;
270 restartAll = true;
271 }
272 }
273
274 if (rebootedScene == null)
275 {
276 CheckRegionParams(requestData, responseData);
277
278 GetSceneFromRegionParams(requestData, responseData, out rebootedScene);
279 }
265 280
266 IRestartModule restartModule = rebootedScene.RequestModuleInterface<IRestartModule>(); 281 IRestartModule restartModule = rebootedScene.RequestModuleInterface<IRestartModule>();
267 282
@@ -324,11 +339,20 @@ namespace OpenSim.ApplicationPlugins.RemoteController
324 notice = false; 339 notice = false;
325 } 340 }
326 341
327 if (restartModule != null) 342 List<Scene> restartList;
343
344 if (restartAll)
345 restartList = m_application.SceneManager.Scenes;
346 else
347 restartList = new List<Scene>() { rebootedScene };
348
349 foreach (Scene s in m_application.SceneManager.Scenes)
328 { 350 {
329 restartModule.ScheduleRestart(UUID.Zero, message, times.ToArray(), notice); 351 restartModule = s.RequestModuleInterface<IRestartModule>();
330 responseData["success"] = true; 352 if (restartModule != null)
353 restartModule.ScheduleRestart(UUID.Zero, message, times.ToArray(), notice);
331 } 354 }
355 responseData["success"] = true;
332 } 356 }
333 catch (Exception e) 357 catch (Exception e)
334 { 358 {
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index de40e59..f1deaa8 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -231,7 +231,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
231 sp.ClearAttachments(); 231 sp.ClearAttachments();
232 } 232 }
233 233
234 public bool AttachObject(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent) 234 public bool AttachObject(IScenePresence sp, SceneObjectGroup group, uint attachmentPt, bool silent, bool useAttachData)
235 { 235 {
236 lock (sp.AttachmentsSyncLock) 236 lock (sp.AttachmentsSyncLock)
237 { 237 {
@@ -277,9 +277,27 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
277 attachPos = Vector3.Zero; 277 attachPos = Vector3.Zero;
278 } 278 }
279 279
280 if (useAttachData)
281 {
282 group.RootPart.RotationOffset = group.RootPart.AttachRotation;
283 attachPos = group.RootPart.AttachOffset;
284 if (attachmentPt == 0)
285 {
286 attachmentPt = group.RootPart.AttachPoint;
287 if (attachmentPt == 0)
288 {
289 attachmentPt = (uint)AttachmentPoint.LeftHand;
290 attachPos = Vector3.Zero;
291 }
292 }
293 else if (group.RootPart.AttachPoint != attachmentPt)
294 {
295 attachPos = Vector3.Zero;
296 }
297 }
280 group.AttachmentPoint = attachmentPt; 298 group.AttachmentPoint = attachmentPt;
281 group.AbsolutePosition = attachPos; 299 group.AbsolutePosition = attachPos;
282 300
283 // We also don't want to do any of the inventory operations for an NPC. 301 // We also don't want to do any of the inventory operations for an NPC.
284 if (sp.PresenceType != PresenceType.Npc) 302 if (sp.PresenceType != PresenceType.Npc)
285 { 303 {
@@ -774,10 +792,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
774 null, assetID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true, 792 null, assetID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true,
775 false, false, sp.UUID, true); 793 false, false, sp.UUID, true);
776 794
777 // m_log.DebugFormat( 795// m_log.DebugFormat(
778 // "[ATTACHMENTS MODULE]: Retrieved single object {0} for attachment to {1} on point {2}", 796// "[ATTACHMENTS MODULE]: Retrieved single object {0} for attachment to {1} on point {2}",
779 // objatt.Name, remoteClient.Name, AttachmentPt); 797// objatt.Name, remoteClient.Name, AttachmentPt);
780 798
781 if (objatt != null) 799 if (objatt != null)
782 { 800 {
783 // HasGroupChanged is being set from within RezObject. Ideally it would be set by the caller. 801 // HasGroupChanged is being set from within RezObject. Ideally it would be set by the caller.
@@ -789,7 +807,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
789 // This will throw if the attachment fails 807 // This will throw if the attachment fails
790 try 808 try
791 { 809 {
792 AttachObject(sp, objatt, attachmentPt, false); 810 AttachObject(sp, objatt, attachmentPt, false, false);
793 } 811 }
794 catch (Exception e) 812 catch (Exception e)
795 { 813 {
@@ -802,6 +820,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
802 m_scene.DeleteSceneObject(objatt, false); 820 m_scene.DeleteSceneObject(objatt, false);
803 return null; 821 return null;
804 } 822 }
823
824 if (tainted)
825 objatt.HasGroupChanged = true;
805 826
806 if (doc != null) 827 if (doc != null)
807 { 828 {
@@ -809,9 +830,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
809 objatt.ResetOwnerChangeFlag(); 830 objatt.ResetOwnerChangeFlag();
810 } 831 }
811 832
812 if (tainted)
813 objatt.HasGroupChanged = true;
814
815 // Fire after attach, so we don't get messy perms dialogs 833 // Fire after attach, so we don't get messy perms dialogs
816 // 4 == AttachedRez 834 // 4 == AttachedRez
817 objatt.CreateScriptInstances(0, true, m_scene.DefaultScriptEngine, 4); 835 objatt.CreateScriptInstances(0, true, m_scene.DefaultScriptEngine, 4);
@@ -943,7 +961,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
943 AttachmentPt &= 0x7f; 961 AttachmentPt &= 0x7f;
944 962
945 // Calls attach with a Zero position 963 // Calls attach with a Zero position
946 if (AttachObject(sp, part.ParentGroup, AttachmentPt, false)) 964 if (AttachObject(sp, part.ParentGroup, AttachmentPt, false, true))
947 { 965 {
948// m_log.Debug( 966// m_log.Debug(
949// "[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId 967// "[ATTACHMENTS MODULE]: Saving avatar attachment. AgentID: " + remoteClient.AgentId
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
index 5e89eec..acf0089 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/Tests/AttachmentsModuleTests.cs
@@ -106,7 +106,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
106 106
107 SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, attName, m_presence.UUID).ParentGroup; 107 SceneObjectGroup so = SceneHelpers.AddSceneObject(scene, attName, m_presence.UUID).ParentGroup;
108 108
109 m_attMod.AttachObject(m_presence, so, (uint)AttachmentPoint.Chest, false); 109 m_attMod.AttachObject(m_presence, so, (uint)AttachmentPoint.Chest, false, false);
110 110
111 // Check status on scene presence 111 // Check status on scene presence
112 Assert.That(m_presence.HasAttachments(), Is.True); 112 Assert.That(m_presence.HasAttachments(), Is.True);
@@ -326,4 +326,4 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments.Tests
326// Assert.That(presence.HasAttachments(), Is.True, "Presence has not received new objects"); 326// Assert.That(presence.HasAttachments(), Is.True, "Presence has not received new objects");
327// } 327// }
328 } 328 }
329} \ No newline at end of file 329}
diff --git a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
index 69ce967..0516cb1 100644
--- a/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IAttachmentsModule.cs
@@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
65 /// <param name="AttachmentPt"></param> 65 /// <param name="AttachmentPt"></param>
66 /// <param name="silent"></param> 66 /// <param name="silent"></param>
67 /// <returns>true if the object was successfully attached, false otherwise</returns> 67 /// <returns>true if the object was successfully attached, false otherwise</returns>
68 bool AttachObject(IScenePresence sp, SceneObjectGroup grp, uint AttachmentPt, bool silent); 68 bool AttachObject(IScenePresence sp, SceneObjectGroup grp, uint AttachmentPt, bool silent, bool useAttachmentInfo);
69 69
70 /// <summary> 70 /// <summary>
71 /// Rez an attachment from user inventory and change inventory status to match. 71 /// Rez an attachment from user inventory and change inventory status to match.
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 315b340..9c80d3e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2701,7 +2701,7 @@ namespace OpenSim.Region.Framework.Scenes
2701 RootPrim.RemFlag(PrimFlags.TemporaryOnRez); 2701 RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
2702 2702
2703 if (AttachmentsModule != null) 2703 if (AttachmentsModule != null)
2704 AttachmentsModule.AttachObject(sp, grp, 0, false); 2704 AttachmentsModule.AttachObject(sp, grp, 0, false, false);
2705 } 2705 }
2706 else 2706 else
2707 { 2707 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 23a0550..a62c1ac 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -359,7 +359,6 @@ namespace OpenSim.Region.Framework.Scenes
359 if (pa != null && pa.IsPhysical && vel != Vector3.Zero) 359 if (pa != null && pa.IsPhysical && vel != Vector3.Zero)
360 { 360 {
361 sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false); 361 sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false);
362 sceneObject.Velocity = vel;
363 } 362 }
364 363
365 return true; 364 return true;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index bb8d065..61ef827 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2640,15 +2640,25 @@ namespace OpenSim.Region.Framework.Scenes
2640 2640
2641 private void SendLandCollisionEvent(scriptEvents ev, ScriptCollidingNotification notify) 2641 private void SendLandCollisionEvent(scriptEvents ev, ScriptCollidingNotification notify)
2642 { 2642 {
2643 if ((ParentGroup.RootPart.ScriptEvents & ev) != 0) 2643 bool sendToRoot = true;
2644 { 2644
2645 ColliderArgs LandCollidingMessage = new ColliderArgs(); 2645 ColliderArgs LandCollidingMessage = new ColliderArgs();
2646 List<DetectedObject> colliding = new List<DetectedObject>(); 2646 List<DetectedObject> colliding = new List<DetectedObject>();
2647 2647
2648 colliding.Add(CreateDetObjectForGround()); 2648 colliding.Add(CreateDetObjectForGround());
2649 LandCollidingMessage.Colliders = colliding; 2649 LandCollidingMessage.Colliders = colliding;
2650 2650
2651 if (Inventory.ContainsScripts())
2652 {
2653 if (!PassCollisions)
2654 sendToRoot = false;
2655 }
2656 if ((ScriptEvents & ev) != 0)
2651 notify(LocalId, LandCollidingMessage); 2657 notify(LocalId, LandCollidingMessage);
2658
2659 if ((ParentGroup.RootPart.ScriptEvents & ev) != 0 && sendToRoot)
2660 {
2661 notify(ParentGroup.RootPart.LocalId, LandCollidingMessage);
2652 } 2662 }
2653 } 2663 }
2654 2664
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
index 9a40ab5..9b3b51b 100644
--- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs
@@ -3252,9 +3252,9 @@ namespace OpenSim.Region.Physics.OdePlugin
3252 } 3252 }
3253 3253
3254 3254
3255 private void changeAddImpulse(Vector3 impulse) 3255 private void changeAddForce(Vector3 theforce)
3256 { 3256 {
3257 m_forceacc += impulse *m_invTimeStep; 3257 m_forceacc += theforce;
3258 if (!m_isSelected) 3258 if (!m_isSelected)
3259 { 3259 {
3260 lock (this) 3260 lock (this)
@@ -3960,7 +3960,7 @@ namespace OpenSim.Region.Physics.OdePlugin
3960 break; 3960 break;
3961 3961
3962 case changes.AddForce: 3962 case changes.AddForce:
3963 changeAddImpulse((Vector3)arg); 3963 changeAddForce((Vector3)arg);
3964 break; 3964 break;
3965 3965
3966 case changes.AddAngForce: 3966 case changes.AddAngForce:
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 9595d48..5905958 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3056,8 +3056,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3056 3056
3057 if (pa != null && pa.IsPhysical && llvel != Vector3.Zero) 3057 if (pa != null && pa.IsPhysical && llvel != Vector3.Zero)
3058 { 3058 {
3059 //Recoil. 3059 // recoil
3060 llApplyImpulse(new LSL_Vector(llvel.X * groupmass, llvel.Y * groupmass, llvel.Z * groupmass), 0); 3060 llvel *= -groupmass;
3061 llApplyImpulse(new LSL_Vector(llvel.X, llvel.Y,llvel.Z), 0);
3061 } 3062 }
3062 // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) 3063 // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay)
3063 return; 3064 return;
@@ -3249,7 +3250,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
3249 IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule; 3250 IAttachmentsModule attachmentsModule = m_ScriptEngine.World.AttachmentsModule;
3250 3251
3251 if (attachmentsModule != null) 3252 if (attachmentsModule != null)
3252 return attachmentsModule.AttachObject(presence, grp, (uint)attachmentPoint, false); 3253 return attachmentsModule.AttachObject(presence, grp, (uint)attachmentPoint, false, true);
3253 else 3254 else
3254 return false; 3255 return false;
3255 } 3256 }