diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs index 7d7f90432e..51dcb7d7df 100644 --- a/OpenSim/Region/Framework/Interfaces/IScriptModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IScriptModule.cs @@ -38,5 +38,6 @@ namespace OpenSim.Region.Framework.Interfaces string GetXMLState(UUID itemID); bool PostScriptEvent(UUID itemID, string name, Object[] args); + bool PostObjectEvent(UUID itemID, string name, Object[] args); } } diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 2c316a6abd..d06c5838fb 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -223,6 +223,8 @@ namespace OpenSim.Region.Framework.Scenes string m_callbackURI; ulong m_rootRegionHandle; + private IScriptModule[] m_scriptEngines; + #region Properties /// @@ -585,6 +587,8 @@ namespace OpenSim.Region.Framework.Scenes if (gm != null) m_grouptitle = gm.GetGroupTitle(m_uuid); + m_scriptEngines = m_scene.RequestModuleInterfaces(); + AbsolutePosition = m_controllingClient.StartPos; AdjustKnownSeeds(); @@ -1943,7 +1947,24 @@ namespace OpenSim.Region.Framework.Scenes if (m_animations.TrySetDefaultAnimation(anim, m_controllingClient.NextAnimationSequenceNumber, UUID.Zero)) { - SendAnimPack(); + if (m_scriptEngines != null) + { + lock (m_attachments) + { + foreach (SceneObjectGroup grp in m_attachments) + { + // 16384 is CHANGED_ANIMATION + // + // Send this to all attachment root prims + // + foreach (IScriptModule m in m_scriptEngines) + { + m.PostObjectEvent(grp.RootPart.UUID, "changed", new Object[] {16384}); + } + SendAnimPack(); + } + } + } } } diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs index 34a7c7adfa..c3b52dfec2 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs @@ -222,6 +222,15 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine return PostScriptEvent(itemID, new EventParams(name, p, new DetectParams[0])); } + public bool PostObjectEvent(UUID itemID, string name, Object[] p) + { + SceneObjectPart part = m_Scene.GetSceneObjectPart(itemID); + if (part == null) + return false; + + return PostObjectEvent(part.LocalId, new EventParams(name, p, new DetectParams[0])); + } + public DetectParams GetDetectParams(UUID itemID, int number) { uint localID = m_ScriptManager.GetLocalID(itemID); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 5969a43329..c9777ad65a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs @@ -268,6 +268,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase public const int CHANGED_REGION_RESTART = 256; public const int CHANGED_REGION = 512; public const int CHANGED_TELEPORT = 1024; + public const int CHANGED_ANIMATION = 16384; public const int TYPE_INVALID = 0; public const int TYPE_INTEGER = 1; public const int TYPE_FLOAT = 2; diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 037c494bb5..f47e57daa9 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -938,6 +938,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine return PostScriptEvent(itemID, new EventParams(name, p, new DetectParams[0])); } + public bool PostObjectEvent(UUID itemID, string name, Object[] p) + { + SceneObjectPart part = m_Scene.GetSceneObjectPart(itemID); + if (part == null) + return false; + + return PostObjectEvent(part.LocalId, new EventParams(name, p, new DetectParams[0])); + } + public Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) {