public UUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, UUID AgentId, out UUID itemID) { itemID = UUID.Zero; if (grp != null) { string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp); CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(AgentId); if (userInfo != null) { AssetBase asset = CreateAsset( grp.GetPartName(grp.LocalId), grp.GetPartDescription(grp.LocalId), (sbyte)AssetType.Object, Utils.StringToBytes(sceneObjectXml)); AssetService.Store(asset); InventoryItemBase item = new InventoryItemBase(); item.CreatorId = grp.RootPart.CreatorID.ToString(); item.Owner = remoteClient.AgentId; item.ID = UUID.Random(); item.AssetID = asset.FullID; item.Description = asset.Description; item.Name = asset.Name; item.AssetType = asset.Type; item.InvType = (int)InventoryType.Object; item.Folder = UUID.Zero; // Objects folder! if ((remoteClient.AgentId != grp.RootPart.OwnerID) && Permissions.PropagatePermissions()) { item.BasePermissions = grp.RootPart.NextOwnerMask; item.CurrentPermissions = grp.RootPart.NextOwnerMask; item.NextPermissions = grp.RootPart.NextOwnerMask; item.EveryOnePermissions = grp.RootPart.EveryoneMask & grp.RootPart.NextOwnerMask; item.GroupPermissions = grp.RootPart.GroupMask & grp.RootPart.NextOwnerMask; } else { item.BasePermissions = grp.RootPart.BaseMask; item.CurrentPermissions = grp.RootPart.OwnerMask; item.NextPermissions = grp.RootPart.NextOwnerMask; item.EveryOnePermissions = grp.RootPart.EveryoneMask; item.GroupPermissions = grp.RootPart.GroupMask; } item.CreationDate = Util.UnixTimeSinceEpoch(); // sets assetID so client can show asset as 'attached' in inventory grp.SetFromAssetID(item.ID); userInfo.AddItem(item); remoteClient.SendInventoryItemCreateUpdate(item, 0); itemID = item.ID; return item.AssetID; } return UUID.Zero; } return UUID.Zero; }