当前位置: 首页>>代码示例>>C#>>正文


C# IClientAPI.SendInventoryItemCreateUpdate方法代码示例

本文整理汇总了C#中IClientAPI.SendInventoryItemCreateUpdate方法的典型用法代码示例。如果您正苦于以下问题:C# IClientAPI.SendInventoryItemCreateUpdate方法的具体用法?C# IClientAPI.SendInventoryItemCreateUpdate怎么用?C# IClientAPI.SendInventoryItemCreateUpdate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IClientAPI的用法示例。


在下文中一共展示了IClientAPI.SendInventoryItemCreateUpdate方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: attachObjectAssetStore

        public UUID attachObjectAssetStore(IClientAPI remoteClient, SceneObjectGroup grp, UUID AgentId, out UUID itemID)
        {
            itemID = UUID.Zero;
            if (grp != null)
            {
                Vector3 inventoryStoredPosition = new Vector3(
                        Math.Min(grp.AbsolutePosition.X, RegionInfo.RegionSizeX - 6),
                        Math.Min(grp.AbsolutePosition.Y, RegionInfo.RegionSizeY - 6),
                        grp.AbsolutePosition.Z);

                Vector3 originalPosition = grp.AbsolutePosition;

                grp.AbsolutePosition = inventoryStoredPosition;

                string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp);

                grp.AbsolutePosition = originalPosition;

                AssetBase asset = CreateAsset(
                    grp.GetPartName(grp.LocalId),
                    grp.GetPartDescription(grp.LocalId),
                    (sbyte)AssetType.Object,
                    Utils.StringToBytes(sceneObjectXml),
                    remoteClient.AgentId);
                AssetService.Store(asset);

                InventoryItemBase item = new InventoryItemBase();
                item.CreatorId = grp.RootPart.CreatorID.ToString();
                item.CreatorData = grp.RootPart.CreatorData;
                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;

                InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, FolderType.Object);
                if (folder != null)
                    item.Folder = folder.ID;
                else // oopsies
                    item.Folder = UUID.Zero;

                // Set up base perms properly
                uint permsBase = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify);
                permsBase &= grp.RootPart.BaseMask;
                permsBase |= (uint)PermissionMask.Move;

                // Make sure we don't lock it
                grp.RootPart.NextOwnerMask |= (uint)PermissionMask.Move;

                if ((remoteClient.AgentId != grp.RootPart.OwnerID) && Permissions.PropagatePermissions())
                {
                    item.BasePermissions = permsBase & grp.RootPart.NextOwnerMask;
                    item.CurrentPermissions = permsBase & grp.RootPart.NextOwnerMask;
                    item.NextPermissions = permsBase & grp.RootPart.NextOwnerMask;
                    item.EveryOnePermissions = permsBase & grp.RootPart.EveryoneMask & grp.RootPart.NextOwnerMask;
                    item.GroupPermissions = permsBase & grp.RootPart.GroupMask & grp.RootPart.NextOwnerMask;
                }
                else
                {
                    item.BasePermissions = permsBase;
                    item.CurrentPermissions = permsBase & grp.RootPart.OwnerMask;
                    item.NextPermissions = permsBase & grp.RootPart.NextOwnerMask;
                    item.EveryOnePermissions = permsBase & grp.RootPart.EveryoneMask;
                    item.GroupPermissions = permsBase & grp.RootPart.GroupMask;
                }
                item.CreationDate = Util.UnixTimeSinceEpoch();

                // sets itemID so client can show item as 'attached' in inventory
                grp.FromItemID = item.ID;

                if (AddInventoryItem(item))
                    remoteClient.SendInventoryItemCreateUpdate(item, 0);
                else
                    m_dialogModule.SendAlertToUser(remoteClient, "Operation failed");

                itemID = item.ID;
                return item.AssetID;
            }
            return UUID.Zero;
        }
开发者ID:CassieEllen,项目名称:opensim,代码行数:82,代码来源:Scene.Inventory.cs

示例2: AddInventoryItemAsync

 /// Add an inventory item to an avatar's inventory.
 /// </summary>
 /// <param name="remoteClient">The remote client controlling the avatar</param>
 /// <param name="item">The item.  This structure contains all the item metadata, including the folder
 /// in which the item is to be placed.</param>
 //public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item)
 public void AddInventoryItemAsync(IClientAPI remoteClient, InventoryItemBase item)
 {
     m_scene.InventoryService.AddItemAsync(item,
         (itm) => remoteClient.SendInventoryItemCreateUpdate(itm, 0));
 }
开发者ID:samiam123,项目名称:Aurora-Sim,代码行数:11,代码来源:LLClientInventory.cs

示例3: OnInstantMessage


//.........这里部分代码省略.........
                        string binBucket = OpenMetaverse.Utils.BytesToString(im.binaryBucket);
                        binBucket = binBucket.Remove(0, 14).Trim();

                        OSD binBucketOSD = OSDParser.DeserializeLLSDXml(binBucket);
                        if (binBucketOSD is OSDMap)
                        {
                            OSDMap binBucketMap = (OSDMap)binBucketOSD;

                            UUID itemID = binBucketMap["item_id"].AsUUID();
                            UUID ownerID = binBucketMap["owner_id"].AsUUID();
                            item = new InventoryItemBase(itemID, ownerID);
                            item = m_sceneList[0].InventoryService.GetItem(item);
                        }
                        else
                            m_log.DebugFormat("[Groups]: Received OSD with unexpected type: {0}", binBucketOSD.GetType());
                    }

                    if (m_groupData.AddGroupNotice(GetRequestingAgentIDStr(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message,
                        hasAttachment, 
                        (byte)(item == null ? 0 : item.AssetType),
                        item == null ? null : item.Name, 
                        item == null ? UUID.Zero : item.ID,
                        item == null ? UUID.Zero.ToString() : item.Owner.ToString()))
                    {
                        if (OnNewGroupNotice != null)
                        {
                            OnNewGroupNotice(GroupID, NoticeID);
                        }

                       
                        // Send notice out to everyone that wants notices
                        foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetRequestingAgentIDStr(remoteClient), GroupID))
                        {
                            if (member.AcceptNotices)
                            {
                                // Build notice IIM, one of reach, because the sending may be async
                                GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice);
                                msg.toAgentID = member.AgentID.Guid;
                                OutgoingInstantMessage(msg, member.AgentID);
                            }
                        }
                    }
                }
            }

            if (im.dialog == (byte)InstantMessageDialog.GroupNoticeInventoryAccepted)
            {
                if (im.binaryBucket.Length < 16) // Invalid
                    return;

                //// 16 bytes are the UUID. Maybe.
//                UUID folderID = new UUID(im.binaryBucket, 0);
                UUID noticeID = new UUID(im.imSessionID);

                GroupNoticeInfo notice = m_groupData.GetGroupNotice(remoteClient.AgentId.ToString(), noticeID);
                if (notice != null)
                {
                    UUID giver = new UUID(im.toAgentID);
                    string tmp = string.Empty;
                    Util.ParseUniversalUserIdentifier(notice.noticeData.AttachmentOwnerID, out giver, out tmp, out tmp, out tmp, out tmp);

                    m_log.DebugFormat("[Groups]: Giving inventory from {0} to {1}", giver, remoteClient.AgentId);
                    InventoryItemBase itemCopy = ((Scene)(remoteClient.Scene)).GiveInventoryItem(remoteClient.AgentId, 
                        giver, notice.noticeData.AttachmentItemID);

                    if (itemCopy == null)
                    {
                        remoteClient.SendAgentAlertMessage("Can't find item to give. Nothing given.", false);
                        return;
                    }

                    remoteClient.SendInventoryItemCreateUpdate(itemCopy, 0);
                }

            }
          
            // Interop, received special 210 code for ejecting a group member
            // this only works within the comms servers domain, and won't work hypergrid
            // TODO:FIXME: Use a presense server of some kind to find out where the 
            // client actually is, and try contacting that region directly to notify them,
            // or provide the notification via xmlrpc update queue
            if ((im.dialog == 210))
            {
                // This is sent from the region that the ejectee was ejected from
                // if it's being delivered here, then the ejectee is here
                // so we need to send local updates to the agent.

                UUID ejecteeID = new UUID(im.toAgentID);

                im.dialog = (byte)InstantMessageDialog.MessageFromAgent;
                OutgoingInstantMessage(im, ejecteeID);

                IClientAPI ejectee = GetActiveClient(ejecteeID);
                if (ejectee != null)
                {
                    UUID groupID = new UUID(im.imSessionID);
                    ejectee.SendAgentDropGroup(groupID);
                }
            }
        }
开发者ID:JamesStallings,项目名称:opensimulator,代码行数:101,代码来源:GroupsModule.cs

示例4: AddInventoryItem

 /// <summary>
 /// Add an inventory item to an avatar's inventory.
 /// </summary>
 /// <param name="remoteClient">The remote client controlling the avatar</param>
 /// <param name="item">The item.  This structure contains all the item metadata, including the folder
 /// in which the item is to be placed.</param>
 public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item)
 {
     AddInventoryItem(item);
     remoteClient.SendInventoryItemCreateUpdate(item, 0);
 }
开发者ID:WordfromtheWise,项目名称:Aurora,代码行数:11,代码来源:Scene.Inventory.cs

示例5: CreateNewInventoryItem

        /// <summary>
        /// Create a new Inventory Item
        /// </summary>
        /// <param name="remoteClient"></param>
        /// <param name="folderID"></param>
        /// <param name="callbackID"></param>
        /// <param name="asset"></param>
        /// <param name="invType"></param>
        /// <param name="nextOwnerMask"></param>
        /// <param name="creationDate"></param>
        private void CreateNewInventoryItem(
            IClientAPI remoteClient, string creatorID, UUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType,
            uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate)
        {
            InventoryItemBase item = new InventoryItemBase();
            item.Owner = remoteClient.AgentId;
            item.CreatorId = creatorID;
            item.ID = UUID.Random();
            item.AssetID = asset.FullID;
            item.Description = asset.Description;
            item.Name = name;
            item.Flags = flags;
            item.AssetType = asset.Type;
            item.InvType = invType;
            item.Folder = folderID;
            item.CurrentPermissions = currentMask;
            item.NextPermissions = nextOwnerMask;
            item.EveryOnePermissions = everyoneMask;
            item.GroupPermissions = groupMask;
            item.BasePermissions = baseMask;
            item.CreationDate = creationDate;

            if (AddInventoryItem(item))
            {
                remoteClient.SendInventoryItemCreateUpdate(item, callbackID);
            }
            else
            {
                IDialogModule module = RequestModuleInterface<IDialogModule>();
                if (module != null)
                    module.SendAlertToUser(remoteClient, "Failed to create item");
                m_log.WarnFormat(
                    "Failed to add item for {0} in CreateNewInventoryItem!",
                     remoteClient.Name);
            }
        }
开发者ID:WordfromtheWise,项目名称:Aurora,代码行数:46,代码来源:Scene.Inventory.cs

示例6: DeleteToInventory


//.........这里部分代码省略.........
                    }
                    else
                    {
                        // Catch all. Use lost & found
                        //

                        folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
                    }
                }

                if (folder == null) // None of the above
                {
                    //folder = userInfo.RootFolder.FindFolder(folderID);
                    folder = new InventoryFolderBase(folderID);

                    if (folder == null) // Nowhere to put it
                    {
                        return UUID.Zero;
                    }
                }

                item = new InventoryItemBase();
                item.CreatorId = objectGroup.RootPart.CreatorID.ToString();
                item.ID = UUID.Random();
                item.InvType = (int)InventoryType.Object;
                item.Folder = folder.ID;
                item.Owner = userID;
            }

            AssetBase asset = CreateAsset(
                objectGroup.GetPartName(objectGroup.RootPart.LocalId),
                objectGroup.GetPartDescription(objectGroup.RootPart.LocalId),
                (sbyte)AssetType.Object,
                Utils.StringToBytes(sceneObjectXml),
                objectGroup.OwnerID.ToString());
            m_Scene.AssetService.Store(asset);
            assetID = asset.FullID;

            if (DeRezAction.SaveToExistingUserInventoryItem == action)
            {
                item.AssetID = asset.FullID;
                m_Scene.InventoryService.UpdateItem(item);
            }
            else
            {
                item.AssetID = asset.FullID;

                if (remoteClient != null && (remoteClient.AgentId != objectGroup.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions())
                {
                    uint perms = objectGroup.GetEffectivePermissions();
                    uint nextPerms = (perms & 7) << 13;
                    if ((nextPerms & (uint)PermissionMask.Copy) == 0)
                        perms &= ~(uint)PermissionMask.Copy;
                    if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
                        perms &= ~(uint)PermissionMask.Transfer;
                    if ((nextPerms & (uint)PermissionMask.Modify) == 0)
                        perms &= ~(uint)PermissionMask.Modify;

                    item.BasePermissions = perms & objectGroup.RootPart.NextOwnerMask;
                    item.CurrentPermissions = item.BasePermissions;
                    item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
                    item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask & objectGroup.RootPart.NextOwnerMask;
                    item.GroupPermissions = objectGroup.RootPart.GroupMask & objectGroup.RootPart.NextOwnerMask;
                    item.CurrentPermissions |= 8; // Slam!
                }
                else
                {
                    item.BasePermissions = objectGroup.GetEffectivePermissions();
                    item.CurrentPermissions = objectGroup.GetEffectivePermissions();
                    item.NextPermissions = objectGroup.RootPart.NextOwnerMask;
                    item.EveryOnePermissions = objectGroup.RootPart.EveryoneMask;
                    item.GroupPermissions = objectGroup.RootPart.GroupMask;

                    item.CurrentPermissions |= 8; // Slam!
                }

                // TODO: add the new fields (Flags, Sale info, etc)
                item.CreationDate = Util.UnixTimeSinceEpoch();
                item.Description = asset.Description;
                item.Name = asset.Name;
                item.AssetType = asset.Type;

                m_Scene.InventoryService.AddItem(item);

                if (remoteClient != null && item.Owner == remoteClient.AgentId)
                {
                    remoteClient.SendInventoryItemCreateUpdate(item, 0);
                }
                else
                {
                    ScenePresence notifyUser = m_Scene.GetScenePresence(item.Owner);
                    if (notifyUser != null)
                    {
                        notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item, 0);
                    }
                }
            }

            return assetID;
        }
开发者ID:gumho,项目名称:diva-distribution,代码行数:101,代码来源:InventoryAccessModule.cs

示例7: UpdateKnownItem

        /// <summary>
        /// Update the attachment asset for the new sog details if they have changed.
        /// </summary>
        /// 
        /// This is essential for preserving attachment attributes such as permission.  Unlike normal scene objects,
        /// these details are not stored on the region.
        /// 
        /// <param name="remoteClient"></param>
        /// <param name="grp"></param>
        /// <param name="itemID"></param>
        /// <param name="agentID"></param>
        protected void UpdateKnownItem (IClientAPI remoteClient, ISceneEntity grp, UUID itemID, UUID agentID)
        {
            if (grp != null)
            {
                if (!grp.HasGroupChanged)
                {
                    //m_log.WarnFormat("[ATTACHMENTS MODULE]: Save request for {0} which is unchanged", grp.UUID);
                    return;
                }

                //let things like state saves and another async things be performed before we serialize the object
                grp.BackupPreparation();

                m_log.InfoFormat(
                    "[ATTACHMENTS MODULE]: Updating asset for attachment {0}, attachpoint {1}",
                    grp.UUID, grp.GetAttachmentPoint());

                string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat((SceneObjectGroup)grp);

                InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);
                item = m_scene.InventoryService.GetItem(item);

                if (item != null)
                {
                    AssetBase asset = new AssetBase(UUID.Random(), grp.Name,
                        AssetType.Object, remoteClient.AgentId);
                    asset.Description = grp.RootChild.Description;
                    asset.Data = Utils.StringToBytes(sceneObjectXml);
                    asset.ID = m_scene.AssetService.Store(asset);

                    if (item.Folder == UUID.Zero)
                    {
                        InventoryFolderBase folder = m_scene.InventoryService.GetFolderForType (remoteClient.AgentId, InventoryType.Unknown, AssetType.Object);
                        if (folder == null)
                            return;//Probably a non user (bot)
                        item.Folder = folder.ID;
                    }

                    item.AssetID = asset.ID;
                    item.Description = asset.Description;
                    item.Name = asset.Name;
                    item.AssetType = asset.Type;
                    item.InvType = (int)InventoryType.Object;

                    m_scene.InventoryService.UpdateItem(item);

                    // this gets called when the agent logs off!
                    if (remoteClient != null)
                        remoteClient.SendInventoryItemCreateUpdate(item, 0);
                }
                else
                {
                    m_log.Warn("[AttachmentModule]: Could not find inventory item for attachment to update!");
                }
            }
        }
开发者ID:Krazy-Bish-Margie,项目名称:Aurora-Sim,代码行数:67,代码来源:AttachmentsModule.cs

示例8: CreateNewInventoryItem

        /// <summary>
        /// Create a new Inventory Item
        /// </summary>
        /// <param name="remoteClient"></param>
        /// <param name="folderID"></param>
        /// <param name="callbackID"></param>
        /// <param name="asset"></param>
        /// <param name="invType"></param>
        /// <param name="nextOwnerMask"></param>
        /// <param name="creationDate"></param>
        private void CreateNewInventoryItem(
            IClientAPI remoteClient, UUID folderID, string name, uint flags, uint callbackID, UUID assetId, AssetType assetType, string description,
            sbyte invType, uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate, string creatorID)
        {
            CachedUserInfo userInfo
                = CommsManager.UserService.GetUserDetails(remoteClient.AgentId);

            if (userInfo != null)
            {
                if(assetType == AssetType.CallingCard && invType == (int)OpenMetaverse.InventoryType.CallingCard)
                {
                    //On 2015-12-15, a problem with calling cards occurred such that all calling cards
                    // would be duplicated by the viewer when logging in, which caused users to not
                    // display themselves and in extreme cases, would block them from doing anything
                    // along with generating 65000 calling cards for one user
                    //To address this issue, we make sure that the viewer cannot add calling cards
                    // that already exist for that user in the "Calling Cards"/Friends/All folder. 
                    // We will ignore the requests.
                    //We will cache the calling card folder in the CachedUserInfo as we don't want to 
                    // call the inventory database repeatedly to get the data.
                    if (userInfo.CheckIfCallingCardAlreadyExistsForUser(folderID, name))
                    {
                        m_log.WarnFormat(
                            "[AGENT INVENTORY]: User requested to generate duplicate calling card for client {0} uuid {1} in CreateNewInventoryItem!",
                                remoteClient.Name, remoteClient.AgentId);
                        return;
                    }
                }

                // Make sure that if this is an outfit link that the old outfit link is gone.
                // However there may be more than one if this is is an old DB, so make sure all are gone.
                if (assetType == AssetType.LinkFolder)
                {
                    // Verify this user actually owns the item, AND that the current operation is in the COF - otherwise there's no reason to clean the COF!
                    InventoryFolderBase currentOutfitFolder = GetCurrentOutfitFolder(userInfo);
                    if (currentOutfitFolder != null && currentOutfitFolder.ID == folderID)
                    {
                        uint count = 0;

                        try
                        {
                            // Get rid of all folder links in the COF: there should only ever be one, and that's the one we are about to create.
                            foreach (InventoryItemBase cofItem in currentOutfitFolder.Items)
                            {
                                if (cofItem.AssetType == (int)AssetType.LinkFolder)
                                {
                                    userInfo.DeleteItem(cofItem);
                                    ++count;
                                }
                            }
                        }
                        catch (InventoryStorageException ise)
                        {
                            m_log.WarnFormat("[AGENT INVENTORY] Had InventoryStorageException while removing out of date folder links from the COF for avatar {0}: {1}", userInfo.UserProfile.ID, ise);
                        }

                        if (count > 1) // Only report if more than one was removed.
                            m_log.InfoFormat("[AGENT INVENTORY] Removed {0} out of date folder links from the COF for avatar {1}.", count, userInfo.UserProfile.ID);

                        userInfo.UpdateFolder(currentOutfitFolder);
                    }
                }

                InventoryItemBase item = new InventoryItemBase();
                item.Owner = remoteClient.AgentId;
                item.CreatorId = creatorID;
                item.ID = UUID.Random();
                item.AssetID = assetId;
                item.Description = description;
                item.Name = name;
                item.Flags = flags;
                item.AssetType = (int)assetType;
                item.InvType = invType;
                item.Folder = folderID;
                item.CurrentPermissions = currentMask;
                item.NextPermissions = nextOwnerMask;
                item.EveryOnePermissions = everyoneMask;
                item.GroupPermissions = groupMask;
                item.BasePermissions = baseMask;
                item.CreationDate = creationDate;

                userInfo.AddItem(item);
                remoteClient.SendInventoryItemCreateUpdate(item, callbackID);

                if (item.AssetType == (int)AssetType.Link && item.InvType == (int)InventoryType.Wearable)
                {
                    //this is a link to a wearable. resolve it and make sure the wearable is not broken
                    InventoryItemBase wearable = userInfo.ResolveLink(item);
                    if (wearable != null)
                    {
//.........这里部分代码省略.........
开发者ID:MatthewBeardmore,项目名称:halcyon,代码行数:101,代码来源:Scene.Inventory.cs

示例9: AddInventoryItem

        /// <summary>
        /// Add an inventory item to an avatar's inventory.
        /// </summary>
        /// <param name="remoteClient">The remote client controlling the avatar</param>
        /// <param name="item">The item.  This structure contains all the item metadata, including the folder
        /// in which the item is to be placed.</param>
        public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item)
        {
            CachedUserInfo userInfo
                = CommsManager.UserService.GetUserDetails(remoteClient.AgentId);

            if (userInfo != null)
            {
                AddInventoryItem(remoteClient.AgentId, item);
                remoteClient.SendInventoryItemCreateUpdate(item, 0);
            }
            else
            {
                m_log.ErrorFormat(
                    "[AGENT INVENTORY]: Could not resolve user {0} for adding an inventory item",
                    remoteClient.AgentId);
            }
        }
开发者ID:MatthewBeardmore,项目名称:halcyon,代码行数:23,代码来源:Scene.Inventory.cs

示例10: attachObjectAssetStore

        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;
        }
开发者ID:ChrisD,项目名称:opensim,代码行数:62,代码来源:Scene.Inventory.cs

示例11: CreateNewInventoryItem

        /// <summary>
        /// Create a new Inventory Item
        /// </summary>
        /// <param name="remoteClient"></param>
        /// <param name="folderID"></param>
        /// <param name="callbackID"></param>
        /// <param name="asset"></param>
        /// <param name="invType"></param>
        /// <param name="nextOwnerMask"></param>
        /// <param name="creationDate"></param>
        private void CreateNewInventoryItem(
            IClientAPI remoteClient, string creatorID, UUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType,
            uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate)
        {
            CachedUserInfo userInfo
                = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);

            if (userInfo != null)
            {
                InventoryItemBase item = new InventoryItemBase();
                item.Owner = remoteClient.AgentId;
                item.CreatorId = creatorID;
                item.ID = UUID.Random();
                item.AssetID = asset.FullID;
                item.Description = asset.Description;
                item.Name = name;
                item.Flags = flags;
                item.AssetType = asset.Type;
                item.InvType = invType;
                item.Folder = folderID;
                item.CurrentPermissions = currentMask;
                item.NextPermissions = nextOwnerMask;
                item.EveryOnePermissions = everyoneMask;
                item.GroupPermissions = groupMask;
                item.BasePermissions = baseMask;
                item.CreationDate = creationDate;

                userInfo.AddItem(item);
                remoteClient.SendInventoryItemCreateUpdate(item, callbackID);
            }
            else
            {
                m_log.WarnFormat(
                    "No user details associated with client {0} uuid {1} in CreateNewInventoryItem!",
                     remoteClient.Name, remoteClient.AgentId);
            }
        }
开发者ID:ChrisD,项目名称:opensim,代码行数:47,代码来源:Scene.Inventory.cs

示例12: updateKnownAsset

        public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, UUID assetID, UUID agentID)
        {
            SceneObjectGroup objectGroup = grp;
            if (objectGroup != null)
            {
                if (!grp.HasGroupChanged)
                {
                    m_log.InfoFormat("[ATTACHMENT]: Save request for {0} which is unchanged", grp.UUID);
                    return;
                }

                m_log.InfoFormat(
                    "[ATTACHMENT]: Updating asset for attachment {0}, attachpoint {1}",
                    grp.UUID, grp.GetAttachmentPoint());

                string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(objectGroup);

                CachedUserInfo userInfo =
                    CommsManager.UserProfileCacheService.GetUserDetails(agentID);
                if (userInfo != null && userInfo.RootFolder != null)
                {
                    Queue<InventoryFolderImpl> searchfolders = new Queue<InventoryFolderImpl>();
                    searchfolders.Enqueue(userInfo.RootFolder);

                    UUID foundFolder = UUID.Zero;
                    InventoryItemBase item = null;

                    // search through folders to find the asset.
                    while (searchfolders.Count > 0)
                    {
                        InventoryFolderImpl fld = searchfolders.Dequeue();
                        lock (fld)
                        {
                            if (fld != null)
                            {
                                if (fld.Items.ContainsKey(assetID))
                                {
                                    item = fld.Items[assetID];
                                    foundFolder = fld.ID;
                                    searchfolders.Clear();
                                    break;
                                }
                                else
                                {
                                    foreach (InventoryFolderImpl subfld in fld.RequestListOfFolderImpls())
                                    {
                                        searchfolders.Enqueue(subfld);
                                    }
                                }
                            }
                        }
                    }

                    if (foundFolder != UUID.Zero && item != null)
                    {
                        AssetBase asset = CreateAsset(
                            objectGroup.GetPartName(objectGroup.LocalId),
                            objectGroup.GetPartDescription(objectGroup.LocalId),
                            (sbyte)AssetType.Object,
                            Utils.StringToBytes(sceneObjectXml));
                        AssetService.Store(asset);

                        item.AssetID = asset.FullID;
                        item.Description = asset.Description;
                        item.Name = asset.Name;
                        item.AssetType = asset.Type;
                        item.InvType = (int)InventoryType.Object;
                        item.Folder = foundFolder;

                        userInfo.UpdateItem(item);

                        // this gets called when the agent loggs off!
                        if (remoteClient != null)
                        {
                            remoteClient.SendInventoryItemCreateUpdate(item, 0);
                        }
                    }
                }
            }
        }
开发者ID:ChrisD,项目名称:opensim,代码行数:80,代码来源:Scene.Inventory.cs

示例13: CopyBundleToInventory


//.........这里部分代码省略.........
                            (((objectGroup.AbsolutePosition.X > (int)Constants.RegionSize)
                                  ? 250
                                  : objectGroup.AbsolutePosition.X)
                             ,
                             (objectGroup.AbsolutePosition.Y > (int)Constants.RegionSize)
                                 ? 250
                                 : objectGroup.AbsolutePosition.Y,
                             objectGroup.AbsolutePosition.Z);

                originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition;

                objectGroup.AbsolutePosition = inventoryStoredPosition;

                // Make sure all bits but the ones we want are clear
                // on take.
                // This will be applied to the current perms, so
                // it will do what we want.
                objectGroup.RootPart.NextOwnerMask &=
                        ((uint)PermissionMask.Copy |
                         (uint)PermissionMask.Transfer |
                         (uint)PermissionMask.Modify);
                objectGroup.RootPart.NextOwnerMask |=
                        (uint)PermissionMask.Move;
                
                coa.Add(objectGroup);
            }

            string itemXml;

            if (objlist.Count > 1)
                itemXml = CoalescedSceneObjectsSerializer.ToXml(coa);
            else
                itemXml = SceneObjectSerializer.ToOriginalXmlFormat(objlist[0]);
            
            // Restore the position of each group now that it has been stored to inventory.
            foreach (SceneObjectGroup objectGroup in objlist)
                objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID];

            InventoryItemBase item = CreateItemForObject(action, remoteClient, objlist[0], folderID);
            if (item == null)
                return UUID.Zero;
                            
            // Can't know creator is the same, so null it in inventory
            if (objlist.Count > 1)
            {
                item.CreatorId = UUID.Zero.ToString();
                item.Flags = (uint)InventoryItemFlags.ObjectHasMultipleItems;
            }
            else
            {
                item.CreatorId = objlist[0].RootPart.CreatorID.ToString();                
                item.SaleType = objlist[0].RootPart.ObjectSaleType;
                item.SalePrice = objlist[0].RootPart.SalePrice;                    
            }              

            AssetBase asset = CreateAsset(
                objlist[0].GetPartName(objlist[0].RootPart.LocalId),
                objlist[0].GetPartDescription(objlist[0].RootPart.LocalId),
                (sbyte)AssetType.Object,
                Utils.StringToBytes(itemXml),
                objlist[0].OwnerID.ToString());
            m_Scene.AssetService.Store(asset);
            
            item.AssetID = asset.FullID;  
            assetID = asset.FullID;                              

            if (DeRezAction.SaveToExistingUserInventoryItem == action)
            {
                m_Scene.InventoryService.UpdateItem(item);
            }
            else
            {
                AddPermissions(item, objlist[0], objlist, remoteClient);

                item.CreationDate = Util.UnixTimeSinceEpoch();
                item.Description = asset.Description;
                item.Name = asset.Name;
                item.AssetType = asset.Type;

                m_Scene.AddInventoryItem(item);

                if (remoteClient != null && item.Owner == remoteClient.AgentId)
                {
                    remoteClient.SendInventoryItemCreateUpdate(item, 0);
                }
                else
                {
                    ScenePresence notifyUser = m_Scene.GetScenePresence(item.Owner);
                    if (notifyUser != null)
                    {
                        notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item, 0);
                    }
                }
            }

            // This is a hook to do some per-asset post-processing for subclasses that need that
            ExportAsset(remoteClient.AgentId, assetID);
            
            return assetID;
        }
开发者ID:allquixotic,项目名称:opensim-autobackup,代码行数:101,代码来源:InventoryAccessModule.cs

示例14: MoveInventoryItemsLeaveCopy

 /// <summary>
 /// Move an item within the agent's inventory, and leave a copy (used in making a new outfit)
 /// </summary>
 public void MoveInventoryItemsLeaveCopy(IClientAPI remoteClient, List<InventoryItemBase> items, UUID destfolder)
 {
     List<InventoryItemBase> moveitems = new List<InventoryItemBase>();
     foreach (InventoryItemBase b in items)
     {
         CopyInventoryItem(remoteClient, 0, remoteClient.AgentId, b.ID, b.Folder, null);
         InventoryItemBase n = InventoryService.GetItem(b);
         n.Folder = destfolder;
         moveitems.Add(n);
         remoteClient.SendInventoryItemCreateUpdate(n, 0);
     }
     
     MoveInventoryItem(remoteClient, moveitems);
 }
开发者ID:CassieEllen,项目名称:opensim,代码行数:17,代码来源:Scene.Inventory.cs

示例15: OnInstantMessage


//.........这里部分代码省略.........
                    if (m_debugEnabled)
                    {
                        foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetRequestingAgentID(remoteClient), GroupID))
                        {
                            if (m_debugEnabled)
                            {
                                UserAccount targetUser
                                    = m_sceneList[0].UserAccountService.GetUserAccount(
                                        remoteClient.Scene.RegionInfo.ScopeID, member.AgentID);

                                if (targetUser != null)
                                {
                                    m_log.DebugFormat(
                                        "[GROUPS]: Prepping group notice {0} for agent: {1} who Accepts Notices ({2})", 
                                        NoticeID, targetUser.FirstName + " " + targetUser.LastName, member.AcceptNotices);
                                }
                                else
                                {
                                    m_log.DebugFormat(
                                        "[GROUPS]: Prepping group notice {0} for agent: {1} who Accepts Notices ({2})", 
                                        NoticeID, member.AgentID, member.AcceptNotices);
                                }
                            }
                        }
                    }

                    GridInstantMessage msg 
                        = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice);

                    if (m_groupsMessagingModule != null)
                        m_groupsMessagingModule.SendMessageToGroup(
                            msg, GroupID, remoteClient.AgentId, gmd => gmd.AcceptNotices);
                }
            }

            if (im.dialog == (byte)InstantMessageDialog.GroupNoticeInventoryAccepted)
            {
                //Is bucket large enough to hold UUID of the attachment?
                if (im.binaryBucket.Length < 16)
                    return;

                UUID noticeID = new UUID(im.imSessionID);

                if (m_debugEnabled) 
                    m_log.DebugFormat("[GROUPS]: Requesting notice {0} for {1}", noticeID, remoteClient.AgentId);

                GroupNoticeInfo notice = m_groupData.GetGroupNotice(GetRequestingAgentID(remoteClient), noticeID);
                if (notice != null)
                {
                    UUID giver = new UUID(notice.BinaryBucket, 18);
                    UUID attachmentUUID = new UUID(notice.BinaryBucket, 34);

                    if (m_debugEnabled)
                        m_log.DebugFormat("[Groups]: Giving inventory from {0} to {1}", giver, remoteClient.AgentId);

                    string message;
                    InventoryItemBase itemCopy = ((Scene)(remoteClient.Scene)).GiveInventoryItem(remoteClient.AgentId,
                        giver, attachmentUUID, out message);

                    if (itemCopy == null)
                    {
                        remoteClient.SendAgentAlertMessage(message, false);
                        return;
                    }

                    remoteClient.SendInventoryItemCreateUpdate(itemCopy, 0);
                }
                else
                {
                    if (m_debugEnabled) 
                        m_log.DebugFormat(
                            "[GROUPS]: Could not find notice {0} for {1} on GroupNoticeInventoryAccepted.", 
                            noticeID, remoteClient.AgentId);                   
                }
            }

            // Interop, received special 210 code for ejecting a group member
            // this only works within the comms servers domain, and won't work hypergrid
            // TODO:FIXME: Use a presence server of some kind to find out where the
            // client actually is, and try contacting that region directly to notify them,
            // or provide the notification via xmlrpc update queue
            if ((im.dialog == 210))
            {
                // This is sent from the region that the ejectee was ejected from
                // if it's being delivered here, then the ejectee is here
                // so we need to send local updates to the agent.

                UUID ejecteeID = new UUID(im.toAgentID);

                im.dialog = (byte)InstantMessageDialog.MessageFromAgent;
                OutgoingInstantMessage(im, ejecteeID);

                IClientAPI ejectee = GetActiveClient(ejecteeID);
                if (ejectee != null)
                {
                    UUID groupID = new UUID(im.imSessionID);
                    ejectee.SendAgentDropGroup(groupID);
                }
            }
        }
开发者ID:CassieEllen,项目名称:opensim,代码行数:101,代码来源:GroupsModule.cs


注:本文中的IClientAPI.SendInventoryItemCreateUpdate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。