Merge branch 'master' into careminster
Conflicts: OpenSim/Region/Framework/Scenes/SceneGraph.csavinationmerge
commit
7c888f6af1
|
@ -2310,7 +2310,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_sceneGraph.DelinkObjects(parts);
|
m_sceneGraph.DelinkObjects(parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Link the scene objects containing the indicated parts to a root object.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="client"></param>
|
||||||
|
/// <param name="parentPrimId">A root prim id of the object which will be the root prim of the resulting linkset.</param>
|
||||||
|
/// <param name="childPrimIds">A list of child prims for the objects that should be linked in.</param>
|
||||||
public void LinkObjects(IClientAPI client, uint parentPrimId, List<uint> childPrimIds)
|
public void LinkObjects(IClientAPI client, uint parentPrimId, List<uint> childPrimIds)
|
||||||
|
{
|
||||||
|
LinkObjects(client.AgentId, parentPrimId, childPrimIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Link the scene objects containing the indicated parts to a root object.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="agentId">The ID of the user linking.</param>
|
||||||
|
/// <param name="parentPrimId">A root prim id of the object which will be the root prim of the resulting linkset.</param>
|
||||||
|
/// <param name="childPrimIds">A list of child prims for the objects that should be linked in.</param>
|
||||||
|
public void LinkObjects(UUID agentId, uint parentPrimId, List<uint> childPrimIds)
|
||||||
{
|
{
|
||||||
List<UUID> owners = new List<UUID>();
|
List<UUID> owners = new List<UUID>();
|
||||||
|
|
||||||
|
@ -2323,7 +2340,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Permissions.CanLinkObject(client.AgentId, root.ParentGroup.RootPart.UUID))
|
if (!Permissions.CanLinkObject(agentId, root.ParentGroup.RootPart.UUID))
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim");
|
m_log.DebugFormat("[LINK]: Refusing link. No permissions on root prim");
|
||||||
return;
|
return;
|
||||||
|
@ -2339,7 +2356,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!owners.Contains(part.OwnerID))
|
if (!owners.Contains(part.OwnerID))
|
||||||
owners.Add(part.OwnerID);
|
owners.Add(part.OwnerID);
|
||||||
|
|
||||||
if (Permissions.CanLinkObject(client.AgentId, part.ParentGroup.RootPart.UUID))
|
if (Permissions.CanLinkObject(agentId, part.ParentGroup.RootPart.UUID))
|
||||||
children.Add(part);
|
children.Add(part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1751,6 +1751,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectGroup child = children[i].ParentGroup;
|
SceneObjectGroup child = children[i].ParentGroup;
|
||||||
|
|
||||||
|
// Don't try and add a group to itself - this will only cause severe problems later on.
|
||||||
|
if (child == parentGroup)
|
||||||
|
continue;
|
||||||
|
|
||||||
// Make sure no child prim is set for sale
|
// Make sure no child prim is set for sale
|
||||||
// So that, on delink, no prims are unwittingly
|
// So that, on delink, no prims are unwittingly
|
||||||
// left for sale and sold off
|
// left for sale and sold off
|
||||||
|
@ -1777,8 +1781,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// We need to explicitly resend the newly link prim's object properties since no other actions
|
// We need to explicitly resend the newly link prim's object properties since no other actions
|
||||||
// occur on link to invoke this elsewhere (such as object selection)
|
// occur on link to invoke this elsewhere (such as object selection)
|
||||||
parentGroup.RootPart.CreateSelected = true;
|
if (childGroups.Count > 0)
|
||||||
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
{
|
||||||
|
parentGroup.RootPart.CreateSelected = true;
|
||||||
|
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
|
parentGroup.HasGroupChanged = true;
|
||||||
|
parentGroup.ScheduleGroupForFullUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
|
@ -2361,6 +2361,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
|
// "[SCENE OBJECT GROUP]: Linking group with root part {0}, {1} to group with root part {2}, {3}",
|
||||||
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
|
// objectGroup.RootPart.Name, objectGroup.RootPart.UUID, RootPart.Name, RootPart.UUID);
|
||||||
|
|
||||||
|
// Linking to ourselves is not a valid operation.
|
||||||
|
if (objectGroup == this)
|
||||||
|
return;
|
||||||
|
|
||||||
SceneObjectPart linkPart = objectGroup.m_rootPart;
|
SceneObjectPart linkPart = objectGroup.m_rootPart;
|
||||||
|
|
||||||
Vector3 oldGroupPosition = linkPart.GroupPosition;
|
Vector3 oldGroupPosition = linkPart.GroupPosition;
|
||||||
|
|
|
@ -39,14 +39,31 @@ using log4net;
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Scenes.Tests
|
namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Linking tests
|
|
||||||
/// </summary>
|
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class SceneObjectLinkingTests
|
public class SceneObjectLinkingTests
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Links to self should be ignored.
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestLinkToSelf()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
UUID ownerId = TestHelpers.ParseTail(0x1);
|
||||||
|
int nParts = 3;
|
||||||
|
|
||||||
|
TestScene scene = SceneHelpers.SetupScene();
|
||||||
|
SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(nParts, ownerId, "TestLinkToSelf_", 0x10);
|
||||||
|
scene.AddSceneObject(sog1);
|
||||||
|
scene.LinkObjects(ownerId, sog1.LocalId, new List<uint>() { sog1.Parts[1].LocalId });
|
||||||
|
// sog1.LinkToGroup(sog1);
|
||||||
|
|
||||||
|
Assert.That(sog1.Parts.Length, Is.EqualTo(nParts));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestLinkDelink2SceneObjects()
|
public void TestLinkDelink2SceneObjects()
|
||||||
{
|
{
|
||||||
|
|
|
@ -299,13 +299,16 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
||||||
NPCAvatar av;
|
NPCAvatar av;
|
||||||
if (m_avatars.TryGetValue(agentID, out av))
|
if (m_avatars.TryGetValue(agentID, out av))
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[NPC MODULE]: Found {0} {1} to remove", agentID, av.Name);
|
||||||
scene.RemoveClient(agentID, false);
|
scene.RemoveClient(agentID, false);
|
||||||
m_avatars.Remove(agentID);
|
m_avatars.Remove(agentID);
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[NPC MODULE]: Removed {0} {1}", agentID, av.Name);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[NPC MODULE]: Could not find {0} to remove", agentID);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -538,6 +538,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
|
|
||||||
public bool Stop(int timeout)
|
public bool Stop(int timeout)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[SCRIPT INSTANCE]: Stopping script {0} {1} with timeout {2}", ScriptName, ItemID, timeout);
|
||||||
|
|
||||||
IScriptWorkItem result;
|
IScriptWorkItem result;
|
||||||
|
|
||||||
lock (m_EventQueue)
|
lock (m_EventQueue)
|
||||||
|
@ -772,7 +775,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SCRIPT] Exception: {0}", e.Message);
|
// m_log.DebugFormat(
|
||||||
|
// "[SCRIPT] Exception in script {0} {1}: {2}{3}",
|
||||||
|
// ScriptName, ItemID, e.Message, e.StackTrace);
|
||||||
|
|
||||||
m_InEvent = false;
|
m_InEvent = false;
|
||||||
m_CurrentEvent = String.Empty;
|
m_CurrentEvent = String.Empty;
|
||||||
|
|
||||||
|
|
|
@ -301,7 +301,7 @@ namespace OpenSim.Region.UserStatistics
|
||||||
|
|
||||||
public void OnRegisterCaps(UUID agentID, Caps caps)
|
public void OnRegisterCaps(UUID agentID, Caps caps)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[VC]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
|
m_log.DebugFormat("[WEB STATS MODULE]: OnRegisterCaps: agentID {0} caps {1}", agentID, caps);
|
||||||
string capsPath = "/CAPS/VS/" + UUID.Random();
|
string capsPath = "/CAPS/VS/" + UUID.Random();
|
||||||
caps.RegisterHandler("ViewerStats",
|
caps.RegisterHandler("ViewerStats",
|
||||||
new RestStreamHandler("POST", capsPath,
|
new RestStreamHandler("POST", capsPath,
|
||||||
|
@ -462,7 +462,7 @@ namespace OpenSim.Region.UserStatistics
|
||||||
|
|
||||||
if (!m_sessions.ContainsKey(agentID))
|
if (!m_sessions.ContainsKey(agentID))
|
||||||
{
|
{
|
||||||
m_log.Warn("[VS]: no session for stat disclosure");
|
m_log.Warn("[WEB STATS MODULE]: no session for stat disclosure");
|
||||||
return new UserSessionID();
|
return new UserSessionID();
|
||||||
}
|
}
|
||||||
uid = m_sessions[agentID];
|
uid = m_sessions[agentID];
|
||||||
|
@ -667,14 +667,13 @@ namespace OpenSim.Region.UserStatistics
|
||||||
{
|
{
|
||||||
updatecmd.ExecuteNonQuery();
|
updatecmd.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
catch
|
catch (SqliteExecutionException)
|
||||||
(SqliteExecutionException)
|
|
||||||
{
|
{
|
||||||
m_log.Warn("[WEBSTATS]: failed to write stats to storage Execution Exception");
|
m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage Execution Exception");
|
||||||
}
|
}
|
||||||
catch (SqliteSyntaxException)
|
catch (SqliteSyntaxException)
|
||||||
{
|
{
|
||||||
m_log.Warn("[WEBSTATS]: failed to write stats to storage SQL Syntax Exception");
|
m_log.Warn("[WEB STATS MODULE]: failed to write stats to storage SQL Syntax Exception");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3320,6 +3320,7 @@
|
||||||
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
<Reference name="OpenSim.Framework.Servers.HttpServer"/>
|
||||||
<Reference name="OpenSim.Region.CoreModules"/>
|
<Reference name="OpenSim.Region.CoreModules"/>
|
||||||
<Reference name="OpenSim.Region.Framework"/>
|
<Reference name="OpenSim.Region.Framework"/>
|
||||||
|
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
|
||||||
<Reference name="OpenSim.Region.ScriptEngine.XEngine"/>
|
<Reference name="OpenSim.Region.ScriptEngine.XEngine"/>
|
||||||
<Reference name="OpenSim.Tests.Common"/>
|
<Reference name="OpenSim.Tests.Common"/>
|
||||||
<Files>
|
<Files>
|
||||||
|
|
Loading…
Reference in New Issue