diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneGraph.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 2c66719..928dc97 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -35,6 +35,7 @@ using log4net; | |||
35 | using OpenSim.Framework; | 35 | using OpenSim.Framework; |
36 | using OpenSim.Region.Framework.Scenes.Types; | 36 | using OpenSim.Region.Framework.Scenes.Types; |
37 | using OpenSim.Region.Physics.Manager; | 37 | using OpenSim.Region.Physics.Manager; |
38 | using OpenSim.Region.Framework.Interfaces; | ||
38 | 39 | ||
39 | namespace OpenSim.Region.Framework.Scenes | 40 | namespace OpenSim.Region.Framework.Scenes |
40 | { | 41 | { |
@@ -476,6 +477,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
476 | part.Undo(); | 477 | part.Undo(); |
477 | } | 478 | } |
478 | } | 479 | } |
480 | protected internal void HandleRedo(IClientAPI remoteClient, UUID primId) | ||
481 | { | ||
482 | if (primId != UUID.Zero) | ||
483 | { | ||
484 | SceneObjectPart part = m_parentScene.GetSceneObjectPart(primId); | ||
485 | if (part != null) | ||
486 | part.Redo(); | ||
487 | } | ||
488 | } | ||
479 | 489 | ||
480 | protected internal void HandleObjectGroupUpdate( | 490 | protected internal void HandleObjectGroupUpdate( |
481 | IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) | 491 | IClientAPI remoteClient, UUID GroupID, uint objectLocalID, UUID Garbage) |
@@ -532,33 +542,32 @@ namespace OpenSim.Region.Framework.Scenes | |||
532 | /// <returns>The scene object that was attached. Null if the scene object could not be found</returns> | 542 | /// <returns>The scene object that was attached. Null if the scene object could not be found</returns> |
533 | public SceneObjectGroup RezSingleAttachment(IClientAPI remoteClient, UUID itemID, uint AttachmentPt) | 543 | public SceneObjectGroup RezSingleAttachment(IClientAPI remoteClient, UUID itemID, uint AttachmentPt) |
534 | { | 544 | { |
535 | SceneObjectGroup objatt = m_parentScene.RezObject(remoteClient, | 545 | IInventoryAccessModule invAccess = m_parentScene.RequestModuleInterface<IInventoryAccessModule>(); |
536 | itemID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true, | 546 | if (invAccess != null) |
537 | false, false, remoteClient.AgentId, true); | ||
538 | |||
539 | if (objatt != null) | ||
540 | { | 547 | { |
541 | bool tainted = false; | 548 | SceneObjectGroup objatt = invAccess.RezObject(remoteClient, |
542 | if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint()) | 549 | itemID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true, |
543 | tainted = true; | 550 | false, false, remoteClient.AgentId, true); |
544 | 551 | ||
545 | if (AttachObject( | 552 | |
546 | remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition, false)) | 553 | if (objatt != null) |
547 | { | 554 | { |
555 | bool tainted = false; | ||
556 | if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint()) | ||
557 | tainted = true; | ||
558 | |||
559 | AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition, false); | ||
548 | objatt.ScheduleGroupForFullUpdate(); | 560 | objatt.ScheduleGroupForFullUpdate(); |
549 | if (tainted) | 561 | if (tainted) |
550 | objatt.HasGroupChanged = true; | 562 | objatt.HasGroupChanged = true; |
551 | 563 | ||
552 | // Fire after attach, so we don't get messy perms dialogs | 564 | // Fire after attach, so we don't get messy perms dialogs |
553 | // 3 == AttachedRez | 565 | // 3 == AttachedRez |
554 | objatt.CreateScriptInstances(0, true, m_parentScene.DefaultScriptEngine, 3); | 566 | objatt.CreateScriptInstances(0, true, m_parentScene.DefaultScriptEngine, 3); |
555 | |||
556 | // Do this last so that event listeners have access to all the effects of the attachment | ||
557 | m_parentScene.EventManager.TriggerOnAttach(objatt.LocalId, itemID, remoteClient.AgentId); | ||
558 | } | 567 | } |
568 | return objatt; | ||
559 | } | 569 | } |
560 | 570 | return null; | |
561 | return objatt; | ||
562 | } | 571 | } |
563 | 572 | ||
564 | // What makes this method odd and unique is it tries to detach using an UUID.... Yay for standards. | 573 | // What makes this method odd and unique is it tries to detach using an UUID.... Yay for standards. |
@@ -669,7 +678,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
669 | // it get cleaned up | 678 | // it get cleaned up |
670 | // | 679 | // |
671 | group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); | 680 | group.RootPart.RemFlag(PrimFlags.TemporaryOnRez); |
672 | group.HasGroupChanged = false; | 681 | group.HasGroupChanged = false; |
673 | } | 682 | } |
674 | else | 683 | else |
675 | { | 684 | { |