aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorKevin Cozens2015-09-21 10:58:35 -0400
committerKevin Cozens2015-09-21 11:00:34 -0400
commitb412db72be9c7a3833550119ba4d1c04b995d188 (patch)
tree506ca226d36275d9e802249d1bf1f7cbeee6eee4 /OpenSim/Region
parentcoment out lludp debug things that only fill up the help screen (diff)
downloadopensim-SC-b412db72be9c7a3833550119ba4d1c04b995d188.zip
opensim-SC-b412db72be9c7a3833550119ba4d1c04b995d188.tar.gz
opensim-SC-b412db72be9c7a3833550119ba4d1c04b995d188.tar.bz2
opensim-SC-b412db72be9c7a3833550119ba4d1c04b995d188.tar.xz
Fix a regression to GetSittingAvatars(). Return List<ScenePresence> once more.
Diffstat (limited to 'OpenSim/Region')
-rwxr-xr-xOpenSim/Region/Framework/Scenes/Scene.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs26
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs6
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs10
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs23
6 files changed, 37 insertions, 44 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index db64eb7..74cc161 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2631,12 +2631,10 @@ namespace OpenSim.Region.Framework.Scenes
2631 else 2631 else
2632 group.StopScriptInstances(); 2632 group.StopScriptInstances();
2633 2633
2634 List<UUID> avatars = group.GetSittingAvatars(); 2634 List<ScenePresence> avatars = group.GetSittingAvatars();
2635 foreach (UUID av in avatars) 2635 foreach (ScenePresence av in avatars)
2636 { 2636 {
2637 ScenePresence p = GetScenePresence(av); 2637 av.StandUp();
2638 if (p != null && p.ParentUUID == UUID.Zero)
2639 p.StandUp();
2640 } 2638 }
2641 2639
2642 SceneObjectPart[] partList = group.Parts; 2640 SceneObjectPart[] partList = group.Parts;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index e860862..dcbaeb7 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1067,7 +1067,7 @@ namespace OpenSim.Region.Framework.Scenes
1067 /// No avatar should appear more than once in this list. 1067 /// No avatar should appear more than once in this list.
1068 /// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart. 1068 /// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart.
1069 /// </remarks> 1069 /// </remarks>
1070 protected internal List<UUID> m_sittingAvatars = new List<UUID>(); 1070 protected internal List<ScenePresence> m_sittingAvatars = new List<ScenePresence>();
1071 1071
1072 #endregion 1072 #endregion
1073 1073
@@ -2348,7 +2348,7 @@ namespace OpenSim.Region.Framework.Scenes
2348 2348
2349 // new group as no sitting avatars 2349 // new group as no sitting avatars
2350 dupe.m_linkedAvatars = new List<ScenePresence>(); 2350 dupe.m_linkedAvatars = new List<ScenePresence>();
2351 dupe.m_sittingAvatars = new List<UUID>(); 2351 dupe.m_sittingAvatars = new List<ScenePresence>();
2352 2352
2353 dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); 2353 dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed);
2354 dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; 2354 dupe.m_rootPart.LinkNum = m_rootPart.LinkNum;
@@ -4821,10 +4821,10 @@ namespace OpenSim.Region.Framework.Scenes
4821 /// down after it move one place down the list. 4821 /// down after it move one place down the list.
4822 /// </remarks> 4822 /// </remarks>
4823 /// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns> 4823 /// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns>
4824 public List<UUID> GetSittingAvatars() 4824 public List<ScenePresence> GetSittingAvatars()
4825 { 4825 {
4826 lock (m_sittingAvatars) 4826 lock (m_sittingAvatars)
4827 return new List<UUID>(m_sittingAvatars); 4827 return new List<ScenePresence>(m_sittingAvatars);
4828 } 4828 }
4829 4829
4830 /// <summary> 4830 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index ea96d9e..d1a6692 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1419,7 +1419,7 @@ namespace OpenSim.Region.Framework.Scenes
1419 /// <value> 1419 /// <value>
1420 /// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene. 1420 /// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene.
1421 /// </value> 1421 /// </value>
1422 private HashSet<UUID> m_sittingAvatars; 1422 private HashSet<ScenePresence> m_sittingAvatars;
1423 1423
1424 public virtual UUID RegionID 1424 public virtual UUID RegionID
1425 { 1425 {
@@ -2212,7 +2212,7 @@ namespace OpenSim.Region.Framework.Scenes
2212 Array.Copy(Shape.ExtraParams, extraP, extraP.Length); 2212 Array.Copy(Shape.ExtraParams, extraP, extraP.Length);
2213 dupe.Shape.ExtraParams = extraP; 2213 dupe.Shape.ExtraParams = extraP;
2214 2214
2215 dupe.m_sittingAvatars = new HashSet<UUID>(); 2215 dupe.m_sittingAvatars = new HashSet<ScenePresence>();
2216 2216
2217 // safeguard actual copy is done in sog.copy 2217 // safeguard actual copy is done in sog.copy
2218 dupe.KeyframeMotion = null; 2218 dupe.KeyframeMotion = null;
@@ -5543,19 +5543,19 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5543 /// true if the avatar was not already recorded, false otherwise. 5543 /// true if the avatar was not already recorded, false otherwise.
5544 /// </returns> 5544 /// </returns>
5545 /// <param name='avatarId'></param> 5545 /// <param name='avatarId'></param>
5546 protected internal bool AddSittingAvatar(UUID id) 5546 protected internal bool AddSittingAvatar(ScenePresence sp)
5547 { 5547 {
5548 lock (ParentGroup.m_sittingAvatars) 5548 lock (ParentGroup.m_sittingAvatars)
5549 { 5549 {
5550 if (IsSitTargetSet && SitTargetAvatar == UUID.Zero) 5550 if (IsSitTargetSet && SitTargetAvatar == UUID.Zero)
5551 SitTargetAvatar = id; 5551 SitTargetAvatar = sp.UUID;
5552 5552
5553 if (m_sittingAvatars == null) 5553 if (m_sittingAvatars == null)
5554 m_sittingAvatars = new HashSet<UUID>(); 5554 m_sittingAvatars = new HashSet<ScenePresence>();
5555 5555
5556 if (m_sittingAvatars.Add(id)) 5556 if (m_sittingAvatars.Add(sp))
5557 { 5557 {
5558 ParentGroup.m_sittingAvatars.Add(id); 5558 ParentGroup.m_sittingAvatars.Add(sp);
5559 5559
5560 return true; 5560 return true;
5561 } 5561 }
@@ -5572,22 +5572,22 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5572 /// true if the avatar was present and removed, false if it was not present. 5572 /// true if the avatar was present and removed, false if it was not present.
5573 /// </returns> 5573 /// </returns>
5574 /// <param name='avatarId'></param> 5574 /// <param name='avatarId'></param>
5575 protected internal bool RemoveSittingAvatar(UUID id) 5575 protected internal bool RemoveSittingAvatar(ScenePresence sp)
5576 { 5576 {
5577 lock (ParentGroup.m_sittingAvatars) 5577 lock (ParentGroup.m_sittingAvatars)
5578 { 5578 {
5579 if (SitTargetAvatar == id) 5579 if (SitTargetAvatar == sp.UUID)
5580 SitTargetAvatar = UUID.Zero; 5580 SitTargetAvatar = UUID.Zero;
5581 5581
5582 if (m_sittingAvatars == null) 5582 if (m_sittingAvatars == null)
5583 return false; 5583 return false;
5584 5584
5585 if (m_sittingAvatars.Remove(id)) 5585 if (m_sittingAvatars.Remove(sp))
5586 { 5586 {
5587 if (m_sittingAvatars.Count == 0) 5587 if (m_sittingAvatars.Count == 0)
5588 m_sittingAvatars = null; 5588 m_sittingAvatars = null;
5589 5589
5590 ParentGroup.m_sittingAvatars.Remove(id); 5590 ParentGroup.m_sittingAvatars.Remove(sp);
5591 5591
5592 return true; 5592 return true;
5593 } 5593 }
@@ -5601,14 +5601,14 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5601 /// </summary> 5601 /// </summary>
5602 /// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks> 5602 /// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks>
5603 /// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns> 5603 /// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns>
5604 public HashSet<UUID> GetSittingAvatars() 5604 public HashSet<ScenePresence> GetSittingAvatars()
5605 { 5605 {
5606 lock (ParentGroup.m_sittingAvatars) 5606 lock (ParentGroup.m_sittingAvatars)
5607 { 5607 {
5608 if (m_sittingAvatars == null) 5608 if (m_sittingAvatars == null)
5609 return null; 5609 return null;
5610 else 5610 else
5611 return new HashSet<UUID>(m_sittingAvatars); 5611 return new HashSet<ScenePresence>(m_sittingAvatars);
5612 } 5612 }
5613 } 5613 }
5614 5614
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index f63fa71..974dd62 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2884,7 +2884,7 @@ namespace OpenSim.Region.Framework.Scenes
2884 { 2884 {
2885 2885
2886 m_requestedSitTargetID = 0; 2886 m_requestedSitTargetID = 0;
2887 part.RemoveSittingAvatar(UUID); 2887 part.RemoveSittingAvatar(this);
2888 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); 2888 part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK);
2889 2889
2890 SendAvatarDataToAllAgents(); 2890 SendAvatarDataToAllAgents();
@@ -2984,7 +2984,7 @@ namespace OpenSim.Region.Framework.Scenes
2984 2984
2985 Velocity = Vector3.Zero; 2985 Velocity = Vector3.Zero;
2986 2986
2987 part.AddSittingAvatar(UUID); 2987 part.AddSittingAvatar(this);
2988 2988
2989 cameraAtOffset = part.GetCameraAtOffset(); 2989 cameraAtOffset = part.GetCameraAtOffset();
2990 cameraEyeOffset = part.GetCameraEyeOffset(); 2990 cameraEyeOffset = part.GetCameraEyeOffset();
@@ -3132,7 +3132,7 @@ namespace OpenSim.Region.Framework.Scenes
3132 Velocity = Vector3.Zero; 3132 Velocity = Vector3.Zero;
3133 m_AngularVelocity = Vector3.Zero; 3133 m_AngularVelocity = Vector3.Zero;
3134 3134
3135 part.AddSittingAvatar(UUID); 3135 part.AddSittingAvatar(this);
3136 3136
3137 Vector3 cameraAtOffset = part.GetCameraAtOffset(); 3137 Vector3 cameraAtOffset = part.GetCameraAtOffset();
3138 Vector3 cameraEyeOffset = part.GetCameraEyeOffset(); 3138 Vector3 cameraEyeOffset = part.GetCameraEyeOffset();
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
index 64f11cd..8b194e6 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs
@@ -98,9 +98,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests
98 98
99 Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); 99 Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero));
100 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); 100 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1));
101 HashSet<UUID> sittingAvatars = part.GetSittingAvatars(); 101 HashSet<ScenePresence> sittingAvatars = part.GetSittingAvatars();
102 Assert.That(sittingAvatars.Count, Is.EqualTo(1)); 102 Assert.That(sittingAvatars.Count, Is.EqualTo(1));
103 Assert.That(sittingAvatars.Contains(m_sp.UUID)); 103 Assert.That(sittingAvatars.Contains(m_sp));
104 Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId)); 104 Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId));
105 } 105 }
106 106
@@ -210,9 +210,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests
210 Assert.That(m_sp.PhysicsActor, Is.Null); 210 Assert.That(m_sp.PhysicsActor, Is.Null);
211 211
212 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); 212 Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1));
213 HashSet<UUID> sittingAvatars = part.GetSittingAvatars(); 213 HashSet<ScenePresence> sittingAvatars = part.GetSittingAvatars();
214 Assert.That(sittingAvatars.Count, Is.EqualTo(1)); 214 Assert.That(sittingAvatars.Count, Is.EqualTo(1));
215 Assert.That(sittingAvatars.Contains(m_sp.UUID)); 215 Assert.That(sittingAvatars.Contains(m_sp));
216 216
217 m_sp.StandUp(); 217 m_sp.StandUp();
218 218
@@ -246,4 +246,4 @@ namespace OpenSim.Region.Framework.Scenes.Tests
246 Assert.That(m_sp.PhysicsActor, Is.Not.Null); 246 Assert.That(m_sp.PhysicsActor, Is.Not.Null);
247 } 247 }
248 } 248 }
249} \ No newline at end of file 249}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 3f523a4..337e862 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -24,7 +24,7 @@
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
@@ -617,7 +617,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
617 } 617 }
618 618
619 int actualPrimCount = part.ParentGroup.PrimCount; 619 int actualPrimCount = part.ParentGroup.PrimCount;
620 List<UUID> sittingAvatars = part.ParentGroup.GetSittingAvatars(); 620 List<ScenePresence> sittingAvatars = part.ParentGroup.GetSittingAvatars();
621 int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; 621 int adjustedPrimCount = actualPrimCount + sittingAvatars.Count;
622 622
623 // Special case for a single prim. In this case the linknum is zero. However, this will not match a single 623 // Special case for a single prim. In this case the linknum is zero. However, this will not match a single
@@ -646,11 +646,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
646 } 646 }
647 else 647 else
648 { 648 {
649 ScenePresence sp = World.GetScenePresence(sittingAvatars[linknum - actualPrimCount - 1]); 649 return sittingAvatars[linknum - actualPrimCount - 1];
650 if (sp != null)
651 return sp;
652 else
653 return null;
654 } 650 }
655 } 651 }
656 else 652 else
@@ -4146,7 +4142,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4146 } 4142 }
4147 else 4143 else
4148 { 4144 {
4149 if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(id => id == agentID) != null) 4145 if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(sp => sp.UUID == agentID) != null)
4150 { 4146 {
4151 // When agent is sitting, certain permissions are implicit if requested from sitting agent 4147 // When agent is sitting, certain permissions are implicit if requested from sitting agent
4152 implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | 4148 implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION |
@@ -6915,11 +6911,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6915 if (UUID.TryParse(id, out key)) 6911 if (UUID.TryParse(id, out key))
6916 { 6912 {
6917 ScenePresence av = World.GetScenePresence(key); 6913 ScenePresence av = World.GetScenePresence(key);
6918 List<UUID> sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); 6914 List<ScenePresence> sittingAvatars = m_host.ParentGroup.GetSittingAvatars();
6919 6915
6920 if (av != null) 6916 if (av != null)
6921 { 6917 {
6922 if (sittingAvatars.Contains(key)) 6918 if (sittingAvatars.Contains(av))
6923 { 6919 {
6924 // if the avatar is sitting on this object, then 6920 // if the avatar is sitting on this object, then
6925 // we can unsit them. We don't want random scripts unsitting random people 6921 // we can unsit them. We don't want random scripts unsitting random people
@@ -10316,9 +10312,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
10316 public LSL_Integer llGetNumberOfPrims() 10312 public LSL_Integer llGetNumberOfPrims()
10317 { 10313 {
10318 m_host.AddScriptLPS(1); 10314 m_host.AddScriptLPS(1);
10319 int avatarCount = m_host.ParentGroup.GetLinkedAvatars().Count; 10315
10320 10316 return m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount();
10321 return m_host.ParentGroup.PrimCount + avatarCount;
10322 } 10317 }
10323 10318
10324 /// <summary> 10319 /// <summary>
@@ -14457,7 +14452,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
14457 UUID userId = UUID.Zero; 14452 UUID userId = UUID.Zero;
14458 int msAvailable = 0; 14453 int msAvailable = 0;
14459 // Throttle per owner when attachment or "vehicle" (sat upon) 14454 // Throttle per owner when attachment or "vehicle" (sat upon)
14460 if (m_host.ParentGroup.IsAttachment || m_host.ParentGroup.GetSittingAvatars().Count > 0) 14455 if (m_host.ParentGroup.IsAttachment || m_host.ParentGroup.GetSittingAvatarsCount() > 0)
14461 { 14456 {
14462 userId = m_host.OwnerID; 14457 userId = m_host.OwnerID;
14463 msAvailable = m_msPerAvatarInCastRay; 14458 msAvailable = m_msPerAvatarInCastRay;