From 06036676273d1d5cc4b503980f49a1c640dd5876 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 19 Aug 2022 22:26:00 +0100 Subject: [PATCH] use shared assets for new empty notecard and defualt script. Grids not using core asset services may need the 2 new ones --- .../Handlers/GetAssets/GetAssetsHandler.cs | 6 +- .../Filesystem/AssetLoaderFileSystem.cs | 9 +- OpenSim/Framework/Constants.cs | 11 +- OpenSim/Framework/SLUtil.cs | 5 +- OpenSim/Framework/TaskInventoryItem.cs | 2 +- .../Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 4 + .../Caps/BunchOfCaps/UpdateItemAsset.cs | 5 + .../ClientStack/Linden/UDP/LLClientView.cs | 124 +++++++------- .../CoreModules/Asset/FlotsamAssetCache.cs | 1 - .../InventoryAccess/InventoryAccessModule.cs | 84 +++++---- .../Framework/Scenes/Scene.Inventory.cs | 159 ++++++++++-------- .../Region/Framework/Scenes/UuidGatherer.cs | 66 +++++--- bin/assets/AssetSets.xml | 39 +---- .../NotecardsAssetSet/EmptyNotecard.txt | 8 + .../NotecardsAssetSet/NotecardsAssetSet.xml | 16 +- bin/assets/NotecardsAssetSet/exampleNote.txt | 1 - bin/assets/NotecardsAssetSet/welcomeNote.txt | 4 - bin/assets/ScriptsAssetSet/DefaultSay.lsl | 2 +- 18 files changed, 298 insertions(+), 248 deletions(-) create mode 100644 bin/assets/NotecardsAssetSet/EmptyNotecard.txt delete mode 100644 bin/assets/NotecardsAssetSet/exampleNote.txt delete mode 100644 bin/assets/NotecardsAssetSet/welcomeNote.txt diff --git a/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs b/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs index 4ec02d21a0..b36068d8e3 100644 --- a/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs +++ b/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs @@ -68,7 +68,8 @@ namespace OpenSim.Capabilities.Handlers {"animatn_id", AssetType.Animation}, {"gesture_id", AssetType.Gesture}, {"mesh_id", AssetType.Mesh}, - {"settings_id", AssetType.Settings} + {"settings_id", AssetType.Settings}, + {"material_id", AssetType.Material} }; private IAssetService m_assetService; @@ -118,8 +119,7 @@ namespace OpenSim.Capabilities.Handlers if (string.IsNullOrEmpty(assetStr)) return; - UUID assetID = UUID.Zero; - if(!UUID.TryParse(assetStr, out assetID)) + if(!UUID.TryParse(assetStr, out UUID assetID)) return; ManualResetEventSlim done = new ManualResetEventSlim(false); diff --git a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs index edbc80177a..317ca8866b 100644 --- a/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs +++ b/OpenSim/Framework/AssetLoader/Filesystem/AssetLoaderFileSystem.cs @@ -58,6 +58,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem } else { + asset.Data = Array.Empty(); m_log.InfoFormat("[ASSETS]: Instantiated: [{0}]", name); } @@ -145,9 +146,13 @@ namespace OpenSim.Framework.AssetLoader.Filesystem string assetIdStr = source.Configs[i].GetString("assetID", UUID.Random().ToString()); string name = source.Configs[i].GetString("name", String.Empty); sbyte type = (sbyte)source.Configs[i].GetInt("assetType", 0); - string assetPath = Path.Combine(dir, source.Configs[i].GetString("fileName", String.Empty)); - AssetBase newAsset = CreateAsset(assetIdStr, name, assetPath, type); + string assetPath = source.Configs[i].GetString("fileName", String.Empty); + AssetBase newAsset; + if (string.IsNullOrEmpty(assetPath)) + newAsset = CreateAsset(assetIdStr, name, null, type); + else + newAsset = CreateAsset(assetIdStr, name, Path.Combine(dir, assetPath), type); newAsset.Type = type; assets.Add(newAsset); diff --git a/OpenSim/Framework/Constants.cs b/OpenSim/Framework/Constants.cs index 70c462d500..6f19cbf82c 100644 --- a/OpenSim/Framework/Constants.cs +++ b/OpenSim/Framework/Constants.cs @@ -56,7 +56,16 @@ namespace OpenSim.Framework public const float MinWaterHeight = 0; public const float MaxWaterHeight = 8000f; - public const string DefaultTexture = "89556747-24cb-43ed-920b-47caed15465f"; + public static readonly string DefaultTexture = "89556747-24cb-43ed-920b-47caed15465f"; //plywood + public static readonly UUID DefaultTextureID = new UUID(DefaultTexture); + + public static readonly string DefaultScript = "c5f02401-f08b-4519-952c-fdab017c10b7"; // simple llsay + public static readonly UUID DefaultScriptID = new UUID(DefaultScript); + public static readonly byte[] DefaultScriptData = osUTF8.GetASCIIBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}"); + + public static readonly string EmptyNotecard = "4b6a777d-7bcd-4fc4-b06f-929b21e32925"; + public static readonly UUID EmptyNotecardID = new UUID(EmptyNotecard); + public static readonly byte[] EmptyNotecardData = osUTF8.GetASCIIBytes("Linden text version 2\n{\nLLEmbeddedItems version 1\n{\ncount 0\n}\nText length 0\n}\n\0"); public static readonly string m_MrOpenSimIDString = "11111111-1111-0000-0000-000100bba000"; public static readonly UUID m_MrOpenSimID = new UUID(m_MrOpenSimIDString); diff --git a/OpenSim/Framework/SLUtil.cs b/OpenSim/Framework/SLUtil.cs index 3bbb34f465..fd539a3e42 100644 --- a/OpenSim/Framework/SLUtil.cs +++ b/OpenSim/Framework/SLUtil.cs @@ -164,6 +164,7 @@ namespace OpenSim.Framework new TypeMapping(AssetType.Link, InventoryType.Unknown, "application/vnd.ll.link", "link"), new TypeMapping(AssetType.LinkFolder, InventoryType.Unknown, "application/vnd.ll.linkfolder", "linkfolder"), new TypeMapping(AssetType.Mesh, InventoryType.Mesh, "application/vnd.ll.mesh", "llm"), + new TypeMapping(AssetType.Material, InventoryType.Material, "application/llsd+xml", "glftmat"), // The next few items are about inventory folders new TypeMapping(AssetType.Folder, FolderType.None, "application/vnd.ll.folder", "folder"), @@ -212,7 +213,8 @@ namespace OpenSim.Framework {"gesture", AssetType.Gesture}, {"simstate", AssetType.Simstate}, {"mesh", AssetType.Mesh}, - {"settings", AssetType.Settings} + {"settings", AssetType.Settings}, + {"material", AssetType.Material} }; private static Dictionary name2Inventory = new Dictionary() { @@ -238,6 +240,7 @@ namespace OpenSim.Framework {"myoutfits", FolderType.MyOutfits}, {"mesh", FolderType.Mesh}, {"settings", FolderType.Settings}, + {"material", FolderType.Material}, {"suitcase", FolderType.Suitcase} }; diff --git a/OpenSim/Framework/TaskInventoryItem.cs b/OpenSim/Framework/TaskInventoryItem.cs index 039326ee6d..217b8b2849 100644 --- a/OpenSim/Framework/TaskInventoryItem.cs +++ b/OpenSim/Framework/TaskInventoryItem.cs @@ -37,7 +37,7 @@ namespace OpenSim.Framework /// public class TaskInventoryItem : ICloneable { -// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); /// /// XXX This should really be factored out into some constants class. diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index effd91239a..05a2171597 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs @@ -332,6 +332,10 @@ namespace OpenSim.Region.ClientStack.Linden m_HostCapsObj.RegisterSimpleHandler("UpdateSettingsAgentInventory", oreq, true); m_HostCapsObj.RegisterSimpleHandler("UpdateSettingsTaskInventory", oreq, false); // a object inv + oreq = new SimpleOSDMapHandler("POST", GetNewCapPath(), UpdateMaterialItemAsset); + m_HostCapsObj.RegisterSimpleHandler("UpdateMaterialAgentInventory", oreq, true); + m_HostCapsObj.RegisterSimpleHandler("UpdateMaterialTaskInventory", oreq, false); // a object inv + oreq = new SimpleOSDMapHandler("POST", GetNewCapPath(), UpdateGestureItemAsset); m_HostCapsObj.RegisterSimpleHandler("UpdateGestureAgentInventory", oreq, true); m_HostCapsObj.RegisterSimpleHandler("UpdateGestureTaskInventory", oreq, false); diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/UpdateItemAsset.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/UpdateItemAsset.cs index 0a312a2e20..9a2ab410c3 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/UpdateItemAsset.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/UpdateItemAsset.cs @@ -42,6 +42,11 @@ namespace OpenSim.Region.ClientStack.Linden UpdateInventoryItemAsset(httpRequest, httpResponse, map, (byte)AssetType.Settings); } + public void UpdateMaterialItemAsset(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, OSDMap map) + { + UpdateInventoryItemAsset(httpRequest, httpResponse, map, (byte)AssetType.Material); + } + public void UpdateGestureItemAsset(IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, OSDMap map) { UpdateInventoryItemAsset(httpRequest, httpResponse, map, (byte)AssetType.Gesture); diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 5d2e4f4508..6d868b2d02 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -10324,29 +10324,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (updatetask.AgentData.SessionID.NotEqual(m_sessionId) || updatetask.AgentData.AgentID.NotEqual(m_agentId)) return; - TaskInventoryItem newTaskItem = new TaskInventoryItem(); - newTaskItem.ItemID = updatetask.InventoryData.ItemID; - newTaskItem.ParentID = updatetask.InventoryData.FolderID; - newTaskItem.CreatorID = updatetask.InventoryData.CreatorID; - newTaskItem.OwnerID = updatetask.InventoryData.OwnerID; - newTaskItem.GroupID = updatetask.InventoryData.GroupID; - newTaskItem.BasePermissions = updatetask.InventoryData.BaseMask; - newTaskItem.CurrentPermissions = updatetask.InventoryData.OwnerMask; - newTaskItem.GroupPermissions = updatetask.InventoryData.GroupMask; - newTaskItem.EveryonePermissions = updatetask.InventoryData.EveryoneMask; - newTaskItem.NextPermissions = updatetask.InventoryData.NextOwnerMask; + TaskInventoryItem newTaskItem = new TaskInventoryItem + { + ItemID = updatetask.InventoryData.ItemID, + ParentID = updatetask.InventoryData.FolderID, + CreatorID = updatetask.InventoryData.CreatorID, + OwnerID = updatetask.InventoryData.OwnerID, + GroupID = updatetask.InventoryData.GroupID, + BasePermissions = updatetask.InventoryData.BaseMask, + CurrentPermissions = updatetask.InventoryData.OwnerMask, + GroupPermissions = updatetask.InventoryData.GroupMask, + EveryonePermissions = updatetask.InventoryData.EveryoneMask, + NextPermissions = updatetask.InventoryData.NextOwnerMask, - // Unused? Clicking share with group sets GroupPermissions instead, so perhaps this is something - // different - //newTaskItem.GroupOwned=updatetask.InventoryData.GroupOwned; - newTaskItem.Type = updatetask.InventoryData.Type; - newTaskItem.InvType = updatetask.InventoryData.InvType; - newTaskItem.Flags = updatetask.InventoryData.Flags; - //newTaskItem.SaleType=updatetask.InventoryData.SaleType; - //newTaskItem.SalePrice=updatetask.InventoryData.SalePrice; - newTaskItem.Name = Util.FieldToString(updatetask.InventoryData.Name); - newTaskItem.Description = Util.FieldToString(updatetask.InventoryData.Description); - newTaskItem.CreationDate = (uint)updatetask.InventoryData.CreationDate; + // Unused? Clicking share with group sets GroupPermissions instead, so perhaps this is something + // different + //newTaskItem.GroupOwned=updatetask.InventoryData.GroupOwned, + Type = updatetask.InventoryData.Type, + InvType = updatetask.InventoryData.InvType, + Flags = updatetask.InventoryData.Flags, + //newTaskItem.SaleType=updatetask.InventoryData.SaleType, + //newTaskItem.SalePrice=updatetask.InventoryData.SalePrice, + Name = Util.FieldToString(updatetask.InventoryData.Name), + Description = Util.FieldToString(updatetask.InventoryData.Description), + CreationDate = (uint)updatetask.InventoryData.CreationDate + }; OnUpdateTaskInventory?.Invoke(this, updatetask.InventoryData.TransactionID, newTaskItem, updatetask.UpdateData.LocalID); @@ -10383,26 +10385,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (rezScriptx.AgentData.SessionID.NotEqual(m_sessionId) || rezScriptx.AgentData.AgentID.NotEqual(m_agentId)) return; - InventoryItemBase item = new InventoryItemBase(); - item.ID = rezScriptx.InventoryBlock.ItemID; - item.Folder = rezScriptx.InventoryBlock.FolderID; - item.CreatorId = rezScriptx.InventoryBlock.CreatorID.ToString(); - item.Owner = rezScriptx.InventoryBlock.OwnerID; - item.BasePermissions = rezScriptx.InventoryBlock.BaseMask; - item.CurrentPermissions = rezScriptx.InventoryBlock.OwnerMask; - item.EveryOnePermissions = rezScriptx.InventoryBlock.EveryoneMask; - item.NextPermissions = rezScriptx.InventoryBlock.NextOwnerMask; - item.GroupPermissions = rezScriptx.InventoryBlock.GroupMask; - item.GroupOwned = rezScriptx.InventoryBlock.GroupOwned; - item.GroupID = rezScriptx.InventoryBlock.GroupID; - item.AssetType = rezScriptx.InventoryBlock.Type; - item.InvType = rezScriptx.InventoryBlock.InvType; - item.Flags = rezScriptx.InventoryBlock.Flags; - item.SaleType = rezScriptx.InventoryBlock.SaleType; - item.SalePrice = rezScriptx.InventoryBlock.SalePrice; - item.Name = Util.FieldToString(rezScriptx.InventoryBlock.Name); - item.Description = Util.FieldToString(rezScriptx.InventoryBlock.Description); - item.CreationDate = rezScriptx.InventoryBlock.CreationDate; + InventoryItemBase item = new InventoryItemBase + { + ID = rezScriptx.InventoryBlock.ItemID, + Folder = rezScriptx.InventoryBlock.FolderID, + CreatorId = rezScriptx.InventoryBlock.CreatorID.ToString(), + Owner = rezScriptx.InventoryBlock.OwnerID, + BasePermissions = rezScriptx.InventoryBlock.BaseMask, + CurrentPermissions = rezScriptx.InventoryBlock.OwnerMask, + EveryOnePermissions = rezScriptx.InventoryBlock.EveryoneMask, + NextPermissions = rezScriptx.InventoryBlock.NextOwnerMask, + GroupPermissions = rezScriptx.InventoryBlock.GroupMask, + GroupOwned = rezScriptx.InventoryBlock.GroupOwned, + GroupID = rezScriptx.InventoryBlock.GroupID, + AssetType = rezScriptx.InventoryBlock.Type, + InvType = rezScriptx.InventoryBlock.InvType, + Flags = rezScriptx.InventoryBlock.Flags, + SaleType = rezScriptx.InventoryBlock.SaleType, + SalePrice = rezScriptx.InventoryBlock.SalePrice, + Name = Util.FieldToString(rezScriptx.InventoryBlock.Name), + Description = Util.FieldToString(rezScriptx.InventoryBlock.Description), + CreationDate = rezScriptx.InventoryBlock.CreationDate + }; OnRezScript?.Invoke(this, item, rezScriptx.InventoryBlock.TransactionID, rezScriptx.UpdateBlock.ObjectLocalID); } @@ -13307,26 +13311,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// protected void MakeAssetRequest(TransferRequestPacket transferRequest, UUID taskID) { - UUID requestID = UUID.Zero; + UUID requestID; int sourceType = transferRequest.TransferInfo.SourceType; - - if (sourceType == (int)SourceType.Asset) + switch(sourceType) { - requestID = new UUID(transferRequest.TransferInfo.Params, 0); + case (int)SourceType.Asset: + requestID = new UUID(transferRequest.TransferInfo.Params, 0); + break; + case (int)SourceType.SimInventoryItem: + requestID = new UUID(transferRequest.TransferInfo.Params, 80); + break; + case (int)SourceType.SimEstate: + requestID = taskID; + break; + default: + requestID = UUID.Zero; + break; } - else if (sourceType == (int)SourceType.SimInventoryItem) - { - requestID = new UUID(transferRequest.TransferInfo.Params, 80); - } - else if (sourceType == (int)SourceType.SimEstate) - { - requestID = taskID; - } - -// m_log.DebugFormat( -// "[LLCLIENTVIEW]: Received transfer request for {0} in {1} type {2} by {3}", -// requestID, taskID, (SourceType)sourceType, Name); - + //m_log.DebugFormat( + // "[LLCLIENTVIEW]: Received transfer request for {0} in {1} type {2} by {3}", + // requestID, taskID, (SourceType)sourceType, Name); //Note, the bool returned from the below function is useless since it is always false. m_assetService.Get(requestID.ToString(), transferRequest, AssetReceived); @@ -13390,7 +13394,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP } // Scripts cannot be retrieved by direct request - if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset && asset.Type == 10) + if (transferRequest.TransferInfo.SourceType == (int)SourceType.Asset && asset.Type == (sbyte)AssetType.LSLText) return; // The asset is known to exist and is in our cache, so add it to the AssetRequests list diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 8c01563848..68f02f3167 100755 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -1656,7 +1656,6 @@ namespace OpenSim.Region.CoreModules.Asset public void Get(string id, string ForeignAssetService, bool StoreOnLocalGrid, SimpleAssetRetrieved callBack) { - return; } public bool[] AssetsExist(string[] ids) diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 561bea48ff..4ffeac5da0 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs @@ -27,15 +27,10 @@ using System; using System.Collections.Generic; -using System.Net; -using System.Xml; +using System.Globalization; using System.Reflection; -using System.Text; -using System.Threading; using OpenSim.Framework; -using OpenSim.Framework.Capabilities; -using OpenSim.Framework.Client; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes.Serialization; @@ -161,7 +156,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess #endregion - private readonly byte[] DEFAULTSCRIPT = osUTF8.GetASCIIBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}"); + //private readonly byte[] DEFAULTSCRIPT = osUTF8.GetASCIIBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}"); #region Inventory Access /// @@ -213,8 +208,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess } } - ScenePresence presence; - if (m_Scene.TryGetScenePresence(remoteClient.AgentId, out presence)) + if (m_Scene.TryGetScenePresence(remoteClient.AgentId, out ScenePresence presence)) { byte[] data = null; uint everyonemask = 0; @@ -223,19 +217,18 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess if (invType == (sbyte)InventoryType.Landmark && presence != null) { - string suffix = string.Empty, prefix = string.Empty; - string strdata = GenerateLandmark(presence, out prefix, out suffix); - data = Encoding.ASCII.GetBytes(strdata); + string strdata = GenerateLandmark(presence, out string prefix, out string suffix); + data = osUTF8.GetASCIIBytes(strdata); name = prefix + name; description += suffix; groupmask = (uint)PermissionMask.AllAndExport; everyonemask = (uint)(PermissionMask.AllAndExport & ~PermissionMask.Modify); } - if(assetType == (sbyte)AssetType.Settings) + switch(assetType) { - flags = subType; - if (data == null) + case (sbyte)AssetType.Settings: { + flags = subType; IEnvironmentModule envModule = m_Scene.RequestModuleInterface(); if(envModule == null) return; @@ -254,25 +247,43 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess creationDate, false); // Data from viewer return; } + case (sbyte)AssetType.LSLText: + { + m_Scene.CreateNewInventoryItem( + remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, + name, description, flags, callbackID, Constants.DefaultScriptID, (sbyte)AssetType.LSLText, invType, + (uint)PermissionMask.AllAndExport, (uint)PermissionMask.AllAndExport, + everyonemask, nextOwnerMask, groupmask, + creationDate, false); // Data from viewer + return; + } + case (sbyte)AssetType.Notecard: + { + m_Scene.CreateNewInventoryItem( + remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, + name, description, flags, callbackID, Constants.EmptyNotecardID, (sbyte)AssetType.Notecard, invType, + (uint)PermissionMask.AllAndExport, (uint)PermissionMask.AllAndExport, + everyonemask, nextOwnerMask, groupmask, + creationDate, false); // Data from viewer + return; + } + + case (sbyte)AssetType.Clothing: + case (sbyte)AssetType.Bodypart: + flags = subType; + break; + default: + break; } - else if( assetType == (byte)AssetType.LSLText) - { - if(data == null) - data = DEFAULTSCRIPT; - } - else if( assetType == (byte)AssetType.Clothing || - assetType == (byte)AssetType.Bodypart) - flags = subType; AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); m_Scene.AssetService.Store(asset); m_Scene.CreateNewInventoryItem( - remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, - name, description, flags, callbackID, asset.FullID, asset.Type, invType, - (uint)PermissionMask.AllAndExport, // Base - (uint)PermissionMask.AllAndExport, // Current - everyonemask, - nextOwnerMask, groupmask, creationDate, false); // Data from viewer + remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, + name, description, flags, callbackID, asset.FullID, asset.Type, invType, + (uint)PermissionMask.AllAndExport, (uint)PermissionMask.AllAndExport, + everyonemask, nextOwnerMask, groupmask, + creationDate, false); // Data from viewer } else { @@ -287,7 +298,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess prefix = string.Empty; suffix = string.Empty; Vector3 pos = presence.AbsolutePosition; - return String.Format(Culture.FormatProvider, "Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", + return String.Format(CultureInfo.InvariantCulture.NumberFormat, "Landmark version 2\nregion_id {0}\nlocal_pos {1} {2} {3}\nregion_handle {4}\n", presence.Scene.RegionInfo.RegionID, pos.X, pos.Y, pos.Z, presence.RegionHandle); @@ -370,7 +381,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess } case InventoryType.Settings: { - if((item.CurrentPermissions & (uint)PermissionMask.Modify) == 0) + if ((item.CurrentPermissions & (uint)PermissionMask.Modify) == 0) { remoteClient.SendAgentAlertMessage("Insufficient permissions to edit setting", false); return UUID.Zero; @@ -379,6 +390,17 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess remoteClient.SendAlertMessage("Setting updated"); break; } + case InventoryType.Material: + { + if ((item.CurrentPermissions & (uint)PermissionMask.Modify) == 0) + { + remoteClient.SendAgentAlertMessage("Insufficient permissions to edit setting", false); + return UUID.Zero; + } + + remoteClient.SendAlertMessage("Material updated"); + break; + } } AssetBase asset = diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 37ddc3f6ee..459d349ece 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -30,18 +30,13 @@ using System.Collections.Generic; using System.Collections; using System.Reflection; using System.Text; -using System.Threading; -using System.Timers; using System.Xml; using OpenMetaverse; -using OpenMetaverse.Packets; using log4net; using OpenSim.Framework; using OpenSim.Framework.Serialization.External; -using OpenSim.Region.Framework; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes.Serialization; -using OpenSim.Services.Interfaces; using PermissionMask = OpenSim.Framework.PermissionMask; namespace OpenSim.Region.Framework.Scenes @@ -343,6 +338,17 @@ namespace OpenSim.Region.Framework.Scenes avatar.ControllingClient.SendAlertMessage("Setting updated"); break; } + case InventoryType.Material: + { + if ((item.CurrentPermissions & (uint)PermissionMask.Modify) == 0) + { + avatar.ControllingClient.SendAgentAlertMessage("Insufficient permissions to edit setting", false); + return UUID.Zero; + } + + avatar.ControllingClient.SendAlertMessage("Material updated"); + break; + } } AssetBase asset = CreateAsset(item.Name, item.Description, (sbyte)item.Type, data, avatarId); @@ -1199,25 +1205,26 @@ namespace OpenSim.Region.Framework.Scenes uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate, bool assetUpload) { - InventoryItemBase item = new InventoryItemBase(); - item.Owner = remoteClient.AgentId; - item.CreatorId = creatorID; - item.CreatorData = creatorData; - item.ID = UUID.Random(); - item.AssetID = assetID; - item.Name = name; - item.Description = description; - item.Flags = flags; - item.AssetType = 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; - + InventoryItemBase item = new InventoryItemBase + { + Owner = remoteClient.AgentId, + CreatorId = creatorID, + CreatorData = creatorData, + ID = UUID.Random(), + AssetID = assetID, + Name = name, + Description = description, + Flags = flags, + AssetType = assetType, + InvType = invType, + Folder = folderID, + CurrentPermissions = currentMask, + NextPermissions = nextOwnerMask, + EveryOnePermissions = everyoneMask, + GroupPermissions = groupMask, + BasePermissions = baseMask, + CreationDate = creationDate + }; // special AnimationSet case if (item.InvType == (int)CustomInventoryType.AnimationSet) AnimationSet.enforceItemPermitions(item,true); @@ -1888,9 +1895,9 @@ namespace OpenSim.Region.Framework.Scenes } else // Updating existing item with new perms etc { -// m_log.DebugFormat( -// "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()", -// currentItem.Name, part.Name); + //m_log.DebugFormat( + // "[PRIM INVENTORY]: Updating item {0} in {1} for UpdateTaskInventory()", + // currentItem.Name, part.Name); if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) return; @@ -1903,12 +1910,12 @@ namespace OpenSim.Region.Framework.Scenes AgentTransactionsModule.HandleTaskItemUpdateFromTransaction( remoteClient, part, transactionID, currentItem); -// if ((InventoryType)itemInfo.InvType == InventoryType.Notecard) -// remoteClient.SendAgentAlertMessage("Notecard saved", false); -// else if ((InventoryType)itemInfo.InvType == InventoryType.LSL) -// remoteClient.SendAgentAlertMessage("Script saved", false); -// else -// remoteClient.SendAgentAlertMessage("Item saved", false); + //if ((InventoryType)itemInfo.InvType == InventoryType.Notecard) + // remoteClient.SendAgentAlertMessage("Notecard saved", false); + //else if ((InventoryType)itemInfo.InvType == InventoryType.LSL) + // remoteClient.SendAgentAlertMessage("Script saved", false); + //else + // remoteClient.SendAgentAlertMessage("Item saved", false); } // Base ALWAYS has move @@ -2043,9 +2050,9 @@ namespace OpenSim.Region.Framework.Scenes // tell anyone watching that there is a new script in town EventManager.TriggerNewScript(agentID, part, copyID); - // m_log.InfoFormat("[PRIMINVENTORY]: " + - // "Rezzed script {0} into prim local ID {1} for user {2}", - // item.inventoryName, localID, remoteClient.Name); + //m_log.InfoFormat("[PRIMINVENTORY]: " + + // "Rezzed script {0} into prim local ID {1} for user {2}", + // item.inventoryName, localID, remoteClient.Name); part.ParentGroup.ResumeScripts(); @@ -2078,10 +2085,7 @@ namespace OpenSim.Region.Framework.Scenes /// The part where the script was rezzed if successful. False otherwise. public SceneObjectPart RezNewScript(UUID agentID, InventoryItemBase itemBase) { - return RezNewScript( - agentID, - itemBase, - "default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}"); + return RezNewScript(agentID, itemBase, null); } /// @@ -2097,53 +2101,62 @@ namespace OpenSim.Region.Framework.Scenes SceneObjectPart part = GetSceneObjectPart(itemBase.Folder); if (part == null) { -// m_log.DebugFormat( -// "[SCENE INVENTORY]: Could not find part with id {0} for {1} to rez new script", -// itemBase.Folder, agentID); + //m_log.DebugFormat( + // "[SCENE INVENTORY]: Could not find part with id {0} for {1} to rez new script", + // itemBase.Folder, agentID); return null; } if (!Permissions.CanCreateObjectInventory(itemBase.InvType, part.UUID, agentID)) { -// m_log.DebugFormat( -// "[SCENE INVENTORY]: No permission to create new script in {0} for {1}", part.Name, agentID); + //m_log.DebugFormat( + // "[SCENE INVENTORY]: No permission to create new script in {0} for {1}", part.Name, agentID); return null; } - AssetBase asset - = CreateAsset( - itemBase.Name, - itemBase.Description, - (sbyte)itemBase.AssetType, + UUID assetID; + + if (scriptText == null) + assetID = Constants.DefaultScriptID; + else + { + AssetBase asset = CreateAsset( + itemBase.Name, itemBase.Description, + (sbyte)AssetType.LSLText, Encoding.ASCII.GetBytes(scriptText), agentID); - AssetService.Store(asset); + AssetService.Store(asset); + assetID = asset.FullID; + } - TaskInventoryItem taskItem = new TaskInventoryItem(); - - taskItem.ResetIDs(itemBase.Folder); - taskItem.ParentID = itemBase.Folder; - taskItem.CreationDate = (uint)itemBase.CreationDate; - taskItem.Name = itemBase.Name; - taskItem.Description = itemBase.Description; - taskItem.Type = itemBase.AssetType; - taskItem.InvType = itemBase.InvType; - taskItem.OwnerID = itemBase.Owner; - taskItem.CreatorID = itemBase.CreatorIdAsUuid; - taskItem.BasePermissions = itemBase.BasePermissions; - taskItem.CurrentPermissions = itemBase.CurrentPermissions; - taskItem.EveryonePermissions = itemBase.EveryOnePermissions; - taskItem.GroupPermissions = itemBase.GroupPermissions; - taskItem.NextPermissions = itemBase.NextPermissions; - taskItem.GroupID = itemBase.GroupID; - taskItem.GroupPermissions = 0; - taskItem.Flags = itemBase.Flags; - taskItem.PermsGranter = UUID.Zero; - taskItem.PermsMask = 0; - taskItem.AssetID = asset.FullID; + TaskInventoryItem taskItem = new TaskInventoryItem + { + ItemID = UUID.Random(), + OldItemID = UUID.Zero, + ParentPartID = itemBase.Folder, + ParentID = itemBase.Folder, + CreationDate = (uint)itemBase.CreationDate, + Name = itemBase.Name, + Description = itemBase.Description, + Type = itemBase.AssetType, + InvType = itemBase.InvType, + OwnerID = itemBase.Owner, + CreatorID = itemBase.CreatorIdAsUuid, + BasePermissions = itemBase.BasePermissions, + CurrentPermissions = itemBase.CurrentPermissions, + EveryonePermissions = itemBase.EveryOnePermissions, + //GroupPermissions = itemBase.GroupPermissions, + GroupPermissions = 0, + NextPermissions = itemBase.NextPermissions, + GroupID = itemBase.GroupID, + Flags = itemBase.Flags, + PermsGranter = UUID.Zero, + PermsMask = 0, + AssetID = assetID + }; part.Inventory.AddInventoryItem(taskItem, false); part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 1); diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index 376413cad0..7874070ccc 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs @@ -407,6 +407,14 @@ namespace OpenSim.Region.Framework.Scenes if (part.Shape.ProjectionTextureUUID.IsNotZero()) GatheredUuids[part.Shape.ProjectionTextureUUID] = (sbyte)AssetType.Texture; + if(part.Shape.RenderMaterials != null && part.Shape.RenderMaterials.entries != null) + { + for(int j = 0; j < part.Shape.RenderMaterials.entries.Length; ++j) + { + if(part.Shape.RenderMaterials.entries[j].id.IsNotZero()) + AddForInspection(part.Shape.RenderMaterials.entries[j].id, (sbyte)AssetType.Material); + } + } UUID collisionSound = part.CollisionSound; if (collisionSound.IsNotZero() && collisionSound.NotEqual(part.invalidCollisionSoundUUID)) GatheredUuids[collisionSound] = (sbyte)AssetType.Sound; @@ -581,33 +589,36 @@ namespace OpenSim.Region.Framework.Scenes GatheredUuids[assetUuid] = assetType; try { - if ((sbyte)AssetType.Bodypart == assetType || (sbyte)AssetType.Clothing == assetType) + switch ((AssetType)assetType) { - RecordWearableAssetUuids(assetBase); - } - else if ((sbyte)AssetType.Gesture == assetType) - { - RecordGestureAssetUuids(assetBase); - } - else if ((sbyte)AssetType.Notecard == assetType) - { - RecordNoteCardEmbeddedAssetUuids(assetBase); - } - else if ((sbyte)AssetType.LSLText == assetType) - { - RecordEmbeddedAssetDataUuids(assetBase); - } - else if ((sbyte)OpenSimAssetType.Material == assetType) - { - RecordMaterialAssetUuids(assetBase); - } - else if ((sbyte)AssetType.Object == assetType) - { - RecordSceneObjectAssetUuids(assetBase); - } - else if ((sbyte)AssetType.Settings == assetType) - { - RecordEmbeddedAssetDataUuids(assetBase); // BAD to do + case AssetType.Bodypart: + case AssetType.Clothing: + RecordWearableAssetUuids(assetBase); + break; + case AssetType.Gesture: + RecordGestureAssetUuids(assetBase); + break; + case AssetType.Notecard: + RecordNoteCardEmbeddedAssetUuids(assetBase); + break; + case AssetType.LSLText: + RecordEmbeddedAssetDataUuids(assetBase); + break; + case (AssetType)OpenSimAssetType.Material: + RecordMaterialAssetUuids(assetBase); + break; + case AssetType.Object: + RecordSceneObjectAssetUuids(assetBase); + break; + case AssetType.Settings: + RecordEmbeddedAssetDataUuids(assetBase); // BAD to do + break; + case AssetType.Material: + RecordEmbeddedAssetDataUuids(assetBase); + break; + + default: + break; } } catch (Exception e) @@ -645,7 +656,8 @@ namespace OpenSim.Region.Framework.Scenes || (sbyte)AssetType.LSLText == assetType || (sbyte)OpenSimAssetType.Material == assetType || (sbyte)AssetType.Object == assetType - || (sbyte)AssetType.Settings == assetType) + || (sbyte)AssetType.Settings == assetType + || (sbyte)AssetType.Material == assetType) { AddForInspection(assetUuid); } diff --git a/bin/assets/AssetSets.xml b/bin/assets/AssetSets.xml index dc440adecf..2fbf660560 100644 --- a/bin/assets/AssetSets.xml +++ b/bin/assets/AssetSets.xml @@ -7,73 +7,50 @@ - -
-
- - - +
- - - +
- - - +
- - - +
- -
- -
- -
- - - +
- - - +
- - - +
@@ -81,5 +58,5 @@
- + diff --git a/bin/assets/NotecardsAssetSet/EmptyNotecard.txt b/bin/assets/NotecardsAssetSet/EmptyNotecard.txt new file mode 100644 index 0000000000..b14c0a9fcb --- /dev/null +++ b/bin/assets/NotecardsAssetSet/EmptyNotecard.txt @@ -0,0 +1,8 @@ +Linden text version 2 +{ +LLEmbeddedItems version 1 +{ +count 0 +} +Text length 0 +} \ No newline at end of file diff --git a/bin/assets/NotecardsAssetSet/NotecardsAssetSet.xml b/bin/assets/NotecardsAssetSet/NotecardsAssetSet.xml index 1d44a04a4b..6bb17973af 100644 --- a/bin/assets/NotecardsAssetSet/NotecardsAssetSet.xml +++ b/bin/assets/NotecardsAssetSet/NotecardsAssetSet.xml @@ -1,14 +1,8 @@ -
- - +
+ + - -
-
- - - - -
+ +
diff --git a/bin/assets/NotecardsAssetSet/exampleNote.txt b/bin/assets/NotecardsAssetSet/exampleNote.txt deleted file mode 100644 index e4b6ced86e..0000000000 --- a/bin/assets/NotecardsAssetSet/exampleNote.txt +++ /dev/null @@ -1 +0,0 @@ -This is a test, this is only a test. Had this been an actual emergency, I would have sent the LoLKat after you :-P...... diff --git a/bin/assets/NotecardsAssetSet/welcomeNote.txt b/bin/assets/NotecardsAssetSet/welcomeNote.txt deleted file mode 100644 index a012a01cdc..0000000000 --- a/bin/assets/NotecardsAssetSet/welcomeNote.txt +++ /dev/null @@ -1,4 +0,0 @@ - -Hello and thank you for using OpenSim. For more infomation visit http://opensimulator.org/wiki/Main_Page - -In this Library you will find example items to play with and learn on. To use any of these items just double click and/or drag them to the respective folder in your base inventory. Then you can drag them to prims. diff --git a/bin/assets/ScriptsAssetSet/DefaultSay.lsl b/bin/assets/ScriptsAssetSet/DefaultSay.lsl index 12029ca641..cc188eef64 100644 --- a/bin/assets/ScriptsAssetSet/DefaultSay.lsl +++ b/bin/assets/ScriptsAssetSet/DefaultSay.lsl @@ -2,7 +2,7 @@ default { state_entry() { - llSay( 0, "I am Alive!"); + llSay( 0, "Script running"); } }