aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
authorAlan Webb2009-08-03 21:43:08 -0400
committerdr scofield (aka dirk husemann)2009-08-04 11:41:06 +0200
commit9ffe4d850e9ccf2fc40901e186af3d38c31b9a6d (patch)
tree8f63928743d5383254bb934f58f3369c0492007e /OpenSim/Region/Framework
parentstarting to refactor path generation out of prim extrusion (diff)
downloadopensim-SC-9ffe4d850e9ccf2fc40901e186af3d38c31b9a6d.zip
opensim-SC-9ffe4d850e9ccf2fc40901e186af3d38c31b9a6d.tar.gz
opensim-SC-9ffe4d850e9ccf2fc40901e186af3d38c31b9a6d.tar.bz2
opensim-SC-9ffe4d850e9ccf2fc40901e186af3d38c31b9a6d.tar.xz
This change adds support for the attach event in scripts.
[1] Added a new OnAttach event to Scene/EventManager [2] Hooked up existing attach event handler in XEngine. [3] Modified SceneGraph and Scene.Inventory to trigger attach events at the appropriate places. I was forced to distribut the changes across two files because of the way attach processing is distributed across the two files. [4] In the case of RezSingleAttachmentFromInventory it is necessary to handle event scheduling in a special way. There is no synchronous path available, so the fact that this object is attached, and who it is attached to, is cached when the ScriptInstance is created. When the script is started, the attached handler is driven after on_rez (but before changed, this should be reviewed). Signed-off-by: dr scofield (aka dirk husemann) <drscofield@xyzzyxyzzy.net>
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs16
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs2
3 files changed, 24 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());