aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/EventManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/EventManager.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs501
1 files changed, 488 insertions, 13 deletions
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index eee5960..7133817 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -47,30 +47,75 @@ namespace OpenSim.Region.Framework.Scenes
47 47
48 public delegate void OnFrameDelegate(); 48 public delegate void OnFrameDelegate();
49 49
50 /// <summary>
51 /// Triggered on each sim frame.
52 /// </summary>
53 /// <remarks>
54 /// This gets triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.Update"/>
55 /// Core uses it for things like Sun, Wind & Clouds
56 /// The MRM module also uses it.
57 /// </remarks>
50 public event OnFrameDelegate OnFrame; 58 public event OnFrameDelegate OnFrame;
51 59
52 public delegate void ClientMovement(ScenePresence client); 60 public delegate void ClientMovement(ScenePresence client);
53 61
62 /// <summary>
63 /// Trigerred when an agent moves.
64 /// </summary>
65 /// <remarks>
66 /// This gets triggered in <see cref="OpenSim.Region.Framework.Scenes.ScenePresence.HandleAgentUpdate"/>
67 /// prior to <see cref="OpenSim.Region.Framework.Scenes.ScenePresence.TriggerScenePresenceUpdated"/>
68 /// </remarks>
54 public event ClientMovement OnClientMovement; 69 public event ClientMovement OnClientMovement;
55 70
56 public delegate void OnTerrainTaintedDelegate(); 71 public delegate void OnTerrainTaintedDelegate();
57 72
73 /// <summary>
74 /// Triggered if the terrain has been edited
75 /// </summary>
76 /// <remarks>
77 /// This gets triggered in <see cref="OpenSim.Region.CoreModules.World.Terrain.CheckForTerrainUpdates"/>
78 /// after it determines that an update has been made.
79 /// </remarks>
58 public event OnTerrainTaintedDelegate OnTerrainTainted; 80 public event OnTerrainTaintedDelegate OnTerrainTainted;
59 81
60 public delegate void OnTerrainTickDelegate(); 82 public delegate void OnTerrainTickDelegate();
61 83
62 public delegate void OnTerrainUpdateDelegate(); 84 /// <summary>
63 85 /// Triggered if the terrain has been edited
86 /// </summary>
87 /// <remarks>
88 /// This gets triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.UpdateTerrain"/>
89 /// but is used by core solely to update the physics engine.
90 /// </remarks>
64 public event OnTerrainTickDelegate OnTerrainTick; 91 public event OnTerrainTickDelegate OnTerrainTick;
65 92
93 public delegate void OnTerrainUpdateDelegate();
94
66 public event OnTerrainUpdateDelegate OnTerrainUpdate; 95 public event OnTerrainUpdateDelegate OnTerrainUpdate;
67 96
68 public delegate void OnBackupDelegate(ISimulationDataService datastore, bool forceBackup); 97 public delegate void OnBackupDelegate(ISimulationDataService datastore, bool forceBackup);
69 98
99 /// <summary>
100 /// Triggered when a region is backed up/persisted to storage
101 /// </summary>
102 /// <remarks>
103 /// This gets triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.Backup"/>
104 /// and is fired before the persistence occurs.
105 /// </remarks>
70 public event OnBackupDelegate OnBackup; 106 public event OnBackupDelegate OnBackup;
71 107
72 public delegate void OnClientConnectCoreDelegate(IClientCore client); 108 public delegate void OnClientConnectCoreDelegate(IClientCore client);
73 109
110 /// <summary>
111 /// Triggered when a new client connects to the scene.
112 /// </summary>
113 /// <remarks>
114 /// This gets triggered in <see cref="TriggerOnNewClient"/>,
115 /// which checks if an instance of <see cref="OpenSim.Framework.IClientAPI"/>
116 /// also implements <see cref="OpenSim.Framework.Client.IClientCore"/> and as such,
117 /// is not triggered by <see cref="OpenSim.Region.OptionalModules.World.NPC">NPCs</see>.
118 /// </remarks>
74 public event OnClientConnectCoreDelegate OnClientConnect; 119 public event OnClientConnectCoreDelegate OnClientConnect;
75 120
76 public delegate void OnNewClientDelegate(IClientAPI client); 121 public delegate void OnNewClientDelegate(IClientAPI client);
@@ -91,22 +136,74 @@ namespace OpenSim.Region.Framework.Scenes
91 136
92 public delegate void OnNewPresenceDelegate(ScenePresence presence); 137 public delegate void OnNewPresenceDelegate(ScenePresence presence);
93 138
139 /// <summary>
140 /// Triggered when a new presence is added to the scene
141 /// </summary>
142 /// <remarks>
143 /// Triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.AddNewClient"/> which is used by both
144 /// <see cref="OpenSim.Framework.PresenceType.User">users</see> and <see cref="OpenSim.Framework.PresenceType.Npc">NPCs</see>
145 /// </remarks>
94 public event OnNewPresenceDelegate OnNewPresence; 146 public event OnNewPresenceDelegate OnNewPresence;
95 147
96 public delegate void OnRemovePresenceDelegate(UUID agentId); 148 public delegate void OnRemovePresenceDelegate(UUID agentId);
97 149
150 /// <summary>
151 /// Triggered when a presence is removed from the scene
152 /// </summary>
153 /// <remarks>
154 /// Triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.AddNewClient"/> which is used by both
155 /// <see cref="OpenSim.Framework.PresenceType.User">users</see> and <see cref="OpenSim.Framework.PresenceType.Npc">NPCs</see>
156 /// </remarks>
98 public event OnRemovePresenceDelegate OnRemovePresence; 157 public event OnRemovePresenceDelegate OnRemovePresence;
99 158
100 public delegate void OnParcelPrimCountUpdateDelegate(); 159 public delegate void OnParcelPrimCountUpdateDelegate();
101 160
161 /// <summary>
162 /// Triggered whenever the prim count may have been altered, or prior
163 /// to an action that requires the current prim count to be accurate.
164 /// </summary>
165 /// <remarks>
166 /// Triggered by <see cref="TriggerParcelPrimCountUpdate"/> in
167 /// <see cref="OpenSim.OpenSimBase.CreateRegion"/>,
168 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandManagementModule.EventManagerOnRequestParcelPrimCountUpdate"/>,
169 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandManagementModule.ClientOnParcelObjectOwnerRequest"/>,
170 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandObject.GetPrimsFree"/>,
171 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandObject.UpdateLandSold"/>,
172 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandObject.DeedToGroup"/>,
173 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandObject.SendLandUpdateToClient"/>
174 /// </remarks>
102 public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate; 175 public event OnParcelPrimCountUpdateDelegate OnParcelPrimCountUpdate;
103 176
104 public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj); 177 public delegate void OnParcelPrimCountAddDelegate(SceneObjectGroup obj);
105 178
179 /// <summary>
180 /// Triggered in response to <see cref="OnParcelPrimCountUpdate"/> for
181 /// objects that actually contribute to parcel prim count.
182 /// </summary>
183 /// <remarks>
184 /// Triggered by <see cref="TriggerParcelPrimCountAdd"/> in
185 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandManagementModule.EventManagerOnParcelPrimCountUpdate"/>
186 /// </remarks>
106 public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd; 187 public event OnParcelPrimCountAddDelegate OnParcelPrimCountAdd;
107 188
108 public delegate void OnPluginConsoleDelegate(string[] args); 189 public delegate void OnPluginConsoleDelegate(string[] args);
109 190
191 /// <summary>
192 /// Triggered after <see cref="OpenSim.IApplicationPlugin.PostInitialise"/>
193 /// has been called for all <see cref="OpenSim.IApplicationPlugin"/>
194 /// loaded via <see cref="OpenSim.OpenSimBase.LoadPlugins"/>.
195 /// Handlers for this event are typically used to parse the arguments
196 /// from <see cref="OnPluginConsoleDelegate"/> in order to process or
197 /// filter the arguments and pass them onto <see cref="OpenSim.Region.CoreModules.Framework.InterfaceCommander.Commander.ProcessConsoleCommand"/>
198 /// </summary>
199 /// <remarks>
200 /// Triggered by <see cref="TriggerOnPluginConsole"/> in
201 /// <see cref="Scene.SendCommandToPlugins"/> via
202 /// <see cref="SceneManager.SendCommandToPluginModules"/> via
203 /// <see cref="OpenSim.OpenSimBase.HandleCommanderCommand"/> via
204 /// <see cref="OpenSim.OpenSimBase.AddPluginCommands"/> via
205 /// <see cref="OpenSim.OpenSimBase.StartupSpecific"/>
206 /// </remarks>
110 public event OnPluginConsoleDelegate OnPluginConsole; 207 public event OnPluginConsoleDelegate OnPluginConsole;
111 208
112 /// <summary> 209 /// <summary>
@@ -121,8 +218,28 @@ namespace OpenSim.Region.Framework.Scenes
121 218
122 public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene); 219 public delegate void OnSetRootAgentSceneDelegate(UUID agentID, Scene scene);
123 220
221 /// <summary>
222 /// Triggered before the grunt work for adding a root agent to a
223 /// scene has been performed (resuming attachment scripts, physics,
224 /// animations etc.)
225 /// </summary>
226 /// <remarks>
227 /// Triggered before <see cref="OnMakeRootAgent"/>
228 /// by <see cref="TriggerSetRootAgentScene"/>
229 /// in <see cref="ScenePresence.MakeRootAgent"/>
230 /// via <see cref="Scene.AgentCrossing"/>
231 /// and <see cref="ScenePresence.CompleteMovement"/>
232 /// </remarks>
124 public event OnSetRootAgentSceneDelegate OnSetRootAgentScene; 233 public event OnSetRootAgentSceneDelegate OnSetRootAgentScene;
125 234
235 /// <summary>
236 /// Triggered after parcel properties have been updated.
237 /// </summary>
238 /// <remarks>
239 /// Triggered by <see cref="TriggerOnParcelPropertiesUpdateRequest"/> in
240 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandManagementModule.ClientOnParcelPropertiesUpdateRequest"/>,
241 /// <see cref="OpenSim.Region.CoreModules.World.Land.LandManagementModule.ProcessPropertiesUpdate"/>
242 /// </remarks>
126 public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest; 243 public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
127 244
128 /// <summary> 245 /// <summary>
@@ -137,13 +254,45 @@ namespace OpenSim.Region.Framework.Scenes
137 /// <summary> 254 /// <summary>
138 /// Fired when an object is touched/grabbed. 255 /// Fired when an object is touched/grabbed.
139 /// </summary> 256 /// </summary>
257 /// <remarks>
140 /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of 258 /// The originalID is the local ID of the part that was actually touched. The localID itself is always that of
141 /// the root part. 259 /// the root part.
260 /// Triggerd in response to <see cref="OpenSim.Framework.IClientAPI.OnGrabObject"/>
261 /// via <see cref="TriggerObjectGrab"/>
262 /// in <see cref="Scene.ProcessObjectGrab"/>
263 /// </remarks>
142 public event ObjectGrabDelegate OnObjectGrab; 264 public event ObjectGrabDelegate OnObjectGrab;
143 public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs); 265 public delegate void ObjectGrabDelegate(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs);
144 266
267 /// <summary>
268 /// Triggered when an object is being touched/grabbed continuously.
269 /// </summary>
270 /// <remarks>
271 /// Triggered in response to <see cref="OpenSim.Framework.IClientAPI.OnGrabUpdate"/>
272 /// via <see cref="TriggerObjectGrabbing"/>
273 /// in <see cref="Scene.ProcessObjectGrabUpdate"/>
274 /// </remarks>
145 public event ObjectGrabDelegate OnObjectGrabbing; 275 public event ObjectGrabDelegate OnObjectGrabbing;
276
277 /// <summary>
278 /// Triggered when an object stops being touched/grabbed.
279 /// </summary>
280 /// <remarks>
281 /// Triggered in response to <see cref="OpenSim.Framework.IClientAPI.OnDeGrabObject"/>
282 /// via <see cref="TriggerObjectDeGrab"/>
283 /// in <see cref="Scene.ProcessObjectDeGrab"/>
284 /// </remarks>
146 public event ObjectDeGrabDelegate OnObjectDeGrab; 285 public event ObjectDeGrabDelegate OnObjectDeGrab;
286
287 /// <summary>
288 /// Triggered when a script resets.
289 /// </summary>
290 /// <remarks>
291 /// Triggered by <see cref="TriggerScriptReset"/>
292 /// in <see cref="Scene.ProcessScriptReset"/>
293 /// via <see cref="OpenSim.Framework.IClientAPI.OnScriptReset"/>
294 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.LLClientView.HandleScriptReset"/>
295 /// </remarks>
147 public event ScriptResetDelegate OnScriptReset; 296 public event ScriptResetDelegate OnScriptReset;
148 297
149 public event OnPermissionErrorDelegate OnPermissionError; 298 public event OnPermissionErrorDelegate OnPermissionError;
@@ -153,29 +302,105 @@ namespace OpenSim.Region.Framework.Scenes
153 /// </summary> 302 /// </summary>
154 /// <remarks> 303 /// <remarks>
155 /// Occurs after OnNewScript. 304 /// Occurs after OnNewScript.
305 /// Triggered by <see cref="TriggerRezScript"/>
306 /// in <see cref="SceneObjectPartInventory.CreateScriptInstance"/>
156 /// </remarks> 307 /// </remarks>
157 public event NewRezScript OnRezScript; 308 public event NewRezScript OnRezScript;
158 public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource); 309 public delegate void NewRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine, int stateSource);
159 310
160 public delegate void RemoveScript(uint localID, UUID itemID); 311 public delegate void RemoveScript(uint localID, UUID itemID);
312
313 /// <summary>
314 /// Triggered when a script is removed from an object.
315 /// </summary>
316 /// <remarks>
317 /// Triggered by <see cref="TriggerRemoveScript"/>
318 /// in <see cref="Scene.RemoveTaskInventory"/>,
319 /// <see cref="Scene.CreateAgentInventoryItemFromTask"/>,
320 /// <see cref="SceneObjectPartInventory.RemoveScriptInstance"/>,
321 /// <see cref="SceneObjectPartInventory.RemoveInventoryItem"/>
322 /// </remarks>
161 public event RemoveScript OnRemoveScript; 323 public event RemoveScript OnRemoveScript;
162 324
163 public delegate void StartScript(uint localID, UUID itemID); 325 public delegate void StartScript(uint localID, UUID itemID);
326
327 /// <summary>
328 /// Triggered when a script starts.
329 /// </summary>
330 /// <remarks>
331 /// Triggered by <see cref="TriggerStartScript"/>
332 /// in <see cref="Scene.SetScriptRunning"/>
333 /// via <see cref="OpenSim.Framework.IClientAPI.OnSetScriptRunning"/>,
334 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.HandleSetScriptRunning"/>
335 /// </remarks>
164 public event StartScript OnStartScript; 336 public event StartScript OnStartScript;
165 337
166 public delegate void StopScript(uint localID, UUID itemID); 338 public delegate void StopScript(uint localID, UUID itemID);
339
340 /// <summary>
341 /// Triggered when a script stops.
342 /// </summary>
343 /// <remarks>
344 /// Triggered by <see cref="TriggerStopScript"/>,
345 /// in <see cref="SceneObjectPartInventory.CreateScriptInstance"/>,
346 /// <see cref="SceneObjectPartInventory.StopScriptInstance"/>,
347 /// <see cref="Scene.SetScriptRunning"/>
348 /// </remarks>
167 public event StopScript OnStopScript; 349 public event StopScript OnStopScript;
168 350
169 public delegate bool SceneGroupMoved(UUID groupID, Vector3 delta); 351 public delegate bool SceneGroupMoved(UUID groupID, Vector3 delta);
352
353 /// <summary>
354 /// Triggered when an object is moved.
355 /// </summary>
356 /// <remarks>
357 /// Triggered by <see cref="TriggerGroupMove"/>
358 /// in <see cref="SceneObjectGroup.UpdateGroupPosition"/>,
359 /// <see cref="SceneObjectGroup.GrabMovement"/>
360 /// </remarks>
170 public event SceneGroupMoved OnSceneGroupMove; 361 public event SceneGroupMoved OnSceneGroupMove;
171 362
172 public delegate void SceneGroupGrabed(UUID groupID, Vector3 offset, UUID userID); 363 public delegate void SceneGroupGrabed(UUID groupID, Vector3 offset, UUID userID);
364
365 /// <summary>
366 /// Triggered when an object is grabbed.
367 /// </summary>
368 /// <remarks>
369 /// Triggered by <see cref="TriggerGroupGrab"/>
370 /// in <see cref="SceneObjectGroup.OnGrabGroup"/>
371 /// via <see cref="SceneObjectGroup.ObjectGrabHandler"/>
372 /// via <see cref="Scene.ProcessObjectGrab"/>
373 /// via <see cref="OpenSim.Framework.IClientAPI.OnGrabObject"/>
374 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.LLClientView.HandleObjectGrab"/>
375 /// </remarks>
173 public event SceneGroupGrabed OnSceneGroupGrab; 376 public event SceneGroupGrabed OnSceneGroupGrab;
174 377
175 public delegate bool SceneGroupSpinStarted(UUID groupID); 378 public delegate bool SceneGroupSpinStarted(UUID groupID);
379
380 /// <summary>
381 /// Triggered when an object starts to spin.
382 /// </summary>
383 /// <remarks>
384 /// Triggered by <see cref="TriggerGroupSpinStart"/>
385 /// in <see cref="SceneObjectGroup.SpinStart"/>
386 /// via <see cref="SceneGraph.SpinStart"/>
387 /// via <see cref="OpenSim.Framework.IClientAPI.OnSpinStart"/>
388 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.LLClientView.HandleObjectSpinStart"/>
389 /// </remarks>
176 public event SceneGroupSpinStarted OnSceneGroupSpinStart; 390 public event SceneGroupSpinStarted OnSceneGroupSpinStart;
177 391
178 public delegate bool SceneGroupSpun(UUID groupID, Quaternion rotation); 392 public delegate bool SceneGroupSpun(UUID groupID, Quaternion rotation);
393
394 /// <summary>
395 /// Triggered when an object is being spun.
396 /// </summary>
397 /// <remarks>
398 /// Triggered by <see cref="TriggerGroupSpin"/>
399 /// in <see cref="SceneObjectGroup.SpinMovement"/>
400 /// via <see cref="SceneGraph.SpinObject"/>
401 /// via <see cref="OpenSim.Framework.IClientAPI.OnSpinUpdate"/>
402 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.LLClientView.HandleObjectSpinUpdate"/>
403 /// </remarks>
179 public event SceneGroupSpun OnSceneGroupSpin; 404 public event SceneGroupSpun OnSceneGroupSpin;
180 405
181 public delegate void LandObjectAdded(ILandObject newParcel); 406 public delegate void LandObjectAdded(ILandObject newParcel);
@@ -214,6 +439,9 @@ namespace OpenSim.Region.Framework.Scenes
214 /// </summary> 439 /// </summary>
215 /// <remarks> 440 /// <remarks>
216 /// Occurs before OnRezScript 441 /// Occurs before OnRezScript
442 /// Triggered by <see cref="TriggerNewScript"/>
443 /// in <see cref="Scene.RezScriptFromAgentInventory"/>,
444 /// <see cref="Scene.RezNewScript"/>
217 /// </remarks> 445 /// </remarks>
218 public event NewScript OnNewScript; 446 public event NewScript OnNewScript;
219 447
@@ -248,6 +476,12 @@ namespace OpenSim.Region.Framework.Scenes
248 /// </summary> 476 /// </summary>
249 /// <remarks> 477 /// <remarks>
250 /// Triggered after the scene receives a client's upload of an updated script and has stored it in an asset. 478 /// Triggered after the scene receives a client's upload of an updated script and has stored it in an asset.
479 /// Triggered by <see cref="TriggerUpdateScript"/>
480 /// in <see cref="Scene.CapsUpdateTaskInventoryScriptAsset"/>
481 /// via <see cref="Scene.CapsUpdateTaskInventoryScriptAsset"/>
482 /// via <see cref="OpenSim.Region.ClientStack.Linden.BunchOfCaps.TaskScriptUpdated"/>
483 /// via <see cref="OpenSim.Region.ClientStack.Linden.TaskInventoryScriptUpdater.OnUpLoad"/>
484 /// via <see cref="OpenSim.Region.ClientStack.Linden.TaskInventoryScriptUpdater.uploaderCaps"/>
251 /// </remarks> 485 /// </remarks>
252 public event UpdateScript OnUpdateScript; 486 public event UpdateScript OnUpdateScript;
253 487
@@ -273,48 +507,203 @@ namespace OpenSim.Region.Framework.Scenes
273 } 507 }
274 508
275 /// <summary> 509 /// <summary>
510 /// Triggered when some scene object properties change.
511 /// </summary>
512 /// <remarks>
276 /// ScriptChangedEvent is fired when a scene object property that a script might be interested 513 /// ScriptChangedEvent is fired when a scene object property that a script might be interested
277 /// in (such as color, scale or inventory) changes. Only enough information sent is for the LSL changed event. 514 /// in (such as color, scale or inventory) changes. Only enough information sent is for the LSL changed event.
278 /// This is not an indication that the script has changed (see OnUpdateScript for that). 515 /// This is not an indication that the script has changed (see OnUpdateScript for that).
279 /// This event is sent to a script to tell it that some property changed on 516 /// This event is sent to a script to tell it that some property changed on
280 /// the object the script is in. See http://lslwiki.net/lslwiki/wakka.php?wakka=changed . 517 /// the object the script is in. See http://lslwiki.net/lslwiki/wakka.php?wakka=changed .
281 /// </summary> 518 /// Triggered by <see cref="TriggerOnScriptChangedEvent"/>
519 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.TeleportAgentWithinRegion"/>,
520 /// <see cref="SceneObjectPart.TriggerScriptChangedEvent"/>
521 /// </remarks>
282 public event ScriptChangedEvent OnScriptChangedEvent; 522 public event ScriptChangedEvent OnScriptChangedEvent;
283 public delegate void ScriptChangedEvent(uint localID, uint change); 523 public delegate void ScriptChangedEvent(uint localID, uint change);
284 524
285 public delegate void ScriptControlEvent(UUID item, UUID avatarID, uint held, uint changed); 525 public delegate void ScriptControlEvent(UUID item, UUID avatarID, uint held, uint changed);
526
527 /// <summary>
528 /// Triggered when a script receives control input from an agent.
529 /// </summary>
530 /// <remarks>
531 /// Triggered by <see cref="TriggerControlEvent"/>
532 /// in <see cref="ScenePresence.SendControlsToScripts"/>
533 /// via <see cref="ScenePresence.HandleAgentUpdate"/>
534 /// via <see cref="OpenSim.Framework.IClientAPI.OnAgentUpdate"/>
535 /// via <see cref="OpenSim.Region.ClientStack.LindenUDP.LLClientView.HandleAgentUpdate"/>
536 /// </remarks>
286 public event ScriptControlEvent OnScriptControlEvent; 537 public event ScriptControlEvent OnScriptControlEvent;
287 538
288 public delegate void ScriptAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 atpos); 539 public delegate void ScriptAtTargetEvent(uint localID, uint handle, Vector3 targetpos, Vector3 atpos);
540
541 /// <summary>
542 /// Triggered when an object has arrived within a tolerance distance
543 /// of a motion target.
544 /// </summary>
545 /// <remarks>
546 /// Triggered by <see cref="TriggerAtTargetEvent"/>
547 /// in <see cref="SceneObjectGroup.checkAtTargets"/>
548 /// via <see cref="SceneObjectGroup.ScheduleGroupForFullUpdate"/>,
549 /// <see cref="Scene.CheckAtTargets"/> via <see cref="Scene.Update"/>
550 /// </remarks>
289 public event ScriptAtTargetEvent OnScriptAtTargetEvent; 551 public event ScriptAtTargetEvent OnScriptAtTargetEvent;
290 552
291 public delegate void ScriptNotAtTargetEvent(uint localID); 553 public delegate void ScriptNotAtTargetEvent(uint localID);
554
555 /// <summary>
556 /// Triggered when an object has a motion target but has not arrived
557 /// within a tolerance distance.
558 /// </summary>
559 /// <remarks>
560 /// Triggered by <see cref="TriggerNotAtTargetEvent"/>
561 /// in <see cref="SceneObjectGroup.checkAtTargets"/>
562 /// via <see cref="SceneObjectGroup.ScheduleGroupForFullUpdate"/>,
563 /// <see cref="Scene.CheckAtTargets"/> via <see cref="Scene.Update"/>
564 /// </remarks>
292 public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent; 565 public event ScriptNotAtTargetEvent OnScriptNotAtTargetEvent;
293 566
294 public delegate void ScriptAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion atrot); 567 public delegate void ScriptAtRotTargetEvent(uint localID, uint handle, Quaternion targetrot, Quaternion atrot);
568
569 /// <summary>
570 /// Triggered when an object has arrived within a tolerance rotation
571 /// of a rotation target.
572 /// </summary>
573 /// <remarks>
574 /// Triggered by <see cref="TriggerAtRotTargetEvent"/>
575 /// in <see cref="SceneObjectGroup.checkAtTargets"/>
576 /// via <see cref="SceneObjectGroup.ScheduleGroupForFullUpdate"/>,
577 /// <see cref="Scene.CheckAtTargets"/> via <see cref="Scene.Update"/>
578 /// </remarks>
295 public event ScriptAtRotTargetEvent OnScriptAtRotTargetEvent; 579 public event ScriptAtRotTargetEvent OnScriptAtRotTargetEvent;
296 580
297 public delegate void ScriptNotAtRotTargetEvent(uint localID); 581 public delegate void ScriptNotAtRotTargetEvent(uint localID);
582
583 /// <summary>
584 /// Triggered when an object has a rotation target but has not arrived
585 /// within a tolerance rotation.
586 /// </summary>
587 /// <remarks>
588 /// Triggered by <see cref="TriggerNotAtRotTargetEvent"/>
589 /// in <see cref="SceneObjectGroup.checkAtTargets"/>
590 /// via <see cref="SceneObjectGroup.ScheduleGroupForFullUpdate"/>,
591 /// <see cref="Scene.CheckAtTargets"/> via <see cref="Scene.Update"/>
592 /// </remarks>
298 public event ScriptNotAtRotTargetEvent OnScriptNotAtRotTargetEvent; 593 public event ScriptNotAtRotTargetEvent OnScriptNotAtRotTargetEvent;
299 594
300 public delegate void ScriptColliding(uint localID, ColliderArgs colliders); 595 public delegate void ScriptColliding(uint localID, ColliderArgs colliders);
596
597 /// <summary>
598 /// Triggered when a physical collision has started between a prim
599 /// and something other than the region terrain.
600 /// </summary>
601 /// <remarks>
602 /// Triggered by <see cref="TriggerScriptCollidingStart"/>
603 /// in <see cref="SceneObjectPart.SendCollisionEvent"/>
604 /// via <see cref="SceneObjectPart.PhysicsCollision"/>
605 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.OnCollisionUpdate"/>
606 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.SendCollisionUpdate"/>
607 /// </remarks>
301 public event ScriptColliding OnScriptColliderStart; 608 public event ScriptColliding OnScriptColliderStart;
609
610 /// <summary>
611 /// Triggered when something that previously collided with a prim has
612 /// not stopped colliding with it.
613 /// </summary>
614 /// <remarks>
615 /// <seealso cref="OnScriptColliderStart"/>
616 /// Triggered by <see cref="TriggerScriptColliding"/>
617 /// in <see cref="SceneObjectPart.SendCollisionEvent"/>
618 /// via <see cref="SceneObjectPart.PhysicsCollision"/>
619 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.OnCollisionUpdate"/>
620 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.SendCollisionUpdate"/>
621 /// </remarks>
302 public event ScriptColliding OnScriptColliding; 622 public event ScriptColliding OnScriptColliding;
623
624 /// <summary>
625 /// Triggered when something that previously collided with a prim has
626 /// stopped colliding with it.
627 /// </summary>
628 /// <remarks>
629 /// Triggered by <see cref="TriggerScriptCollidingEnd"/>
630 /// in <see cref="SceneObjectPart.SendCollisionEvent"/>
631 /// via <see cref="SceneObjectPart.PhysicsCollision"/>
632 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.OnCollisionUpdate"/>
633 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.SendCollisionUpdate"/>
634 /// </remarks>
303 public event ScriptColliding OnScriptCollidingEnd; 635 public event ScriptColliding OnScriptCollidingEnd;
636
637 /// <summary>
638 /// Triggered when a physical collision has started between an object
639 /// and the region terrain.
640 /// </summary>
641 /// <remarks>
642 /// Triggered by <see cref="TriggerScriptLandCollidingStart"/>
643 /// in <see cref="SceneObjectPart.SendLandCollisionEvent"/>
644 /// via <see cref="SceneObjectPart.PhysicsCollision"/>
645 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.OnCollisionUpdate"/>
646 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.SendCollisionUpdate"/>
647 /// </remarks>
304 public event ScriptColliding OnScriptLandColliderStart; 648 public event ScriptColliding OnScriptLandColliderStart;
649
650 /// <summary>
651 /// Triggered when an object that previously collided with the region
652 /// terrain has not yet stopped colliding with it.
653 /// </summary>
654 /// <remarks>
655 /// Triggered by <see cref="TriggerScriptLandColliding"/>
656 /// in <see cref="SceneObjectPart.SendLandCollisionEvent"/>
657 /// via <see cref="SceneObjectPart.PhysicsCollision"/>
658 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.OnCollisionUpdate"/>
659 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.SendCollisionUpdate"/>
660 /// </remarks>
305 public event ScriptColliding OnScriptLandColliding; 661 public event ScriptColliding OnScriptLandColliding;
662
663 /// <summary>
664 /// Triggered when an object that previously collided with the region
665 /// terrain has stopped colliding with it.
666 /// </summary>
667 /// <remarks>
668 /// Triggered by <see cref="TriggerScriptLandCollidingEnd"/>
669 /// in <see cref="SceneObjectPart.SendLandCollisionEvent"/>
670 /// via <see cref="SceneObjectPart.PhysicsCollision"/>
671 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.OnCollisionUpdate"/>
672 /// via <see cref="OpenSim.Region.Physics.Manager.PhysicsActor.SendCollisionUpdate"/>
673 /// </remarks>
306 public event ScriptColliding OnScriptLandColliderEnd; 674 public event ScriptColliding OnScriptLandColliderEnd;
307 675
308 public delegate void OnMakeChildAgentDelegate(ScenePresence presence); 676 public delegate void OnMakeChildAgentDelegate(ScenePresence presence);
677
678 /// <summary>
679 /// Triggered when an agent has been made a child agent of a scene.
680 /// </summary>
681 /// <remarks>
682 /// Triggered by <see cref="TriggerOnMakeChildAgent"/>
683 /// in <see cref="ScenePresence.MakeChildAgent"/>
684 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.CrossAgentToNewRegionAsync"/>,
685 /// <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>,
686 /// <see cref="OpenSim.Region.CoreModules.InterGrid.KillAUser.ShutdownNoLogout"/>
687 /// </remarks>
309 public event OnMakeChildAgentDelegate OnMakeChildAgent; 688 public event OnMakeChildAgentDelegate OnMakeChildAgent;
310 689
311 public delegate void OnSaveNewWindlightProfileDelegate(); 690 public delegate void OnSaveNewWindlightProfileDelegate();
312 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user); 691 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user);
313 692
314 /// <summary> 693 /// <summary>
694 /// Triggered after the grunt work for adding a root agent to a
695 /// scene has been performed (resuming attachment scripts, physics,
696 /// animations etc.)
697 /// </summary>
698 /// <remarks>
315 /// This event is on the critical path for transferring an avatar from one region to another. Try and do 699 /// This event is on the critical path for transferring an avatar from one region to another. Try and do
316 /// as little work on this event as possible, or do work asynchronously. 700 /// as little work on this event as possible, or do work asynchronously.
317 /// </summary> 701 /// Triggered after <see cref="OnSetRootAgentScene"/>
702 /// by <see cref="TriggerOnMakeRootAgent"/>
703 /// in <see cref="ScenePresence.MakeRootAgent"/>
704 /// via <see cref="Scene.AgentCrossing"/>
705 /// and <see cref="ScenePresence.CompleteMovement"/>
706 /// </remarks>
318 public event Action<ScenePresence> OnMakeRootAgent; 707 public event Action<ScenePresence> OnMakeRootAgent;
319 708
320 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted; 709 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted;
@@ -340,9 +729,17 @@ namespace OpenSim.Region.Framework.Scenes
340 public event AvatarKillData OnAvatarKilled; 729 public event AvatarKillData OnAvatarKilled;
341 public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar); 730 public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar);
342 731
343// public delegate void ScriptTimerEvent(uint localID, double timerinterval); 732 /*
344 733 public delegate void ScriptTimerEvent(uint localID, double timerinterval);
345// public event ScriptTimerEvent OnScriptTimerEvent; 734 /// <summary>
735 /// Used to be triggered when the LSL timer event fires.
736 /// </summary>
737 /// <remarks>
738 /// Triggered by <see cref="TriggerTimerEvent"/>
739 /// via <see cref="SceneObjectPart.handleTimerAccounting"/>
740 /// </remarks>
741 public event ScriptTimerEvent OnScriptTimerEvent;
742 */
346 743
347 public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour); 744 public delegate void EstateToolsSunUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour);
348 public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID); 745 public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID);
@@ -352,12 +749,27 @@ namespace OpenSim.Region.Framework.Scenes
352 /// <summary> 749 /// <summary>
353 /// Triggered when an object is added to the scene. 750 /// Triggered when an object is added to the scene.
354 /// </summary> 751 /// </summary>
752 /// <remarks>
753 /// Triggered by <see cref="TriggerObjectAddedToScene"/>
754 /// in <see cref="Scene.AddNewSceneObject"/>,
755 /// <see cref="Scene.DuplicateObject"/>,
756 /// <see cref="Scene.doObjectDuplicateOnRay"/>
757 /// </remarks>
355 public event Action<SceneObjectGroup> OnObjectAddedToScene; 758 public event Action<SceneObjectGroup> OnObjectAddedToScene;
356 759
357 /// <summary> 760 /// <summary>
358 /// Triggered when an object is removed from the scene. 761 /// Delegate for <see cref="OnObjectBeingRemovedFromScene"/>
359 /// </summary> 762 /// </summary>
763 /// <param name="obj">The object being removed from the scene</param>
360 public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj); 764 public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj);
765
766 /// <summary>
767 /// Triggered when an object is removed from the scene.
768 /// </summary>
769 /// <remarks>
770 /// Triggered by <see cref="TriggerObjectBeingRemovedFromScene"/>
771 /// in <see cref="Scene.DeleteSceneObject"/>
772 /// </remarks>
361 public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene; 773 public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene;
362 774
363 public delegate void NoticeNoLandDataFromStorage(); 775 public delegate void NoticeNoLandDataFromStorage();
@@ -373,6 +785,20 @@ namespace OpenSim.Region.Framework.Scenes
373 public event RequestParcelPrimCountUpdate OnRequestParcelPrimCountUpdate; 785 public event RequestParcelPrimCountUpdate OnRequestParcelPrimCountUpdate;
374 786
375 public delegate void ParcelPrimCountTainted(); 787 public delegate void ParcelPrimCountTainted();
788
789 /// <summary>
790 /// Triggered when the parcel prim count has been altered.
791 /// </summary>
792 /// <remarks>
793 /// Triggered by <see cref="TriggerParcelPrimCountTainted"/> in
794 /// <see cref="OpenSim.Region.CoreModules.Avatar.Attachments.AttachmentsModule.DetachSingleAttachmentToGround"/>,
795 /// <see cref="OpenSim.Region.CoreModules.Avatar.Attachments.AttachmentsModule.AttachToAgent"/>,
796 /// <see cref="Scene.DeleteSceneObject"/>,
797 /// <see cref="Scene.SelectPrim"/>,
798 /// <see cref="Scene.DeselectPrim"/>,
799 /// <see cref="SceneObjectGroup.UpdatePrimFlags"/>,
800 /// <see cref="SceneObjectGroup.AbsolutePosition"/>
801 /// </remarks>
376 public event ParcelPrimCountTainted OnParcelPrimCountTainted; 802 public event ParcelPrimCountTainted OnParcelPrimCountTainted;
377 public event GetScriptRunning OnGetScriptRunning; 803 public event GetScriptRunning OnGetScriptRunning;
378 804
@@ -432,7 +858,7 @@ namespace OpenSim.Region.Framework.Scenes
432 /// the scripts may not have started yet 858 /// the scripts may not have started yet
433 /// Message is non empty string if there were problems loading the oar file 859 /// Message is non empty string if there were problems loading the oar file
434 /// </summary> 860 /// </summary>
435 public delegate void OarFileLoaded(Guid guid, string message); 861 public delegate void OarFileLoaded(Guid guid, List<UUID> loadedScenes, string message);
436 public event OarFileLoaded OnOarFileLoaded; 862 public event OarFileLoaded OnOarFileLoaded;
437 863
438 /// <summary> 864 /// <summary>
@@ -485,6 +911,9 @@ namespace OpenSim.Region.Framework.Scenes
485 /// <param name="copy"></param> 911 /// <param name="copy"></param>
486 /// <param name="original"></param> 912 /// <param name="original"></param>
487 /// <param name="userExposed">True if the duplicate will immediately be in the scene, false otherwise</param> 913 /// <param name="userExposed">True if the duplicate will immediately be in the scene, false otherwise</param>
914 /// <remarks>
915 /// Triggered in <see cref="OpenSim.Region.Framework.Scenes.SceneObjectPart.Copy"/>
916 /// </remarks>
488 public event SceneObjectPartCopyDelegate OnSceneObjectPartCopy; 917 public event SceneObjectPartCopyDelegate OnSceneObjectPartCopy;
489 public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed); 918 public delegate void SceneObjectPartCopyDelegate(SceneObjectPart copy, SceneObjectPart original, bool userExposed);
490 919
@@ -526,9 +955,28 @@ namespace OpenSim.Region.Framework.Scenes
526 public event PrimsLoaded OnPrimsLoaded; 955 public event PrimsLoaded OnPrimsLoaded;
527 956
528 public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout); 957 public delegate void TeleportStart(IClientAPI client, GridRegion destination, GridRegion finalDestination, uint teleportFlags, bool gridLogout);
958
959 /// <summary>
960 /// Triggered when a teleport starts
961 /// </summary>
962 /// <remarks>
963 /// Triggered by <see cref="TriggerTeleportStart"/>
964 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.CreateAgent"/>
965 /// and <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.HGEntityTransferModule.CreateAgent"/>
966 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>
967 /// </remarks>
529 public event TeleportStart OnTeleportStart; 968 public event TeleportStart OnTeleportStart;
530 969
531 public delegate void TeleportFail(IClientAPI client, bool gridLogout); 970 public delegate void TeleportFail(IClientAPI client, bool gridLogout);
971
972 /// <summary>
973 /// Trigered when a teleport fails.
974 /// </summary>
975 /// <remarks>
976 /// Triggered by <see cref="TriggerTeleportFail"/>
977 /// in <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.Fail"/>
978 /// via <see cref="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.DoTeleport"/>
979 /// </remarks>
532 public event TeleportFail OnTeleportFail; 980 public event TeleportFail OnTeleportFail;
533 981
534 public class MoneyTransferArgs : EventArgs 982 public class MoneyTransferArgs : EventArgs
@@ -536,7 +984,9 @@ namespace OpenSim.Region.Framework.Scenes
536 public UUID sender; 984 public UUID sender;
537 public UUID receiver; 985 public UUID receiver;
538 986
539 // Always false. The SL protocol sucks. 987 /// <summary>
988 /// Always false. The SL protocol sucks.
989 /// </summary>
540 public bool authenticated = false; 990 public bool authenticated = false;
541 991
542 public int amount; 992 public int amount;
@@ -593,8 +1043,29 @@ namespace OpenSim.Region.Framework.Scenes
593 1043
594 public delegate void LandBuy(Object sender, LandBuyArgs e); 1044 public delegate void LandBuy(Object sender, LandBuyArgs e);
595 1045
1046 /// <summary>
1047 /// Triggered when an attempt to transfer grid currency occurs
1048 /// </summary>
1049 /// <remarks>
1050 /// Triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.ProcessMoneyTransferRequest"/>
1051 /// via <see cref="OpenSim.Region.Framework.Scenes.Scene.SubscribeToClientGridEvents"/>
1052 /// via <see cref="OpenSim.Region.Framework.Scenes.Scene.SubscribeToClientEvents"/>
1053 /// via <see cref="OpenSim.Region.Framework.Scenes.Scene.AddNewClient"/>
1054 /// </remarks>
596 public event MoneyTransferEvent OnMoneyTransfer; 1055 public event MoneyTransferEvent OnMoneyTransfer;
1056
1057 /// <summary>
1058 /// Triggered after after <see cref="OnValidateLandBuy"/>
1059 /// </summary>
597 public event LandBuy OnLandBuy; 1060 public event LandBuy OnLandBuy;
1061
1062 /// <summary>
1063 /// Triggered to allow or prevent a real estate transaction
1064 /// </summary>
1065 /// <remarks>
1066 /// Triggered in <see cref="OpenSim.Region.Framework.Scenes.Scene.ProcessParcelBuy"/>
1067 /// <seealso cref="OpenSim.Region.OptionalModules.World.MoneyModule.SampleMoneyModule.ValidateLandBuy"/>
1068 /// </remarks>
598 public event LandBuy OnValidateLandBuy; 1069 public event LandBuy OnValidateLandBuy;
599 1070
600 public void TriggerOnAttach(uint localID, UUID itemID, UUID avatarID) 1071 public void TriggerOnAttach(uint localID, UUID itemID, UUID avatarID)
@@ -2031,7 +2502,11 @@ namespace OpenSim.Region.Framework.Scenes
2031 } 2502 }
2032 } 2503 }
2033 2504
2034 // this lets us keep track of nasty script events like timer, etc. 2505 /// <summary>
2506 /// this lets us keep track of nasty script events like timer, etc.
2507 /// </summary>
2508 /// <param name="objLocalID"></param>
2509 /// <param name="Interval"></param>
2035 public void TriggerTimerEvent(uint objLocalID, double Interval) 2510 public void TriggerTimerEvent(uint objLocalID, double Interval)
2036 { 2511 {
2037 throw new NotImplementedException("TriggerTimerEvent was thought to be not used anymore and the registration for the event from scene object part has been commented out due to a memory leak"); 2512 throw new NotImplementedException("TriggerTimerEvent was thought to be not used anymore and the registration for the event from scene object part has been commented out due to a memory leak");
@@ -2093,7 +2568,7 @@ namespace OpenSim.Region.Framework.Scenes
2093 return 6; 2568 return 6;
2094 } 2569 }
2095 2570
2096 public void TriggerOarFileLoaded(Guid requestId, string message) 2571 public void TriggerOarFileLoaded(Guid requestId, List<UUID> loadedScenes, string message)
2097 { 2572 {
2098 OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded; 2573 OarFileLoaded handlerOarFileLoaded = OnOarFileLoaded;
2099 if (handlerOarFileLoaded != null) 2574 if (handlerOarFileLoaded != null)
@@ -2102,7 +2577,7 @@ namespace OpenSim.Region.Framework.Scenes
2102 { 2577 {
2103 try 2578 try
2104 { 2579 {
2105 d(requestId, message); 2580 d(requestId, loadedScenes, message);
2106 } 2581 }
2107 catch (Exception e) 2582 catch (Exception e)
2108 { 2583 {