aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs51
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs140
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs9
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs13
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs2
6 files changed, 139 insertions, 78 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 0707119..5d50a83 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -180,6 +180,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
180 180
181 sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); 181 sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
182 sp.Teleport(position); 182 sp.Teleport(position);
183
184 foreach (SceneObjectGroup grp in sp.Attachments)
185 sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT);
183 } 186 }
184 else // Another region possibly in another simulator 187 else // Another region possibly in another simulator
185 { 188 {
@@ -393,7 +396,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
393 agent.Position = position; 396 agent.Position = position;
394 SetCallbackURL(agent, sp.Scene.RegionInfo); 397 SetCallbackURL(agent, sp.Scene.RegionInfo);
395 398
396 UpdateAgent(reg, finalDestination, agent); 399 if (!UpdateAgent(reg, finalDestination, agent))
400 {
401 // Region doesn't take it
402 Fail(sp, finalDestination);
403 return;
404 }
397 405
398 m_log.DebugFormat( 406 m_log.DebugFormat(
399 "[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID); 407 "[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID);
@@ -418,21 +426,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
418 // that the client contacted the destination before we send the attachments and close things here. 426 // that the client contacted the destination before we send the attachments and close things here.
419 if (!WaitForCallback(sp.UUID)) 427 if (!WaitForCallback(sp.UUID))
420 { 428 {
421 // Client never contacted destination. Let's restore everything back 429 Fail(sp, finalDestination);
422 sp.ControllingClient.SendTeleportFailed("Problems connecting to destination.");
423
424 // Fail. Reset it back
425 sp.IsChildAgent = false;
426
427 ResetFromTransit(sp.UUID);
428
429 // Yikes! We should just have a ref to scene here.
430 //sp.Scene.InformClientOfNeighbours(sp);
431 EnableChildAgents(sp);
432
433 // Finally, kill the agent we just created at the destination.
434 m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID);
435
436 return; 430 return;
437 } 431 }
438 432
@@ -472,6 +466,22 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
472 } 466 }
473 } 467 }
474 468
469 private void Fail(ScenePresence sp, GridRegion finalDestination)
470 {
471 // Client never contacted destination. Let's restore everything back
472 sp.ControllingClient.SendTeleportFailed("Problems connecting to destination.");
473
474 // Fail. Reset it back
475 sp.IsChildAgent = false;
476
477 ResetFromTransit(sp.UUID);
478
479 EnableChildAgents(sp);
480
481 // Finally, kill the agent we just created at the destination.
482 m_aScene.SimulationService.CloseAgent(finalDestination, sp.UUID);
483
484 }
475 485
476 protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason) 486 protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason)
477 { 487 {
@@ -810,7 +820,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
810 cAgent.CallbackURI = "http://" + m_scene.RegionInfo.ExternalHostName + ":" + m_scene.RegionInfo.HttpPort + 820 cAgent.CallbackURI = "http://" + m_scene.RegionInfo.ExternalHostName + ":" + m_scene.RegionInfo.HttpPort +
811 "/agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/"; 821 "/agent/" + agent.UUID.ToString() + "/" + m_scene.RegionInfo.RegionID.ToString() + "/release/";
812 822
813 m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent); 823 if (!m_scene.SimulationService.UpdateAgent(neighbourRegion, cAgent))
824 {
825 // region doesn't take it
826 ResetFromTransit(agent.UUID);
827 return agent;
828 }
814 829
815 // Next, let's close the child agent connections that are too far away. 830 // Next, let's close the child agent connections that are too far away.
816 agent.CloseChildAgents(neighbourx, neighboury); 831 agent.CloseChildAgents(neighbourx, neighboury);
@@ -1120,7 +1135,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1120 string reason = String.Empty; 1135 string reason = String.Empty;
1121 1136
1122 1137
1123 bool regionAccepted = m_scene.SimulationService.CreateAgent(reg, a, 0, out reason); // m_interregionCommsOut.SendCreateChildAgent(reg.RegionHandle, a, 0, out reason); 1138 bool regionAccepted = m_scene.SimulationService.CreateAgent(reg, a, (uint)TeleportFlags.Default, out reason);
1124 1139
1125 if (regionAccepted && newAgent) 1140 if (regionAccepted && newAgent)
1126 { 1141 {
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 9594e6b..55060c3 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2480,7 +2480,7 @@ namespace OpenSim.Region.Framework.Scenes
2480 2480
2481 2481
2482 /// <summary> 2482 /// <summary>
2483 /// Called when objects or attachments cross the border between regions. 2483 /// Called when objects or attachments cross the border, or teleport, between regions.
2484 /// </summary> 2484 /// </summary>
2485 /// <param name="sog"></param> 2485 /// <param name="sog"></param>
2486 /// <returns></returns> 2486 /// <returns></returns>
@@ -2510,6 +2510,8 @@ namespace OpenSim.Region.Framework.Scenes
2510 2510
2511 // Do this as late as possible so that listeners have full access to the incoming object 2511 // Do this as late as possible so that listeners have full access to the incoming object
2512 EventManager.TriggerOnIncomingSceneObject(newObject); 2512 EventManager.TriggerOnIncomingSceneObject(newObject);
2513
2514 TriggerChangedTeleport(newObject);
2513 2515
2514 return true; 2516 return true;
2515 } 2517 }
@@ -2577,22 +2579,13 @@ namespace OpenSim.Region.Framework.Scenes
2577 // Fix up attachment Parent Local ID 2579 // Fix up attachment Parent Local ID
2578 ScenePresence sp = GetScenePresence(sceneObject.OwnerID); 2580 ScenePresence sp = GetScenePresence(sceneObject.OwnerID);
2579 2581
2580 //uint parentLocalID = 0;
2581 if (sp != null) 2582 if (sp != null)
2582 { 2583 {
2583 //parentLocalID = sp.LocalId;
2584
2585 //sceneObject.RootPart.IsAttachment = true;
2586 //sceneObject.RootPart.SetParentLocalId(parentLocalID);
2587 2584
2588 SceneObjectGroup grp = sceneObject; 2585 SceneObjectGroup grp = sceneObject;
2589 2586
2590 //RootPrim.SetParentLocalId(parentLocalID);
2591
2592 m_log.DebugFormat( 2587 m_log.DebugFormat(
2593 "[ATTACHMENT]: Received attachment {0}, inworld asset id {1}", grp.GetFromItemID(), grp.UUID); 2588 "[ATTACHMENT]: Received attachment {0}, inworld asset id {1}", grp.GetFromItemID(), grp.UUID);
2594
2595 //grp.SetFromAssetID(grp.RootPart.LastOwnerID);
2596 m_log.DebugFormat( 2589 m_log.DebugFormat(
2597 "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition); 2590 "[ATTACHMENT]: Attach to avatar {0} at position {1}", sp.UUID, grp.AbsolutePosition);
2598 2591
@@ -2602,7 +2595,6 @@ namespace OpenSim.Region.Framework.Scenes
2602 AttachmentsModule.AttachObject( 2595 AttachmentsModule.AttachObject(
2603 sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false); 2596 sp.ControllingClient, grp.LocalId, (uint)0, grp.GroupRotation, grp.AbsolutePosition, false);
2604 2597
2605 //grp.SendGroupFullUpdate();
2606 } 2598 }
2607 else 2599 else
2608 { 2600 {
@@ -2630,6 +2622,27 @@ namespace OpenSim.Region.Framework.Scenes
2630 2622
2631 return true; 2623 return true;
2632 } 2624 }
2625
2626 private void TriggerChangedTeleport(SceneObjectGroup sog)
2627 {
2628 ScenePresence sp = GetScenePresence(sog.OwnerID);
2629
2630 if (sp != null)
2631 {
2632 AgentCircuitData aCircuit = m_authenticateHandler.GetAgentCircuitData(sp.UUID);
2633
2634 if (aCircuit != null && (aCircuit.teleportFlags != (uint)TeleportFlags.Default))
2635 {
2636 // This will get your attention
2637 //m_log.Error("[XXX] Triggering ");
2638
2639 // Trigger CHANGED_TELEPORT
2640 sp.Scene.EventManager.TriggerOnScriptChangedEvent(sog.LocalId, (uint)Changed.TELEPORT);
2641 }
2642
2643 }
2644 }
2645
2633 #endregion 2646 #endregion
2634 2647
2635 #region Add/Remove Avatar Methods 2648 #region Add/Remove Avatar Methods
@@ -3437,6 +3450,8 @@ namespace OpenSim.Region.Framework.Scenes
3437 public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason) 3450 public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason)
3438 { 3451 {
3439 TeleportFlags tp = (TeleportFlags)teleportFlags; 3452 TeleportFlags tp = (TeleportFlags)teleportFlags;
3453 reason = String.Empty;
3454
3440 //Teleport flags: 3455 //Teleport flags:
3441 // 3456 //
3442 // TeleportFlags.ViaGodlikeLure - Border Crossing 3457 // TeleportFlags.ViaGodlikeLure - Border Crossing
@@ -3444,52 +3459,34 @@ namespace OpenSim.Region.Framework.Scenes
3444 // TeleportFlags.TeleportFlags.ViaLure - Teleport request sent by another user 3459 // TeleportFlags.TeleportFlags.ViaLure - Teleport request sent by another user
3445 // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport 3460 // TeleportFlags.ViaLandmark | TeleportFlags.ViaLocation | TeleportFlags.ViaLandmark | TeleportFlags.Default - Regular Teleport
3446 3461
3447
3448 if (LoginsDisabled)
3449 {
3450 reason = "Logins Disabled";
3451 return false;
3452 }
3453 // Don't disable this log message - it's too helpful 3462 // Don't disable this log message - it's too helpful
3454 m_log.InfoFormat( 3463 m_log.InfoFormat(
3455 "[CONNECTION BEGIN]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6})", 3464 "[CONNECTION BEGIN]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, teleportflags {6})",
3456 RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname, 3465 RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
3457 agent.AgentID, agent.circuitcode, teleportFlags); 3466 agent.AgentID, agent.circuitcode, teleportFlags);
3458 3467
3459 reason = String.Empty; 3468 if (LoginsDisabled)
3460 try
3461 {
3462 if (!VerifyUserPresence(agent, out reason))
3463 return false;
3464 }
3465 catch (Exception e)
3466 { 3469 {
3467 m_log.DebugFormat("[CONNECTION BEGIN]: Exception verifying presence {0}", e.Message); 3470 reason = "Logins Disabled";
3468 return false; 3471 return false;
3469 } 3472 }
3470 3473
3471 try 3474 ScenePresence sp = GetScenePresence(agent.AgentID);
3472 { 3475
3473 if (!AuthorizeUser(agent, out reason)) 3476 if (sp != null && !sp.IsChildAgent)
3474 return false;
3475 }
3476 catch (Exception e)
3477 { 3477 {
3478 m_log.DebugFormat("[CONNECTION BEGIN]: Exception authorizing user {0}", e.Message); 3478 // We have a zombie from a crashed session.
3479 return false; 3479 // Or the same user is trying to be root twice here, won't work.
3480 // Kill it.
3481 m_log.DebugFormat("[SCENE]: Zombie scene presence detected for {0} in {1}", agent.AgentID, RegionInfo.RegionName);
3482 sp.ControllingClient.Close();
3483 sp = null;
3480 } 3484 }
3481 3485
3482 m_log.InfoFormat(
3483 "[CONNECTION BEGIN]: Region {0} authenticated and authorized incoming {1} agent {2} {3} {4} (circuit code {5})",
3484 RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
3485 agent.AgentID, agent.circuitcode);
3486
3487 CapsModule.NewUserConnection(agent);
3488
3489 ILandObject land = LandChannel.GetLandObject(agent.startpos.X, agent.startpos.Y); 3486 ILandObject land = LandChannel.GetLandObject(agent.startpos.X, agent.startpos.Y);
3490 3487
3491 //On login or border crossing test land permisions 3488 //On login test land permisions
3492 if (tp != TeleportFlags.Default) 3489 if (tp == TeleportFlags.ViaLogin)
3493 { 3490 {
3494 if (land != null && !TestLandRestrictions(agent, land, out reason)) 3491 if (land != null && !TestLandRestrictions(agent, land, out reason))
3495 { 3492 {
@@ -3497,8 +3494,40 @@ namespace OpenSim.Region.Framework.Scenes
3497 } 3494 }
3498 } 3495 }
3499 3496
3500 ScenePresence sp = GetScenePresence(agent.AgentID); 3497 if (sp == null) // We don't have an [child] agent here already
3501 if (sp != null) 3498 {
3499
3500 try
3501 {
3502 if (!VerifyUserPresence(agent, out reason))
3503 return false;
3504 }
3505 catch (Exception e)
3506 {
3507 m_log.DebugFormat("[CONNECTION BEGIN]: Exception verifying presence {0}", e.Message);
3508 return false;
3509 }
3510
3511 try
3512 {
3513 if (!AuthorizeUser(agent, out reason))
3514 return false;
3515 }
3516 catch (Exception e)
3517 {
3518 m_log.DebugFormat("[CONNECTION BEGIN]: Exception authorizing user {0}", e.Message);
3519 return false;
3520 }
3521
3522 m_log.InfoFormat(
3523 "[CONNECTION BEGIN]: Region {0} authenticated and authorized incoming {1} agent {2} {3} {4} (circuit code {5})",
3524 RegionInfo.RegionName, (agent.child ? "child" : "root"), agent.firstname, agent.lastname,
3525 agent.AgentID, agent.circuitcode);
3526
3527 CapsModule.NewUserConnection(agent);
3528 CapsModule.AddCapsHandler(agent.AgentID);
3529 }
3530 else
3502 { 3531 {
3503 if (sp.IsChildAgent) 3532 if (sp.IsChildAgent)
3504 { 3533 {
@@ -3507,22 +3536,18 @@ namespace OpenSim.Region.Framework.Scenes
3507 agent.AgentID, RegionInfo.RegionName); 3536 agent.AgentID, RegionInfo.RegionName);
3508 3537
3509 sp.AdjustKnownSeeds(); 3538 sp.AdjustKnownSeeds();
3510 3539 CapsModule.NewUserConnection(agent);
3511 return true;
3512 }
3513 else
3514 {
3515 // We have a zombie from a crashed session. Kill it.
3516 m_log.DebugFormat("[SCENE]: Zombie scene presence detected for {0} in {1}", agent.AgentID, RegionInfo.RegionName);
3517 sp.ControllingClient.Close();
3518 } 3540 }
3519 } 3541 }
3520 3542
3521 CapsModule.AddCapsHandler(agent.AgentID);
3522 3543
3523 if (!agent.child) 3544 // In all cases, add or update the circuit data with the new agent circuit data and teleport flags
3545 agent.teleportFlags = teleportFlags;
3546 m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
3547
3548 if (tp == TeleportFlags.ViaLogin)
3524 { 3549 {
3525 if (TestBorderCross(agent.startpos,Cardinals.E)) 3550 if (TestBorderCross(agent.startpos, Cardinals.E))
3526 { 3551 {
3527 Border crossedBorder = GetCrossedBorder(agent.startpos, Cardinals.E); 3552 Border crossedBorder = GetCrossedBorder(agent.startpos, Cardinals.E);
3528 agent.startpos.X = crossedBorder.BorderLine.Z - 1; 3553 agent.startpos.X = crossedBorder.BorderLine.Z - 1;
@@ -3587,9 +3612,6 @@ namespace OpenSim.Region.Framework.Scenes
3587 } 3612 }
3588 } 3613 }
3589 3614
3590 agent.teleportFlags = teleportFlags;
3591 m_authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
3592
3593 return true; 3615 return true;
3594 } 3616 }
3595 3617
@@ -3881,6 +3903,8 @@ namespace OpenSim.Region.Framework.Scenes
3881 m_log.DebugFormat( 3903 m_log.DebugFormat(
3882 "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName); 3904 "[SCENE]: Incoming child agent update for {0} in {1}", cAgentData.AgentID, RegionInfo.RegionName);
3883 3905
3906 // XPTO: if this agent is not allowed here as root, always return false
3907
3884 // We have to wait until the viewer contacts this region after receiving EAC. 3908 // We have to wait until the viewer contacts this region after receiving EAC.
3885 // That calls AddNewClient, which finally creates the ScenePresence 3909 // That calls AddNewClient, which finally creates the ScenePresence
3886 ScenePresence childAgentUpdate = WaitGetScenePresence(cAgentData.AgentID); 3910 ScenePresence childAgentUpdate = WaitGetScenePresence(cAgentData.AgentID);
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 8b83b06..866bb6e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -555,7 +555,7 @@ namespace OpenSim.Region.Framework.Scenes
555 foreach (TaskInventoryItem item in items) 555 foreach (TaskInventoryItem item in items)
556 { 556 {
557 m_items.Add(item.ItemID, item); 557 m_items.Add(item.ItemID, item);
558 m_part.TriggerScriptChangedEvent(Changed.INVENTORY); 558// m_part.TriggerScriptChangedEvent(Changed.INVENTORY);
559 } 559 }
560 } 560 }
561 561
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
index f7544ac..5bdaa17 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs
@@ -221,7 +221,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
221 sr = new StringReader(parts[i].OuterXml); 221 sr = new StringReader(parts[i].OuterXml);
222 reader = new XmlTextReader(sr); 222 reader = new XmlTextReader(sr);
223 SceneObjectPart part = SceneObjectPart.FromXml(reader); 223 SceneObjectPart part = SceneObjectPart.FromXml(reader);
224
225 int originalLinkNum = part.LinkNum;
226
224 sceneObject.AddPart(part); 227 sceneObject.AddPart(part);
228
229 // SceneObjectGroup.AddPart() tries to be smart and automatically set the LinkNum.
230 // We override that here
231 if (originalLinkNum != 0)
232 part.LinkNum = originalLinkNum;
233
225 part.StoreUndoState(); 234 part.StoreUndoState();
226 reader.Close(); 235 reader.Close();
227 sr.Close(); 236 sr.Close();
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index 7984bd9..a9e9f5c 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -1771,7 +1771,18 @@ namespace OpenSim.Region.Physics.OdePlugin
1771 IMesh mesh = null; 1771 IMesh mesh = null;
1772 1772
1773 if (needsMeshing(pbs)) 1773 if (needsMeshing(pbs))
1774 mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical); 1774 {
1775 try
1776 {
1777 mesh = mesher.CreateMesh(primName, pbs, size, 32f, isPhysical);
1778 }
1779 catch(Exception e)
1780 {
1781 m_log.ErrorFormat("[PHYSICS]: Exception while meshing prim {0}.");
1782 m_log.Debug(e.ToString());
1783 mesh = null;
1784 }
1785 }
1775 1786
1776 result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical); 1787 result = AddPrim(primName, position, size, rotation, mesh, pbs, isPhysical);
1777 1788
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 5400a4f..59ab26b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2699,6 +2699,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2699 // objects rezzed with this method are die_at_edge by default. 2699 // objects rezzed with this method are die_at_edge by default.
2700 new_group.RootPart.SetDieAtEdge(true); 2700 new_group.RootPart.SetDieAtEdge(true);
2701 2701
2702 new_group.ResumeScripts();
2703
2702 m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams( 2704 m_ScriptEngine.PostObjectEvent(m_host.LocalId, new EventParams(
2703 "object_rez", new Object[] { 2705 "object_rez", new Object[] {
2704 new LSL_String( 2706 new LSL_String(