コード例 #1
0
        /// <summary>
        /// Capability originating call to update the asset of an item in an agent's inventory
        /// </summary>
        /// <param name="remoteClient"></param>
        /// <param name="itemID"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public virtual string CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data)
        {
            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);

            item = m_scene.InventoryService.GetItem(item);

            if (item != null)
            {
                if ((InventoryType)item.InvType == InventoryType.Notecard)
                {
                    if (!m_scene.Permissions.CanEditNotecard(itemID, UUID.Zero, remoteClient.AgentId))
                    {
                        remoteClient.SendAlertMessage("Insufficient permissions to edit notecard");
                        return(FailedPermissionsNotecardCAPSUpdate(UUID.Zero, itemID));
                    }

                    AssetBase asset =
                        CreateAsset(item.Name, item.Description, (sbyte)item.AssetType, data, remoteClient.AgentId.ToString());
                    item.AssetID = asset.FullID;
                    m_scene.AssetService.Store(asset);

                    m_scene.InventoryService.UpdateItem(item);

                    return(SuccessNotecardCAPSUpdate(item.AssetID, itemID));
                }
                else if ((InventoryType)item.InvType == InventoryType.LSL)
                {
                    if (!m_scene.Permissions.CanEditScript(itemID, UUID.Zero, remoteClient.AgentId))
                    {
                        return(FailedPermissionsScriptCAPSUpdate(UUID.Zero, itemID));
                    }

                    IScriptModule ScriptEngine = m_scene.RequestModuleInterface <IScriptModule>();

                    AssetBase asset =
                        CreateAsset(item.Name, item.Description, (sbyte)item.AssetType, data, remoteClient.AgentId.ToString());
                    item.AssetID = asset.FullID;
                    m_scene.AssetService.Store(asset);

                    m_scene.InventoryService.UpdateItem(item);

                    if (ScriptEngine != null)
                    {
                        string Errors = ScriptEngine.TestCompileScript(asset.FullID, itemID);
                        if (Errors != "")
                        {
                            return(FailedCompileScriptCAPSUpdate(item.AssetID, itemID, Errors));
                        }
                    }

                    return(SuccessScriptCAPSUpdate(item.AssetID, itemID));
                }
                return("");
            }
            else
            {
                m_log.ErrorFormat(
                    "[AGENT INVENTORY]: Could not find item {0} for caps inventory update",
                    itemID);
            }

            return("");
        }
コード例 #2
0
        /// <summary>
        /// Capability originating call to update the asset of an item in an agent's inventory
        /// </summary>
        /// <param name="remoteClient"></param>
        /// <param name="itemID"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public virtual string CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data)
        {
            InventoryItemBase item = new InventoryItemBase(itemID, remoteClient.AgentId);

            item = m_scene.InventoryService.GetItem(item);

            if (item != null)
            {
                if ((InventoryType)item.InvType == InventoryType.Notecard)
                {
                    if (!m_scene.Permissions.CanEditNotecard(itemID, UUID.Zero, remoteClient.AgentId))
                    {
                        remoteClient.SendAlertMessage("Insufficient permissions to edit notecard");
                        return(FailedPermissionsNotecardCAPSUpdate(UUID.Zero, itemID));
                    }

                    UUID newID;
                    if ((m_scene.AssetService.UpdateContent(item.AssetID, data, out newID)) && (newID != UUID.Zero))
                    {
                        item.AssetID = newID;
                    }
                    else
                    {
                        remoteClient.SendAlertMessage("Failed to update notecard asset");
                    }

                    m_scene.InventoryService.UpdateItem(item);

                    return(SuccessNotecardCAPSUpdate(item.AssetID, itemID));
                }
                if ((InventoryType)item.InvType == InventoryType.LSL)
                {
                    if (!m_scene.Permissions.CanEditScript(itemID, UUID.Zero, remoteClient.AgentId))
                    {
                        return(FailedPermissionsScriptCAPSUpdate(UUID.Zero, itemID));
                    }

                    UUID newID;
                    if ((m_scene.AssetService.UpdateContent(item.AssetID, data, out newID)) && (newID != UUID.Zero))
                    {
                        item.AssetID = newID;
                    }
                    else
                    {
                        remoteClient.SendAlertMessage("Failed to update script asset");
                    }

                    m_scene.InventoryService.UpdateItem(item);

                    IScriptModule ScriptEngine = m_scene.RequestModuleInterface <IScriptModule>();
                    if (ScriptEngine != null)
                    {
                        string Errors = ScriptEngine.TestCompileScript(item.AssetID, itemID);
                        if (Errors != "")
                        {
                            return(FailedCompileScriptCAPSUpdate(item.AssetID, itemID, Errors));
                        }
                    }

                    return(SuccessScriptCAPSUpdate(item.AssetID, itemID));
                }
                return("");
            }
            MainConsole.Instance.ErrorFormat(
                "[AGENT INVENTORY]: Could not find item {0} for caps inventory update",
                itemID);

            return("");
        }