diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 9c62ad392b..01be491573 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -1983,11 +1983,6 @@ namespace OpenSim.Region.Framework.Scenes
group.ResetIDs();
- AddNewSceneObject(group, true);
-
- // we set it's position in world.
- group.AbsolutePosition = pos;
-
SceneObjectPart rootPart = group.GetChildPart(group.UUID);
// Since renaming the item in the inventory does not affect the name stored
@@ -2027,31 +2022,21 @@ namespace OpenSim.Region.Framework.Scenes
part.NextOwnerMask = item.NextPermissions;
}
- rootPart.TrimPermissions();
-
- if (group.RootPart.Shape.PCode == (byte)PCode.Prim)
- {
- group.ClearPartAttachmentData();
- }
-
- group.UpdateGroupRotationR(rot);
-
- //group.ApplyPhysics(m_physicalPrim);
- if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero)
- {
- group.RootPart.ApplyImpulse((vel * group.GetMass()), false);
- group.Velocity = vel;
- rootPart.ScheduleFullUpdate();
- }
-
- group.CreateScriptInstances(param, true, DefaultScriptEngine, 2);
- rootPart.ScheduleFullUpdate();
+ rootPart.TrimPermissions();
if (!Permissions.BypassPermissions())
{
if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
sourcePart.Inventory.RemoveInventoryItem(item.ItemID);
}
+
+ AddNewSceneObject(group, true, pos, rot, vel);
+
+ // We can only call this after adding the scene object, since the scene object references the scene
+ // to find out if scripts should be activated at all.
+ group.CreateScriptInstances(param, true, DefaultScriptEngine, 2);
+
+ group.ScheduleGroupForFullUpdate();
return rootPart.ParentGroup;
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index a14762841d..b808c6d74c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -42,7 +42,6 @@ using OpenMetaverse.Imaging;
using OpenSim.Framework;
using OpenSim.Services.Interfaces;
using OpenSim.Framework.Communications;
-
using OpenSim.Framework.Console;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes.Scripting;
@@ -2008,6 +2007,23 @@ namespace OpenSim.Region.Framework.Scenes
{
return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates);
}
+
+ ///
+ /// Add a newly created object to the scene.
+ ///
+ ///
+ /// This method does not send updates to the client - callers need to handle this themselves.
+ ///
+ ///
+ /// Position of the object
+ /// Rotation of the object
+ /// Velocity of the object. This parameter only has an effect if the object is physical
+ ///
+ public bool AddNewSceneObject(
+ SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel)
+ {
+ return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, pos, rot, vel);
+ }
///
/// Delete every object from the scene. This does not include attachments worn by avatars.
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 9f38a999de..31faeec620 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -292,6 +292,42 @@ namespace OpenSim.Region.Framework.Scenes
return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
}
+
+ ///
+ /// Add a newly created object to the scene.
+ ///
+ ///
+ /// This method does not send updates to the client - callers need to handle this themselves.
+ ///
+ ///
+ /// Position of the object
+ /// Rotation of the object
+ /// Velocity of the object. This parameter only has an effect if the object is physical
+ ///
+ public bool AddNewSceneObject(
+ SceneObjectGroup sceneObject, bool attachToBackup, Vector3 pos, Quaternion rot, Vector3 vel)
+ {
+ AddNewSceneObject(sceneObject, true, false);
+
+ // we set it's position in world.
+ sceneObject.AbsolutePosition = pos;
+
+ if (sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim)
+ {
+ sceneObject.ClearPartAttachmentData();
+ }
+
+ sceneObject.UpdateGroupRotationR(rot);
+
+ //group.ApplyPhysics(m_physicalPrim);
+ if (sceneObject.RootPart.PhysActor != null && sceneObject.RootPart.PhysActor.IsPhysical && vel != Vector3.Zero)
+ {
+ sceneObject.RootPart.ApplyImpulse((vel * sceneObject.GetMass()), false);
+ sceneObject.Velocity = vel;
+ }
+
+ return true;
+ }
///
/// Add an object to the scene. This will both update the scene, and send information about the