diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index c49edd1..fc90d60 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -377,8 +377,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
377 | if (part == null) | 377 | if (part == null) |
378 | return; | 378 | return; |
379 | 379 | ||
380 | SceneObjectGroup obj = part.ParentGroup; | 380 | SceneObjectGroup group = part.ParentGroup; |
381 | if(group == null || group.IsDeleted) | ||
382 | return; | ||
383 | |||
384 | if (Permissions.CanMoveObject(group.UUID, remoteClient.AgentId))// && PermissionsMngr.) | ||
385 | { | ||
386 | group.GrabMovement(objectID, offset, pos, remoteClient); | ||
387 | } | ||
381 | 388 | ||
389 | // This is outside the above permissions condition | ||
390 | // so that if the object is locked the client moving the object | ||
391 | // get's it's position on the simulator even if it was the same as before | ||
392 | // This keeps the moving user's client in sync with the rest of the world. | ||
393 | group.SendGroupTerseUpdate(); | ||
394 | |||
382 | SurfaceTouchEventArgs surfaceArg = null; | 395 | SurfaceTouchEventArgs surfaceArg = null; |
383 | if (surfaceArgs != null && surfaceArgs.Count > 0) | 396 | if (surfaceArgs != null && surfaceArgs.Count > 0) |
384 | surfaceArg = surfaceArgs[0]; | 397 | surfaceArg = surfaceArgs[0]; |
@@ -391,9 +404,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
391 | // or if we're meant to pass on touches anyway. Don't send to root prim | 404 | // or if we're meant to pass on touches anyway. Don't send to root prim |
392 | // if prim touched is the root prim as we just did it | 405 | // if prim touched is the root prim as we just did it |
393 | if (((part.ScriptEvents & scriptEvents.touch) == 0) || | 406 | if (((part.ScriptEvents & scriptEvents.touch) == 0) || |
394 | (part.PassTouches && (part.LocalId != obj.RootPart.LocalId))) | 407 | (part.PassTouches && (part.LocalId != group.RootPart.LocalId))) |
395 | { | 408 | { |
396 | EventManager.TriggerObjectGrabbing(obj.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); | 409 | EventManager.TriggerObjectGrabbing(group.RootPart.LocalId, part.LocalId, part.OffsetPosition, remoteClient, surfaceArg); |
397 | } | 410 | } |
398 | } | 411 | } |
399 | 412 | ||