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