From 8741676bc3681e2045084e17f86196693d9156d3 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Fri, 3 Dec 2010 18:32:03 +0100
Subject: Revert "Revert "Trigger changed event with CHANGED_TELEPORT when
 teleporting to another region.""

This reverts commit 6c01ebb87541ecf66d678606bb97d996bee51953.
---
 OpenSim/Region/Framework/Scenes/Scene.cs                | 15 ++++++---------
 .../Region/ScriptEngine/Interfaces/IScriptInstance.cs   |  3 ++-
 .../ScriptEngine/Shared/Instance/ScriptInstance.cs      | 17 ++++++++++-------
 3 files changed, 18 insertions(+), 17 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index d17814d..792115a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2391,16 +2391,14 @@ namespace OpenSim.Region.Framework.Scenes
                 m_log.DebugFormat("[SCENE]: Problem adding scene object {0} in {1} ", sog.UUID, RegionInfo.RegionName);
                 return false;
             }
-            
-            newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 2);
+
+            newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, GetStateSource(newObject));
 
             newObject.ResumeScripts();
 
             // Do this as late as possible so that listeners have full access to the incoming object
             EventManager.TriggerOnIncomingSceneObject(newObject);
 
-            TriggerChangedTeleport(newObject);
-            
             return true;
         }
 
@@ -2527,7 +2525,7 @@ namespace OpenSim.Region.Framework.Scenes
             return true;
         }
 
-        private void TriggerChangedTeleport(SceneObjectGroup sog)
+        private int GetStateSource(SceneObjectGroup sog)
         {
             ScenePresence sp = GetScenePresence(sog.OwnerID);
 
@@ -2538,13 +2536,12 @@ namespace OpenSim.Region.Framework.Scenes
                 if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default))
                 {
                     // This will get your attention
-                    //m_log.Error("[XXX] Triggering ");
+                    //m_log.Error("[XXX] Triggering CHANGED_TELEPORT");
 
-                    // Trigger CHANGED_TELEPORT
-                    sp.Scene.EventManager.TriggerOnScriptChangedEvent(sog.LocalId, (uint)Changed.TELEPORT);
+                    return 5; // StateSource.Teleporting
                 }
-
             }
+            return 2; // StateSource.PrimCrossing
         }
 
         #endregion
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 0c99d8c..8b7871b 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -42,7 +42,8 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
         NewRez = 1,
         PrimCrossing = 2,
         ScriptedRez = 3,
-        AttachedRez = 4
+        AttachedRez = 4,
+        Teleporting = 5
     }
 
     public interface IScriptWorkItem
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 5288cd3..9548253 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -391,19 +391,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
                 }
                 else if (m_stateSource == StateSource.RegionStart)
                 {
-//                    m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script");
+                    //m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script");
                     PostEvent(new EventParams("changed",
-                                              new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) },
-                                              new DetectParams[0]));
+                        new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION_RESTART) }, new DetectParams[0]));
                 }
-                else if (m_stateSource == StateSource.PrimCrossing)
+                else if (m_stateSource == StateSource.PrimCrossing || m_stateSource == StateSource.Teleporting)
                 {
                     // CHANGED_REGION
                     PostEvent(new EventParams("changed",
-                                              new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) },
-                                              new DetectParams[0]));
+                        new Object[] { new LSL_Types.LSLInteger((int)Changed.REGION) }, new DetectParams[0]));
+
+                    // CHANGED_TELEPORT
+                    if (m_stateSource == StateSource.Teleporting)
+                        PostEvent(new EventParams("changed",
+                            new Object[] { new LSL_Types.LSLInteger((int)Changed.TELEPORT) }, new DetectParams[0]));
                 }
-            } 
+            }
             else 
             {
                 Start();
-- 
cgit v1.1