Merge branch 'master' into casper
commit
1b8f91a0db
|
@ -1655,5 +1655,9 @@ namespace OpenSim.Client.MXP.ClientStack
|
||||||
public void SendRebakeAvatarTextures(UUID textureID)
|
public void SendRebakeAvatarTextures(UUID textureID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1161,5 +1161,9 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
|
||||||
public void SendRebakeAvatarTextures(UUID textureID)
|
public void SendRebakeAvatarTextures(UUID textureID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ using OpenSim.Region.Framework.Interfaces;
|
||||||
|
|
||||||
namespace OpenSim.Data.MySQL
|
namespace OpenSim.Data.MySQL
|
||||||
{
|
{
|
||||||
public class MySQLGenericTableHandler<T> : MySqlFramework where T: struct
|
public class MySQLGenericTableHandler<T> : MySqlFramework where T: class, new()
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log =
|
private static readonly ILog m_log =
|
||||||
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
@ -63,7 +63,7 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
|
|
||||||
Type t = typeof(T);
|
Type t = typeof(T);
|
||||||
FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic |
|
FieldInfo[] fields = t.GetFields(BindingFlags.Public |
|
||||||
BindingFlags.Instance |
|
BindingFlags.Instance |
|
||||||
BindingFlags.DeclaredOnly);
|
BindingFlags.DeclaredOnly);
|
||||||
|
|
||||||
|
@ -165,7 +165,11 @@ namespace OpenSim.Data.MySQL
|
||||||
new Dictionary<string, string>();
|
new Dictionary<string, string>();
|
||||||
|
|
||||||
foreach (string col in m_ColumnNames)
|
foreach (string col in m_ColumnNames)
|
||||||
|
{
|
||||||
data[col] = reader[col].ToString();
|
data[col] = reader[col].ToString();
|
||||||
|
if (data[col] == null)
|
||||||
|
data[col] = String.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
m_DataField.SetValue(row, data);
|
m_DataField.SetValue(row, data);
|
||||||
}
|
}
|
||||||
|
@ -195,6 +199,33 @@ namespace OpenSim.Data.MySQL
|
||||||
MySqlCommand cmd = new MySqlCommand();
|
MySqlCommand cmd = new MySqlCommand();
|
||||||
|
|
||||||
string query = "";
|
string query = "";
|
||||||
|
List<String> names = new List<String>();
|
||||||
|
List<String> values = new List<String>();
|
||||||
|
|
||||||
|
foreach (FieldInfo fi in m_Fields.Values)
|
||||||
|
{
|
||||||
|
names.Add(fi.Name);
|
||||||
|
values.Add(fi.GetValue(row).ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_DataField != null)
|
||||||
|
{
|
||||||
|
Dictionary<string, string> data =
|
||||||
|
(Dictionary<string, string>)m_DataField.GetValue(row);
|
||||||
|
|
||||||
|
foreach (KeyValuePair<string, string> kvp in data)
|
||||||
|
{
|
||||||
|
names.Add(kvp.Key);
|
||||||
|
values.Add(kvp.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values ('" + String.Join("','", values.ToArray()) + "')";
|
||||||
|
|
||||||
|
cmd.CommandText = query;
|
||||||
|
|
||||||
|
if (ExecuteNonQuery(cmd) > 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -232,7 +232,26 @@ namespace OpenSim.Framework.Communications.Cache
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Dictionary<UUID, InventoryFolderImpl> RequestSelfAndDescendentFolders()
|
public Dictionary<UUID, InventoryFolderImpl> RequestSelfAndDescendentFolders()
|
||||||
{
|
{
|
||||||
return libraryFolders;
|
Dictionary<UUID, InventoryFolderImpl> fs = new Dictionary<UUID, InventoryFolderImpl>();
|
||||||
|
fs.Add(ID, this);
|
||||||
|
List<InventoryFolderImpl> fis = TraverseFolder(this);
|
||||||
|
foreach (InventoryFolderImpl f in fis)
|
||||||
|
{
|
||||||
|
fs.Add(f.ID, f);
|
||||||
|
}
|
||||||
|
//return libraryFolders;
|
||||||
|
return fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<InventoryFolderImpl> TraverseFolder(InventoryFolderImpl node)
|
||||||
|
{
|
||||||
|
List<InventoryFolderImpl> folders = node.RequestListOfFolderImpls();
|
||||||
|
List<InventoryFolderImpl> subs = new List<InventoryFolderImpl>();
|
||||||
|
foreach (InventoryFolderImpl f in folders)
|
||||||
|
subs.AddRange(TraverseFolder(f));
|
||||||
|
|
||||||
|
folders.AddRange(subs);
|
||||||
|
return folders;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1392,5 +1392,7 @@ namespace OpenSim.Framework
|
||||||
bool AddGenericPacketHandler(string MethodName, GenericMessage handler);
|
bool AddGenericPacketHandler(string MethodName, GenericMessage handler);
|
||||||
|
|
||||||
void SendRebakeAvatarTextures(UUID textureID);
|
void SendRebakeAvatarTextures(UUID textureID);
|
||||||
|
|
||||||
|
void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -322,15 +322,15 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
HandleRequest(req, resp);
|
HandleRequest(req, resp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConvertIHttpClientContextToOSHttp(object stateinfo)
|
// public void ConvertIHttpClientContextToOSHttp(object stateinfo)
|
||||||
{
|
// {
|
||||||
HttpServerContextObj objstate = (HttpServerContextObj)stateinfo;
|
// HttpServerContextObj objstate = (HttpServerContextObj)stateinfo;
|
||||||
|
|
||||||
OSHttpRequest request = objstate.oreq;
|
// OSHttpRequest request = objstate.oreq;
|
||||||
OSHttpResponse resp = objstate.oresp;
|
// OSHttpResponse resp = objstate.oresp;
|
||||||
|
|
||||||
HandleRequest(request,resp);
|
// HandleRequest(request,resp);
|
||||||
}
|
// }
|
||||||
|
|
||||||
public virtual void HandleRequest(OSHttpRequest request, OSHttpResponse response)
|
public virtual void HandleRequest(OSHttpRequest request, OSHttpResponse response)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace OpenSim
|
||||||
{
|
{
|
||||||
public class VersionInfo
|
public class VersionInfo
|
||||||
{
|
{
|
||||||
private const string VERSION_NUMBER = "0.6.91CM";
|
private const string VERSION_NUMBER = "0.6.8CM";
|
||||||
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
private const Flavour VERSION_FLAVOUR = Flavour.Dev;
|
||||||
public enum Flavour
|
public enum Flavour
|
||||||
{
|
{
|
||||||
|
|
|
@ -15792,5 +15792,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
return osdEvent;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,6 +175,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
return nodesLoaded;
|
return nodesLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
|
{
|
||||||
|
if (m_loadStream != null)
|
||||||
|
m_loadStream.Close();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Replicate the inventory paths in the archive to the user's inventory as necessary.
|
/// Replicate the inventory paths in the archive to the user's inventory as necessary.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -258,6 +264,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
= rawDirsToCreate[i].LastIndexOf(
|
= rawDirsToCreate[i].LastIndexOf(
|
||||||
ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
|
ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR);
|
||||||
|
|
||||||
|
if (identicalNameIdentifierIndex < 0)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
string newFolderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
|
string newFolderName = rawDirsToCreate[i].Remove(identicalNameIdentifierIndex);
|
||||||
|
|
||||||
newFolderName = InventoryArchiveUtils.UnescapeArchivePath(newFolderName);
|
newFolderName = InventoryArchiveUtils.UnescapeArchivePath(newFolderName);
|
||||||
|
|
|
@ -43,6 +43,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
private IProfileModule m_profileModule = null;
|
private IProfileModule m_profileModule = null;
|
||||||
|
private bool m_enabled = true;
|
||||||
|
|
||||||
public AvatarProfilesModule()
|
public AvatarProfilesModule()
|
||||||
{
|
{
|
||||||
|
@ -52,12 +53,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Profiles
|
||||||
|
|
||||||
public void Initialise(Scene scene, IConfigSource config)
|
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 = scene;
|
||||||
m_scene.EventManager.OnNewClient += NewClient;
|
m_scene.EventManager.OnNewClient += NewClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
{
|
{
|
||||||
|
if (!m_enabled)
|
||||||
|
return;
|
||||||
m_profileModule = m_scene.RequestModuleInterface<IProfileModule>();
|
m_profileModule = m_scene.RequestModuleInterface<IProfileModule>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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. Ignoring Library Module");
|
||||||
|
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<IInventoryService>(invService);
|
||||||
|
m_MockScene.RegisterModuleInterface<IAssetService>(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<InventoryNodeBase> 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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieve the root inventory folder for the given user.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <returns>null if no root folder was found</returns>
|
||||||
|
public InventoryFolderBase GetRootFolder(UUID userID) { return m_Library; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets everything (folders and items) inside a folder
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <param name="folderID"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
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<InventoryFolderBase>();
|
||||||
|
inv.Items = new List<InventoryItemBase>();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add a new folder to the user's inventory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="folder"></param>
|
||||||
|
/// <returns>true if the folder was successfully added</returns>
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Add a new item to the user's inventory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <returns>true if the item was successfully added</returns>
|
||||||
|
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; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the skeleton of the inventory -- folders only
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<InventoryFolderBase> GetInventorySkeleton(UUID userId) { return null; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Synchronous inventory fetch.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public InventoryCollection GetUserInventory(UUID userID) { return null; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Request the inventory for a user. This is an asynchronous operation that will call the callback when the
|
||||||
|
/// inventory has been received
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <param name="callback"></param>
|
||||||
|
public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) { }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the user folder for the given folder-type
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <param name="type"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) { return null; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the items inside a folder
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <param name="folderID"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID) { return null; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update a folder in the user's inventory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="folder"></param>
|
||||||
|
/// <returns>true if the folder was successfully updated</returns>
|
||||||
|
public bool UpdateFolder(InventoryFolderBase folder) { return false; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Move an inventory folder to a new location
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="folder">A folder containing the details of the new location</param>
|
||||||
|
/// <returns>true if the folder was successfully moved</returns>
|
||||||
|
public bool MoveFolder(InventoryFolderBase folder) { return false; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete an item from the user's inventory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <returns>true if the item was successfully deleted</returns>
|
||||||
|
//bool DeleteItem(InventoryItemBase item);
|
||||||
|
public bool DeleteFolders(UUID userID, List<UUID> folderIDs) { return false; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Purge an inventory folder of all its items and subfolders.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="folder"></param>
|
||||||
|
/// <returns>true if the folder was successfully purged</returns>
|
||||||
|
public bool PurgeFolder(InventoryFolderBase folder) { return false; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update an item in the user's inventory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <returns>true if the item was successfully updated</returns>
|
||||||
|
public bool UpdateItem(InventoryItemBase item) { return false; }
|
||||||
|
|
||||||
|
public bool MoveItems(UUID ownerID, List<InventoryItemBase> items) { return false; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delete an item from the user's inventory
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <returns>true if the item was successfully deleted</returns>
|
||||||
|
//bool DeleteItem(InventoryItemBase item);
|
||||||
|
public bool DeleteItems(UUID userID, List<UUID> itemIDs) { return false; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get an item, given by its UUID
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public InventoryItemBase GetItem(InventoryItemBase item) { return null; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a folder, given by its UUID
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="folder"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Does the given user have an inventory structure?
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool HasInventoryForUser(UUID userID) { return false; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the active gestures of the agent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<InventoryItemBase> GetActiveGestures(UUID userId) { return null; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the union of permissions of all inventory items
|
||||||
|
/// that hold the given assetID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userID"></param>
|
||||||
|
/// <param name="assetID"></param>
|
||||||
|
/// <returns>The permissions or 0 if no such asset is found in
|
||||||
|
/// the user's inventory</returns>
|
||||||
|
public int GetAssetPermissions(UUID userID, UUID assetID) { return 0; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -20,6 +20,7 @@
|
||||||
<RegionModule id="CoreAssetCache" type="OpenSim.Region.CoreModules.Asset.CoreAssetCache" />
|
<RegionModule id="CoreAssetCache" type="OpenSim.Region.CoreModules.Asset.CoreAssetCache" />
|
||||||
<RegionModule id="GlynnTuckerAssetCache" type="OpenSim.Region.CoreModules.Asset.GlynnTuckerAssetCache" />
|
<RegionModule id="GlynnTuckerAssetCache" type="OpenSim.Region.CoreModules.Asset.GlynnTuckerAssetCache" />
|
||||||
<RegionModule id="CenomeMemoryAssetCache" type="OpenSim.Region.CoreModules.Asset.CenomeMemoryAssetCache"/>
|
<RegionModule id="CenomeMemoryAssetCache" type="OpenSim.Region.CoreModules.Asset.CenomeMemoryAssetCache"/>
|
||||||
|
<RegionModule id="LibraryModule" type="OpenSim.Region.CoreModules.Framework.Library.LibraryModule"/>
|
||||||
<!-- Service connectors OUT modules -->
|
<!-- Service connectors OUT modules -->
|
||||||
<RegionModule id="LocalUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.User.LocalUserServicesConnector" />
|
<RegionModule id="LocalUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.User.LocalUserServicesConnector" />
|
||||||
<RegionModule id="RemoteUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.User.RemoteUserServicesConnector" />
|
<RegionModule id="RemoteUserServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.User.RemoteUserServicesConnector" />
|
||||||
|
|
|
@ -1099,5 +1099,9 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public void SendRebakeAvatarTextures(UUID textureID)
|
public void SendRebakeAvatarTextures(UUID textureID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,6 +222,30 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
protected internal bool AddRestoredSceneObject(
|
protected internal bool AddRestoredSceneObject(
|
||||||
SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
|
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)
|
if (!alreadyPersisted)
|
||||||
{
|
{
|
||||||
sceneObject.ForceInventoryPersistence();
|
sceneObject.ForceInventoryPersistence();
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
@ -91,6 +92,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
GetWearableAssetUuids(assetUuid, assetUuids);
|
GetWearableAssetUuids(assetUuid, assetUuids);
|
||||||
}
|
}
|
||||||
|
else if (AssetType.Gesture == assetType)
|
||||||
|
{
|
||||||
|
GetGestureAssetUuids(assetUuid, assetUuids);
|
||||||
|
}
|
||||||
else if (AssetType.LSLText == assetType)
|
else if (AssetType.LSLText == assetType)
|
||||||
{
|
{
|
||||||
GetScriptAssetUuids(assetUuid, assetUuids);
|
GetScriptAssetUuids(assetUuid, assetUuids);
|
||||||
|
@ -278,5 +283,41 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
GatherAssetUuids(sog, assetUuids);
|
GatherAssetUuids(sog, assetUuids);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void GetGestureAssetUuids(UUID gestureUuid, IDictionary<UUID, int> 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.TryParse(id, out uuid))
|
||||||
|
assetUuids[uuid] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1624,5 +1624,9 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||||
public void SendRebakeAvatarTextures(UUID textureID)
|
public void SendRebakeAvatarTextures(UUID textureID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,6 +180,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
/// <param name="msg">The message to send to the user</param>
|
/// <param name="msg">The message to send to the user</param>
|
||||||
void Say(string msg);
|
void Say(string msg);
|
||||||
|
|
||||||
|
void Say(string msg,int channel);
|
||||||
|
|
||||||
//// <value>
|
//// <value>
|
||||||
/// Grants access to the objects inventory
|
/// Grants access to the objects inventory
|
||||||
/// </value>
|
/// </value>
|
||||||
|
|
|
@ -41,6 +41,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
{
|
{
|
||||||
public string Text;
|
public string Text;
|
||||||
public IEntity Sender;
|
public IEntity Sender;
|
||||||
|
public int Channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
public delegate void OnChatDelegate(IWorld sender, ChatEventArgs e);
|
public delegate void OnChatDelegate(IWorld sender, ChatEventArgs e);
|
||||||
|
|
|
@ -384,6 +384,15 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
m_rootScene.SimChat(msg, ChatTypeEnum.Say, sop.AbsolutePosition, sop.Name, sop.UUID, false);
|
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
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -148,6 +148,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
ChatEventArgs e = new ChatEventArgs();
|
ChatEventArgs e = new ChatEventArgs();
|
||||||
e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId, m_security);
|
e.Sender = new SOPObject(m_internalScene, ((SceneObjectPart) chat.SenderObject).LocalId, m_security);
|
||||||
e.Text = chat.Message;
|
e.Text = chat.Message;
|
||||||
|
e.Channel = chat.Channel;
|
||||||
|
|
||||||
_OnChat(this, e);
|
_OnChat(this, e);
|
||||||
return;
|
return;
|
||||||
|
@ -158,6 +159,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
|
||||||
ChatEventArgs e = new ChatEventArgs();
|
ChatEventArgs e = new ChatEventArgs();
|
||||||
e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID, m_security);
|
e.Sender = new SPAvatar(m_internalScene, chat.SenderUUID, m_security);
|
||||||
e.Text = chat.Message;
|
e.Text = chat.Message;
|
||||||
|
e.Channel = chat.Channel;
|
||||||
|
|
||||||
_OnChat(this, e);
|
_OnChat(this, e);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1104,5 +1104,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
public void SendRebakeAvatarTextures(UUID textureID)
|
public void SendRebakeAvatarTextures(UUID textureID)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -215,6 +215,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
parent_scene.GetTerrainHeightAtXY(((float)Constants.RegionSize * 0.5f), ((float)Constants.RegionSize * 0.5f)) + 0.5f);
|
parent_scene.GetTerrainHeightAtXY(((float)Constants.RegionSize * 0.5f), ((float)Constants.RegionSize * 0.5f)) + 0.5f);
|
||||||
m_log.Warn("[PHYSICS]: Got nonFinite Object create Position");
|
m_log.Warn("[PHYSICS]: Got nonFinite Object create Position");
|
||||||
}
|
}
|
||||||
|
|
||||||
_position = pos;
|
_position = pos;
|
||||||
m_taintposition = pos;
|
m_taintposition = pos;
|
||||||
PID_D = parent_scene.bodyPIDD;
|
PID_D = parent_scene.bodyPIDD;
|
||||||
|
@ -254,7 +255,8 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
_parent_scene = parent_scene;
|
_parent_scene = parent_scene;
|
||||||
m_targetSpace = (IntPtr)0;
|
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;
|
m_isphysical = false;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -6606,6 +6606,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// retain pathcurve
|
// retain pathcurve
|
||||||
shapeBlock.PathCurve = part.Shape.PathCurve;
|
shapeBlock.PathCurve = part.Shape.PathCurve;
|
||||||
|
|
||||||
|
part.Shape.SculptEntry = false;
|
||||||
return shapeBlock;
|
return shapeBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6657,6 +6658,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
shapeBlock.PathShearX = (byte)(100 * topshear.x);
|
shapeBlock.PathShearX = (byte)(100 * topshear.x);
|
||||||
shapeBlock.PathShearY = (byte)(100 * topshear.y);
|
shapeBlock.PathShearY = (byte)(100 * topshear.y);
|
||||||
|
|
||||||
|
part.Shape.SculptEntry = false;
|
||||||
part.UpdateShape(shapeBlock);
|
part.UpdateShape(shapeBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6701,6 +6703,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x);
|
shapeBlock.ProfileBegin = (ushort)(50000 * dimple.x);
|
||||||
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y));
|
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - dimple.y));
|
||||||
|
|
||||||
|
part.Shape.SculptEntry = false;
|
||||||
part.UpdateShape(shapeBlock);
|
part.UpdateShape(shapeBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6824,6 +6827,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
shapeBlock.PathSkew = (sbyte)(100 * skew);
|
shapeBlock.PathSkew = (sbyte)(100 * skew);
|
||||||
|
|
||||||
|
part.Shape.SculptEntry = false;
|
||||||
part.UpdateShape(shapeBlock);
|
part.UpdateShape(shapeBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -422,7 +422,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
|
|
||||||
public int Length
|
public int Length
|
||||||
{
|
{
|
||||||
get {
|
get
|
||||||
|
{
|
||||||
if (m_data == null)
|
if (m_data == null)
|
||||||
m_data=new Object[0];
|
m_data=new Object[0];
|
||||||
return m_data.Length;
|
return m_data.Length;
|
||||||
|
@ -431,7 +432,40 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
||||||
|
|
||||||
public int Size
|
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
|
public object[] Data
|
||||||
|
|
|
@ -1160,5 +1160,8 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendAvatarInterestsReply(UUID avatarID, uint wantMask, string wantText, uint skillsMask, string skillsText, string languages)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
NeighbourServices = "LocalNeighbourServicesConnector"
|
NeighbourServices = "LocalNeighbourServicesConnector"
|
||||||
AuthorizationServices = "LocalAuthorizationServicesConnector"
|
AuthorizationServices = "LocalAuthorizationServicesConnector"
|
||||||
GridServices = "LocalGridServicesConnector"
|
GridServices = "LocalGridServicesConnector"
|
||||||
|
LibraryModule = true
|
||||||
|
|
||||||
[AssetService]
|
[AssetService]
|
||||||
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
|
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
|
||||||
|
@ -26,3 +27,4 @@
|
||||||
[GridService]
|
[GridService]
|
||||||
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
LocalServiceModule = "OpenSim.Services.GridService.dll:GridService"
|
||||||
Realm = "regions"
|
Realm = "regions"
|
||||||
|
|
||||||
|
|
|
@ -39,3 +39,7 @@
|
||||||
;;--- For MySql region storage (alternative)
|
;;--- For MySql region storage (alternative)
|
||||||
;StorageProvider = "OpenSim.Data.MySQL.dll:MySqlRegionData"
|
;StorageProvider = "OpenSim.Data.MySQL.dll:MySqlRegionData"
|
||||||
;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;"
|
;ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=***;"
|
||||||
|
|
||||||
|
[LibraryModule]
|
||||||
|
; Set this if you want to change the name of the OpenSim Library
|
||||||
|
;LibraryName = "My World's Library"
|
|
@ -21,7 +21,7 @@
|
||||||
HGAuthServiceInConnector = true
|
HGAuthServiceInConnector = true
|
||||||
HypergridServiceInConnector = true
|
HypergridServiceInConnector = true
|
||||||
NeighbourServiceInConnector = true
|
NeighbourServiceInConnector = true
|
||||||
|
LibraryModule = true
|
||||||
|
|
||||||
[AssetService]
|
[AssetService]
|
||||||
; For the AssetServiceInConnector
|
; For the AssetServiceInConnector
|
||||||
|
|
Loading…
Reference in New Issue