From f45a69821b04fd743b7e79ab594484d055e06226 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 22 Dec 2009 21:00:46 -0800
Subject: Added Close() to Inventory/Archiver/InventoryArchiveReadRequest, so
that the stream can be closed.
---
.../Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index b778389..f299b0c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -174,7 +174,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
return nodesLoaded;
}
-
+
+ public void Close()
+ {
+ if (m_loadStream != null)
+ m_loadStream.Close();
+ }
+
///
/// Replicate the inventory paths in the archive to the user's inventory as necessary.
///
--
cgit v1.1
From fddefff28479b6874235419dd5d26214afabb4f2 Mon Sep 17 00:00:00 2001
From: Charles Krinke
Date: Wed, 23 Dec 2009 10:34:11 -0800
Subject: Thank you kindly, Ziah for a patch that adds the channel to the class
ChatEventArgs and retrieves it's value along with the others from the
OSChatMessage in HandleChatPackage. With this the MRM Script can check if a
ChatEvent is coming in on a specifc Channel. The Second Part adds the Method
say(string msg , int channel) to send a chat message on the specified
channel. The idea behind this is to enable MRM's to communicate with regular
LSL or OSSL Scripts so that they may can act as a Backend to access a
Database or do business Logic for those Scripts.
Signed-off-by: Charles Krinke
---
.../OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs | 2 ++
.../OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs | 1 +
OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs | 9 +++++++++
OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs | 6 ++++--
4 files changed, 16 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs
index 19f7210..9d64667 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IObject.cs
@@ -179,6 +179,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
///
/// The message to send to the user
void Say(string msg);
+
+ void Say(string msg,int channel);
////
/// Grants access to the objects inventory
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs
index 3c14ed5..3b3b3d0 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/Interfaces/IWorld.cs
@@ -41,6 +41,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{
public string Text;
public IEntity Sender;
+ public int Channel;
}
public delegate void OnChatDelegate(IWorld sender, ChatEventArgs e);
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
index 143c454..9596d13 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
@@ -384,6 +384,15 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
m_rootScene.SimChat(msg, ChatTypeEnum.Say, sop.AbsolutePosition, sop.Name, sop.UUID, false);
}
+ public void Say(string msg,int channel)
+ {
+ if (!CanEdit())
+ return;
+
+ SceneObjectPart sop = GetSOP();
+ m_rootScene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Say,channel, sop.AbsolutePosition, sop.Name, sop.UUID, false);
+ }
+
#endregion
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
index 6fcb5d0..82020cb 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
@@ -148,7 +148,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
ChatEventArgs e = new ChatEventArgs();
e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId, m_security);
e.Text = chat.Message;
-
+ e.Channel = chat.Channel;
+
_OnChat(this, e);
return;
}
@@ -158,7 +159,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
ChatEventArgs e = new ChatEventArgs();
e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID, m_security);
e.Text = chat.Message;
-
+ e.Channel = chat.Channel;
+
_OnChat(this, e);
return;
}
--
cgit v1.1
From c05a35cc7168d13655f7e3a38e0e0df0f2bf1060 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 23 Dec 2009 21:20:48 +0000
Subject: Fix a bounds exception I came across in IAR restore
---
.../Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | 5 +++++
1 file changed, 5 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index b778389..304c081 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -258,6 +258,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
= rawDirsToCreate[i].LastIndexOf(
ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
+ if (identicalNameIdentifierIndex < 0)
+ {
+ i++;
+ continue;
+ }
string newFolderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
newFolderName = InventoryArchiveUtils.UnescapeArchivePath(newFolderName);
--
cgit v1.1
From 53386b6f1f6fe02f3b6e544ce5d50bdf2cc6e7ec Mon Sep 17 00:00:00 2001
From: Melanie
Date: Wed, 23 Dec 2009 23:09:41 +0000
Subject: Add saving assets from gestures to IAR
---
OpenSim/Region/Framework/Scenes/UuidGatherer.cs | 42 ++++++++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 930af81..7e3c192 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -91,6 +91,10 @@ namespace OpenSim.Region.Framework.Scenes
{
GetWearableAssetUuids(assetUuid, assetUuids);
}
+ else if (AssetType.Gesture == assetType)
+ {
+ GetGestureAssetUuids(assetUuid, assetUuids);
+ }
else if (AssetType.LSLText == assetType)
{
GetScriptAssetUuids(assetUuid, assetUuids);
@@ -278,5 +282,41 @@ namespace OpenSim.Region.Framework.Scenes
GatherAssetUuids(sog, assetUuids);
}
}
+
+ protected void GetGestureAssetUuids(UUID gestureUuid, IDictionary assetUuids)
+ {
+ AssetBase assetBase = GetAsset(gestureUuid);
+
+ MemoryStream ms = new MemoryStream(assetBase.Data);
+ StreamReader sr = new StreamReader(ms);
+
+ sr.ReadLine(); // Unknown (Version?)
+ sr.ReadLine(); // Unknown
+ sr.ReadLine(); // Unknown
+ sr.ReadLine(); // Name
+ sr.ReadLine(); // Comment ?
+ int count = Convert.ToInt32(sr.ReadLine()); // Item count
+
+ for (int i = 0 ; i < count ; i++)
+ {
+ string type = sr.ReadLine();
+ if (type == null)
+ break;
+ string name = sr.ReadLine();
+ if (name == null)
+ break;
+ string id = sr.ReadLine();
+ if (id == null)
+ break;
+ string unknown = sr.ReadLine();
+ if (unknown == null)
+ break;
+
+ // If it can be parsed as a UUID, it is an asset ID
+ UUID uuid;
+ if (UUID.Parse(id, out uuid))
+ assetUuids[uuid] = 1;
+ }
+ }
}
-}
\ No newline at end of file
+}
--
cgit v1.1
From 908992a105280780cbdc8955ee1926e535176875 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 23 Dec 2009 17:10:37 -0800
Subject: Fixes the broken build of the previous commit.
---
OpenSim/Region/Framework/Scenes/UuidGatherer.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
index 7e3c192..3edb677 100644
--- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
+++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs
@@ -27,6 +27,7 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading;
@@ -314,7 +315,7 @@ namespace OpenSim.Region.Framework.Scenes
// If it can be parsed as a UUID, it is an asset ID
UUID uuid;
- if (UUID.Parse(id, out uuid))
+ if (UUID.TryParse(id, out uuid))
assetUuids[uuid] = 1;
}
}
--
cgit v1.1
From 1fa938aab0b748768ff3528e41ba76dd6baa1bf3 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 23 Dec 2009 17:31:30 -0800
Subject: Library Module: allows adding folders/items to the Library from IAR
files placed under bin/Library. This works only for standalones.
---
.../CoreModules/Framework/Library/LibraryModule.cs | 219 +++++++++++++++++
.../Framework/Library/LocalInventoryService.cs | 263 +++++++++++++++++++++
.../Resources/CoreModulePlugin.addin.xml | 1 +
3 files changed, 483 insertions(+)
create mode 100644 OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
create mode 100644 OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
new file mode 100644
index 0000000..df7df46
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+
+using OpenSim.Framework;
+using OpenSim.Framework.Communications;
+using OpenSim.Framework.Communications.Cache;
+using OpenSim.Region.CoreModules.Avatar.Inventory.Archiver;
+using OpenSim.Region.Framework;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+
+using OpenMetaverse;
+using log4net;
+using Nini.Config;
+
+namespace OpenSim.Region.CoreModules.Framework.Library
+{
+ public class LibraryModule : ISharedRegionModule
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ private static bool m_HasRunOnce = false;
+
+ private bool m_Enabled = false;
+ private string m_LibraryName = "OpenSim Library";
+ private Scene m_Scene;
+
+ #region ISharedRegionModule
+
+ public void Initialise(IConfigSource config)
+ {
+ m_Enabled = config.Configs["Modules"].GetBoolean("LibraryModule", m_Enabled);
+ if (m_Enabled)
+ {
+ IConfig libConfig = config.Configs["LibraryModule"];
+ if (libConfig != null)
+ m_LibraryName = libConfig.GetString("LibraryName", m_LibraryName);
+ }
+ }
+
+ public bool IsSharedModule
+ {
+ get { return true; }
+ }
+
+ public string Name
+ {
+ get { return "Library Module"; }
+ }
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ // Store only the first scene
+ if (m_Scene == null)
+ {
+ m_Scene = scene;
+ }
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ // This will never run more than once, even if the region is restarted
+ if (!m_HasRunOnce)
+ {
+ LoadLibrariesFromArchives();
+ //DumpLibrary();
+ m_HasRunOnce = true;
+ }
+ }
+
+ public void PostInitialise()
+ {
+ }
+
+ public void Close()
+ {
+ m_Scene = null;
+ }
+
+ #endregion ISharedRegionModule
+
+ #region LoadLibraries
+ private string pathToLibraries = "Library";
+
+ protected void LoadLibrariesFromArchives()
+ {
+ InventoryFolderImpl lib = m_Scene.CommsManager.UserProfileCacheService.LibraryRoot;
+ if (lib == null)
+ {
+ m_log.Debug("[LIBRARY MODULE]: No library.");
+ return;
+ }
+
+ lib.Name = m_LibraryName;
+
+ RegionInfo regInfo = new RegionInfo();
+ Scene m_MockScene = new Scene(regInfo);
+ m_MockScene.CommsManager = m_Scene.CommsManager;
+ LocalInventoryService invService = new LocalInventoryService((LibraryRootFolder)lib);
+ m_MockScene.RegisterModuleInterface(invService);
+ m_MockScene.RegisterModuleInterface(m_Scene.AssetService);
+
+ UserProfileData profile = new UserProfileData();
+ profile.FirstName = "OpenSim";
+ profile.ID = lib.Owner;
+ profile.SurName = "Library";
+ CachedUserInfo uinfo = new CachedUserInfo(invService, profile);
+
+ foreach (string iarFileName in Directory.GetFiles(pathToLibraries, "*.iar"))
+ {
+ string simpleName = Path.GetFileNameWithoutExtension(iarFileName);
+
+ m_log.InfoFormat("[LIBRARY MODULE]: Loading library archive {0} ({1})...", iarFileName, simpleName);
+ simpleName = GetInventoryPathFromName(simpleName);
+
+ try
+ {
+ InventoryArchiveReadRequest archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, simpleName, iarFileName);
+ List nodes = archread.Execute();
+ if (nodes.Count == 0)
+ {
+ // didn't find the subfolder with the given name; place it on the top
+ m_log.InfoFormat("[LIBRARY MODULE]: Didn't find {0} in library. Placing archive on the top level", simpleName);
+ archread.Close();
+ archread = new InventoryArchiveReadRequest(m_MockScene, uinfo, "/", iarFileName);
+ archread.Execute();
+ }
+ archread.Close();
+ }
+ catch (Exception e)
+ {
+ m_log.DebugFormat("[LIBRARY MODULE]: Exception when processing archive {0}: {1}", iarFileName, e.Message);
+ }
+
+ }
+
+ }
+
+ private void DumpLibrary()
+ {
+ InventoryFolderImpl lib = m_Scene.CommsManager.UserProfileCacheService.LibraryRoot;
+
+ m_log.DebugFormat(" - folder {0}", lib.Name);
+ DumpFolder(lib);
+ }
+
+ private void DumpFolder(InventoryFolderImpl folder)
+ {
+ foreach (InventoryItemBase item in folder.Items.Values)
+ {
+ m_log.DebugFormat(" --> item {0}", item.Name);
+ }
+ foreach (InventoryFolderImpl f in folder.RequestListOfFolderImpls())
+ {
+ m_log.DebugFormat(" - folder {0}", f.Name);
+ DumpFolder(f);
+ }
+ }
+
+ private string GetInventoryPathFromName(string name)
+ {
+ string[] parts = name.Split(new char[] { ' ' });
+ if (parts.Length == 3)
+ {
+ name = string.Empty;
+ // cut the last part
+ for (int i = 0; i < parts.Length - 1; i++)
+ name = name + ' ' + parts[i];
+ }
+
+ return name;
+ }
+
+ #endregion LoadLibraries
+ }
+}
diff --git a/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
new file mode 100644
index 0000000..2c95b5a
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Framework/Library/LocalInventoryService.cs
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+
+using OpenSim.Framework;
+using OpenSim.Framework.Communications.Cache;
+using OpenSim.Services.Interfaces;
+
+using OpenMetaverse;
+using log4net;
+
+namespace OpenSim.Region.CoreModules.Framework.Library
+{
+ public class LocalInventoryService : IInventoryService
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ private LibraryRootFolder m_Library;
+
+ public LocalInventoryService(LibraryRootFolder lib)
+ {
+ m_Library = lib;
+ }
+
+ ///
+ /// Retrieve the root inventory folder for the given user.
+ ///
+ ///
+ /// null if no root folder was found
+ public InventoryFolderBase GetRootFolder(UUID userID) { return m_Library; }
+
+ ///
+ /// Gets everything (folders and items) inside a folder
+ ///
+ ///
+ ///
+ ///
+ public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
+ {
+ InventoryFolderImpl folder = null;
+ InventoryCollection inv = new InventoryCollection();
+ inv.UserID = m_Library.Owner;
+
+ if (folderID != m_Library.ID)
+ {
+ folder = m_Library.FindFolder(folderID);
+ if (folder == null)
+ {
+ inv.Folders = new List();
+ inv.Items = new List();
+ return inv;
+ }
+ }
+ else
+ folder = m_Library;
+
+ inv.Folders = folder.RequestListOfFolders();
+ inv.Items = folder.RequestListOfItems();
+
+ m_log.DebugFormat("[LIBRARY MODULE]: Got content for folder {0}", folder.Name);
+ return inv;
+ }
+
+ ///
+ /// Add a new folder to the user's inventory
+ ///
+ ///
+ /// true if the folder was successfully added
+ public bool AddFolder(InventoryFolderBase folder)
+ {
+ //m_log.DebugFormat("[LIBRARY MODULE]: Adding folder {0} ({1}) to {2}", folder.Name, folder.ID, folder.ParentID);
+ InventoryFolderImpl parent = m_Library;
+ if (m_Library.ID != folder.ParentID)
+ parent = m_Library.FindFolder(folder.ParentID);
+
+ if (parent == null)
+ {
+ m_log.DebugFormat("[LIBRARY MODULE]: could not add folder {0} because parent folder {1} not found", folder.Name, folder.ParentID);
+ return false;
+ }
+
+ parent.CreateChildFolder(folder.ID, folder.Name, (ushort)folder.Type);
+
+ return true;
+ }
+
+ ///
+ /// Add a new item to the user's inventory
+ ///
+ ///
+ /// true if the item was successfully added
+ public bool AddItem(InventoryItemBase item)
+ {
+ //m_log.DebugFormat("[LIBRARY MODULE]: Adding item {0} to {1}", item.Name, item.Folder);
+ InventoryFolderImpl folder = m_Library;
+ if (m_Library.ID != item.Folder)
+ folder = m_Library.FindFolder(item.Folder);
+
+ if (folder == null)
+ {
+ m_log.DebugFormat("[LIBRARY MODULE]: could not add item {0} because folder {1} not found", item.Name, item.Folder);
+ return false;
+ }
+
+ folder.Items.Add(item.ID, item);
+ return true;
+ }
+
+ public bool CreateUserInventory(UUID user) { return false; }
+
+ ///
+ /// Gets the skeleton of the inventory -- folders only
+ ///
+ ///
+ ///
+ public List GetInventorySkeleton(UUID userId) { return null; }
+
+ ///
+ /// Synchronous inventory fetch.
+ ///
+ ///
+ ///
+ public InventoryCollection GetUserInventory(UUID userID) { return null; }
+
+ ///
+ /// Request the inventory for a user. This is an asynchronous operation that will call the callback when the
+ /// inventory has been received
+ ///
+ ///
+ ///
+ public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) { }
+
+
+ ///
+ /// Gets the user folder for the given folder-type
+ ///
+ ///
+ ///
+ ///
+ public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) { return null; }
+
+
+ ///
+ /// Gets the items inside a folder
+ ///
+ ///
+ ///
+ ///
+ public List GetFolderItems(UUID userID, UUID folderID) { return null; }
+
+
+ ///
+ /// Update a folder in the user's inventory
+ ///
+ ///
+ /// true if the folder was successfully updated
+ public bool UpdateFolder(InventoryFolderBase folder) { return false; }
+
+ ///
+ /// Move an inventory folder to a new location
+ ///
+ /// A folder containing the details of the new location
+ /// true if the folder was successfully moved
+ public bool MoveFolder(InventoryFolderBase folder) { return false; }
+
+ ///
+ /// Delete an item from the user's inventory
+ ///
+ ///
+ /// true if the item was successfully deleted
+ //bool DeleteItem(InventoryItemBase item);
+ public bool DeleteFolders(UUID userID, List folderIDs) { return false; }
+
+ ///
+ /// Purge an inventory folder of all its items and subfolders.
+ ///
+ ///
+ /// true if the folder was successfully purged
+ public bool PurgeFolder(InventoryFolderBase folder) { return false; }
+
+
+ ///
+ /// Update an item in the user's inventory
+ ///
+ ///
+ /// true if the item was successfully updated
+ public bool UpdateItem(InventoryItemBase item) { return false; }
+
+ public bool MoveItems(UUID ownerID, List items) { return false; }
+
+ ///
+ /// Delete an item from the user's inventory
+ ///
+ ///
+ /// true if the item was successfully deleted
+ //bool DeleteItem(InventoryItemBase item);
+ public bool DeleteItems(UUID userID, List itemIDs) { return false; }
+
+ ///
+ /// Get an item, given by its UUID
+ ///
+ ///
+ ///
+ public InventoryItemBase GetItem(InventoryItemBase item) { return null; }
+
+ ///
+ /// Get a folder, given by its UUID
+ ///
+ ///
+ ///
+ public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; }
+
+ ///
+ /// Does the given user have an inventory structure?
+ ///
+ ///
+ ///
+ public bool HasInventoryForUser(UUID userID) { return false; }
+
+ ///
+ /// Get the active gestures of the agent.
+ ///
+ ///
+ ///
+ public List GetActiveGestures(UUID userId) { return null; }
+
+ ///
+ /// Get the union of permissions of all inventory items
+ /// that hold the given assetID.
+ ///
+ ///
+ ///
+ /// The permissions or 0 if no such asset is found in
+ /// the user's inventory
+ public int GetAssetPermissions(UUID userID, UUID assetID) { return 0; }
+ }
+}
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
index 9757072..beb2307 100644
--- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
+++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
@@ -20,6 +20,7 @@
+
--
cgit v1.1
From 2c3d7972b97b057a7bef6969fbea03591789fcab Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Wed, 23 Dec 2009 19:43:50 -0800
Subject: No-op in this commit. Just increasing the tag number due to
weirdnesses.
---
OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
index df7df46..6941e00 100644
--- a/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Library/LibraryModule.cs
@@ -130,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Framework.Library
InventoryFolderImpl lib = m_Scene.CommsManager.UserProfileCacheService.LibraryRoot;
if (lib == null)
{
- m_log.Debug("[LIBRARY MODULE]: No library.");
+ m_log.Debug("[LIBRARY MODULE]: No library. Ignoring Library Module");
return;
}
--
cgit v1.1
From 86a429bc44b6fc503b3303a946d088d796d5c530 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 24 Dec 2009 18:18:14 +0100
Subject: Add the LSL List Size property
---
OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 41 ++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 3f38bb6..faf9c40 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -422,13 +422,52 @@ namespace OpenSim.Region.ScriptEngine.Shared
public int Length
{
- get {
+ get
+ {
if (m_data == null)
m_data=new Object[0];
return m_data.Length;
}
}
+ public int Size
+ {
+ get
+ {
+ if (m_data == null)
+ m_data=new Object[0];
+
+ int size = 0;
+
+ foreach (Object o in m_data)
+ {
+ if (o is LSL_Types.LSLInteger)
+ size += 4;
+ else if (o is LSL_Types.LSLFloat)
+ size += 8;
+ else if (o is LSL_Types.LSLString)
+ size += ((LSL_Types.LSLString)o).m_string.Length;
+ else if (o is LSL_Types.key)
+ size += ((LSL_Types.key)o).value.Length;
+ else if (o is LSL_Types.Vector3)
+ size += 32;
+ else if (o is LSL_Types.Quaternion)
+ size += 64;
+ else if (o is int)
+ size += 4;
+ else if (o is string)
+ size += ((string)o).Length;
+ else if (o is float)
+ size += 8;
+ else if (o is double)
+ size += 16;
+ else
+ throw new Exception("Unknown type in List.Size: " + o.GetType().ToString());
+ }
+ return size;
+ }
+ }
+
public object[] Data
{
get {
--
cgit v1.1
From 7f699fca9a34cd0f3525534bdbc04c8b8ee975fe Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 24 Dec 2009 18:18:14 +0100
Subject: Add the body to the LSL List Size property
---
OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | 38 +++++++++++++++++++++++--
1 file changed, 36 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
index 1fc31c5..faf9c40 100644
--- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs
@@ -422,7 +422,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
public int Length
{
- get {
+ get
+ {
if (m_data == null)
m_data=new Object[0];
return m_data.Length;
@@ -431,7 +432,40 @@ namespace OpenSim.Region.ScriptEngine.Shared
public int Size
{
- get { return 0; }
+ get
+ {
+ if (m_data == null)
+ m_data=new Object[0];
+
+ int size = 0;
+
+ foreach (Object o in m_data)
+ {
+ if (o is LSL_Types.LSLInteger)
+ size += 4;
+ else if (o is LSL_Types.LSLFloat)
+ size += 8;
+ else if (o is LSL_Types.LSLString)
+ size += ((LSL_Types.LSLString)o).m_string.Length;
+ else if (o is LSL_Types.key)
+ size += ((LSL_Types.key)o).value.Length;
+ else if (o is LSL_Types.Vector3)
+ size += 32;
+ else if (o is LSL_Types.Quaternion)
+ size += 64;
+ else if (o is int)
+ size += 4;
+ else if (o is string)
+ size += ((string)o).Length;
+ else if (o is float)
+ size += 8;
+ else if (o is double)
+ size += 16;
+ else
+ throw new Exception("Unknown type in List.Size: " + o.GetType().ToString());
+ }
+ return size;
+ }
}
public object[] Data
--
cgit v1.1
From 7a06ab834d6d6404c2bfdbf9c71d5f34bfc0fae2 Mon Sep 17 00:00:00 2001
From: dahlia
Date: Thu, 24 Dec 2009 11:00:08 -0800
Subject: Clear Shape.SculptEntry if prim type is not a sculptie in
llSetPrimitiveParams() - addresses Mantis #4462
---
OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 4 ++++
1 file changed, 4 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index cf3a1a0..2b6d9bd 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -6502,6 +6502,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
// retain pathcurve
shapeBlock.PathCurve = part.Shape.PathCurve;
+ part.Shape.SculptEntry = false;
return shapeBlock;
}
@@ -6550,6 +6551,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
shapeBlock.PathShearX = (byte)(100 * topshear.x);
shapeBlock.PathShearY = (byte)(100 * topshear.y);
+ part.Shape.SculptEntry = false;
part.UpdateShape(shapeBlock);
}
@@ -6591,6 +6593,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x);
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y));
+ part.Shape.SculptEntry = false;
part.UpdateShape(shapeBlock);
}
@@ -6711,6 +6714,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}
shapeBlock.PathSkew = (sbyte)(100 * skew);
+ part.Shape.SculptEntry = false;
part.UpdateShape(shapeBlock);
}
--
cgit v1.1
From e7439efc74a1cc0daedc51eb25ae66cd03db70b5 Mon Sep 17 00:00:00 2001
From: Kitto Flora
Date: Thu, 24 Dec 2009 19:19:44 -0500
Subject: Recover out-of-region objects during db load.
---
OpenSim/Region/Framework/Scenes/SceneGraph.cs | 24 ++++++++++++++++++++++++
OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs | 4 +++-
2 files changed, 27 insertions(+), 1 deletion(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index b0fb8b3..998d598 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -222,6 +222,30 @@ namespace OpenSim.Region.Framework.Scenes
protected internal bool AddRestoredSceneObject(
SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
{
+ // KF: Check for out-of-region, move inside and make static.
+ Vector3 npos = new Vector3(sceneObject.RootPart.GroupPosition.X,
+ sceneObject.RootPart.GroupPosition.Y,
+ sceneObject.RootPart.GroupPosition.Z);
+ if (npos.X < 0.0 || npos.Y < 0.0 || npos.Z < 0.0 ||
+ npos.X > Constants.RegionSize ||
+ npos.Y > Constants.RegionSize)
+ {
+ if (npos.X < 0.0) npos.X = 1.0f;
+ if (npos.Y < 0.0) npos.Y = 1.0f;
+ if (npos.Z < 0.0) npos.Z = 0.0f;
+ if (npos.X > Constants.RegionSize) npos.X = Constants.RegionSize - 1.0f;
+ if (npos.Y > Constants.RegionSize) npos.Y = Constants.RegionSize - 1.0f;
+
+ foreach (SceneObjectPart part in sceneObject.Children.Values)
+ {
+ part.GroupPosition = npos;
+ }
+ sceneObject.RootPart.Velocity = Vector3.Zero;
+ sceneObject.RootPart.AngularVelocity = Vector3.Zero;
+ sceneObject.RootPart.Acceleration = Vector3.Zero;
+ sceneObject.RootPart.Velocity = Vector3.Zero;
+ }
+
if (!alreadyPersisted)
{
sceneObject.ForceInventoryPersistence();
diff --git a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
index 983431d..0179240 100644
--- a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs
@@ -215,6 +215,7 @@ namespace OpenSim.Region.Physics.OdePlugin
parent_scene.GetTerrainHeightAtXY(((float)Constants.RegionSize * 0.5f), ((float)Constants.RegionSize * 0.5f)) + 0.5f);
m_log.Warn("[PHYSICS]: Got nonFinite Object create Position");
}
+
_position = pos;
m_taintposition = pos;
PID_D = parent_scene.bodyPIDD;
@@ -254,7 +255,8 @@ namespace OpenSim.Region.Physics.OdePlugin
_parent_scene = parent_scene;
m_targetSpace = (IntPtr)0;
- if (pos.Z < 0)
+// if (pos.Z < 0)
+ if (pos.Z < parent_scene.GetTerrainHeightAtXY(pos.X, pos.Y))
m_isphysical = false;
else
{
--
cgit v1.1
From 8d36d7beed0f5bc932407671596d5a79ff8f8eb6 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Fri, 25 Dec 2009 23:10:07 +0000
Subject: Enable the profile module to be replaced completely, even for the
base profile data
---
.../CoreModules/Avatar/Profiles/AvatarProfilesModule.cs | 13 +++++++++++++
1 file changed, 13 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/CoreModules/Avatar/Profiles/AvatarProfilesModule.cs b/OpenSim/Region/CoreModules/Avatar/Profiles/AvatarProfilesModule.cs
index 0f58788..8cf58c6 100644
--- a/OpenSim/Region/CoreModules/Avatar/Profiles/AvatarProfilesModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Profiles/AvatarProfilesModule.cs
@@ -43,6 +43,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Scene m_scene;
private IProfileModule m_profileModule = null;
+ private bool m_enabled = true;
public AvatarProfilesModule()
{
@@ -52,12 +53,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
public void Initialise(Scene scene, IConfigSource config)
{
+ IConfig profileConfig = config.Configs["Profile"];
+ if (profileConfig != null)
+ {
+ if (profileConfig.GetString("Module", Name) != Name)
+ {
+ m_enabled = false;
+ return;
+ }
+ }
+
m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient;
}
public void PostInitialise()
{
+ if (!m_enabled)
+ return;
m_profileModule = m_scene.RequestModuleInterface();
}
--
cgit v1.1
From 88b3b98811e70709536bb41410ec88509e0460a5 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sat, 26 Dec 2009 04:12:51 +0000
Subject: Add AvatarInterestsReply
---
OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 17 +++++++++++++++++
OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | 4 ++++
.../InternetRelayClientView/Server/IRCClientView.cs | 4 ++++
OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | 4 ++++
4 files changed, 29 insertions(+)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 4780701..f6c505a 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -15809,5 +15809,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return osdEvent;
}
+
+ public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
+ {
+ AvatarInterestsReplyPacket packet = (AvatarInterestsReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarInterestsReply);
+
+ packet.AgentData = new AvatarInterestsReplyPacket.AgentDataBlock();
+ packet.AgentData.AgentID = AgentId;
+ packet.AgentData.AvatarID = avatarID;
+
+ packet.PropertiesData = new AvatarInterestsReplyPacket.PropertiesDataBlock();
+ packet.PropertiesData.WantToMask = wantMask;
+ packet.PropertiesData.WantToText = Utils.StringToBytes(wantText);
+ packet.PropertiesData.SkillsMask = skillsMask;
+ packet.PropertiesData.SkillsText = Utils.StringToBytes(skillsText);
+ packet.PropertiesData.LanguagesText = Utils.StringToBytes(languages);
+ OutPacket(packet, ThrottleOutPacketType.Task);
+ }
}
}
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 9754da3..89e7747 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -1099,5 +1099,9 @@ namespace OpenSim.Region.Examples.SimpleModule
public void SendRebakeAvatarTextures(UUID textureID)
{
}
+
+ public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
+ {
+ }
}
}
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index 6c3e7eb..8b34396 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1624,5 +1624,9 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
public void SendRebakeAvatarTextures(UUID textureID)
{
}
+
+ public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
+ {
+ }
}
}
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index cf36d08..1573c73 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -1104,5 +1104,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
public void SendRebakeAvatarTextures(UUID textureID)
{
}
+
+ public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
+ {
+ }
}
}
--
cgit v1.1