diff options
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index ecce237..b167fd7 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1247,7 +1247,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
1247 | // Vector3 oldPos = group.AbsolutePosition; | 1247 | // Vector3 oldPos = group.AbsolutePosition; |
1248 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) | 1248 | if (group.IsAttachment || (group.RootPart.Shape.PCode == 9 && group.RootPart.Shape.State != 0)) |
1249 | { | 1249 | { |
1250 | |||
1251 | // If this is an attachment, then we need to save the modified | ||
1252 | // object back into the avatar's inventory. First we save the | ||
1253 | // attachment point information, then we update the relative | ||
1254 | // positioning (which caused this method to get driven in the | ||
1255 | // first place. Then we have to mark the object as NOT an | ||
1256 | // attachment. This is necessary in order to correctly save | ||
1257 | // and retrieve GroupPosition information for the attachment. | ||
1258 | // Then we save the asset back into the appropriate inventory | ||
1259 | // entry. Finally, we restore the object's attachment status. | ||
1260 | |||
1261 | byte attachmentPoint = group.GetAttachmentPoint(); | ||
1250 | group.UpdateGroupPosition(pos); | 1262 | group.UpdateGroupPosition(pos); |
1263 | group.RootPart.IsAttachment = false; | ||
1264 | group.AbsolutePosition = group.RootPart.AttachedPos; | ||
1265 | m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(), group.OwnerID); | ||
1266 | group.SetAttachmentPoint(attachmentPoint); | ||
1267 | |||
1251 | } | 1268 | } |
1252 | else | 1269 | else |
1253 | { | 1270 | { |