From 270ae50d700831ac996025045dc32341d68ee0f9 Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Fri, 7 Aug 2009 14:17:51 +1000
Subject: * Implements MRM's Stop() interface member. * MRM Scripts should do
 appropriate cleanup within this event, to allow for clean shutdowns and
 script updates. This means unbinding from events you are listening to, and
 releasing any resources.

---
 .../Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs | 1 +
 OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs | 9 +++++++++
 2 files changed, 10 insertions(+)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
index 40693ab..5bf29d7 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs
@@ -81,6 +81,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
         public int Type { get { return m_privateItem.Type; } }
         public UUID AssetID { get { return m_privateItem.AssetID; } }
         
+        // This method exposes OpenSim/OpenMetaverse internals and needs to be replaced with a IAsset specific to MRM.
         public T RetreiveAsset<T>() where T : OpenMetaverse.Assets.Asset, new()
         {
             AssetBase a = m_rootSceene.AssetService.Get(AssetID.ToString());
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
index 53145e2..eb807f2 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs
@@ -73,6 +73,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
                     if (!source.Configs["MRM"].GetBoolean("Hidden", false))
                     {
                         scene.EventManager.OnRezScript += EventManager_OnRezScript;
+                        scene.EventManager.OnStopScript += EventManager_OnStopScript;
                     }
                     
                     scene.EventManager.OnFrame += EventManager_OnFrame;
@@ -90,6 +91,14 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
             }
         }
 
+        void EventManager_OnStopScript(uint localID, UUID itemID)
+        {
+            if(m_scripts.ContainsKey(itemID))
+            {
+                m_scripts[itemID].Stop();
+            }
+        }
+
         void EventManager_OnFrame()
         {
             m_microthreads.Tick(1000);
-- 
cgit v1.1