diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs
index 5256c9ec52..6dccf7761f 100644
--- a/OpenSim/Region/Environment/Scenes/InnerScene.cs
+++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs
@@ -1082,6 +1082,12 @@ namespace OpenSim.Region.Environment.Scenes
}
}
+ ///
+ /// Update the position of the given part
+ ///
+ ///
+ ///
+ ///
protected internal void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
{
SceneObjectGroup group = GetGroupByPrim(localID);
@@ -1093,6 +1099,7 @@ namespace OpenSim.Region.Environment.Scenes
group.SendGroupTerseUpdate();
return;
}
+
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
{
group.UpdateSinglePosition(pos, localID);
@@ -1101,7 +1108,7 @@ namespace OpenSim.Region.Environment.Scenes
}
///
- ///
+ /// Update the position of the given part
///
///
///
@@ -1122,6 +1129,7 @@ namespace OpenSim.Region.Environment.Scenes
if (!m_parentScene.ExternalChecks.ExternalChecksCanObjectEntry(group.UUID,pos) && !group.RootPart.m_IsAttachment)
{
group.SendGroupTerseUpdate();
+
return;
}
if (m_parentScene.ExternalChecks.ExternalChecksCanMoveObject(group.UUID, remoteClient.AgentId) || group.RootPart.m_IsAttachment)
@@ -1168,6 +1176,13 @@ namespace OpenSim.Region.Environment.Scenes
}
}
+ ///
+ /// Move the given object
+ ///
+ ///
+ ///
+ ///
+ ///
protected internal void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
{
SceneObjectGroup group = GetGroupByPrim(objectID);
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index dd9c706b32..a7c54b37d7 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1588,8 +1588,6 @@ namespace OpenSim.Region.Environment.Scenes
///
public void SendGroupTerseUpdate()
{
- HasGroupChanged = true;
-
lock (m_parts)
{
foreach (SceneObjectPart part in m_parts.Values)
@@ -2179,7 +2177,7 @@ namespace OpenSim.Region.Environment.Scenes
#region Position
///
- ///
+ /// Move this scene object
///
///
public void UpdateGroupPosition(LLVector3 pos)
@@ -2192,20 +2190,24 @@ namespace OpenSim.Region.Environment.Scenes
}
AbsolutePosition = pos;
+
+ HasGroupChanged = true;
}
+
//we need to do a terse update even if the move wasn't allowed
// so that the position is reset in the client (the object snaps back)
ScheduleGroupForTerseUpdate();
}
///
- ///
+ /// Update the position of a single part of this scene object
///
///
///
public void UpdateSinglePosition(LLVector3 pos, uint localID)
{
SceneObjectPart part = GetChildPart(localID);
+
if (part != null)
{
if (part.UUID == m_rootPart.UUID)
@@ -2216,6 +2218,8 @@ namespace OpenSim.Region.Environment.Scenes
{
part.UpdateOffSet(pos);
}
+
+ HasGroupChanged = true;
}
}