aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs4
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs10
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs57
-rw-r--r--OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs26
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs30
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs10
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs5
-rw-r--r--OpenSim/Region/CoreModules/World/Sound/SoundModule.cs10
-rw-r--r--OpenSim/Region/CoreModules/World/Sun/SunModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/World/Wind/WindModule.cs5
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs60
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs16
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneManager.cs9
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs53
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs5
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs15
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs11
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs2
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs23
-rw-r--r--OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs16
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs24
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs5
27 files changed, 209 insertions, 218 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index de08f90..0e82859 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -1976,8 +1976,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1976 SendBulkUpdateInventoryItem((InventoryItemBase)node); 1976 SendBulkUpdateInventoryItem((InventoryItemBase)node);
1977 else if (node is InventoryFolderBase) 1977 else if (node is InventoryFolderBase)
1978 SendBulkUpdateInventoryFolder((InventoryFolderBase)node); 1978 SendBulkUpdateInventoryFolder((InventoryFolderBase)node);
1979 else if (node != null)
1980 m_log.ErrorFormat("[CLIENT]: {0} sent unknown inventory node named {1}", Name, node.Name);
1979 else 1981 else
1980 m_log.ErrorFormat("[CLIENT]: Client for {0} sent unknown inventory node named {1}", Name, node.Name); 1982 m_log.ErrorFormat("[CLIENT]: {0} sent null inventory node", Name);
1981 } 1983 }
1982 1984
1983 protected void SendBulkUpdateInventoryItem(InventoryItemBase item) 1985 protected void SendBulkUpdateInventoryItem(InventoryItemBase item)
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
index 35a3f43..b16ca53 100644
--- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs
@@ -306,13 +306,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat
306 306
307 if (c.Scene != null) 307 if (c.Scene != null)
308 { 308 {
309 ((Scene)c.Scene).ForEachScenePresence 309 ((Scene)c.Scene).ForEachRootScenePresence
310 ( 310 (
311 delegate(ScenePresence presence) 311 delegate(ScenePresence presence)
312 { 312 {
313 // ignore chat from child agents
314 if (presence.IsChildAgent) return;
315
316 IClientAPI client = presence.ControllingClient; 313 IClientAPI client = presence.ControllingClient;
317 314
318 // don't forward SayOwner chat from objects to 315 // don't forward SayOwner chat from objects to
diff --git a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs
index 80957b4..00556c4 100644
--- a/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Dialog/DialogModule.cs
@@ -98,10 +98,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
98 98
99 public void SendGeneralAlert(string message) 99 public void SendGeneralAlert(string message)
100 { 100 {
101 m_scene.ForEachScenePresence(delegate(ScenePresence presence) 101 m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
102 { 102 {
103 if (!presence.IsChildAgent) 103 presence.ControllingClient.SendAlertMessage(message);
104 presence.ControllingClient.SendAlertMessage(message);
105 }); 104 });
106 } 105 }
107 106
@@ -163,10 +162,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Dialog
163 public void SendNotificationToUsersInRegion( 162 public void SendNotificationToUsersInRegion(
164 UUID fromAvatarID, string fromAvatarName, string message) 163 UUID fromAvatarID, string fromAvatarName, string message)
165 { 164 {
166 m_scene.ForEachScenePresence(delegate(ScenePresence presence) 165 m_scene.ForEachRootScenePresence(delegate(ScenePresence presence)
167 { 166 {
168 if (!presence.IsChildAgent) 167 presence.ControllingClient.SendBlueBoxMessage(fromAvatarID, fromAvatarName, message);
169 presence.ControllingClient.SendBlueBoxMessage(fromAvatarID, fromAvatarName, message);
170 }); 168 });
171 } 169 }
172 170
diff --git a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
index a83b3df..f73f9c1 100644
--- a/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Gods/GodsModule.cs
@@ -221,7 +221,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gods
221 } 221 }
222 else if (agentID == ALL_AGENTS) 222 else if (agentID == ALL_AGENTS)
223 { 223 {
224 m_scene.ForEachScenePresence( 224 m_scene.ForEachRootScenePresence(
225 delegate(ScenePresence p) 225 delegate(ScenePresence p)
226 { 226 {
227 if (p.UUID != godID && (!m_scene.Permissions.IsGod(p.UUID))) 227 if (p.UUID != godID && (!m_scene.Permissions.IsGod(p.UUID)))
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs
index 72b448b..321a705 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/HGMessageTransferModule.cs
@@ -143,24 +143,19 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
143 // Try root avatar only first 143 // Try root avatar only first
144 foreach (Scene scene in m_Scenes) 144 foreach (Scene scene in m_Scenes)
145 { 145 {
146 if (scene.Entities.ContainsKey(toAgentID) && 146// m_log.DebugFormat(
147 scene.Entities[toAgentID] is ScenePresence) 147// "[HG INSTANT MESSAGE]: Looking for root agent {0} in {1}",
148 { 148// toAgentID.ToString(), scene.RegionInfo.RegionName);
149// m_log.DebugFormat( 149 ScenePresence sp = scene.GetScenePresence(toAgentID);
150// "[HG INSTANT MESSAGE]: Looking for root agent {0} in {1}", 150 if (sp != null && !sp.IsChildAgent)
151// toAgentID.ToString(), scene.RegionInfo.RegionName); 151 {
152 152 // Local message
153 ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; 153// m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID);
154 if (!user.IsChildAgent) 154 sp.ControllingClient.SendInstantMessage(im);
155 {
156 // Local message
157// m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to root agent {0} {1}", user.Name, toAgentID);
158 user.ControllingClient.SendInstantMessage(im);
159 155
160 // Message sent 156 // Message sent
161 result(true); 157 result(true);
162 return; 158 return;
163 }
164 } 159 }
165 } 160 }
166 161
@@ -168,16 +163,14 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
168 foreach (Scene scene in m_Scenes) 163 foreach (Scene scene in m_Scenes)
169 { 164 {
170// m_log.DebugFormat( 165// m_log.DebugFormat(
171// "[HG INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName); 166// "[HG INSTANT MESSAGE]: Looking for child of {0} in {1}",
172 167// toAgentID, scene.RegionInfo.RegionName);
173 if (scene.Entities.ContainsKey(toAgentID) && 168 ScenePresence sp = scene.GetScenePresence(toAgentID);
174 scene.Entities[toAgentID] is ScenePresence) 169 if (sp != null)
175 { 170 {
176 // Local message 171 // Local message
177 ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
178
179// m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", user.Name, toAgentID); 172// m_log.DebugFormat("[HG INSTANT MESSAGE]: Delivering IM to child agent {0} {1}", user.Name, toAgentID);
180 user.ControllingClient.SendInstantMessage(im); 173 sp.ControllingClient.SendInstantMessage(im);
181 174
182 // Message sent 175 // Message sent
183 result(true); 176 result(true);
@@ -231,17 +224,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
231 bool successful = false; 224 bool successful = false;
232 foreach (Scene scene in m_Scenes) 225 foreach (Scene scene in m_Scenes)
233 { 226 {
234 if (scene.Entities.ContainsKey(toAgentID) && 227 ScenePresence sp = scene.GetScenePresence(toAgentID);
235 scene.Entities[toAgentID] is ScenePresence) 228 if(!sp.IsChildAgent)
236 { 229 {
237 ScenePresence user = 230 scene.EventManager.TriggerIncomingInstantMessage(gim);
238 (ScenePresence)scene.Entities[toAgentID]; 231 successful = true;
239
240 if (!user.IsChildAgent)
241 {
242 scene.EventManager.TriggerIncomingInstantMessage(gim);
243 successful = true;
244 }
245 } 232 }
246 } 233 }
247 if (!successful) 234 if (!successful)
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
index ff74354..712632b 100644
--- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs
@@ -140,8 +140,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
140 // Try root avatar only first 140 // Try root avatar only first
141 foreach (Scene scene in m_Scenes) 141 foreach (Scene scene in m_Scenes)
142 { 142 {
143 if (scene.Entities.ContainsKey(toAgentID) && 143// m_log.DebugFormat(
144 scene.Entities[toAgentID] is ScenePresence) 144// "[INSTANT MESSAGE]: Looking for root agent {0} in {1}",
145// toAgentID.ToString(), scene.RegionInfo.RegionName);
146 ScenePresence sp = scene.GetScenePresence(toAgentID);
147 if (sp != null && !sp.IsChildAgent)
145 { 148 {
146// m_log.DebugFormat( 149// m_log.DebugFormat(
147// "[INSTANT MESSAGE]: Looking for root agent {0} in {1}", 150// "[INSTANT MESSAGE]: Looking for root agent {0} in {1}",
@@ -165,9 +168,8 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
165 { 168 {
166// m_log.DebugFormat( 169// m_log.DebugFormat(
167// "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName); 170// "[INSTANT MESSAGE]: Looking for child of {0} in {1}", toAgentID, scene.RegionInfo.RegionName);
168 171 ScenePresence sp = scene.GetScenePresence(toAgentID);
169 if (scene.Entities.ContainsKey(toAgentID) && 172 if (sp != null)
170 scene.Entities[toAgentID] is ScenePresence)
171 { 173 {
172 // Local message 174 // Local message
173 ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; 175 ScenePresence user = (ScenePresence) scene.Entities[toAgentID];
@@ -405,17 +407,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage
405 // Trigger the Instant message in the scene. 407 // Trigger the Instant message in the scene.
406 foreach (Scene scene in m_Scenes) 408 foreach (Scene scene in m_Scenes)
407 { 409 {
408 if (scene.Entities.ContainsKey(toAgentID) && 410 ScenePresence sp = scene.GetScenePresence(toAgentID);
409 scene.Entities[toAgentID] is ScenePresence) 411 if (sp != null && !sp.IsChildAgent)
410 { 412 {
411 ScenePresence user = 413 scene.EventManager.TriggerIncomingInstantMessage(gim);
412 (ScenePresence)scene.Entities[toAgentID]; 414 successful = true;
413
414 if (!user.IsChildAgent)
415 {
416 scene.EventManager.TriggerIncomingInstantMessage(gim);
417 successful = true;
418 }
419 } 415 }
420 } 416 }
421 if (!successful) 417 if (!successful)
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
index 120fd43..b33342f 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs
@@ -277,19 +277,25 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
277 { 277 {
278 if (m_TransferModule != null) 278 if (m_TransferModule != null)
279 m_TransferModule.SendInstantMessage(im, delegate(bool success) { 279 m_TransferModule.SendInstantMessage(im, delegate(bool success) {
280 // Send BulkUpdateInventory
281 IInventoryService invService = scene.InventoryService;
282 UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item /folder, back from it's trip
283 280
284 InventoryFolderBase folder = new InventoryFolderBase(inventoryEntityID, client.AgentId); 281 // justincc - FIXME: Comment out for now. This code was added in commit db91044 Mon Aug 22 2011
285 folder = invService.GetFolder(folder); 282 // and is apparently supposed to fix bulk inventory updates after accepting items. But
286 283 // instead it appears to cause two copies of an accepted folder for the receiving user in
287 ScenePresence fromUser = scene.GetScenePresence(new UUID(im.fromAgentID)); 284 // at least some cases. Folder/item update is already done when the offer is made (see code above)
288 285
289 // If the user has left the scene by the time the message comes back then we can't send 286// // Send BulkUpdateInventory
290 // them the update. 287// IInventoryService invService = scene.InventoryService;
291 if (fromUser != null) 288// UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item /folder, back from it's trip
292 fromUser.ControllingClient.SendBulkUpdateInventory(folder); 289//
290// InventoryFolderBase folder = new InventoryFolderBase(inventoryEntityID, client.AgentId);
291// folder = invService.GetFolder(folder);
292//
293// ScenePresence fromUser = scene.GetScenePresence(new UUID(im.fromAgentID));
294//
295// // If the user has left the scene by the time the message comes back then we can't send
296// // them the update.
297// if (fromUser != null)
298// fromUser.ControllingClient.SendBulkUpdateInventory(folder);
293 }); 299 });
294 } 300 }
295 } 301 }
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 321f6b6..1471bc9 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -678,11 +678,10 @@ namespace OpenSim.Region.CoreModules.World.Estate
678 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) 678 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false))
679 return; 679 return;
680 680
681 Scene.ForEachScenePresence(delegate(ScenePresence sp) 681 Scene.ForEachRootScenePresence(delegate(ScenePresence p)
682 { 682 {
683 if (sp.UUID != senderID) 683 if (p.UUID != senderID)
684 { 684 {
685 ScenePresence p = Scene.GetScenePresence(sp.UUID);
686 // make sure they are still there, we could be working down a long list 685 // make sure they are still there, we could be working down a long list
687 // Also make sure they are actually in the region 686 // Also make sure they are actually in the region
688 if (p != null && !p.IsChildAgent) 687 if (p != null && !p.IsChildAgent)
@@ -953,10 +952,9 @@ namespace OpenSim.Region.CoreModules.World.Estate
953 952
954 public void sendRegionInfoPacketToAll() 953 public void sendRegionInfoPacketToAll()
955 { 954 {
956 Scene.ForEachScenePresence(delegate(ScenePresence sp) 955 Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
957 { 956 {
958 if (!sp.IsChildAgent) 957 HandleRegionInfoRequest(sp.ControllingClient);
959 HandleRegionInfoRequest(sp.ControllingClient);
960 }); 958 });
961 } 959 }
962 960
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index 950dff7..4f10fbf 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -533,11 +533,8 @@ namespace OpenSim.Region.CoreModules.World.Land
533 533
534 public void SendLandUpdateToAvatarsOverMe(bool snap_selection) 534 public void SendLandUpdateToAvatarsOverMe(bool snap_selection)
535 { 535 {
536 m_scene.ForEachScenePresence(delegate(ScenePresence avatar) 536 m_scene.ForEachRootScenePresence(delegate(ScenePresence avatar)
537 { 537 {
538 if (avatar.IsChildAgent)
539 return;
540
541 ILandObject over = null; 538 ILandObject over = null;
542 try 539 try
543 { 540 {
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
index 22ffcd6..93b1005 100644
--- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
+++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
@@ -70,11 +70,8 @@ namespace OpenSim.Region.CoreModules.World.Sound
70 70
71 SceneObjectGroup grp = part.ParentGroup; 71 SceneObjectGroup grp = part.ParentGroup;
72 72
73 m_scene.ForEachScenePresence(delegate(ScenePresence sp) 73 m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
74 { 74 {
75 if (sp.IsChildAgent)
76 return;
77
78 double dis = Util.GetDistanceTo(sp.AbsolutePosition, position); 75 double dis = Util.GetDistanceTo(sp.AbsolutePosition, position);
79 if (dis > 100.0) // Max audio distance 76 if (dis > 100.0) // Max audio distance
80 return; 77 return;
@@ -122,11 +119,8 @@ namespace OpenSim.Region.CoreModules.World.Sound
122 } 119 }
123 } 120 }
124 121
125 m_scene.ForEachScenePresence(delegate(ScenePresence sp) 122 m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
126 { 123 {
127 if (sp.IsChildAgent)
128 return;
129
130 double dis = Util.GetDistanceTo(sp.AbsolutePosition, position); 124 double dis = Util.GetDistanceTo(sp.AbsolutePosition, position);
131 if (dis > 100.0) // Max audio distance 125 if (dis > 100.0) // Max audio distance
132 return; 126 return;
diff --git a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs
index 4e14c73..d2c1289 100644
--- a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs
+++ b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs
@@ -488,12 +488,9 @@ namespace OpenSim.Region.CoreModules
488 488
489 private void SunUpdateToAllClients() 489 private void SunUpdateToAllClients()
490 { 490 {
491 m_scene.ForEachScenePresence(delegate(ScenePresence sp) 491 m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
492 { 492 {
493 if (!sp.IsChildAgent)
494 {
495 SunToClient(sp.ControllingClient); 493 SunToClient(sp.ControllingClient);
496 }
497 }); 494 });
498 } 495 }
499 496
diff --git a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
index 6bac555..bea5db1 100644
--- a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
+++ b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs
@@ -435,10 +435,9 @@ namespace OpenSim.Region.CoreModules
435 m_frameLastUpdateClientArray = m_frame; 435 m_frameLastUpdateClientArray = m_frame;
436 } 436 }
437 437
438 m_scene.ForEachScenePresence(delegate(ScenePresence sp) 438 m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
439 { 439 {
440 if (!sp.IsChildAgent) 440 sp.ControllingClient.SendWindData(windSpeeds);
441 sp.ControllingClient.SendWindData(windSpeeds);
442 }); 441 });
443 } 442 }
444 } 443 }
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index 21e3ecb..0fb346a 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -401,10 +401,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
401 } 401 }
402 else 402 else
403 { 403 {
404 m_scene.ForEachScenePresence(delegate(ScenePresence sp) 404 m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
405 { 405 {
406 // Don't send a green dot for yourself 406 // Don't send a green dot for yourself
407 if (!sp.IsChildAgent && sp.UUID != remoteClient.AgentId) 407 if (sp.UUID != remoteClient.AgentId)
408 { 408 {
409 mapitem = new mapItemReply(); 409 mapitem = new mapItemReply();
410 mapitem.x = (uint)(xstart + sp.AbsolutePosition.X); 410 mapitem.x = (uint)(xstart + sp.AbsolutePosition.X);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index b2f5279..0cb6681 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -920,22 +920,17 @@ namespace OpenSim.Region.Framework.Scenes
920 920
921 try 921 try
922 { 922 {
923 ForEachScenePresence(delegate(ScenePresence agent) 923 ForEachRootScenePresence(delegate(ScenePresence agent)
924 { 924 {
925 // If agent is a root agent. 925 //agent.ControllingClient.new
926 if (!agent.IsChildAgent) 926 //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo());
927 { 927
928 //agent.ControllingClient.new 928 List<ulong> old = new List<ulong>();
929 //this.CommsManager.InterRegion.InformRegionOfChildAgent(otherRegion.RegionHandle, agent.ControllingClient.RequestClientInfo()); 929 old.Add(otherRegion.RegionHandle);
930 930 agent.DropOldNeighbours(old);
931 List<ulong> old = new List<ulong>(); 931 if (m_teleportModule != null)
932 old.Add(otherRegion.RegionHandle); 932 m_teleportModule.EnableChildAgent(agent, otherRegion);
933 agent.DropOldNeighbours(old); 933 });
934 if (m_teleportModule != null)
935 m_teleportModule.EnableChildAgent(agent, otherRegion);
936 }
937 }
938 );
939 } 934 }
940 catch (NullReferenceException) 935 catch (NullReferenceException)
941 { 936 {
@@ -1070,16 +1065,11 @@ namespace OpenSim.Region.Framework.Scenes
1070 GridRegion r = new GridRegion(region); 1065 GridRegion r = new GridRegion(region);
1071 try 1066 try
1072 { 1067 {
1073 ForEachScenePresence(delegate(ScenePresence agent) 1068 ForEachRootScenePresence(delegate(ScenePresence agent)
1074 { 1069 {
1075 // If agent is a root agent. 1070 if (m_teleportModule != null)
1076 if (!agent.IsChildAgent) 1071 m_teleportModule.EnableChildAgent(agent, r);
1077 { 1072 });
1078 if (m_teleportModule != null)
1079 m_teleportModule.EnableChildAgent(agent, r);
1080 }
1081 }
1082 );
1083 } 1073 }
1084 catch (NullReferenceException) 1074 catch (NullReferenceException)
1085 { 1075 {
@@ -1493,11 +1483,10 @@ namespace OpenSim.Region.Framework.Scenes
1493 /// <param name="stats">Stats on the Simulator's performance</param> 1483 /// <param name="stats">Stats on the Simulator's performance</param>
1494 private void SendSimStatsPackets(SimStats stats) 1484 private void SendSimStatsPackets(SimStats stats)
1495 { 1485 {
1496 ForEachScenePresence( 1486 ForEachRootScenePresence(
1497 delegate(ScenePresence agent) 1487 delegate(ScenePresence agent)
1498 { 1488 {
1499 if (!agent.IsChildAgent) 1489 agent.ControllingClient.SendSimStats(stats);
1500 agent.ControllingClient.SendSimStats(stats);
1501 } 1490 }
1502 ); 1491 );
1503 } 1492 }
@@ -4463,6 +4452,19 @@ namespace OpenSim.Region.Framework.Scenes
4463 } 4452 }
4464 4453
4465 /// <summary> 4454 /// <summary>
4455 /// Performs action on all ROOT (not child) scene presences.
4456 /// This is just a shortcut function since frequently actions only appy to root SPs
4457 /// </summary>
4458 /// <param name="action"></param>
4459 public void ForEachRootScenePresence(Action<ScenePresence> action)
4460 {
4461 if(m_sceneGraph != null)
4462 {
4463 m_sceneGraph.ForEachRootScenePresence(action);
4464 }
4465 }
4466
4467 /// <summary>
4466 /// Performs action on all scene presences. 4468 /// Performs action on all scene presences.
4467 /// </summary> 4469 /// </summary>
4468 /// <param name="action"></param> 4470 /// <param name="action"></param>
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 13668ab..a4080ca 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -1265,7 +1265,21 @@ namespace OpenSim.Region.Framework.Scenes
1265 } 1265 }
1266 } 1266 }
1267 } 1267 }
1268 1268
1269 /// <summary>
1270 /// Performs action on all ROOT (not child) scene presences.
1271 /// This is just a shortcut function since frequently actions only appy to root SPs
1272 /// </summary>
1273 /// <param name="action"></param>
1274 public void ForEachRootScenePresence(Action<ScenePresence> action)
1275 {
1276 ForEachScenePresence(delegate(ScenePresence sp)
1277 {
1278 if (!sp.IsChildAgent)
1279 action(sp);
1280 });
1281 }
1282
1269 /// <summary> 1283 /// <summary>
1270 /// Performs action on all scene presences. This can ultimately run the actions in parallel but 1284 /// Performs action on all scene presences. This can ultimately run the actions in parallel but
1271 /// any delegates passed in will need to implement their own locking on data they reference and 1285 /// any delegates passed in will need to implement their own locking on data they reference and
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs
index a58b87d..3bfd866 100644
--- a/OpenSim/Region/Framework/Scenes/SceneManager.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs
@@ -458,9 +458,9 @@ namespace OpenSim.Region.Framework.Scenes
458 ForEachCurrentScene( 458 ForEachCurrentScene(
459 delegate(Scene scene) 459 delegate(Scene scene)
460 { 460 {
461 scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 461 scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
462 { 462 {
463 if (!scenePresence.IsChildAgent && (name == null || scenePresence.Name == name)) 463 if (name == null || scenePresence.Name == name)
464 { 464 {
465 m_log.DebugFormat("Packet debug for {0} {1} set to {2}", 465 m_log.DebugFormat("Packet debug for {0} {1} set to {2}",
466 scenePresence.Firstname, 466 scenePresence.Firstname,
@@ -481,10 +481,9 @@ namespace OpenSim.Region.Framework.Scenes
481 ForEachCurrentScene( 481 ForEachCurrentScene(
482 delegate(Scene scene) 482 delegate(Scene scene)
483 { 483 {
484 scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 484 scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
485 { 485 {
486 if (!scenePresence.IsChildAgent) 486 avatars.Add(scenePresence);
487 avatars.Add(scenePresence);
488 }); 487 });
489 } 488 }
490 ); 489 );
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 6e20d14..0a8edf9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1493,10 +1493,9 @@ namespace OpenSim.Region.Framework.Scenes
1493 if (volume < 0) 1493 if (volume < 0)
1494 volume = 0; 1494 volume = 0;
1495 1495
1496 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp) 1496 m_parentGroup.Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
1497 { 1497 {
1498 if (!sp.IsChildAgent) 1498 sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume);
1499 sp.ControllingClient.SendAttachedSoundGainChange(UUID, (float)volume);
1500 }); 1499 });
1501 } 1500 }
1502 1501
@@ -2136,6 +2135,8 @@ namespace OpenSim.Region.Framework.Scenes
2136 2135
2137 public void PhysicsCollision(EventArgs e) 2136 public void PhysicsCollision(EventArgs e)
2138 { 2137 {
2138// m_log.DebugFormat("Invoking PhysicsCollision on {0} {1} {2}", Name, LocalId, UUID);
2139
2139 // single threaded here 2140 // single threaded here
2140 2141
2141 CollisionEventUpdate a = (CollisionEventUpdate)e; 2142 CollisionEventUpdate a = (CollisionEventUpdate)e;
@@ -2729,10 +2730,8 @@ namespace OpenSim.Region.Framework.Scenes
2729 TaskInventory.LockItemsForRead(false); 2730 TaskInventory.LockItemsForRead(false);
2730 } 2731 }
2731 2732
2732 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence sp) 2733 m_parentGroup.Scene.ForEachRootScenePresence(delegate(ScenePresence sp)
2733 { 2734 {
2734 if (sp.IsChildAgent)
2735 return;
2736 if (!(Util.GetDistanceTo(sp.AbsolutePosition, AbsolutePosition) >= 100)) 2735 if (!(Util.GetDistanceTo(sp.AbsolutePosition, AbsolutePosition) >= 100))
2737 sp.ControllingClient.SendPreLoadSound(objectID, objectID, soundID); 2736 sp.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
2738 }); 2737 });
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 0f13050..35870c5 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2950,19 +2950,15 @@ namespace OpenSim.Region.Framework.Scenes
2950 public void SendOtherAgentsAvatarDataToMe() 2950 public void SendOtherAgentsAvatarDataToMe()
2951 { 2951 {
2952 int count = 0; 2952 int count = 0;
2953 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 2953 m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
2954 { 2954 {
2955 // only send information about root agents 2955 // only send information about other root agents
2956 if (scenePresence.IsChildAgent) 2956 if (scenePresence.UUID == UUID)
2957 return; 2957 return;
2958
2959 // only send information about other root agents
2960 if (scenePresence.UUID == UUID)
2961 return;
2962 2958
2963 scenePresence.SendAvatarDataToAgent(this); 2959 scenePresence.SendAvatarDataToAgent(this);
2964 count++; 2960 count++;
2965 }); 2961 });
2966 2962
2967 m_scene.StatsReporter.AddAgentUpdates(count); 2963 m_scene.StatsReporter.AddAgentUpdates(count);
2968 } 2964 }
@@ -2996,13 +2992,14 @@ namespace OpenSim.Region.Framework.Scenes
2996 2992
2997 int count = 0; 2993 int count = 0;
2998 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 2994 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence)
2999 { 2995 {
3000 if (scenePresence.UUID == UUID) 2996 // only send information to other root agents
3001 return; 2997 if (scenePresence.UUID == UUID)
2998 return;
3002 2999
3003 SendAppearanceToAgent(scenePresence); 3000 SendAppearanceToAgent(scenePresence);
3004 count++; 3001 count++;
3005 }); 3002 });
3006 3003
3007 m_scene.StatsReporter.AddAgentUpdates(count); 3004 m_scene.StatsReporter.AddAgentUpdates(count);
3008 } 3005 }
@@ -3016,19 +3013,15 @@ namespace OpenSim.Region.Framework.Scenes
3016 //m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} ({1})", Name, UUID); 3013 //m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToMe: {0} ({1})", Name, UUID);
3017 3014
3018 int count = 0; 3015 int count = 0;
3019 m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) 3016 m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence)
3020 { 3017 {
3021 // only send information about root agents 3018 // only send information about other root agents
3022 if (scenePresence.IsChildAgent) 3019 if (scenePresence.UUID == UUID)
3023 return; 3020 return;
3024
3025 // only send information about other root agents
3026 if (scenePresence.UUID == UUID)
3027 return;
3028 3021
3029 scenePresence.SendAppearanceToAgent(this); 3022 scenePresence.SendAppearanceToAgent(this);
3030 count++; 3023 count++;
3031 }); 3024 });
3032 3025
3033 m_scene.StatsReporter.AddAgentUpdates(count); 3026 m_scene.StatsReporter.AddAgentUpdates(count);
3034 } 3027 }
diff --git a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
index 0d6313a..e22618d 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Concierge/ConciergeModule.cs
@@ -373,13 +373,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.Concierge
373 scene.GetRootAgentCount(), scene.RegionInfo.RegionName, 373 scene.GetRootAgentCount(), scene.RegionInfo.RegionName,
374 scene.RegionInfo.RegionID, 374 scene.RegionInfo.RegionID,
375 DateTime.UtcNow.ToString("s"))); 375 DateTime.UtcNow.ToString("s")));
376 scene.ForEachScenePresence(delegate(ScenePresence sp) 376 scene.ForEachRootScenePresence(delegate(ScenePresence sp)
377 { 377 {
378 if (!sp.IsChildAgent)
379 {
380 list.Append(String.Format(" <avatar name=\"{0}\" uuid=\"{1}\" />\n", sp.Name, sp.UUID)); 378 list.Append(String.Format(" <avatar name=\"{0}\" uuid=\"{1}\" />\n", sp.Name, sp.UUID));
381 list.Append("</avatars>"); 379 list.Append("</avatars>");
382 }
383 }); 380 });
384 string payload = list.ToString(); 381 string payload = list.ToString();
385 382
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
index a12e6ea..10b83e6 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsMessagingModule.cs
@@ -504,19 +504,18 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
504 // Try root avatar first 504 // Try root avatar first
505 foreach (Scene scene in m_sceneList) 505 foreach (Scene scene in m_sceneList)
506 { 506 {
507 if (scene.Entities.ContainsKey(agentID) && 507 ScenePresence sp = scene.GetScenePresence(agentID);
508 scene.Entities[agentID] is ScenePresence) 508 if (sp != null)
509 { 509 {
510 ScenePresence user = (ScenePresence)scene.Entities[agentID]; 510 if (!sp.IsChildAgent)
511 if (!user.IsChildAgent)
512 { 511 {
513 if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", user.ControllingClient.Name); 512 if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found root agent for client : {0}", sp.ControllingClient.Name);
514 return user.ControllingClient; 513 return sp.ControllingClient;
515 } 514 }
516 else 515 else
517 { 516 {
518 if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", user.ControllingClient.Name); 517 if (m_debugEnabled) m_log.WarnFormat("[GROUPS-MESSAGING]: Found child agent for client : {0}", sp.ControllingClient.Name);
519 child = user.ControllingClient; 518 child = sp.ControllingClient;
520 } 519 }
521 } 520 }
522 } 521 }
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index 630fcab..b2c0f48 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -1076,17 +1076,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1076 // Try root avatar first 1076 // Try root avatar first
1077 foreach (Scene scene in m_sceneList) 1077 foreach (Scene scene in m_sceneList)
1078 { 1078 {
1079 if (scene.Entities.ContainsKey(agentID) && 1079 ScenePresence sp = scene.GetScenePresence(agentID);
1080 scene.Entities[agentID] is ScenePresence) 1080 if (sp != null)
1081 { 1081 {
1082 ScenePresence user = (ScenePresence)scene.Entities[agentID]; 1082 if (!sp.IsChildAgent)
1083 if (!user.IsChildAgent)
1084 { 1083 {
1085 return user.ControllingClient; 1084 return sp.ControllingClient;
1086 } 1085 }
1087 else 1086 else
1088 { 1087 {
1089 child = user.ControllingClient; 1088 child = sp.ControllingClient;
1090 } 1089 }
1091 } 1090 }
1092 } 1091 }
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index 362f997..49f60f8 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -76,6 +76,8 @@ namespace OpenSim.Region.Physics.Manager
76 /// </summary> 76 /// </summary>
77 public int Count { get { return m_objCollisionList.Count; } } 77 public int Count { get { return m_objCollisionList.Count; } }
78 78
79 public bool CollisionsOnPreviousFrame { get; private set; }
80
79 public Dictionary<uint, ContactPoint> m_objCollisionList; 81 public Dictionary<uint, ContactPoint> m_objCollisionList;
80 82
81 public CollisionEventUpdate(Dictionary<uint, ContactPoint> objCollisionList) 83 public CollisionEventUpdate(Dictionary<uint, ContactPoint> objCollisionList)
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 3a17511..6e34811 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -193,6 +193,15 @@ namespace OpenSim.Region.Physics.OdePlugin
193 private int m_eventsubscription; 193 private int m_eventsubscription;
194 private CollisionEventUpdate CollisionEventsThisFrame = new CollisionEventUpdate(); 194 private CollisionEventUpdate CollisionEventsThisFrame = new CollisionEventUpdate();
195 195
196 /// <summary>
197 /// Signal whether there were collisions on the previous frame, so we know if we need to send the
198 /// empty CollisionEventsThisFrame to the prim so that it can detect the end of a collision.
199 /// </summary>
200 /// <remarks>
201 /// This is probably a temporary measure, pending storing this information consistently in CollisionEventUpdate itself.
202 /// </remarks>
203 private bool m_collisionsOnPreviousFrame;
204
196 private IntPtr m_linkJoint = IntPtr.Zero; 205 private IntPtr m_linkJoint = IntPtr.Zero;
197 206
198 internal volatile bool childPrim; 207 internal volatile bool childPrim;
@@ -3025,8 +3034,20 @@ Console.WriteLine(" JointCreateFixed");
3025 3034
3026 public void SendCollisions() 3035 public void SendCollisions()
3027 { 3036 {
3028 if (CollisionEventsThisFrame.Count > 0) 3037 if (m_collisionsOnPreviousFrame || CollisionEventsThisFrame.Count > 0)
3038 {
3029 base.SendCollisionUpdate(CollisionEventsThisFrame); 3039 base.SendCollisionUpdate(CollisionEventsThisFrame);
3040
3041 if (CollisionEventsThisFrame.Count > 0)
3042 {
3043 m_collisionsOnPreviousFrame = true;
3044 CollisionEventsThisFrame.Clear();
3045 }
3046 else
3047 {
3048 m_collisionsOnPreviousFrame = false;
3049 }
3050 }
3030 } 3051 }
3031 3052
3032 public override bool SubscribedEvents() 3053 public override bool SubscribedEvents()
diff --git a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
index 3edc3a2..1413535 100644
--- a/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
+++ b/OpenSim/Region/RegionCombinerModule/RegionCombinerModule.cs
@@ -629,10 +629,8 @@ namespace OpenSim.Region.RegionCombinerModule
629 629
630 List<Vector3> CoarseLocations = new List<Vector3>(); 630 List<Vector3> CoarseLocations = new List<Vector3>();
631 List<UUID> AvatarUUIDs = new List<UUID>(); 631 List<UUID> AvatarUUIDs = new List<UUID>();
632 connectiondata.RegionScene.ForEachScenePresence(delegate(ScenePresence sp) 632 connectiondata.RegionScene.ForEachRootScenePresence(delegate(ScenePresence sp)
633 { 633 {
634 if (sp.IsChildAgent)
635 return;
636 if (sp.UUID != presence.UUID) 634 if (sp.UUID != presence.UUID)
637 { 635 {
638 if (sp.ParentID != 0) 636 if (sp.ParentID != 0)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index e53fd5d..ebe276b 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -4124,9 +4124,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4124 m_host.AddScriptLPS(1); 4124 m_host.AddScriptLPS(1);
4125 List<UUID> keytable = new List<UUID>(); 4125 List<UUID> keytable = new List<UUID>();
4126 // parse for sitting avatare-uuids 4126 // parse for sitting avatare-uuids
4127 World.ForEachScenePresence(delegate(ScenePresence presence) 4127 World.ForEachRootScenePresence(delegate(ScenePresence presence)
4128 { 4128 {
4129 if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID)) 4129 if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
4130 keytable.Add(presence.UUID); 4130 keytable.Add(presence.UUID);
4131 }); 4131 });
4132 4132
@@ -4199,9 +4199,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
4199 m_host.AddScriptLPS(1); 4199 m_host.AddScriptLPS(1);
4200 // parse for sitting avatare-names 4200 // parse for sitting avatare-names
4201 List<String> nametable = new List<String>(); 4201 List<String> nametable = new List<String>();
4202 World.ForEachScenePresence(delegate(ScenePresence presence) 4202 World.ForEachRootScenePresence(delegate(ScenePresence presence)
4203 { 4203 {
4204 if (!presence.IsChildAgent && presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID)) 4204 if (presence.ParentID != 0 && m_host.ParentGroup.HasChildPrim(presence.ParentID))
4205 nametable.Add(presence.ControllingClient.Name); 4205 nametable.Add(presence.ControllingClient.Name);
4206 }); 4206 });
4207 4207
@@ -9933,9 +9933,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9933 landObject.SetMediaUrl(url); 9933 landObject.SetMediaUrl(url);
9934 9934
9935 // now send to all (non-child) agents in the parcel 9935 // now send to all (non-child) agents in the parcel
9936 World.ForEachScenePresence(delegate(ScenePresence sp) 9936 World.ForEachRootScenePresence(delegate(ScenePresence sp)
9937 { 9937 {
9938 if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID)) 9938 if (sp.currentParcelUUID == landData.GlobalID)
9939 { 9939 {
9940 sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL, 9940 sp.ControllingClient.SendParcelMediaUpdate(landData.MediaURL,
9941 landData.MediaID, 9941 landData.MediaID,
@@ -9966,9 +9966,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
9966 if (presence == null) 9966 if (presence == null)
9967 { 9967 {
9968 // send to all (non-child) agents in the parcel 9968 // send to all (non-child) agents in the parcel
9969 World.ForEachScenePresence(delegate(ScenePresence sp) 9969 World.ForEachRootScenePresence(delegate(ScenePresence sp)
9970 { 9970 {
9971 if (!sp.IsChildAgent && (sp.currentParcelUUID == landData.GlobalID)) 9971 if (sp.currentParcelUUID == landData.GlobalID)
9972 { 9972 {
9973 sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this? 9973 sp.ControllingClient.SendParcelMediaCommand(0x4, // TODO what is this?
9974 (ParcelMediaCommandEnum)commandToSend, 9974 (ParcelMediaCommandEnum)commandToSend,
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index ab0eec9..dc22017 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -882,10 +882,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
882 CheckThreatLevel(ThreatLevel.None, "osGetAgents"); 882 CheckThreatLevel(ThreatLevel.None, "osGetAgents");
883 883
884 LSL_List result = new LSL_List(); 884 LSL_List result = new LSL_List();
885 World.ForEachScenePresence(delegate(ScenePresence sp) 885 World.ForEachRootScenePresence(delegate(ScenePresence sp)
886 { 886 {
887 if (!sp.IsChildAgent) 887 result.Add(new LSL_String(sp.Name));
888 result.Add(new LSL_String(sp.Name));
889 }); 888 });
890 return result; 889 return result;
891 } 890 }
@@ -2590,11 +2589,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2590 CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar"); 2589 CheckThreatLevel(ThreatLevel.Severe, "osKickAvatar");
2591 if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID)) 2590 if (World.Permissions.CanRunConsoleCommand(m_host.OwnerID))
2592 { 2591 {
2593 World.ForEachScenePresence(delegate(ScenePresence sp) 2592 World.ForEachRootScenePresence(delegate(ScenePresence sp)
2594 { 2593 {
2595 if (!sp.IsChildAgent && 2594 if (sp.Firstname == FirstName && sp.Lastname == SurName)
2596 sp.Firstname == FirstName &&
2597 sp.Lastname == SurName)
2598 { 2595 {
2599 // kick client... 2596 // kick client...
2600 if (alert != null) 2597 if (alert != null)
@@ -2726,17 +2723,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2726 CheckThreatLevel(ThreatLevel.None, "osGetAvatarList"); 2723 CheckThreatLevel(ThreatLevel.None, "osGetAvatarList");
2727 2724
2728 LSL_List result = new LSL_List(); 2725 LSL_List result = new LSL_List();
2729 World.ForEachScenePresence(delegate (ScenePresence avatar) 2726 World.ForEachRootScenePresence(delegate (ScenePresence avatar)
2730 { 2727 {
2731 if (avatar != null && avatar.UUID != m_host.OwnerID) 2728 if (avatar != null && avatar.UUID != m_host.OwnerID)
2732 { 2729 {
2733 if (avatar.IsChildAgent == false) 2730 result.Add(new LSL_String(avatar.UUID.ToString()));
2734 { 2731 OpenMetaverse.Vector3 ap = avatar.AbsolutePosition;
2735 result.Add(new LSL_String(avatar.UUID.ToString())); 2732 result.Add(new LSL_Vector(ap.X, ap.Y, ap.Z));
2736 OpenMetaverse.Vector3 ap = avatar.AbsolutePosition; 2733 result.Add(new LSL_String(avatar.Name));
2737 result.Add(new LSL_Vector(ap.X, ap.Y, ap.Z));
2738 result.Add(new LSL_String(avatar.Name));
2739 }
2740 } 2734 }
2741 }); 2735 });
2742 2736
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 3ebeb75..402377d 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -442,7 +442,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
442 IScriptInstance instance = GetInstance(itemId); 442 IScriptInstance instance = GetInstance(itemId);
443 if (instance == null) 443 if (instance == null)
444 { 444 {
445 MainConsole.Instance.OutputFormat("Error - No item found with id {0}", itemId); 445 // Commented out for now since this will cause false reports on simulators with more than
446 // one scene where the current command line set region is 'root' (which causes commands to
447 // go to both regions... (sigh)
448// MainConsole.Instance.OutputFormat("Error - No item found with id {0}", itemId);
446 return; 449 return;
447 } 450 }
448 else 451 else