use shared assets for new empty notecard and defualt script. Grids not using core asset services may need the 2 new ones

This commit is contained in:
UbitUmarov
2022-08-19 22:26:00 +01:00
parent 4727aaa475
commit 0603667627
18 changed files with 298 additions and 248 deletions

View File

@@ -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);

View File

@@ -58,6 +58,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
}
else
{
asset.Data = Array.Empty<byte>();
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);

View File

@@ -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);

View File

@@ -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<string, FolderType> name2Inventory = new Dictionary<string, FolderType>()
{
@@ -238,6 +240,7 @@ namespace OpenSim.Framework
{"myoutfits", FolderType.MyOutfits},
{"mesh", FolderType.Mesh},
{"settings", FolderType.Settings},
{"material", FolderType.Material},
{"suitcase", FolderType.Suitcase}
};

View File

@@ -37,7 +37,7 @@ namespace OpenSim.Framework
/// </summary>
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);
/// <summary>
/// XXX This should really be factored out into some constants class.

View File

@@ -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);

View File

@@ -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);

View File

@@ -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
/// <param name="taskID"></param>
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

View File

@@ -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)

View File

@@ -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
/// <summary>
@@ -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<IEnvironmentModule>();
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 =

View File

@@ -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
/// <returns>The part where the script was rezzed if successful. False otherwise.</returns>
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);
}
/// <summary>
@@ -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);

View File

@@ -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);
}

View File

@@ -7,73 +7,50 @@
<Key Name="file" Value="MyAssetSet/MyAssetSet.xml"/>
</Section>
<Section Name="Animations AssetSet">
<Key Name="file" Value="AnimationsAssetSet/index.xml"/>
</Section>
<!---->
<Section Name="BodyParts AssetSet">
<Key Name="file" Value="BodyPartsAssetSet/BodyPartsAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Clothing AssetSet">
<Key Name="file" Value="ClothingAssetSet/ClothingAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Gestures AssetSet">
<Key Name="file" Value="GesturesAssetSet/GesturesAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Landmarks AssetSet">
<Key Name="file" Value="LandmarksAssetSet/LandmarksAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Notecards AssetSet">
<Key Name="file" Value="NotecardsAssetSet/NotecardsAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Objects AssetSet">
<Key Name="file" Value="ObjectsAssetSet/ObjectsAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Photos AssetSet">
<Key Name="file" Value="PhotosAssetSet/PhotosAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Scripts AssetSet">
<Key Name="file" Value="ScriptsAssetSet/ScriptsAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Sounds AssetSet">
<Key Name="file" Value="SoundsAssetSet/SoundsAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Collision Sounds AssetSet">
<Key Name="file" Value="CollisionSoundsAssetSet/CollisionSoundsAssetSet.xml"/>
</Section>
<!---->
<!---->
<Section Name="Textures AssetSet">
<Key Name="file" Value="TexturesAssetSet/TexturesAssetSet.xml"/>
</Section>
@@ -81,5 +58,5 @@
<Section Name="Settings AssetSet">
<Key Name="file" Value="SettingsAssetSet/SettingsAssetSet.xml"/>
</Section>
<!---->
</Nini>

View File

@@ -0,0 +1,8 @@
Linden text version 2
{
LLEmbeddedItems version 1
{
count 0
}
Text length 0
}

View File

@@ -1,14 +1,8 @@
<Nini>
<Section Name="Welcome notecard">
<Key Name="assetID" Value="00000000-0000-2222-3333-000000000001" />
<Key Name="name" Value="WelcomeNote" />
<Section Name="EmptyNotecard">
<Key Name="assetID" Value="4b6a777d-7bcd-4fc4-b06f-929b21e32925" />
<Key Name="name" Value="EmptyNotecard" />
<Key Name="assetType" Value="7" />
<Key Name="fileName" Value="welcomeNote.txt" />
</Section>
<Section Name="Example notecard">
<Key Name="assetID" Value="8d1ada50-b9c7-11dc-95ff-0800200c9a66" />
<Key Name="name" Value="WelcomeNote" />
<Key Name="assetType" Value="7" />
<Key Name="fileName" Value="exampleNote.txt" />
</Section>
<Key Name="fileName" Value="EmptyNotecard.txt" />
</Section>
</Nini>

View File

@@ -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......

View File

@@ -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.

View File

@@ -2,7 +2,7 @@ default
{
state_entry()
{
llSay( 0, "I am Alive!");
llSay( 0, "Script running");
}
}