aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs44
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs40
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs62
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs32
5 files changed, 136 insertions, 44 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index 6c9830c..8039558 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -390,7 +390,7 @@ namespace OpenSim.Region.CoreModules.World.Land
390 { 390 {
391 if (avatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT) 391 if (avatar.AbsolutePosition.Z < LandChannel.BAN_LINE_SAFETY_HIEGHT)
392 { 392 {
393 if (parcelAvatarIsEntering.IsBannedFromLand(avatar.UUID)) 393 if (parcelAvatarIsEntering.IsEitherBannedOrRestricted(avatar.UUID))
394 { 394 {
395 MoveUserOutOfParcel(avatar); 395 MoveUserOutOfParcel(avatar);
396 } 396 }
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index ffbf745..b04871e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -2349,9 +2349,18 @@ namespace OpenSim.Region.Framework.Scenes
2349 EventManager.TriggerOnAttach(localID, itemID, avatarID); 2349 EventManager.TriggerOnAttach(localID, itemID, avatarID);
2350 } 2350 }
2351 2351
2352 public UUID RezSingleAttachment(IClientAPI remoteClient, UUID itemID, 2352 /// <summary>
2353 uint AttachmentPt) 2353 /// Called when the client receives a request to rez a single attachment on to the avatar from inventory
2354 /// (RezSingleAttachmentFromInv packet).
2355 /// </summary>
2356 /// <param name="remoteClient"></param>
2357 /// <param name="itemID"></param>
2358 /// <param name="AttachmentPt"></param>
2359 /// <returns></returns>
2360 public UUID RezSingleAttachment(IClientAPI remoteClient, UUID itemID, uint AttachmentPt)
2354 { 2361 {
2362 m_log.DebugFormat("[USER INVENTORY]: Rezzing single attachment from item {0} for {1}", itemID, remoteClient.Name);
2363
2355 SceneObjectGroup att = m_sceneGraph.RezSingleAttachment(remoteClient, itemID, AttachmentPt); 2364 SceneObjectGroup att = m_sceneGraph.RezSingleAttachment(remoteClient, itemID, AttachmentPt);
2356 2365
2357 if (att == null) 2366 if (att == null)
@@ -2363,9 +2372,20 @@ namespace OpenSim.Region.Framework.Scenes
2363 return RezSingleAttachment(att, remoteClient, itemID, AttachmentPt); 2372 return RezSingleAttachment(att, remoteClient, itemID, AttachmentPt);
2364 } 2373 }
2365 2374
2366 public UUID RezSingleAttachment(SceneObjectGroup att, 2375 /// <summary>
2367 IClientAPI remoteClient, UUID itemID, uint AttachmentPt) 2376 /// Update the user inventory to reflect an attachment
2377 /// </summary>
2378 /// <param name="att"></param>
2379 /// <param name="remoteClient"></param>
2380 /// <param name="itemID"></param>
2381 /// <param name="AttachmentPt"></param>
2382 /// <returns></returns>
2383 public UUID RezSingleAttachment(SceneObjectGroup att, IClientAPI remoteClient, UUID itemID, uint AttachmentPt)
2368 { 2384 {
2385 m_log.DebugFormat(
2386 "[USER INVENTORY]: Updating inventory of {0} to show attachment of {1} (item ID {2})",
2387 remoteClient.Name, att.Name, itemID);
2388
2369 if (!att.IsDeleted) 2389 if (!att.IsDeleted)
2370 AttachmentPt = att.RootPart.AttachmentPoint; 2390 AttachmentPt = att.RootPart.AttachmentPoint;
2371 2391
@@ -2404,8 +2424,19 @@ namespace OpenSim.Region.Framework.Scenes
2404 return m_sceneGraph.AttachObject(controllingClient, localID, attachPoint, rot, pos, silent); 2424 return m_sceneGraph.AttachObject(controllingClient, localID, attachPoint, rot, pos, silent);
2405 } 2425 }
2406 2426
2427 /// <summary>
2428 /// This registers the item as attached in a user's inventory
2429 /// </summary>
2430 /// <param name="remoteClient"></param>
2431 /// <param name="AttachmentPt"></param>
2432 /// <param name="itemID"></param>
2433 /// <param name="att"></param>
2407 public void AttachObject(IClientAPI remoteClient, uint AttachmentPt, UUID itemID, SceneObjectGroup att) 2434 public void AttachObject(IClientAPI remoteClient, uint AttachmentPt, UUID itemID, SceneObjectGroup att)
2408 { 2435 {
2436// m_log.DebugFormat(
2437// "[USER INVENTORY]: Updating attachment {0} for {1} at {2} using item ID {3}",
2438// att.Name, remoteClient.Name, AttachmentPt, itemID);
2439
2409 if (UUID.Zero == itemID) 2440 if (UUID.Zero == itemID)
2410 { 2441 {
2411 m_log.Error("[SCENE INVENTORY]: Unable to save attachment. Error inventory item ID."); 2442 m_log.Error("[SCENE INVENTORY]: Unable to save attachment. Error inventory item ID.");
@@ -2433,10 +2464,7 @@ namespace OpenSim.Region.Framework.Scenes
2433 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/); 2464 presence.Appearance.SetAttachment((int)AttachmentPt, itemID, item.AssetID /*att.UUID*/);
2434 2465
2435 if (m_AvatarFactory != null) 2466 if (m_AvatarFactory != null)
2436 {
2437 m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance); 2467 m_AvatarFactory.UpdateDatabase(remoteClient.AgentId, presence.Appearance);
2438 }
2439
2440 } 2468 }
2441 } 2469 }
2442 2470
@@ -2519,6 +2547,7 @@ namespace OpenSim.Region.Framework.Scenes
2519 { 2547 {
2520 sog.SetOwnerId(ownerID); 2548 sog.SetOwnerId(ownerID);
2521 sog.SetGroup(groupID, remoteClient); 2549 sog.SetGroup(groupID, remoteClient);
2550 sog.ScheduleGroupForFullUpdate();
2522 2551
2523 foreach (SceneObjectPart child in sog.Children.Values) 2552 foreach (SceneObjectPart child in sog.Children.Values)
2524 child.Inventory.ChangeInventoryOwner(ownerID); 2553 child.Inventory.ChangeInventoryOwner(ownerID);
@@ -2540,6 +2569,7 @@ namespace OpenSim.Region.Framework.Scenes
2540 sog.SetOwnerId(groupID); 2569 sog.SetOwnerId(groupID);
2541 sog.ApplyNextOwnerPermissions(); 2570 sog.ApplyNextOwnerPermissions();
2542 } 2571 }
2572
2543 } 2573 }
2544 2574
2545 foreach (uint localID in localIDs) 2575 foreach (uint localID in localIDs)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index e5e6fc9..55f4550 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1840,14 +1840,22 @@ namespace OpenSim.Region.Framework.Scenes
1840 //m_log.DebugFormat( 1840 //m_log.DebugFormat(
1841 // "[SCENE]: Scene.AddNewPrim() pcode {0} called for {1} in {2}", shape.PCode, ownerID, RegionInfo.RegionName); 1841 // "[SCENE]: Scene.AddNewPrim() pcode {0} called for {1} in {2}", shape.PCode, ownerID, RegionInfo.RegionName);
1842 1842
1843 SceneObjectGroup sceneObject = null;
1844
1843 // If an entity creator has been registered for this prim type then use that 1845 // If an entity creator has been registered for this prim type then use that
1844 if (m_entityCreators.ContainsKey((PCode)shape.PCode)) 1846 if (m_entityCreators.ContainsKey((PCode)shape.PCode))
1845 return m_entityCreators[(PCode)shape.PCode].CreateEntity(ownerID, groupID, pos, rot, shape); 1847 {
1848 sceneObject = m_entityCreators[(PCode)shape.PCode].CreateEntity(ownerID, groupID, pos, rot, shape);
1849 }
1850 else
1851 {
1852 // Otherwise, use this default creation code;
1853 sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
1854 AddNewSceneObject(sceneObject, true);
1855 sceneObject.SetGroup(groupID, null);
1856 }
1846 1857
1847 // Otherwise, use this default creation code; 1858 sceneObject.ScheduleGroupForFullUpdate();
1848 SceneObjectGroup sceneObject = new SceneObjectGroup(ownerID, pos, rot, shape);
1849 AddNewSceneObject(sceneObject, true);
1850 sceneObject.SetGroup(groupID, null);
1851 1859
1852 return sceneObject; 1860 return sceneObject;
1853 } 1861 }
@@ -1875,7 +1883,7 @@ namespace OpenSim.Region.Framework.Scenes
1875 } 1883 }
1876 1884
1877 /// <summary> 1885 /// <summary>
1878 /// Add a newly created object to the scene 1886 /// Add a newly created object to the scene. Updates are also sent to viewers.
1879 /// </summary> 1887 /// </summary>
1880 /// <param name="sceneObject"></param> 1888 /// <param name="sceneObject"></param>
1881 /// <param name="attachToBackup"> 1889 /// <param name="attachToBackup">
@@ -1884,8 +1892,25 @@ namespace OpenSim.Region.Framework.Scenes
1884 /// </param> 1892 /// </param>
1885 public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup) 1893 public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup)
1886 { 1894 {
1887 return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup); 1895 return AddNewSceneObject(sceneObject, attachToBackup, true);
1888 } 1896 }
1897
1898 /// <summary>
1899 /// Add a newly created object to the scene
1900 /// </summary>
1901 /// <param name="sceneObject"></param>
1902 /// <param name="attachToBackup">
1903 /// If true, the object is made persistent into the scene.
1904 /// If false, the object will not persist over server restarts
1905 /// </param>
1906 /// <param name="sendClientUpdates">
1907 /// If true, updates for the new scene object are sent to all viewers in range.
1908 /// If false, it is left to the caller to schedule the update
1909 /// </param>
1910 public bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
1911 {
1912 return m_sceneGraph.AddNewSceneObject(sceneObject, attachToBackup, sendClientUpdates);
1913 }
1889 1914
1890 /// <summary> 1915 /// <summary>
1891 /// Delete every object from the scene 1916 /// Delete every object from the scene
@@ -3349,7 +3374,6 @@ namespace OpenSim.Region.Framework.Scenes
3349 } 3374 }
3350 else 3375 else
3351 m_log.Debug("[SCENE]: Unable to register with InterregionCommsIn"); 3376 m_log.Debug("[SCENE]: Unable to register with InterregionCommsIn");
3352
3353 } 3377 }
3354 3378
3355 /// <summary> 3379 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index e28d29f..bbcb85e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -252,7 +252,7 @@ namespace OpenSim.Region.Framework.Scenes
252 sceneObject.HasGroupChanged = true; 252 sceneObject.HasGroupChanged = true;
253 } 253 }
254 254
255 return AddSceneObject(sceneObject, attachToBackup); 255 return AddSceneObject(sceneObject, attachToBackup, true);
256 } 256 }
257 257
258 /// <summary> 258 /// <summary>
@@ -267,12 +267,12 @@ namespace OpenSim.Region.Framework.Scenes
267 /// <returns> 267 /// <returns>
268 /// true if the object was added, false if an object with the same uuid was already in the scene 268 /// true if the object was added, false if an object with the same uuid was already in the scene
269 /// </returns> 269 /// </returns>
270 protected internal bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup) 270 protected internal bool AddNewSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
271 { 271 {
272 // Ensure that we persist this new scene object 272 // Ensure that we persist this new scene object
273 sceneObject.HasGroupChanged = true; 273 sceneObject.HasGroupChanged = true;
274 274
275 return AddSceneObject(sceneObject, attachToBackup); 275 return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates);
276 } 276 }
277 277
278 /// <summary> 278 /// <summary>
@@ -284,12 +284,19 @@ namespace OpenSim.Region.Framework.Scenes
284 /// If true, the object is made persistent into the scene. 284 /// If true, the object is made persistent into the scene.
285 /// If false, the object will not persist over server restarts 285 /// If false, the object will not persist over server restarts
286 /// </param> 286 /// </param>
287 /// <returns>true if the object was added, false if an object with the same uuid was already in the scene 287 /// <param name="sendClientUpdates">
288 /// If true, updates for the new scene object are sent to all viewers in range.
289 /// If false, it is left to the caller to schedule the update
290 /// </param>
291 /// <returns>
292 /// true if the object was added, false if an object with the same uuid was already in the scene
288 /// </returns> 293 /// </returns>
289 protected bool AddSceneObject(SceneObjectGroup sceneObject, bool attachToBackup) 294 protected bool AddSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
290 { 295 {
291 if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero) 296 if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero)
292 return false; 297 return false;
298
299 bool alreadyExisted = false;
293 300
294 if (m_parentScene.m_clampPrimSize) 301 if (m_parentScene.m_clampPrimSize)
295 { 302 {
@@ -310,6 +317,9 @@ namespace OpenSim.Region.Framework.Scenes
310 317
311 sceneObject.AttachToScene(m_parentScene); 318 sceneObject.AttachToScene(m_parentScene);
312 319
320 if (sendClientUpdates)
321 sceneObject.ScheduleGroupForFullUpdate();
322
313 lock (sceneObject) 323 lock (sceneObject)
314 { 324 {
315 if (!Entities.ContainsKey(sceneObject.UUID)) 325 if (!Entities.ContainsKey(sceneObject.UUID))
@@ -333,12 +343,14 @@ namespace OpenSim.Region.Framework.Scenes
333 SceneObjectGroupsByLocalID[part.LocalId] = sceneObject; 343 SceneObjectGroupsByLocalID[part.LocalId] = sceneObject;
334 } 344 }
335 } 345 }
336 346 }
337 return true; 347 else
348 {
349 alreadyExisted = true;
338 } 350 }
339 } 351 }
340 352
341 return false; 353 return alreadyExisted;
342 } 354 }
343 355
344 /// <summary> 356 /// <summary>
@@ -545,26 +557,34 @@ namespace OpenSim.Region.Framework.Scenes
545 itemID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true, 557 itemID, Vector3.Zero, Vector3.Zero, UUID.Zero, (byte)1, true,
546 false, false, remoteClient.AgentId, true); 558 false, false, remoteClient.AgentId, true);
547 559
560// m_log.DebugFormat(
561// "[SCENE GRAPH]: Retrieved single object {0} for attachment to {1} on point {2}",
562// objatt.Name, remoteClient.Name, AttachmentPt);
563
548 if (objatt != null) 564 if (objatt != null)
549 { 565 {
550 bool tainted = false; 566 bool tainted = false;
551 if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint()) 567 if (AttachmentPt != 0 && AttachmentPt != objatt.GetAttachmentPoint())
552 tainted = true; 568 tainted = true;
553 569
554 if (AttachObject( 570 AttachObject(remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition, false);
555 remoteClient, objatt.LocalId, AttachmentPt, Quaternion.Identity, objatt.AbsolutePosition, false)) 571 //objatt.ScheduleGroupForFullUpdate();
556 {
557 objatt.ScheduleGroupForFullUpdate();
558 if (tainted)
559 objatt.HasGroupChanged = true;
560
561 // Fire after attach, so we don't get messy perms dialogs
562 // 3 == AttachedRez
563 objatt.CreateScriptInstances(0, true, m_parentScene.DefaultScriptEngine, 3);
564 572
565 // Do this last so that event listeners have access to all the effects of the attachment 573 if (tainted)
566 m_parentScene.EventManager.TriggerOnAttach(objatt.LocalId, itemID, remoteClient.AgentId); 574 objatt.HasGroupChanged = true;
567 } 575
576 // Fire after attach, so we don't get messy perms dialogs
577 // 3 == AttachedRez
578 objatt.CreateScriptInstances(0, true, m_parentScene.DefaultScriptEngine, 3);
579
580 // Do this last so that event listeners have access to all the effects of the attachment
581 m_parentScene.EventManager.TriggerOnAttach(objatt.LocalId, itemID, remoteClient.AgentId);
582 }
583 else
584 {
585 m_log.WarnFormat(
586 "[SCENE GRAPH]: Could not retrieve item {0} for attaching to avatar {1} at point {2}",
587 itemID, remoteClient.Name, AttachmentPt);
568 } 588 }
569 589
570 return objatt; 590 return objatt;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 9a205e0..0277ed8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -680,8 +680,10 @@ namespace OpenSim.Region.Framework.Scenes
680 } 680 }
681 681
682 ApplyPhysics(m_scene.m_physicalPrim); 682 ApplyPhysics(m_scene.m_physicalPrim);
683 683
684 ScheduleGroupForFullUpdate(); 684 // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
685 // for the same object with very different properties. The caller must schedule the update.
686 //ScheduleGroupForFullUpdate();
685 } 687 }
686 688
687 public Vector3 GroupScale() 689 public Vector3 GroupScale()
@@ -1083,10 +1085,11 @@ namespace OpenSim.Region.Framework.Scenes
1083 // don't attach attachments to child agents 1085 // don't attach attachments to child agents
1084 if (avatar.IsChildAgent) return; 1086 if (avatar.IsChildAgent) return;
1085 1087
1088// m_log.DebugFormat("[SOG]: Adding attachment {0} to avatar {1}", Name, avatar.Name);
1089
1086 DetachFromBackup(); 1090 DetachFromBackup();
1087 1091
1088 // Remove from database and parcel prim count 1092 // Remove from database and parcel prim count
1089 //
1090 m_scene.DeleteFromStorage(UUID); 1093 m_scene.DeleteFromStorage(UUID);
1091 m_scene.EventManager.TriggerParcelPrimCountTainted(); 1094 m_scene.EventManager.TriggerParcelPrimCountTainted();
1092 1095
@@ -1112,7 +1115,6 @@ namespace OpenSim.Region.Framework.Scenes
1112 SetAttachmentPoint(Convert.ToByte(attachmentpoint)); 1115 SetAttachmentPoint(Convert.ToByte(attachmentpoint));
1113 1116
1114 avatar.AddAttachment(this); 1117 avatar.AddAttachment(this);
1115 m_log.Debug("[SOG]: Added attachment " + UUID + " to avatar " + avatar.UUID);
1116 1118
1117 if (!silent) 1119 if (!silent)
1118 { 1120 {
@@ -1129,6 +1131,12 @@ namespace OpenSim.Region.Framework.Scenes
1129 ScheduleGroupForFullUpdate(); 1131 ScheduleGroupForFullUpdate();
1130 } 1132 }
1131 } 1133 }
1134 else
1135 {
1136 m_log.WarnFormat(
1137 "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present",
1138 UUID, agentID, Scene.RegionInfo.RegionName);
1139 }
1132 } 1140 }
1133 1141
1134 public byte GetAttachmentPoint() 1142 public byte GetAttachmentPoint()
@@ -2174,6 +2182,8 @@ namespace OpenSim.Region.Framework.Scenes
2174 2182
2175 public void ScheduleFullUpdateToAvatar(ScenePresence presence) 2183 public void ScheduleFullUpdateToAvatar(ScenePresence presence)
2176 { 2184 {
2185// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name);
2186
2177 RootPart.AddFullUpdateToAvatar(presence); 2187 RootPart.AddFullUpdateToAvatar(presence);
2178 2188
2179 lockPartsForRead(true); 2189 lockPartsForRead(true);
@@ -2208,6 +2218,8 @@ namespace OpenSim.Region.Framework.Scenes
2208 /// </summary> 2218 /// </summary>
2209 public void ScheduleGroupForFullUpdate() 2219 public void ScheduleGroupForFullUpdate()
2210 { 2220 {
2221// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID);
2222
2211 checkAtTargets(); 2223 checkAtTargets();
2212 RootPart.ScheduleFullUpdate(); 2224 RootPart.ScheduleFullUpdate();
2213 2225
@@ -2245,9 +2257,11 @@ namespace OpenSim.Region.Framework.Scenes
2245 /// Immediately send a full update for this scene object. 2257 /// Immediately send a full update for this scene object.
2246 /// </summary> 2258 /// </summary>
2247 public void SendGroupFullUpdate() 2259 public void SendGroupFullUpdate()
2248 { 2260 {
2249 if (IsDeleted) 2261 if (IsDeleted)
2250 return; 2262 return;
2263
2264// m_log.DebugFormat("[SOG]: Sending immediate full group update for {0} {1}", Name, UUID);
2251 2265
2252 RootPart.SendFullUpdateToAllClients(); 2266 RootPart.SendFullUpdateToAllClients();
2253 2267
@@ -2267,7 +2281,7 @@ namespace OpenSim.Region.Framework.Scenes
2267 /// <summary> 2281 /// <summary>
2268 /// Immediately send an update for this scene object's root prim only. 2282 /// Immediately send an update for this scene object's root prim only.
2269 /// This is for updates regarding the object as a whole, and none of its parts in particular. 2283 /// This is for updates regarding the object as a whole, and none of its parts in particular.
2270 /// Note: this may not be cused by opensim (it probably should) but it's used by 2284 /// Note: this may not be used by opensim (it probably should) but it's used by
2271 /// external modules. 2285 /// external modules.
2272 /// </summary> 2286 /// </summary>
2273 public void SendGroupRootTerseUpdate() 2287 public void SendGroupRootTerseUpdate()
@@ -2282,6 +2296,7 @@ namespace OpenSim.Region.Framework.Scenes
2282 { 2296 {
2283 if (m_scene == null) // Need to check here as it's null during object creation 2297 if (m_scene == null) // Need to check here as it's null during object creation
2284 return; 2298 return;
2299
2285 m_scene.SceneGraph.AddToUpdateList(this); 2300 m_scene.SceneGraph.AddToUpdateList(this);
2286 } 2301 }
2287 2302
@@ -3783,7 +3798,10 @@ namespace OpenSim.Region.Framework.Scenes
3783 HasGroupChanged = true; 3798 HasGroupChanged = true;
3784 } 3799 }
3785 lockPartsForRead(false); 3800 lockPartsForRead(false);
3786 ScheduleGroupForFullUpdate(); 3801
3802 // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
3803 // for the same object with very different properties. The caller must schedule the update.
3804 //ScheduleGroupForFullUpdate();
3787 } 3805 }
3788 3806
3789 public void TriggerScriptChangedEvent(Changed val) 3807 public void TriggerScriptChangedEvent(Changed val)