diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | 67 |
1 files changed, 35 insertions, 32 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 0c0b0c5..4e8466d 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -669,28 +669,10 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
669 | return item; | 669 | return item; |
670 | } | 670 | } |
671 | 671 | ||
672 | /// <summary> | 672 | public virtual SceneObjectGroup RezObject( |
673 | /// Rez an object into the scene from the user's inventory | 673 | IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart, |
674 | /// </summary> | 674 | UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, |
675 | /// <remarks> | 675 | bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) |
676 | /// FIXME: It would be really nice if inventory access modules didn't also actually do the work of rezzing | ||
677 | /// things to the scene. The caller should be doing that, I think. | ||
678 | /// </remarks> | ||
679 | /// <param name="remoteClient"></param> | ||
680 | /// <param name="itemID"></param> | ||
681 | /// <param name="RayEnd"></param> | ||
682 | /// <param name="RayStart"></param> | ||
683 | /// <param name="RayTargetID"></param> | ||
684 | /// <param name="BypassRayCast"></param> | ||
685 | /// <param name="RayEndIsIntersection"></param> | ||
686 | /// <param name="RezSelected"></param> | ||
687 | /// <param name="RemoveItem"></param> | ||
688 | /// <param name="fromTaskID"></param> | ||
689 | /// <param name="attachment"></param> | ||
690 | /// <returns>The SceneObjectGroup rezzed or null if rez was unsuccessful.</returns> | ||
691 | public virtual SceneObjectGroup RezObject(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart, | ||
692 | UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, | ||
693 | bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) | ||
694 | { | 676 | { |
695 | // m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID); | 677 | // m_log.DebugFormat("[INVENTORY ACCESS MODULE]: RezObject for {0}, item {1}", remoteClient.Name, itemID); |
696 | 678 | ||
@@ -707,13 +689,34 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
707 | } | 689 | } |
708 | 690 | ||
709 | item.Owner = remoteClient.AgentId; | 691 | item.Owner = remoteClient.AgentId; |
710 | AssetBase rezAsset = m_Scene.AssetService.Get(item.AssetID.ToString()); | 692 | |
693 | return RezObject( | ||
694 | remoteClient, item, item.AssetID, | ||
695 | RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, | ||
696 | RezSelected, RemoveItem, fromTaskID, attachment); | ||
697 | } | ||
698 | |||
699 | public virtual SceneObjectGroup RezObject( | ||
700 | IClientAPI remoteClient, InventoryItemBase item, UUID assetID, Vector3 RayEnd, Vector3 RayStart, | ||
701 | UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, | ||
702 | bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) | ||
703 | { | ||
704 | AssetBase rezAsset = m_Scene.AssetService.Get(assetID.ToString()); | ||
711 | 705 | ||
712 | if (rezAsset == null) | 706 | if (rezAsset == null) |
713 | { | 707 | { |
714 | m_log.WarnFormat( | 708 | if (item != null) |
715 | "[InventoryAccessModule]: Could not find asset {0} for item {1} {2} for {3} in RezObject()", | 709 | { |
716 | item.AssetID, item.Name, item.ID, remoteClient.Name); | 710 | m_log.WarnFormat( |
711 | "[InventoryAccessModule]: Could not find asset {0} for item {1} {2} for {3} in RezObject()", | ||
712 | assetID, item.Name, item.ID, remoteClient.Name); | ||
713 | } | ||
714 | else | ||
715 | { | ||
716 | m_log.WarnFormat( | ||
717 | "[InventoryAccessModule]: Could not find asset {0} for {1} in RezObject()", | ||
718 | assetID, remoteClient.Name); | ||
719 | } | ||
717 | 720 | ||
718 | return null; | 721 | return null; |
719 | } | 722 | } |
@@ -781,7 +784,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
781 | } | 784 | } |
782 | } | 785 | } |
783 | 786 | ||
784 | if (!DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) | 787 | if (item != null && !DoPreRezWhenFromItem(remoteClient, item, objlist, pos, attachment)) |
785 | return null; | 788 | return null; |
786 | 789 | ||
787 | for (int i = 0; i < objlist.Count; i++) | 790 | for (int i = 0; i < objlist.Count; i++) |
@@ -829,10 +832,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
829 | 832 | ||
830 | group.AbsolutePosition = pos + veclist[i]; | 833 | group.AbsolutePosition = pos + veclist[i]; |
831 | } | 834 | } |
832 | else | ||
833 | { | ||
834 | group.SetFromItemID(itemID); | ||
835 | } | ||
836 | 835 | ||
837 | SceneObjectPart rootPart = group.RootPart; | 836 | SceneObjectPart rootPart = group.RootPart; |
838 | 837 | ||
@@ -855,7 +854,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
855 | // group.Name, group.LocalId, group.UUID, remoteClient.Name); | 854 | // group.Name, group.LocalId, group.UUID, remoteClient.Name); |
856 | } | 855 | } |
857 | 856 | ||
858 | DoPostRezWhenFromItem(item, attachment); | 857 | if (item != null) |
858 | DoPostRezWhenFromItem(item, attachment); | ||
859 | 859 | ||
860 | return group; | 860 | return group; |
861 | } | 861 | } |
@@ -973,6 +973,9 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
973 | } | 973 | } |
974 | 974 | ||
975 | rootPart.TrimPermissions(); | 975 | rootPart.TrimPermissions(); |
976 | |||
977 | if (isAttachment) | ||
978 | so.SetFromItemID(item.ID); | ||
976 | } | 979 | } |
977 | 980 | ||
978 | return true; | 981 | return true; |