diff options
5 files changed, 41 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 4b3e45f..086496e 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs | |||
@@ -298,6 +298,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
298 | public delegate void EmptyScriptCompileQueue(int numScriptsFailed, string message); | 298 | public delegate void EmptyScriptCompileQueue(int numScriptsFailed, string message); |
299 | public event EmptyScriptCompileQueue OnEmptyScriptCompileQueue; | 299 | public event EmptyScriptCompileQueue OnEmptyScriptCompileQueue; |
300 | 300 | ||
301 | /// <summary> | ||
302 | /// Called whenever an object is attached, or detached | ||
303 | /// from an in-world presence. | ||
304 | /// </summary> | ||
305 | public delegate void Attach(uint localID, UUID itemID, UUID avatarID); | ||
306 | public event Attach OnAttach; | ||
307 | |||
301 | public class MoneyTransferArgs : EventArgs | 308 | public class MoneyTransferArgs : EventArgs |
302 | { | 309 | { |
303 | public UUID sender; | 310 | public UUID sender; |
@@ -438,6 +445,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
438 | 445 | ||
439 | private EmptyScriptCompileQueue handlerEmptyScriptCompileQueue = null; | 446 | private EmptyScriptCompileQueue handlerEmptyScriptCompileQueue = null; |
440 | 447 | ||
448 | private Attach handlerOnAttach = null; | ||
449 | |||
450 | public void TriggerOnAttach(uint localID, UUID itemID, UUID avatarID) | ||
451 | { | ||
452 | handlerOnAttach = OnAttach; | ||
453 | if (handlerOnAttach != null) | ||
454 | handlerOnAttach(localID, itemID, avatarID); | ||
455 | } | ||
456 | |||
441 | public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) | 457 | public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID) |
442 | { | 458 | { |
443 | handlerGetScriptRunning = OnGetScriptRunning; | 459 | handlerGetScriptRunning = OnGetScriptRunning; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 15009a3..facd301 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -2574,6 +2574,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2574 | EventManager.TriggerStopScript(part.LocalId, itemID); | 2574 | EventManager.TriggerStopScript(part.LocalId, itemID); |
2575 | } | 2575 | } |
2576 | 2576 | ||
2577 | internal void SendAttachEvent(uint localID, UUID itemID, UUID avatarID) | ||
2578 | { | ||
2579 | EventManager.TriggerOnAttach(localID, itemID, avatarID); | ||
2580 | } | ||
2581 | |||
2577 | public UUID RezSingleAttachment(IClientAPI remoteClient, UUID itemID, | 2582 | public UUID RezSingleAttachment(IClientAPI remoteClient, UUID itemID, |
2578 | uint AttachmentPt) | 2583 | uint AttachmentPt) |
2579 | { | 2584 | { |
@@ -2684,6 +2689,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2684 | remoteClient.SendRemoveInventoryItem(inventoryID); | 2689 | remoteClient.SendRemoveInventoryItem(inventoryID); |
2685 | } | 2690 | } |
2686 | } | 2691 | } |
2692 | SendAttachEvent(part.ParentGroup.LocalId, itemID, UUID.Zero); | ||
2687 | } | 2693 | } |
2688 | 2694 | ||
2689 | public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient) | 2695 | public void DetachSingleAttachmentToInv(UUID itemID, IClientAPI remoteClient) |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 3f63481..5752a88 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -489,6 +489,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
489 | // Calls attach with a Zero position | 489 | // Calls attach with a Zero position |
490 | // | 490 | // |
491 | AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false); | 491 | AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false); |
492 | m_parentScene.SendAttachEvent(objectLocalID, part.ParentGroup.GetFromAssetID(), remoteClient.AgentId); | ||
492 | } | 493 | } |
493 | 494 | ||
494 | public SceneObjectGroup RezSingleAttachment( | 495 | public SceneObjectGroup RezSingleAttachment( |
@@ -537,6 +538,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
537 | group = (SceneObjectGroup)entity; | 538 | group = (SceneObjectGroup)entity; |
538 | if (group.GetFromAssetID() == itemID) | 539 | if (group.GetFromAssetID() == itemID) |
539 | { | 540 | { |
541 | m_parentScene.SendAttachEvent(group.LocalId, itemID, UUID.Zero); | ||
540 | group.DetachToInventoryPrep(); | 542 | group.DetachToInventoryPrep(); |
541 | m_log.Debug("[DETACH]: Saving attachpoint: " + | 543 | m_log.Debug("[DETACH]: Saving attachpoint: " + |
542 | ((uint)group.GetAttachmentPoint()).ToString()); | 544 | ((uint)group.GetAttachmentPoint()).ToString()); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 42d61a7..586f926 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -89,6 +89,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
89 | private long m_eventDelayTicks = 0; | 89 | private long m_eventDelayTicks = 0; |
90 | private long m_nextEventTimeTicks = 0; | 90 | private long m_nextEventTimeTicks = 0; |
91 | private bool m_startOnInit = true; | 91 | private bool m_startOnInit = true; |
92 | private bool m_isAttachment = false; | ||
93 | private UUID m_attachedAvatar = UUID.Zero; | ||
92 | private StateSource m_stateSource; | 94 | private StateSource m_stateSource; |
93 | private bool m_postOnRez; | 95 | private bool m_postOnRez; |
94 | private bool m_startedFromSavedState = false; | 96 | private bool m_startedFromSavedState = false; |
@@ -232,6 +234,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
232 | m_MaxScriptQueue = maxScriptQueue; | 234 | m_MaxScriptQueue = maxScriptQueue; |
233 | m_stateSource = stateSource; | 235 | m_stateSource = stateSource; |
234 | m_postOnRez = postOnRez; | 236 | m_postOnRez = postOnRez; |
237 | m_isAttachment = part.IsAttachment; | ||
238 | m_attachedAvatar = part.AttachedAvatar; | ||
235 | m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; | 239 | m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID; |
236 | 240 | ||
237 | if (part != null) | 241 | if (part != null) |
@@ -379,6 +383,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
379 | new Object[] {new LSL_Types.LSLInteger(m_StartParam)}, new DetectParams[0])); | 383 | new Object[] {new LSL_Types.LSLInteger(m_StartParam)}, new DetectParams[0])); |
380 | } | 384 | } |
381 | 385 | ||
386 | if (m_isAttachment) | ||
387 | { | ||
388 | PostEvent(new EventParams("attach", | ||
389 | new object[] { new LSL_Types.LSLString(m_attachedAvatar.ToString()) }, new DetectParams[0])); | ||
390 | } | ||
391 | |||
382 | if (m_stateSource == StateSource.NewRez) | 392 | if (m_stateSource == StateSource.NewRez) |
383 | { | 393 | { |
384 | // m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script"); | 394 | // m_log.Debug("[Script] Posted changed(CHANGED_REGION_RESTART) to script"); |
@@ -403,6 +413,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
403 | new Object[] {new LSL_Types.LSLInteger(m_StartParam)}, new DetectParams[0])); | 413 | new Object[] {new LSL_Types.LSLInteger(m_StartParam)}, new DetectParams[0])); |
404 | } | 414 | } |
405 | 415 | ||
416 | if (m_isAttachment) | ||
417 | { | ||
418 | PostEvent(new EventParams("attach", | ||
419 | new object[] { new LSL_Types.LSLString(m_attachedAvatar.ToString()) }, new DetectParams[0])); | ||
420 | } | ||
421 | |||
406 | } | 422 | } |
407 | } | 423 | } |
408 | 424 | ||
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs index 3b9ff2e..7142c8c 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs | |||
@@ -53,6 +53,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
53 | myScriptEngine = _ScriptEngine; | 53 | myScriptEngine = _ScriptEngine; |
54 | 54 | ||
55 | m_log.Info("[XEngine] Hooking up to server events"); | 55 | m_log.Info("[XEngine] Hooking up to server events"); |
56 | myScriptEngine.World.EventManager.OnAttach += attach; | ||
56 | myScriptEngine.World.EventManager.OnObjectGrab += touch_start; | 57 | myScriptEngine.World.EventManager.OnObjectGrab += touch_start; |
57 | myScriptEngine.World.EventManager.OnObjectDeGrab += touch_end; | 58 | myScriptEngine.World.EventManager.OnObjectDeGrab += touch_end; |
58 | myScriptEngine.World.EventManager.OnScriptChangedEvent += changed; | 59 | myScriptEngine.World.EventManager.OnScriptChangedEvent += changed; |