aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
authorMelanie Thielker2008-08-20 01:48:51 +0000
committerMelanie Thielker2008-08-20 01:48:51 +0000
commitf206ffd5a8cd0ef362e972abf7375eb739f82e5b (patch)
treee05c17a865f02beecddbe2c9c04705bc08c03db1 /OpenSim/Region/Environment/Scenes/ScenePresence.cs
parentRemove trailing whitespace in prebuild.xml. (diff)
downloadopensim-SC-f206ffd5a8cd0ef362e972abf7375eb739f82e5b.zip
opensim-SC-f206ffd5a8cd0ef362e972abf7375eb739f82e5b.tar.gz
opensim-SC-f206ffd5a8cd0ef362e972abf7375eb739f82e5b.tar.bz2
opensim-SC-f206ffd5a8cd0ef362e972abf7375eb739f82e5b.tar.xz
Mantis #2003 - thank you, SachaMagne, for a patch that implements
the first part of gesture persistence. ---------------------------------------------------------- Attachments no longer vanish on walking crossing. Teleport is still problematic, but will now be blocked with message "Inconsistent attachment state" rather than losing the attachment. Detach to be able to TP in that case.
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs41
1 files changed, 34 insertions, 7 deletions
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index cc70210..cf24c73 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -1972,7 +1972,7 @@ namespace OpenSim.Region.Environment.Scenes
1972 LLVector3 vel = m_velocity; 1972 LLVector3 vel = m_velocity;
1973 ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * Constants.RegionSize), (uint)(neighboury * Constants.RegionSize)); 1973 ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * Constants.RegionSize), (uint)(neighboury * Constants.RegionSize));
1974 SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle); 1974 SimpleRegionInfo neighbourRegion = m_scene.RequestNeighbouringRegionInfo(neighbourHandle);
1975 if (neighbourRegion != null) 1975 if (neighbourRegion != null && ValidateAttachments())
1976 { 1976 {
1977 // When the neighbour is informed of the border crossing, it will set up CAPS handlers for the avatar 1977 // When the neighbour is informed of the border crossing, it will set up CAPS handlers for the avatar
1978 // This means we need to remove the current caps handler here and possibly compensate later, 1978 // This means we need to remove the current caps handler here and possibly compensate later,
@@ -2343,15 +2343,41 @@ namespace OpenSim.Region.Environment.Scenes
2343 } 2343 }
2344 } 2344 }
2345 2345
2346 public void CrossAttachmentsIntoNewRegion(ulong regionHandle) 2346 public bool ValidateAttachments()
2347 {
2348 lock (m_attachments)
2349 {
2350 // Validate
2351 foreach (SceneObjectGroup gobj in m_attachments)
2352 {
2353 if(gobj == null)
2354 return false;
2355
2356 if(gobj.RootPart == null)
2357 {
2358 return false;
2359 }
2360 }
2361 }
2362 return true;
2363 }
2364
2365 public bool CrossAttachmentsIntoNewRegion(ulong regionHandle)
2347 { 2366 {
2348 m_attachmentsTransported = true; 2367 m_attachmentsTransported = true;
2349 lock (m_attachments) 2368 lock (m_attachments)
2350 { 2369 {
2370 // Validate
2371 foreach (SceneObjectGroup gobj in m_attachments)
2372 {
2373 if(gobj == null || gobj.RootPart == null)
2374 return false;
2375 }
2376
2351 foreach (SceneObjectGroup gobj in m_attachments) 2377 foreach (SceneObjectGroup gobj in m_attachments)
2352 { 2378 {
2353 // If the prim group is null then something must have happened to it! 2379 // If the prim group is null then something must have happened to it!
2354 if (gobj != null) 2380 if (gobj != null && gobj.RootPart != null)
2355 { 2381 {
2356 // Set the parent localID to 0 so it transfers over properly. 2382 // Set the parent localID to 0 so it transfers over properly.
2357 gobj.RootPart.SetParentLocalId(0); 2383 gobj.RootPart.SetParentLocalId(0);
@@ -2362,6 +2388,8 @@ namespace OpenSim.Region.Environment.Scenes
2362 } 2388 }
2363 } 2389 }
2364 m_attachments.Clear(); 2390 m_attachments.Clear();
2391
2392 return true;
2365 } 2393 }
2366 } 2394 }
2367 2395
@@ -2903,10 +2931,9 @@ namespace OpenSim.Region.Environment.Scenes
2903 m_log.InfoFormat("[ATTACHEMENT] Attach from world {0}", 2931 m_log.InfoFormat("[ATTACHEMENT] Attach from world {0}",
2904 itemID.ToString()); 2932 itemID.ToString());
2905 2933
2906 // Attach from world 2934 // Attach from world, if not already attached
2907 if (att.ParentGroup != null) 2935 if (att.ParentGroup != null && !att.IsAttachment)
2908 m_scene.RezSingleAttachment(att.ParentGroup, 2936 m_scene.AttachObject(ControllingClient, att.ParentGroup.LocalId, (uint)0, att.ParentGroup.GroupRotation, LLVector3.Zero);
2909 ControllingClient, itemID, (uint)attachpoint, 0, 0);
2910 } 2937 }
2911 } 2938 }
2912 } 2939 }