From f5812b3702f38d4535f042303eef4bd37f8a448c Mon Sep 17 00:00:00 2001
From: Teravus Ovares
Date: Sat, 28 Mar 2009 01:40:33 +0000
Subject: * Adds AgentUUIDs into the CourseLocationUpdate to improve
 compatibility with LibOMV based clients. * Modifies the IClientAPI!  So
 client stacks will need to be modified!

---
 OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs   | 9 +++++++--
 OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | 2 +-
 OpenSim/Region/Framework/Scenes/ScenePresence.cs       | 6 +++++-
 OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs  | 2 +-
 4 files changed, 14 insertions(+), 5 deletions(-)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 47585f9..07f72c3 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -2674,7 +2674,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
             OutPacket(terse, ThrottleOutPacketType.Task);
         }
 
-        public void SendCoarseLocationUpdate(List<Vector3> CoarseLocations)
+        public void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
         {
             if (!IsActive) return; // We don't need to update inactive clients.
 
@@ -2684,14 +2684,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
             CoarseLocationUpdatePacket.IndexBlock ib =
                 new CoarseLocationUpdatePacket.IndexBlock();
             loc.Location = new CoarseLocationUpdatePacket.LocationBlock[total];
+            loc.AgentData = new CoarseLocationUpdatePacket.AgentDataBlock[total];
+
             for (int i = 0; i < total; i++)
             {
                 CoarseLocationUpdatePacket.LocationBlock lb =
                     new CoarseLocationUpdatePacket.LocationBlock();
                 lb.X = (byte)CoarseLocations[i].X;
                 lb.Y = (byte)CoarseLocations[i].Y;
-                lb.Z = (byte)(CoarseLocations[i].Z / 4);
+
+                lb.Z = CoarseLocations[i].Z > 1024 ? (byte)0 : (byte)(CoarseLocations[i].Z * 0.25);
                 loc.Location[i] = lb;
+                loc.AgentData[i] = new CoarseLocationUpdatePacket.AgentDataBlock();
+                loc.AgentData[i].AgentID = users[i];
             }
             ib.You = -1;
             ib.Prey = -1;
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
index 599236e..c5b6a1e 100644
--- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs
@@ -499,7 +499,7 @@ namespace OpenSim.Region.Examples.SimpleModule
         {
         }
 
-        public virtual void SendCoarseLocationUpdate(List<Vector3> CoarseLocations)
+        public virtual void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
         {
         }
 
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 42820c4..b059624 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2178,6 +2178,7 @@ namespace OpenSim.Region.Framework.Scenes
             m_perfMonMS = System.Environment.TickCount;
 
             List<Vector3> CoarseLocations = new List<Vector3>();
+            List<UUID> AvatarUUIDs = new List<UUID>();
             List<ScenePresence> avatars = m_scene.GetAvatars();
             for (int i = 0; i < avatars.Count; i++)
             {
@@ -2190,21 +2191,24 @@ namespace OpenSim.Region.Framework.Scenes
                         if (sop != null)
                         {
                             CoarseLocations.Add(sop.AbsolutePosition + avatars[i].m_pos);
+                            AvatarUUIDs.Add(avatars[i].UUID);
                         }
                         else
                         {
                             // we can't find the parent..  ! arg!
                             CoarseLocations.Add(avatars[i].m_pos);
+                            AvatarUUIDs.Add(avatars[i].UUID);
                         }
                     }
                     else
                     {
                         CoarseLocations.Add(avatars[i].m_pos);
+                        AvatarUUIDs.Add(avatars[i].UUID);
                     }
                 }
             }
 
-            m_controllingClient.SendCoarseLocationUpdate(CoarseLocations);
+            m_controllingClient.SendCoarseLocationUpdate(AvatarUUIDs, CoarseLocations);
 
             m_scene.AddAgentTime(System.Environment.TickCount - m_perfMonMS);
         }
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index c182048..e810b4e 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -588,7 +588,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC
         {
         }
 
-        public virtual void SendCoarseLocationUpdate(List<Vector3> CoarseLocations)
+        public virtual void SendCoarseLocationUpdate(List<UUID> users, List<Vector3> CoarseLocations)
         {
         }
 
-- 
cgit v1.1