diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 19c4b1dc2e..36550f4cbf 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -564,7 +564,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
foreach (SceneObjectGroup grp in sp.GetAttachments())
{
- sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT);
+ if ((grp.ScriptEvents & scriptEvents.changed) != 0)
+ sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT);
}
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp);
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index 9abb2eccb7..c57f98072b 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -223,7 +223,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
{
m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
}
- m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION });
+ m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION);
SendAnimPack();
ret = true;
}
@@ -239,8 +239,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
// "[SCENE PRESENCE ANIMATOR]: Updating movement animation to {0} for {1}",
// anim, m_scenePresence.Name);
- // 16384 is CHANGED_ANIMATION
- m_scenePresence.SendScriptEventToAttachments("changed", new Object[] { (int)Changed.ANIMATION });
+ m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION);
SendAnimPack();
ret = true;
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 974839d3de..8ce4d4fe99 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -689,7 +689,7 @@ namespace OpenSim.Region.Framework.Scenes
}
// now that position is changed tell it to scripts
- if (triggerScriptEvent)
+ if (triggerScriptEvent && (ScriptEvents & scriptEvents.changed) != 0)
{
foreach (SceneObjectPart part in parts)
{
@@ -2277,6 +2277,8 @@ namespace OpenSim.Region.Framework.Scenes
private scriptEvents lastRootPartPhysEvents = 0;
+ public scriptEvents ScriptEvents;
+
public void aggregateScriptEvents()
{
PrimFlags objectflagupdate = (PrimFlags)RootPart.GetEffectiveObjectFlags();
@@ -2328,6 +2330,7 @@ namespace OpenSim.Region.Framework.Scenes
parts[i].UpdatePhysicsSubscribedEvents();
}
+ ScriptEvents = aggregatedScriptEvents;
ScheduleGroupForFullUpdate();
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index dae13c291e..0287352b1d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -4503,7 +4503,8 @@ namespace OpenSim.Region.Framework.Scenes
public void TriggerScriptChangedEvent(Changed val, object data = null)
{
- if (ParentGroup != null && ParentGroup.Scene != null)
+ //if (ParentGroup != null && ParentGroup.Scene != null && (ScriptEvents & scriptEvents.changed) != 0)
+ if ((ScriptEvents & scriptEvents.changed) != 0)
ParentGroup.Scene.EventManager.TriggerOnScriptChangedEvent(LocalId, (uint)val, data);
}
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 20893bb168..fde8dbf641 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -5850,36 +5850,21 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- ///
- /// Send a script event to this scene presence's attachments
- ///
- /// The name of the event
- /// The arguments for the event
- public void SendScriptEventToAttachments(string eventName, Object[] args)
+ public void SendScriptChangedEventToAttachments(Changed val)
{
- Util.FireAndForget(delegate(object x)
+ lock (m_attachments)
{
- if (m_scriptEngines.Length == 0)
- return;
-
- lock (m_attachments)
+ foreach (SceneObjectGroup grp in m_attachments)
{
- foreach (SceneObjectGroup grp in m_attachments)
+ if ((grp.ScriptEvents & scriptEvents.changed) != 0)
{
- // 16384 is CHANGED_ANIMATION
- //
- // Send this to all attachment root prims
- //
- foreach (IScriptModule m in m_scriptEngines)
+ foreach(SceneObjectPart sop in grp.Parts)
{
- if (m == null) // No script engine loaded
- continue;
-
- m.PostObjectEvent(grp.RootPart.UUID, "changed", new Object[] { (int)Changed.ANIMATION });
+ sop.TriggerScriptChangedEvent(val);
}
}
}
- }, null, "ScenePresence.SendScriptEventToAttachments");
+ }
}
///