mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 02:36:00 +08:00
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
8
bin/assets/NotecardsAssetSet/EmptyNotecard.txt
Normal file
8
bin/assets/NotecardsAssetSet/EmptyNotecard.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
Linden text version 2
|
||||
{
|
||||
LLEmbeddedItems version 1
|
||||
{
|
||||
count 0
|
||||
}
|
||||
Text length 0
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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......
|
||||
@@ -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.
|
||||
@@ -2,7 +2,7 @@ default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
llSay( 0, "I am Alive!");
|
||||
llSay( 0, "Script running");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user