From b6bee4999c9d238a052022f105069ea4eb85f8f4 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 3 Feb 2010 15:35:41 +0000
Subject: change position of OnAttach event firing so that this also happens
 when a user teleports into a region

---
 OpenSim/Region/Framework/Scenes/Scene.cs      | 29 +++++++++++++++------------
 OpenSim/Region/Framework/Scenes/SceneGraph.cs |  3 +--
 2 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 73b0b3e..ff2be05 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2496,20 +2496,24 @@ namespace OpenSim.Region.Framework.Scenes
 
                     //RootPrim.SetParentLocalId(parentLocalID);
 
-                    m_log.DebugFormat("[ATTACHMENT]: Received " +
-                                "attachment {0}, inworld asset id {1}",
-                                //grp.RootPart.LastOwnerID.ToString(),
-                                grp.GetFromItemID(),
-                                grp.UUID.ToString());
+                    m_log.DebugFormat(
+                        "[ATTACHMENT]: Received attachment {0}, inworld asset id {1}",
+                        //grp.RootPart.LastOwnerID.ToString(),
+                        grp.GetFromItemID(),
+                        grp.UUID.ToString());
 
                     //grp.SetFromAssetID(grp.RootPart.LastOwnerID);
-                    m_log.DebugFormat("[ATTACHMENT]: Attach " +
-                            "to avatar {0} at position {1}",
-                            sp.UUID.ToString(), grp.AbsolutePosition);
-                    AttachObject(sp.ControllingClient,
-                            grp.LocalId, (uint)0,
-                            grp.GroupRotation,
-                            grp.AbsolutePosition, false);
+                    m_log.DebugFormat(
+                        "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID.ToString(), grp.AbsolutePosition);
+                    
+                    if (
+                        AttachObject(
+                            sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false))
+                    {
+                        // Do this last so that event listeners have access to all the effects of the attachment
+                        EventManager.TriggerOnAttach(grp.LocalId, UUID.Zero, sp.UUID);                        
+                    }
+                    
                     RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
                     grp.SendGroupFullUpdate();
                 }
@@ -2518,7 +2522,6 @@ namespace OpenSim.Region.Framework.Scenes
                     RootPrim.RemFlag(PrimFlags.TemporaryOnRez);
                     RootPrim.AddFlag(PrimFlags.TemporaryOnRez);
                 }
-
             }
             else
             {
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 1ac061a..b508af5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -627,11 +627,10 @@ namespace OpenSim.Region.Framework.Scenes
                     }
 
                     m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group);
-
                     group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent);
+                    
                     // In case it is later dropped again, don't let
                     // it get cleaned up
-                    //
                     group.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
                     group.HasGroupChanged = false;                   
                 }
-- 
cgit v1.1