From af5e9147f04cf949045377a4c344b866af2009c7 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 29 Nov 2008 14:16:09 +0000 Subject: [PATCH] Start scripts in attachments only after a successful attach. Elimininate a gratuitious asset fetch when region crossing. --- OpenSim/Region/Environment/Scenes/Scene.Inventory.cs | 5 +++-- OpenSim/Region/Environment/Scenes/SceneGraph.cs | 4 ++++ .../Environment/Scenes/SceneObjectPartInventory.cs | 9 +++++++++ .../ScriptEngine/Interfaces/IScriptInstance.cs | 2 +- .../Region/ScriptEngine/Shared/CodeTools/Compiler.cs | 12 ++++++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 113b16c653..d1e0c2491c 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -2088,10 +2088,11 @@ namespace OpenSim.Region.Environment.Scenes } // Fire on_rez - group.CreateScriptInstances(0, true, DefaultScriptEngine, 0); - if (!attachment) + { + group.CreateScriptInstances(0, true, DefaultScriptEngine, 0); rootPart.ScheduleFullUpdate(); + } if (!Permissions.BypassPermissions()) { diff --git a/OpenSim/Region/Environment/Scenes/SceneGraph.cs b/OpenSim/Region/Environment/Scenes/SceneGraph.cs index da3be089ff..22e515071c 100644 --- a/OpenSim/Region/Environment/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Environment/Scenes/SceneGraph.cs @@ -472,6 +472,10 @@ namespace OpenSim.Region.Environment.Scenes objatt.ScheduleGroupForFullUpdate(); if (tainted) objatt.HasGroupChanged = true; + + // Fire after attach, so we don't get messy perms dialogs + // + objatt.CreateScriptInstances(0, true, m_parentScene.DefaultScriptEngine, 0); } return objatt; } diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs index 793d31bb26..99ac72204e 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPartInventory.cs @@ -241,6 +241,15 @@ namespace OpenSim.Region.Environment.Scenes if (!m_part.ParentGroup.Scene.RegionInfo.RegionSettings.DisableScripts) { + if (stateSource == 1) // Prim crossing + { + m_items[item.ItemID].PermsMask = 0; + m_items[item.ItemID].PermsGranter = UUID.Zero; + m_part.ParentGroup.Scene.EventManager.TriggerRezScript( + m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource); + m_part.ParentGroup.AddActiveScriptCount(1); + m_part.ScheduleFullUpdate(); + } AssetCache cache = m_part.ParentGroup.Scene.AssetCache; cache.GetAsset(item.AssetID, delegate(UUID assetID, AssetBase asset) diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index dbcc4ed3bf..31202e261d 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs @@ -40,7 +40,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces { NewRez = 0, PrimCrossing = 1, - ScriptedRez= 2 + ScriptedRez = 2 } public interface IScriptWorkItem diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index 4c87c8aa54..a40b5ee4f7 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs @@ -286,6 +286,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools } } + if (Script == String.Empty) + { + if (File.Exists(OutFile)) + + { + m_scriptEngine.Log.DebugFormat("[Compiler] Returning existing assembly for {0}", asset); + return OutFile; + } + + throw new Exception("Cannot find script assembly and no script text present"); + } + enumCompileType l = DefaultCompileLanguage; if (Script.StartsWith("//c#", true, CultureInfo.InvariantCulture))