Merge branch 'master' into 0.7-post-fixes
Conflicts: OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs0.7-release
commit
1cd9118c7a
|
@ -64,14 +64,22 @@ namespace OpenSim.Data.MySQL
|
||||||
|
|
||||||
public bool StoreFolder(XInventoryFolder folder)
|
public bool StoreFolder(XInventoryFolder folder)
|
||||||
{
|
{
|
||||||
|
if (folder.folderName.Length > 64)
|
||||||
|
folder.folderName = folder.folderName.Substring(0, 64);
|
||||||
|
|
||||||
return m_Folders.Store(folder);
|
return m_Folders.Store(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool StoreItem(XInventoryItem item)
|
public bool StoreItem(XInventoryItem item)
|
||||||
{
|
{
|
||||||
|
if (item.inventoryName.Length > 64)
|
||||||
|
item.inventoryName = item.inventoryName.Substring(0, 64);
|
||||||
|
if (item.inventoryDescription.Length > 128)
|
||||||
|
item.inventoryDescription = item.inventoryDescription.Substring(0, 128);
|
||||||
|
|
||||||
return m_Items.Store(item);
|
return m_Items.Store(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DeleteFolders(string field, string val)
|
public bool DeleteFolders(string field, string val)
|
||||||
{
|
{
|
||||||
return m_Folders.Delete(field, val);
|
return m_Folders.Delete(field, val);
|
||||||
|
|
|
@ -66,11 +66,19 @@ namespace OpenSim.Data.SQLite
|
||||||
|
|
||||||
public bool StoreFolder(XInventoryFolder folder)
|
public bool StoreFolder(XInventoryFolder folder)
|
||||||
{
|
{
|
||||||
|
if (folder.folderName.Length > 64)
|
||||||
|
folder.folderName = folder.folderName.Substring(0, 64);
|
||||||
|
|
||||||
return m_Folders.Store(folder);
|
return m_Folders.Store(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool StoreItem(XInventoryItem item)
|
public bool StoreItem(XInventoryItem item)
|
||||||
{
|
{
|
||||||
|
if (item.inventoryName.Length > 64)
|
||||||
|
item.inventoryName = item.inventoryName.Substring(0, 64);
|
||||||
|
if (item.inventoryDescription.Length > 128)
|
||||||
|
item.inventoryDescription = item.inventoryDescription.Substring(0, 128);
|
||||||
|
|
||||||
return m_Items.Store(item);
|
return m_Items.Store(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,14 +29,15 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
using System.Reflection;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
using OpenSim.Framework.Console;
|
using OpenSim.Framework.Console;
|
||||||
|
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
public class RegionLightShareData : ICloneable
|
public class RegionLightShareData : ICloneable
|
||||||
|
@ -96,10 +97,9 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class SimpleRegionInfo
|
public class SimpleRegionInfo
|
||||||
{
|
{
|
||||||
// private static readonly log4net.ILog m_log
|
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The port by which http communication occurs with the region (most noticeably, CAPS communication)
|
/// The port by which http communication occurs with the region (most noticeably, CAPS communication)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -327,8 +327,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
public class RegionInfo
|
public class RegionInfo
|
||||||
{
|
{
|
||||||
// private static readonly log4net.ILog m_log
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
// = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
public bool commFailTF = false;
|
public bool commFailTF = false;
|
||||||
public ConfigurationMember configMember;
|
public ConfigurationMember configMember;
|
||||||
|
@ -772,9 +771,16 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
|
|
||||||
if (externalName == "SYSTEMIP")
|
if (externalName == "SYSTEMIP")
|
||||||
|
{
|
||||||
m_externalHostName = Util.GetLocalHost().ToString();
|
m_externalHostName = Util.GetLocalHost().ToString();
|
||||||
|
m_log.InfoFormat(
|
||||||
|
"[REGIONINFO]: Resolving SYSTEMIP to {0} for external hostname of region {1}",
|
||||||
|
m_externalHostName, name);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
m_externalHostName = externalName;
|
m_externalHostName = externalName;
|
||||||
|
}
|
||||||
|
|
||||||
m_regionType = config.GetString("RegionType", String.Empty);
|
m_regionType = config.GetString("RegionType", String.Empty);
|
||||||
|
|
||||||
|
|
|
@ -192,9 +192,7 @@ namespace OpenSim
|
||||||
// Hook up to the watchdog timer
|
// Hook up to the watchdog timer
|
||||||
Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler;
|
Watchdog.OnWatchdogTimeout += WatchdogTimeoutHandler;
|
||||||
|
|
||||||
PrintFileToConsole("startuplogo.txt");
|
PrintFileToConsole("startuplogo.txt");
|
||||||
|
|
||||||
m_log.InfoFormat("[NETWORK]: Using {0} as SYSTEMIP", Util.GetLocalHost().ToString());
|
|
||||||
|
|
||||||
// For now, start at the 'root' level by default
|
// For now, start at the 'root' level by default
|
||||||
if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
|
if (m_sceneManager.Scenes.Count == 1) // If there is only one region, select it
|
||||||
|
|
|
@ -367,13 +367,13 @@ namespace OpenSim
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID);
|
||||||
|
scene.EventManager.TriggerParcelPrimCountUpdate();
|
||||||
|
|
||||||
// We need to do this after we've initialized the
|
// We need to do this after we've initialized the
|
||||||
// scripting engines.
|
// scripting engines.
|
||||||
scene.CreateScriptInstances();
|
scene.CreateScriptInstances();
|
||||||
|
|
||||||
scene.loadAllLandObjectsFromStorage(regionInfo.originRegionID);
|
|
||||||
scene.EventManager.TriggerParcelPrimCountUpdate();
|
|
||||||
|
|
||||||
m_sceneManager.Add(scene);
|
m_sceneManager.Add(scene);
|
||||||
|
|
||||||
if (m_autoCreateClientStack)
|
if (m_autoCreateClientStack)
|
||||||
|
|
|
@ -6303,8 +6303,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (handlerObjectDuplicate != null)
|
if (handlerObjectDuplicate != null)
|
||||||
{
|
{
|
||||||
handlerObjectDuplicate(dupe.ObjectData[i].ObjectLocalID, dupe.SharedData.Offset,
|
handlerObjectDuplicate(dupe.ObjectData[i].ObjectLocalID, dupe.SharedData.Offset,
|
||||||
dupe.SharedData.DuplicateFlags, AgentandGroupData.AgentID,
|
dupe.SharedData.DuplicateFlags, AgentId,
|
||||||
AgentandGroupData.GroupID);
|
m_activeGroupID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6894,7 +6894,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
if (handlerObjectDuplicateOnRay != null)
|
if (handlerObjectDuplicateOnRay != null)
|
||||||
{
|
{
|
||||||
handlerObjectDuplicateOnRay(dupeOnRay.ObjectData[i].ObjectLocalID, dupeOnRay.AgentData.DuplicateFlags,
|
handlerObjectDuplicateOnRay(dupeOnRay.ObjectData[i].ObjectLocalID, dupeOnRay.AgentData.DuplicateFlags,
|
||||||
dupeOnRay.AgentData.AgentID, dupeOnRay.AgentData.GroupID, dupeOnRay.AgentData.RayTargetID, dupeOnRay.AgentData.RayEnd,
|
AgentId, m_activeGroupID, dupeOnRay.AgentData.RayTargetID, dupeOnRay.AgentData.RayEnd,
|
||||||
dupeOnRay.AgentData.RayStart, dupeOnRay.AgentData.BypassRaycast, dupeOnRay.AgentData.RayEndIsIntersection,
|
dupeOnRay.AgentData.RayStart, dupeOnRay.AgentData.BypassRaycast, dupeOnRay.AgentData.RayEndIsIntersection,
|
||||||
dupeOnRay.AgentData.CopyCenters, dupeOnRay.AgentData.CopyRotates);
|
dupeOnRay.AgentData.CopyCenters, dupeOnRay.AgentData.CopyRotates);
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,12 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps
|
||||||
|
|
||||||
if (texture != null)
|
if (texture != null)
|
||||||
{
|
{
|
||||||
|
if (texture.Type != (sbyte)AssetType.Texture)
|
||||||
|
{
|
||||||
|
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
||||||
|
httpResponse.Send();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
SendTexture(httpRequest, httpResponse, texture);
|
SendTexture(httpRequest, httpResponse, texture);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -147,6 +153,12 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps
|
||||||
|
|
||||||
if (texture != null)
|
if (texture != null)
|
||||||
{
|
{
|
||||||
|
if (texture.Type != (sbyte)AssetType.Texture)
|
||||||
|
{
|
||||||
|
httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
|
||||||
|
httpResponse.Send();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
SendTexture(httpRequest, httpResponse, texture);
|
SendTexture(httpRequest, httpResponse, texture);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -768,8 +768,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
|
||||||
bool canEditObjectsChanged = ((rights ^ userFlags) & (int)FriendRights.CanModifyObjects) != 0;
|
bool canEditObjectsChanged = ((rights ^ userFlags) & (int)FriendRights.CanModifyObjects) != 0;
|
||||||
if (canEditObjectsChanged)
|
if (canEditObjectsChanged)
|
||||||
friendClient.SendChangeUserRights(userID, friendID, rights);
|
friendClient.SendChangeUserRights(userID, friendID, rights);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// update local cache
|
||||||
|
//m_Friends[friendID].Friends = m_FriendsService.GetFriends(friendID);
|
||||||
|
foreach (FriendInfo finfo in m_Friends[friendID].Friends)
|
||||||
|
if (finfo.Friend == userID.ToString())
|
||||||
|
finfo.TheirFlags = rights;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual UUID DeleteToInventory(DeRezAction action, UUID folderID,
|
public override UUID DeleteToInventory(DeRezAction action, UUID folderID,
|
||||||
SceneObjectGroup objectGroup, IClientAPI remoteClient)
|
SceneObjectGroup objectGroup, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
UUID assetID = base.DeleteToInventory(action, folderID, new List<SceneObjectGroup>() {objectGroup}, remoteClient);
|
UUID assetID = base.DeleteToInventory(action, folderID, new List<SceneObjectGroup>() {objectGroup}, remoteClient);
|
||||||
|
|
|
@ -286,23 +286,15 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
{
|
{
|
||||||
// Deleting someone else's item
|
// Deleting someone else's item
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
if (remoteClient == null ||
|
if (remoteClient == null ||
|
||||||
objectGroup.OwnerID != remoteClient.AgentId)
|
objectGroup.OwnerID != remoteClient.AgentId)
|
||||||
{
|
{
|
||||||
// Folder skeleton may not be loaded and we
|
|
||||||
// have to wait for the inventory to find
|
|
||||||
// the destination folder
|
|
||||||
//
|
|
||||||
folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
|
folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Assume inventory skeleton was loaded during login
|
folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.TrashFolder);
|
||||||
// and all folders can be found
|
|
||||||
//
|
|
||||||
folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.TrashFolder);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (action == DeRezAction.Return)
|
else if (action == DeRezAction.Return)
|
||||||
|
@ -332,7 +324,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
|
|
||||||
if (folder == null) // None of the above
|
if (folder == null) // None of the above
|
||||||
{
|
{
|
||||||
//folder = userInfo.RootFolder.FindFolder(folderID);
|
|
||||||
folder = new InventoryFolderBase(folderID);
|
folder = new InventoryFolderBase(folderID);
|
||||||
|
|
||||||
if (folder == null) // Nowhere to put it
|
if (folder == null) // Nowhere to put it
|
||||||
|
|
|
@ -40,7 +40,7 @@ using OpenSim.Region.Framework.Scenes;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.Scripting.EmailModules
|
namespace OpenSim.Region.CoreModules.Scripting.EmailModules
|
||||||
{
|
{
|
||||||
public class EmailModule : IEmailModule
|
public class EmailModule : IRegionModule, IEmailModule
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Log
|
// Log
|
||||||
|
|
|
@ -96,7 +96,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Inventory
|
||||||
|
|
||||||
Object[] args = new Object[] { m_Config, MainServer.Instance, "HGInventoryService" };
|
Object[] args = new Object[] { m_Config, MainServer.Instance, "HGInventoryService" };
|
||||||
|
|
||||||
ServerUtils.LoadPlugin<IServiceConnector>("OpenSim.Server.Handlers.dll:HGInventoryServiceInConnector", args);
|
ServerUtils.LoadPlugin<IServiceConnector>("OpenSim.Server.Handlers.dll:XInventoryInConnector", args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
public int numLeft;
|
public int numLeft;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IEmailModule : IRegionModule
|
public interface IEmailModule
|
||||||
{
|
{
|
||||||
void SendEmail(UUID objectID, string address, string subject, string body);
|
void SendEmail(UUID objectID, string address, string subject, string body);
|
||||||
Email GetNextEmail(UUID objectID, string sender, string subject);
|
Email GetNextEmail(UUID objectID, string sender, string subject);
|
||||||
|
|
|
@ -52,6 +52,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public double GetUpdatePriority(IClientAPI client, ISceneEntity entity)
|
public double GetUpdatePriority(IClientAPI client, ISceneEntity entity)
|
||||||
{
|
{
|
||||||
double priority = 0;
|
double priority = 0;
|
||||||
|
|
||||||
|
if (entity == null)
|
||||||
|
return 100000;
|
||||||
|
|
||||||
switch (m_scene.UpdatePrioritizationScheme)
|
switch (m_scene.UpdatePrioritizationScheme)
|
||||||
{
|
{
|
||||||
|
|
|
@ -385,9 +385,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (Permissions.PropagatePermissions() && recipient != senderId)
|
if (Permissions.PropagatePermissions() && recipient != senderId)
|
||||||
{
|
{
|
||||||
// First, make sore base is limited to the next perms
|
// First, make sore base is limited to the next perms
|
||||||
itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions;
|
itemCopy.BasePermissions = item.BasePermissions & (item.NextPermissions | (uint)PermissionMask.Move);
|
||||||
// By default, current equals base
|
// By default, current equals base
|
||||||
itemCopy.CurrentPermissions = itemCopy.BasePermissions;
|
itemCopy.CurrentPermissions = itemCopy.BasePermissions & item.CurrentPermissions;
|
||||||
|
|
||||||
// If this is an object, replace current perms
|
// If this is an object, replace current perms
|
||||||
// with folded perms
|
// with folded perms
|
||||||
|
@ -398,7 +398,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure there is no escalation
|
// Ensure there is no escalation
|
||||||
itemCopy.CurrentPermissions &= item.NextPermissions;
|
itemCopy.CurrentPermissions &= (item.NextPermissions | (uint)PermissionMask.Move);
|
||||||
|
|
||||||
// Need slam bit on xfer
|
// Need slam bit on xfer
|
||||||
itemCopy.CurrentPermissions |= 8;
|
itemCopy.CurrentPermissions |= 8;
|
||||||
|
@ -897,14 +897,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions())
|
if ((part.OwnerID != destAgent) && Permissions.PropagatePermissions())
|
||||||
{
|
{
|
||||||
agentItem.BasePermissions = taskItem.BasePermissions & taskItem.NextPermissions;
|
agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
if (taskItem.InvType == (int)InventoryType.Object)
|
if (taskItem.InvType == (int)InventoryType.Object)
|
||||||
agentItem.CurrentPermissions = agentItem.BasePermissions & ((taskItem.CurrentPermissions & 7) << 13);
|
agentItem.CurrentPermissions = agentItem.BasePermissions & (((taskItem.CurrentPermissions & 7) << 13) | (taskItem.CurrentPermissions & (uint)PermissionMask.Move));
|
||||||
agentItem.CurrentPermissions = agentItem.BasePermissions ;
|
else
|
||||||
|
agentItem.CurrentPermissions = agentItem.BasePermissions & taskItem.CurrentPermissions;
|
||||||
|
|
||||||
agentItem.CurrentPermissions |= 8;
|
agentItem.CurrentPermissions |= 8;
|
||||||
agentItem.NextPermissions = taskItem.NextPermissions;
|
agentItem.NextPermissions = taskItem.NextPermissions;
|
||||||
agentItem.EveryOnePermissions = taskItem.EveryonePermissions & taskItem.NextPermissions;
|
agentItem.EveryOnePermissions = taskItem.EveryonePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions;
|
agentItem.GroupPermissions = taskItem.GroupPermissions & taskItem.NextPermissions;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1086,13 +1087,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (Permissions.PropagatePermissions())
|
if (Permissions.PropagatePermissions())
|
||||||
{
|
{
|
||||||
destTaskItem.CurrentPermissions = srcTaskItem.CurrentPermissions &
|
destTaskItem.CurrentPermissions = srcTaskItem.CurrentPermissions &
|
||||||
srcTaskItem.NextPermissions;
|
(srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
destTaskItem.GroupPermissions = srcTaskItem.GroupPermissions &
|
destTaskItem.GroupPermissions = srcTaskItem.GroupPermissions &
|
||||||
srcTaskItem.NextPermissions;
|
(srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
destTaskItem.EveryonePermissions = srcTaskItem.EveryonePermissions &
|
destTaskItem.EveryonePermissions = srcTaskItem.EveryonePermissions &
|
||||||
srcTaskItem.NextPermissions;
|
(srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
destTaskItem.BasePermissions = srcTaskItem.BasePermissions &
|
destTaskItem.BasePermissions = srcTaskItem.BasePermissions &
|
||||||
srcTaskItem.NextPermissions;
|
(srcTaskItem.NextPermissions | (uint)PermissionMask.Move);
|
||||||
destTaskItem.CurrentPermissions |= 8; // Slam!
|
destTaskItem.CurrentPermissions |= 8; // Slam!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1747,9 +1747,31 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (m_parentScene.Permissions.CanDuplicateObject(original.Children.Count, original.UUID, AgentID, original.AbsolutePosition))
|
if (m_parentScene.Permissions.CanDuplicateObject(original.Children.Count, original.UUID, AgentID, original.AbsolutePosition))
|
||||||
{
|
{
|
||||||
SceneObjectGroup copy = original.Copy(AgentID, GroupID, true);
|
SceneObjectGroup copy = original.Copy(true);
|
||||||
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
copy.AbsolutePosition = copy.AbsolutePosition + offset;
|
||||||
|
|
||||||
|
if (original.OwnerID != AgentID)
|
||||||
|
{
|
||||||
|
copy.SetOwnerId(AgentID);
|
||||||
|
copy.SetRootPartOwner(copy.RootPart, AgentID, GroupID);
|
||||||
|
|
||||||
|
List<SceneObjectPart> partList =
|
||||||
|
new List<SceneObjectPart>(copy.Children.Values);
|
||||||
|
|
||||||
|
if (m_parentScene.Permissions.PropagatePermissions())
|
||||||
|
{
|
||||||
|
foreach (SceneObjectPart child in partList)
|
||||||
|
{
|
||||||
|
child.Inventory.ChangeInventoryOwner(AgentID);
|
||||||
|
child.TriggerScriptChangedEvent(Changed.OWNER);
|
||||||
|
child.ApplyNextOwnerPermissions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
copy.RootPart.ObjectSaleType = 0;
|
||||||
|
copy.RootPart.SalePrice = 10;
|
||||||
|
}
|
||||||
|
|
||||||
Entities.Add(copy);
|
Entities.Add(copy);
|
||||||
|
|
||||||
// Since we copy from a source group that is in selected
|
// Since we copy from a source group that is in selected
|
||||||
|
|
|
@ -1472,7 +1472,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
"[SCENE]: Storing {0}, {1} in {2}",
|
"[SCENE]: Storing {0}, {1} in {2}",
|
||||||
Name, UUID, m_scene.RegionInfo.RegionName);
|
Name, UUID, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
SceneObjectGroup backup_group = Copy(OwnerID, GroupID, false);
|
SceneObjectGroup backup_group = Copy(false);
|
||||||
backup_group.RootPart.Velocity = RootPart.Velocity;
|
backup_group.RootPart.Velocity = RootPart.Velocity;
|
||||||
backup_group.RootPart.Acceleration = RootPart.Acceleration;
|
backup_group.RootPart.Acceleration = RootPart.Acceleration;
|
||||||
backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity;
|
backup_group.RootPart.AngularVelocity = RootPart.AngularVelocity;
|
||||||
|
@ -1528,7 +1528,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Duplicates this object, including operations such as physics set up and attaching to the backup event.
|
/// Duplicates this object, including operations such as physics set up and attaching to the backup event.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public SceneObjectGroup Copy(UUID cAgentID, UUID cGroupID, bool userExposed)
|
public SceneObjectGroup Copy(bool userExposed)
|
||||||
{
|
{
|
||||||
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
||||||
dupe.m_isBackedUp = false;
|
dupe.m_isBackedUp = false;
|
||||||
|
@ -1551,7 +1551,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z);
|
dupe.AbsolutePosition = new Vector3(AbsolutePosition.X, AbsolutePosition.Y, AbsolutePosition.Z);
|
||||||
|
|
||||||
if (!userExposed)
|
if (!userExposed)
|
||||||
|
{
|
||||||
dupe.RootPart.IsAttachment = previousAttachmentStatus;
|
dupe.RootPart.IsAttachment = previousAttachmentStatus;
|
||||||
|
}
|
||||||
|
|
||||||
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
|
||||||
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
|
||||||
|
@ -1576,16 +1578,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
dupe.RootPart.DoPhysicsPropertyUpdate(dupe.RootPart.PhysActor.IsPhysical, true);
|
dupe.RootPart.DoPhysicsPropertyUpdate(dupe.RootPart.PhysActor.IsPhysical, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now we've made a copy that replaces this one, we need to
|
|
||||||
// switch the owner to the person who did the copying
|
|
||||||
// Second Life copies an object and duplicates the first one in it's place
|
|
||||||
// So, we have to make a copy of this one, set it in it's place then set the owner on this one
|
|
||||||
if (userExposed)
|
|
||||||
{
|
|
||||||
SetRootPartOwner(m_rootPart, cAgentID, cGroupID);
|
|
||||||
m_rootPart.ScheduleFullUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<SceneObjectPart> partList;
|
List<SceneObjectPart> partList;
|
||||||
|
|
||||||
lock (m_parts)
|
lock (m_parts)
|
||||||
|
@ -1606,12 +1598,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SceneObjectPart newPart = dupe.CopyPart(part, OwnerID, GroupID, userExposed);
|
SceneObjectPart newPart = dupe.CopyPart(part, OwnerID, GroupID, userExposed);
|
||||||
|
|
||||||
newPart.LinkNum = part.LinkNum;
|
newPart.LinkNum = part.LinkNum;
|
||||||
|
|
||||||
if (userExposed)
|
|
||||||
{
|
|
||||||
SetPartOwner(newPart, cAgentID, cGroupID);
|
|
||||||
newPart.ScheduleFullUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3595,7 +3581,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
public virtual ISceneObject CloneForNewScene()
|
public virtual ISceneObject CloneForNewScene()
|
||||||
{
|
{
|
||||||
SceneObjectGroup sog = Copy(this.OwnerID, this.GroupID, false);
|
SceneObjectGroup sog = Copy(false);
|
||||||
sog.m_isDeleted = false;
|
sog.m_isDeleted = false;
|
||||||
return sog;
|
return sog;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ using System.IO;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Threading;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
@ -200,6 +201,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if ((int)InventoryType.LSL == item.InvType)
|
if ((int)InventoryType.LSL == item.InvType)
|
||||||
{
|
{
|
||||||
CreateScriptInstance(item, startParam, postOnRez, engine, stateSource);
|
CreateScriptInstance(item, startParam, postOnRez, engine, stateSource);
|
||||||
|
Thread.Sleep(10); // workaround for Mono cpu utilization > 100% bug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -257,7 +259,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_log.InfoFormat(
|
// m_log.InfoFormat(
|
||||||
// "[PRIM INVENTORY]: " +
|
// "[PRIM INVENTORY]: " +
|
||||||
// "Starting script {0}, {1} in prim {2}, {3}",
|
// "Starting script {0}, {1} in prim {2}, {3}",
|
||||||
// item.Name, item.ItemID, Name, UUID);
|
// item.Name, item.ItemID, m_part.Name, m_part.UUID);
|
||||||
|
|
||||||
if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
|
if (!m_part.ParentGroup.Scene.Permissions.CanRunScript(item.ItemID, m_part.UUID, item.OwnerID))
|
||||||
return;
|
return;
|
||||||
|
@ -293,20 +295,20 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_part.ParentGroup.m_savedScriptState != null)
|
|
||||||
RestoreSavedScriptState(item.OldItemID, item.ItemID);
|
|
||||||
|
|
||||||
lock (m_items)
|
lock (m_items)
|
||||||
{
|
{
|
||||||
|
if (m_part.ParentGroup.m_savedScriptState != null)
|
||||||
|
RestoreSavedScriptState(item.OldItemID, item.ItemID);
|
||||||
|
|
||||||
m_items[item.ItemID].PermsMask = 0;
|
m_items[item.ItemID].PermsMask = 0;
|
||||||
m_items[item.ItemID].PermsGranter = UUID.Zero;
|
m_items[item.ItemID].PermsGranter = UUID.Zero;
|
||||||
|
|
||||||
|
string script = Utils.BytesToString(asset.Data);
|
||||||
|
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
|
||||||
|
m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource);
|
||||||
|
m_part.ParentGroup.AddActiveScriptCount(1);
|
||||||
|
m_part.ScheduleFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
string script = Utils.BytesToString(asset.Data);
|
|
||||||
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
|
|
||||||
m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource);
|
|
||||||
m_part.ParentGroup.AddActiveScriptCount(1);
|
|
||||||
m_part.ScheduleFullUpdate();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
|
||||||
public ContentManagementEntity(SceneObjectGroup Unchanged, bool physics)
|
public ContentManagementEntity(SceneObjectGroup Unchanged, bool physics)
|
||||||
: base(Unchanged, false)
|
: base(Unchanged, false)
|
||||||
{
|
{
|
||||||
m_UnchangedEntity = Unchanged.Copy(Unchanged.RootPart.OwnerID, Unchanged.RootPart.GroupID, false);
|
m_UnchangedEntity = Unchanged.Copy(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContentManagementEntity(string objectXML, Scene scene, bool physics)
|
public ContentManagementEntity(string objectXML, Scene scene, bool physics)
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public MetaEntity(SceneObjectGroup orig, bool physics)
|
public MetaEntity(SceneObjectGroup orig, bool physics)
|
||||||
{
|
{
|
||||||
m_Entity = orig.Copy(orig.RootPart.OwnerID, orig.RootPart.GroupID, false);
|
m_Entity = orig.Copy(false);
|
||||||
Initialize(physics);
|
Initialize(physics);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -675,7 +675,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity
|
m_dir.Z = vel_now.Z; // Preserve the accumulated falling velocity
|
||||||
|
|
||||||
d.Vector3 pos = d.BodyGetPosition(Body);
|
d.Vector3 pos = d.BodyGetPosition(Body);
|
||||||
Vector3 accel = new Vector3(-(m_dir.X - m_lastLinearVelocityVector.X / 0.1f), -(m_dir.Y - m_lastLinearVelocityVector.Y / 0.1f), m_dir.Z - m_lastLinearVelocityVector.Z / 0.1f);
|
// Vector3 accel = new Vector3(-(m_dir.X - m_lastLinearVelocityVector.X / 0.1f), -(m_dir.Y - m_lastLinearVelocityVector.Y / 0.1f), m_dir.Z - m_lastLinearVelocityVector.Z / 0.1f);
|
||||||
Vector3 posChange = new Vector3();
|
Vector3 posChange = new Vector3();
|
||||||
posChange.X = pos.X - m_lastPositionVector.X;
|
posChange.X = pos.X - m_lastPositionVector.X;
|
||||||
posChange.Y = pos.Y - m_lastPositionVector.Y;
|
posChange.Y = pos.Y - m_lastPositionVector.Y;
|
||||||
|
|
|
@ -1576,19 +1576,19 @@ Console.WriteLine(" JointCreateFixed");
|
||||||
//Console.WriteLine("Move " + m_primName);
|
//Console.WriteLine("Move " + m_primName);
|
||||||
if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009
|
if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009
|
||||||
// NON-'VEHICLES' are dealt with here
|
// NON-'VEHICLES' are dealt with here
|
||||||
if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f))
|
// if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f))
|
||||||
{
|
// {
|
||||||
d.Vector3 avel2 = d.BodyGetAngularVel(Body);
|
// d.Vector3 avel2 = d.BodyGetAngularVel(Body);
|
||||||
/*
|
// /*
|
||||||
if (m_angularlock.X == 1)
|
// if (m_angularlock.X == 1)
|
||||||
avel2.X = 0;
|
// avel2.X = 0;
|
||||||
if (m_angularlock.Y == 1)
|
// if (m_angularlock.Y == 1)
|
||||||
avel2.Y = 0;
|
// avel2.Y = 0;
|
||||||
if (m_angularlock.Z == 1)
|
// if (m_angularlock.Z == 1)
|
||||||
avel2.Z = 0;
|
// avel2.Z = 0;
|
||||||
d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z);
|
// d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z);
|
||||||
*/
|
// */
|
||||||
}
|
// }
|
||||||
//float PID_P = 900.0f;
|
//float PID_P = 900.0f;
|
||||||
|
|
||||||
float m_mass = CalculateMass();
|
float m_mass = CalculateMass();
|
||||||
|
|
|
@ -705,22 +705,75 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
//A and B should both be normalized
|
//A and B should both be normalized
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
double dotProduct = LSL_Vector.Dot(a, b);
|
LSL_Rotation rotBetween;
|
||||||
LSL_Vector crossProduct = LSL_Vector.Cross(a, b);
|
// Check for zero vectors. If either is zero, return zero rotation. Otherwise,
|
||||||
double magProduct = LSL_Vector.Mag(a) * LSL_Vector.Mag(b);
|
// continue calculation.
|
||||||
double angle = Math.Acos(dotProduct / magProduct);
|
if (a == new LSL_Vector(0.0f, 0.0f, 0.0f) || b == new LSL_Vector(0.0f, 0.0f, 0.0f))
|
||||||
LSL_Vector axis = LSL_Vector.Norm(crossProduct);
|
{
|
||||||
double s = Math.Sin(angle / 2);
|
rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
}
|
||||||
double x = axis.x * s;
|
else
|
||||||
double y = axis.y * s;
|
{
|
||||||
double z = axis.z * s;
|
a = LSL_Vector.Norm(a);
|
||||||
double w = Math.Cos(angle / 2);
|
b = LSL_Vector.Norm(b);
|
||||||
|
double dotProduct = LSL_Vector.Dot(a, b);
|
||||||
if (Double.IsNaN(x) || Double.IsNaN(y) || Double.IsNaN(z) || Double.IsNaN(w))
|
// There are two degenerate cases possible. These are for vectors 180 or
|
||||||
return new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
|
// 0 degrees apart. These have to be detected and handled individually.
|
||||||
|
//
|
||||||
return new LSL_Rotation((float)x, (float)y, (float)z, (float)w);
|
// Check for vectors 180 degrees apart.
|
||||||
|
// A dot product of -1 would mean the angle between vectors is 180 degrees.
|
||||||
|
if (dotProduct < -0.9999999f)
|
||||||
|
{
|
||||||
|
// First assume X axis is orthogonal to the vectors.
|
||||||
|
LSL_Vector orthoVector = new LSL_Vector(1.0f, 0.0f, 0.0f);
|
||||||
|
orthoVector = orthoVector - a * (a.x / LSL_Vector.Dot(a, a));
|
||||||
|
// Check for near zero vector. A very small non-zero number here will create
|
||||||
|
// a rotation in an undesired direction.
|
||||||
|
if (LSL_Vector.Mag(orthoVector) > 0.0001)
|
||||||
|
{
|
||||||
|
rotBetween = new LSL_Rotation(orthoVector.x, orthoVector.y, orthoVector.z, 0.0f);
|
||||||
|
}
|
||||||
|
// If the magnitude of the vector was near zero, then assume the X axis is not
|
||||||
|
// orthogonal and use the Z axis instead.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Set 180 z rotation.
|
||||||
|
rotBetween = new LSL_Rotation(0.0f, 0.0f, 1.0f, 0.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check for parallel vectors.
|
||||||
|
// A dot product of 1 would mean the angle between vectors is 0 degrees.
|
||||||
|
else if (dotProduct > 0.9999999f)
|
||||||
|
{
|
||||||
|
// Set zero rotation.
|
||||||
|
rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// All special checks have been performed so get the axis of rotation.
|
||||||
|
LSL_Vector crossProduct = LSL_Vector.Cross(a, b);
|
||||||
|
// Quarternion s value is the length of the unit vector + dot product.
|
||||||
|
double qs = 1.0 + dotProduct;
|
||||||
|
rotBetween = new LSL_Rotation(crossProduct.x, crossProduct.y, crossProduct.z, qs);
|
||||||
|
// Normalize the rotation.
|
||||||
|
double mag = LSL_Rotation.Mag(rotBetween);
|
||||||
|
// We shouldn't have to worry about a divide by zero here. The qs value will be
|
||||||
|
// non-zero because we already know if we're here, then the dotProduct is not -1 so
|
||||||
|
// qs will not be zero. Also, we've already handled the input vectors being zero so the
|
||||||
|
// crossProduct vector should also not be zero.
|
||||||
|
rotBetween.x = rotBetween.x / mag;
|
||||||
|
rotBetween.y = rotBetween.y / mag;
|
||||||
|
rotBetween.z = rotBetween.z / mag;
|
||||||
|
rotBetween.s = rotBetween.s / mag;
|
||||||
|
// Check for undefined values and set zero rotation if any found. This code might not actually be required
|
||||||
|
// any longer since zero vectors are checked for at the top.
|
||||||
|
if (Double.IsNaN(rotBetween.x) || Double.IsNaN(rotBetween.y) || Double.IsNaN(rotBetween.z) || Double.IsNaN(rotBetween.s))
|
||||||
|
{
|
||||||
|
rotBetween = new LSL_Rotation(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rotBetween;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llWhisper(int channelID, string text)
|
public void llWhisper(int channelID, string text)
|
||||||
|
@ -6520,6 +6573,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
if (cut.y - cut.x < 0.05f)
|
if (cut.y - cut.x < 0.05f)
|
||||||
{
|
{
|
||||||
cut.x = cut.y - 0.05f;
|
cut.x = cut.y - 0.05f;
|
||||||
|
if (cut.x < 0.0f)
|
||||||
|
{
|
||||||
|
cut.x = 0.0f;
|
||||||
|
cut.y = 0.05f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
shapeBlock.ProfileBegin = (ushort)(50000 * cut.x);
|
shapeBlock.ProfileBegin = (ushort)(50000 * cut.x);
|
||||||
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - cut.y));
|
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - cut.y));
|
||||||
|
@ -6715,9 +6773,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
{
|
{
|
||||||
profilecut.y = 1f;
|
profilecut.y = 1f;
|
||||||
}
|
}
|
||||||
if (profilecut.y - cut.x < 0.05f)
|
if (profilecut.y - profilecut.x < 0.05f)
|
||||||
{
|
{
|
||||||
profilecut.x = cut.y - 0.05f;
|
profilecut.x = profilecut.y - 0.05f;
|
||||||
|
if (profilecut.x < 0.0f)
|
||||||
|
{
|
||||||
|
profilecut.x = 0.0f;
|
||||||
|
profilecut.y = 0.05f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x);
|
shapeBlock.ProfileBegin = (ushort)(50000 * profilecut.x);
|
||||||
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - profilecut.y));
|
shapeBlock.ProfileEnd = (ushort)(50000 * (1 - profilecut.y));
|
||||||
|
|
|
@ -230,6 +230,12 @@ namespace OpenSim.Server.Base
|
||||||
"shutdown",
|
"shutdown",
|
||||||
"Quit the application", HandleQuit);
|
"Quit the application", HandleQuit);
|
||||||
|
|
||||||
|
// Register a command to read other commands from a file
|
||||||
|
MainConsole.Instance.Commands.AddCommand("base", false, "command-script",
|
||||||
|
"command-script <script>",
|
||||||
|
"Run a command script from file", HandleScript);
|
||||||
|
|
||||||
|
|
||||||
// Allow derived classes to perform initialization that
|
// Allow derived classes to perform initialization that
|
||||||
// needs to be done after the console has opened
|
// needs to be done after the console has opened
|
||||||
//
|
//
|
||||||
|
@ -259,6 +265,41 @@ namespace OpenSim.Server.Base
|
||||||
m_log.Info("[CONSOLE] Quitting");
|
m_log.Info("[CONSOLE] Quitting");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void HandleScript(string module, string[] parms)
|
||||||
|
{
|
||||||
|
if (parms.Length != 2)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
RunCommandScript(parms[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Run an optional startup list of commands
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName"></param>
|
||||||
|
private void RunCommandScript(string fileName)
|
||||||
|
{
|
||||||
|
if (File.Exists(fileName))
|
||||||
|
{
|
||||||
|
m_log.Info("[COMMANDFILE]: Running " + fileName);
|
||||||
|
|
||||||
|
using (StreamReader readFile = File.OpenText(fileName))
|
||||||
|
{
|
||||||
|
string currentCommand;
|
||||||
|
while ((currentCommand = readFile.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
if (currentCommand != String.Empty)
|
||||||
|
{
|
||||||
|
m_log.Info("[COMMANDFILE]: Running '" + currentCommand + "'");
|
||||||
|
MainConsole.Instance.RunCommand(currentCommand);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected virtual void ReadConfig()
|
protected virtual void ReadConfig()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,8 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
{
|
{
|
||||||
public class XInventoryInConnector : ServiceConnector
|
public class XInventoryInConnector : ServiceConnector
|
||||||
{
|
{
|
||||||
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private IInventoryService m_InventoryService;
|
private IInventoryService m_InventoryService;
|
||||||
private string m_ConfigName = "InventoryService";
|
private string m_ConfigName = "InventoryService";
|
||||||
|
|
||||||
|
@ -53,6 +55,8 @@ namespace OpenSim.Server.Handlers.Asset
|
||||||
if (configName != String.Empty)
|
if (configName != String.Empty)
|
||||||
m_ConfigName = configName;
|
m_ConfigName = configName;
|
||||||
|
|
||||||
|
m_log.DebugFormat("[XInventoryInConnector]: Starting with config name {0}", m_ConfigName);
|
||||||
|
|
||||||
IConfig serverConfig = config.Configs[m_ConfigName];
|
IConfig serverConfig = config.Configs[m_ConfigName];
|
||||||
if (serverConfig == null)
|
if (serverConfig == null)
|
||||||
throw new Exception(String.Format("No section '{0}' in config file", m_ConfigName));
|
throw new Exception(String.Format("No section '{0}' in config file", m_ConfigName));
|
||||||
|
|
|
@ -272,7 +272,7 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
//responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); ??? instead
|
//responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); ??? instead
|
||||||
}
|
}
|
||||||
|
|
||||||
// subclasses cab override this
|
// subclasses can override this
|
||||||
protected virtual bool UpdateAgent(GridRegion destination, AgentData agent)
|
protected virtual bool UpdateAgent(GridRegion destination, AgentData agent)
|
||||||
{
|
{
|
||||||
return m_SimulationService.UpdateAgent(destination, agent);
|
return m_SimulationService.UpdateAgent(destination, agent);
|
||||||
|
@ -280,6 +280,12 @@ namespace OpenSim.Server.Handlers.Simulation
|
||||||
|
|
||||||
protected virtual void DoAgentGet(Hashtable request, Hashtable responsedata, UUID id, UUID regionID)
|
protected virtual void DoAgentGet(Hashtable request, Hashtable responsedata, UUID id, UUID regionID)
|
||||||
{
|
{
|
||||||
|
if (m_SimulationService == null)
|
||||||
|
{
|
||||||
|
m_log.Debug("[AGENT HANDLER]: Agent GET called. Harmless but useless.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
GridRegion destination = new GridRegion();
|
GridRegion destination = new GridRegion();
|
||||||
destination.RegionID = regionID;
|
destination.RegionID = regionID;
|
||||||
|
|
||||||
|
|
|
@ -371,7 +371,7 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool Delete(string id)
|
public bool Delete(string id)
|
||||||
{
|
{
|
||||||
string errorMessage = String.Empty;
|
//string errorMessage = String.Empty;
|
||||||
string url = m_serverUrl + id;
|
string url = m_serverUrl + id;
|
||||||
|
|
||||||
if (m_cache != null)
|
if (m_cache != null)
|
||||||
|
|
|
@ -255,7 +255,11 @@ namespace OpenSim.Services.GridService
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[HYPERGRID LINKER]: Remote Gatekeeper at {0} provided malformed ExternalName {1}", regInfo.ExternalHostName, externalName);
|
m_log.WarnFormat("[HYPERGRID LINKER]: Remote Gatekeeper at {0} provided malformed ExternalName {1}", regInfo.ExternalHostName, externalName);
|
||||||
}
|
}
|
||||||
regInfo.RegionName = regInfo.ExternalHostName + ":" + regInfo.HttpPort + ":" + regInfo.RegionName;
|
string name = regInfo.RegionName;
|
||||||
|
regInfo.RegionName = regInfo.ExternalHostName + ":" + regInfo.HttpPort;
|
||||||
|
if (name != string.Empty)
|
||||||
|
regInfo.RegionName += ":" + name;
|
||||||
|
|
||||||
// Try get the map image
|
// Try get the map image
|
||||||
//regInfo.TerrainImage = m_GatekeeperConnector.GetMapImage(regionID, imageURL);
|
//regInfo.TerrainImage = m_GatekeeperConnector.GetMapImage(regionID, imageURL);
|
||||||
// I need a texture that works for this... the one I tried doesn't seem to be working
|
// I need a texture that works for this... the one I tried doesn't seem to be working
|
||||||
|
|
|
@ -108,13 +108,13 @@ namespace OpenSim.Services.InventoryService
|
||||||
// Warp! Root folder for travelers
|
// Warp! Root folder for travelers
|
||||||
XInventoryFolder[] folders = m_Database.GetFolders(
|
XInventoryFolder[] folders = m_Database.GetFolders(
|
||||||
new string[] { "agentID", "folderName"},
|
new string[] { "agentID", "folderName"},
|
||||||
new string[] { principalID.ToString(), "Suitcase" });
|
new string[] { principalID.ToString(), "My Suitcase" });
|
||||||
|
|
||||||
if (folders.Length > 0)
|
if (folders.Length > 0)
|
||||||
return ConvertToOpenSim(folders[0]);
|
return ConvertToOpenSim(folders[0]);
|
||||||
|
|
||||||
// make one
|
// make one
|
||||||
XInventoryFolder suitcase = CreateFolder(principalID, UUID.Zero, (int)AssetType.Folder, "Suitcase");
|
XInventoryFolder suitcase = CreateFolder(principalID, UUID.Zero, (int)AssetType.Folder, "My Suitcase");
|
||||||
return ConvertToOpenSim(suitcase);
|
return ConvertToOpenSim(suitcase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -200,7 +200,14 @@ namespace OpenSim.Services.InventoryService
|
||||||
if (folders.Length == 0)
|
if (folders.Length == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
return ConvertToOpenSim(folders[0]);
|
XInventoryFolder root = null;
|
||||||
|
foreach (XInventoryFolder folder in folders)
|
||||||
|
if (folder.folderName == "My Inventory")
|
||||||
|
root = folder;
|
||||||
|
if (folders == null) // oops
|
||||||
|
root = folders[0];
|
||||||
|
|
||||||
|
return ConvertToOpenSim(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual InventoryFolderBase GetFolderForType(UUID principalID, AssetType type)
|
public virtual InventoryFolderBase GetFolderForType(UUID principalID, AssetType type)
|
||||||
|
|
|
@ -36,9 +36,9 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\..\..\bin\log4net.dll</HintPath>
|
<HintPath>..\..\..\bin\log4net.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="OpenSim.Server, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Robust, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\..\..\bin\OpenSim.Server.exe</HintPath>
|
<HintPath>..\..\..\bin\Robust.exe</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core">
|
<Reference Include="System.Core">
|
||||||
|
|
|
@ -597,21 +597,19 @@
|
||||||
; Set this to a nonzero value to have remote admin use a different port
|
; Set this to a nonzero value to have remote admin use a different port
|
||||||
port = 0
|
port = 0
|
||||||
|
|
||||||
|
; This password is required to make any XMLRPC call (should be set as the "password" parameter)
|
||||||
access_password = unknown
|
access_password = unknown
|
||||||
|
|
||||||
; set this variable to true if you want the create_region XmlRpc
|
; set this variable to true if you want the create_region XmlRpc
|
||||||
; call to unconditionally enable voice on all parcels for a newly
|
; call to unconditionally enable voice on all parcels for a newly
|
||||||
; created region [default: false]
|
; created region [default: false]
|
||||||
|
|
||||||
create_region_enable_voice = false
|
create_region_enable_voice = false
|
||||||
|
|
||||||
; set this variable to false if you want the create_region XmlRpc
|
; set this variable to false if you want the create_region XmlRpc
|
||||||
; call to create all regions as private per default (can be
|
; call to create all regions as private per default (can be
|
||||||
; overridden in the XmlRpc call) [default: true]
|
; overridden in the XmlRpc call) [default: true]
|
||||||
|
|
||||||
create_region_public = false
|
create_region_public = false
|
||||||
|
|
||||||
|
|
||||||
; the create_region XmlRpc call uses region_file_template to generate
|
; the create_region XmlRpc call uses region_file_template to generate
|
||||||
; the file name of newly create regions (if they are created
|
; the file name of newly create regions (if they are created
|
||||||
; persistent). the parameter available are:
|
; persistent). the parameter available are:
|
||||||
|
@ -620,7 +618,6 @@
|
||||||
; {2} - region UUID
|
; {2} - region UUID
|
||||||
; {3} - region port
|
; {3} - region port
|
||||||
; {4} - region name with " ", ":", "/" mapped to "_"
|
; {4} - region name with " ", ":", "/" mapped to "_"
|
||||||
|
|
||||||
region_file_template = "{0}x{1}-{2}.xml"
|
region_file_template = "{0}x{1}-{2}.xml"
|
||||||
|
|
||||||
; we can limit the number of regions that XmlRpcCreateRegion will
|
; we can limit the number of regions that XmlRpcCreateRegion will
|
||||||
|
@ -635,6 +632,18 @@
|
||||||
; if this parameter is not specified but enabled = true, all methods will be available
|
; if this parameter is not specified but enabled = true, all methods will be available
|
||||||
enabled_methods = all
|
enabled_methods = all
|
||||||
|
|
||||||
|
; specify the default appearance for an avatar created through the remote admin interface
|
||||||
|
; This will only take effect is the file specified by the default_appearance setting below exists
|
||||||
|
;default_male = Default Male
|
||||||
|
;default_female = Default Female
|
||||||
|
|
||||||
|
; update appearance copies inventory items and wearables of default avatars. if this value is false
|
||||||
|
; (default), just worn assets are copied to the Clothes folder; if true, all Clothes and Bodyparts
|
||||||
|
; subfolders are copied. the receiver will wear the same items the default avatar did wear.
|
||||||
|
;copy_folders = false
|
||||||
|
|
||||||
|
; path to default appearance XML file that specifies the look of the default avatars
|
||||||
|
;default_appearance = default_appearance.xml
|
||||||
|
|
||||||
[RestPlugins]
|
[RestPlugins]
|
||||||
; Change this to true to enable REST Plugins. This must be true if you wish to use
|
; Change this to true to enable REST Plugins. This must be true if you wish to use
|
||||||
|
|
Binary file not shown.
|
@ -198,6 +198,10 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
|
||||||
; CHANGE THIS
|
; CHANGE THIS
|
||||||
ExternalName = "http://127.0.0.1:8002"
|
ExternalName = "http://127.0.0.1:8002"
|
||||||
|
|
||||||
|
; Does this grid allow incoming links to any region in it?
|
||||||
|
; If false, HG TPs happen only to the Default regions specified in [GridService] section
|
||||||
|
AllowTeleportsToAnyRegion = true
|
||||||
|
|
||||||
[UserAgentService]
|
[UserAgentService]
|
||||||
LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
LocalServiceModule = "OpenSim.Services.HypergridService.dll:UserAgentService"
|
||||||
;; for the service
|
;; for the service
|
||||||
|
|
|
@ -68,3 +68,8 @@
|
||||||
|
|
||||||
[GatekeeperService]
|
[GatekeeperService]
|
||||||
ExternalName = "http://127.0.0.1:9000"
|
ExternalName = "http://127.0.0.1:9000"
|
||||||
|
|
||||||
|
; Does this grid allow incoming links to any region in it?
|
||||||
|
; If false, HG TPs happen only to the Default regions specified in [GridService] section
|
||||||
|
AllowTeleportsToAnyRegion = true
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue