aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKitto Flora2010-04-05 15:27:13 -0400
committerKitto Flora2010-04-05 15:27:13 -0400
commit9b9e2a8c71e3ebaaf7b0a6c20ea7397198b241f7 (patch)
treeb23030439893b1c0c982ef3e074d861bc30b5334
parentMerge branch 'master' of ssh://3dhosting.de/var/git/careminster (diff)
parentMerge branch 'master' of ssh://melanie@3dhosting.de/var/git/careminster into ... (diff)
downloadopensim-SC-9b9e2a8c71e3ebaaf7b0a6c20ea7397198b241f7.zip
opensim-SC-9b9e2a8c71e3ebaaf7b0a6c20ea7397198b241f7.tar.gz
opensim-SC-9b9e2a8c71e3ebaaf7b0a6c20ea7397198b241f7.tar.bz2
opensim-SC-9b9e2a8c71e3ebaaf7b0a6c20ea7397198b241f7.tar.xz
Merge branch 'master' of ssh://3dhosting.de/var/git/careminster
Diffstat (limited to '')
-rw-r--r--.nant/local.include71
-rw-r--r--OpenSim/Framework/Servers/VersionInfo.cs1
-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.cs40
7 files changed, 200 insertions, 60 deletions
diff --git a/.nant/local.include b/.nant/local.include
index 5e02665..1e8bedc 100644
--- a/.nant/local.include
+++ b/.nant/local.include
@@ -1,8 +1,59 @@
1<!-- -*- xml -*- --> 1<!-- -*- xml -*- -->
2<!-- please leave the top comment for us emacs folks --> 2<!-- please leave the top comment for us emacs folks -->
3<property name="projectdir" value="opensim-0.5.5" />
4<property name="nunitcmd" value="nunit-console" /> 3<property name="nunitcmd" value="nunit-console" />
5 4
5<!-- For safety/laziness sake, we're going to take the approach of deleting known extraneous files here rather than
6 trying to copy across only the essential ones -->
7<property name="distbindir" value="distbin" />
8<target name="distbin">
9 <copy file="bin/OpenSim.ini.example" tofile="bin/OpenSim.ini"/>
10 <delete dir="${distbindir}"/>
11 <!-- <copy file="*" todir="${distbindir}"/> -->
12 <copy todir="${distbindir}">
13 <fileset>
14 <include name="**"/>
15 </fileset>
16 </copy>
17 <delete dir="${distbindir}/OpenSim"/>
18 <delete dir="${distbindir}/Prebuild"/>
19 <delete dir="${distbindir}/%temp%"/>
20 <delete dir="${distbindir}/.nant"/>
21 <delete>
22 <fileset basedir="${distbindir}">
23 <include name="Makefile"/>
24 <include name="nant-color"/>
25 <include name="OpenSim.*"/>
26 <include name="prebuild.xml"/>
27 <include name="runprebuild*"/>
28 <include name="TESTING.txt"/>
29 <include name="TestResult.xml"/>
30 <include name="bin/OpenSim.Server.ini"/>
31 <include name="bin/Regions/*"/>
32 <include name="bin/*.db"/>
33 <include name="**/.git/**"/>
34 <include name=".gitignore"/>
35 <include name=".hgignore"/>
36 </fileset>
37 </delete>
38
39</target>
40
41<!-- I don't think these targets are being actively used. But just in case, we'll just comment them out for now - justincc -->
42<!--
43<property name="projectdir" value="opensim-0.6.9" />
44<target name="dist" depends="distdir">
45 <zip zipfile="${projectdir}.zip">
46 <fileset basedir=".">
47 <include name="${projectdir}/**" />
48 </fileset>
49 </zip>
50 <tar destfile="${projectdir}.tar.gz" compression="GZip">
51 <fileset basedir=".">
52 <include name="${projectdir}/**" />
53 </fileset>
54 </tar>
55</target>
56
6<target name="distdir"> 57<target name="distdir">
7 <delete dir="${projectdir}" /> 58 <delete dir="${projectdir}" />
8 <copy todir="${projectdir}"> 59 <copy todir="${projectdir}">
@@ -21,14 +72,14 @@
21 <include name="bin/assets/**" /> 72 <include name="bin/assets/**" />
22 <include name="bin/data/**" /> 73 <include name="bin/data/**" />
23 <include name="bin/OpenSim*xml" /> 74 <include name="bin/OpenSim*xml" />
24 <!-- the next is to exclude built libs -->
25 <exclude name="bin/OpenSim.*dll" />
26 <include name="bin/OpenSim.ini" /> 75 <include name="bin/OpenSim.ini" />
27 <include name="bin/defaultstripe.png" /> 76 <include name="bin/defaultstripe.png" />
77 <exclude name="bin/OpenSim.*dll" />
28 </fileset> 78 </fileset>
29 </copy> 79 </copy>
30 <touch file="${projectdir}/bin/startup_commands.txt" /> 80 <touch file="${projectdir}/bin/startup_commands.txt" />
31</target> 81</target>
82-->
32 83
33<target name="test" depends="build, find-nunit"> 84<target name="test" depends="build, find-nunit">
34 <setenv name="MONO_THREADS_PER_CPU" value="100" /> 85 <setenv name="MONO_THREADS_PER_CPU" value="100" />
@@ -317,17 +368,3 @@
317<target name="doxygen"> 368<target name="doxygen">
318 <exec program="doxygen" workingdir="doc" commandline="doxygen.conf" /> 369 <exec program="doxygen" workingdir="doc" commandline="doxygen.conf" />
319</target> 370</target>
320
321
322<target name="dist" depends="distdir">
323 <zip zipfile="${projectdir}.zip">
324 <fileset basedir=".">
325 <include name="${projectdir}/**" />
326 </fileset>
327 </zip>
328 <tar destfile="${projectdir}.tar.gz" compression="GZip">
329 <fileset basedir=".">
330 <include name="${projectdir}/**" />
331 </fileset>
332 </tar>
333</target>
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index f618047..58d65d1 100644
--- a/OpenSim/Framework/Servers/VersionInfo.cs
+++ b/OpenSim/Framework/Servers/VersionInfo.cs
@@ -31,6 +31,7 @@ namespace OpenSim
31 { 31 {
32 private const string VERSION_NUMBER = "0.6.8CM"; 32 private const string VERSION_NUMBER = "0.6.8CM";
33 private const Flavour VERSION_FLAVOUR = Flavour.Dev; 33 private const Flavour VERSION_FLAVOUR = Flavour.Dev;
34
34 public enum Flavour 35 public enum Flavour
35 { 36 {
36 Unknown, 37 Unknown,
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 ab0d397..fec8aa7 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 5443c28..5951a92 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -642,8 +642,10 @@ namespace OpenSim.Region.Framework.Scenes
642 } 642 }
643 643
644 ApplyPhysics(m_scene.m_physicalPrim); 644 ApplyPhysics(m_scene.m_physicalPrim);
645 645
646 ScheduleGroupForFullUpdate(); 646 // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
647 // for the same object with very different properties. The caller must schedule the update.
648 //ScheduleGroupForFullUpdate();
647 } 649 }
648 650
649 public Vector3 GroupScale() 651 public Vector3 GroupScale()
@@ -1045,10 +1047,11 @@ namespace OpenSim.Region.Framework.Scenes
1045 // don't attach attachments to child agents 1047 // don't attach attachments to child agents
1046 if (avatar.IsChildAgent) return; 1048 if (avatar.IsChildAgent) return;
1047 1049
1050// m_log.DebugFormat("[SOG]: Adding attachment {0} to avatar {1}", Name, avatar.Name);
1051
1048 DetachFromBackup(); 1052 DetachFromBackup();
1049 1053
1050 // Remove from database and parcel prim count 1054 // Remove from database and parcel prim count
1051 //
1052 m_scene.DeleteFromStorage(UUID); 1055 m_scene.DeleteFromStorage(UUID);
1053 m_scene.EventManager.TriggerParcelPrimCountTainted(); 1056 m_scene.EventManager.TriggerParcelPrimCountTainted();
1054 1057
@@ -1074,7 +1077,6 @@ namespace OpenSim.Region.Framework.Scenes
1074 SetAttachmentPoint(Convert.ToByte(attachmentpoint)); 1077 SetAttachmentPoint(Convert.ToByte(attachmentpoint));
1075 1078
1076 avatar.AddAttachment(this); 1079 avatar.AddAttachment(this);
1077 m_log.Debug("[SOG]: Added attachment " + UUID + " to avatar " + avatar.UUID);
1078 1080
1079 if (!silent) 1081 if (!silent)
1080 { 1082 {
@@ -1091,6 +1093,12 @@ namespace OpenSim.Region.Framework.Scenes
1091 ScheduleGroupForFullUpdate(); 1093 ScheduleGroupForFullUpdate();
1092 } 1094 }
1093 } 1095 }
1096 else
1097 {
1098 m_log.WarnFormat(
1099 "[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present",
1100 UUID, agentID, Scene.RegionInfo.RegionName);
1101 }
1094 } 1102 }
1095 1103
1096 public byte GetAttachmentPoint() 1104 public byte GetAttachmentPoint()
@@ -2136,6 +2144,8 @@ namespace OpenSim.Region.Framework.Scenes
2136 2144
2137 public void ScheduleFullUpdateToAvatar(ScenePresence presence) 2145 public void ScheduleFullUpdateToAvatar(ScenePresence presence)
2138 { 2146 {
2147// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1} just to avatar {2}", Name, UUID, presence.Name);
2148
2139 RootPart.AddFullUpdateToAvatar(presence); 2149 RootPart.AddFullUpdateToAvatar(presence);
2140 2150
2141 lockPartsForRead(true); 2151 lockPartsForRead(true);
@@ -2170,6 +2180,8 @@ namespace OpenSim.Region.Framework.Scenes
2170 /// </summary> 2180 /// </summary>
2171 public void ScheduleGroupForFullUpdate() 2181 public void ScheduleGroupForFullUpdate()
2172 { 2182 {
2183// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, UUID);
2184
2173 checkAtTargets(); 2185 checkAtTargets();
2174 RootPart.ScheduleFullUpdate(); 2186 RootPart.ScheduleFullUpdate();
2175 2187
@@ -2191,7 +2203,13 @@ namespace OpenSim.Region.Framework.Scenes
2191 /// </summary> 2203 /// </summary>
2192 public void ScheduleGroupForTerseUpdate() 2204 public void ScheduleGroupForTerseUpdate()
2193 { 2205 {
2206<<<<<<< HEAD:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
2194 lockPartsForRead(true); 2207 lockPartsForRead(true);
2208=======
2209// m_log.DebugFormat("[SOG]: Scheduling terse update for {0} {1}", Name, UUID);
2210
2211 lock (m_parts)
2212>>>>>>> 0.6.9-post-fixes:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
2195 { 2213 {
2196 foreach (SceneObjectPart part in m_parts.Values) 2214 foreach (SceneObjectPart part in m_parts.Values)
2197 { 2215 {
@@ -2207,9 +2225,11 @@ namespace OpenSim.Region.Framework.Scenes
2207 /// Immediately send a full update for this scene object. 2225 /// Immediately send a full update for this scene object.
2208 /// </summary> 2226 /// </summary>
2209 public void SendGroupFullUpdate() 2227 public void SendGroupFullUpdate()
2210 { 2228 {
2211 if (IsDeleted) 2229 if (IsDeleted)
2212 return; 2230 return;
2231
2232// m_log.DebugFormat("[SOG]: Sending immediate full group update for {0} {1}", Name, UUID);
2213 2233
2214 RootPart.SendFullUpdateToAllClients(); 2234 RootPart.SendFullUpdateToAllClients();
2215 2235
@@ -2229,7 +2249,7 @@ namespace OpenSim.Region.Framework.Scenes
2229 /// <summary> 2249 /// <summary>
2230 /// Immediately send an update for this scene object's root prim only. 2250 /// Immediately send an update for this scene object's root prim only.
2231 /// This is for updates regarding the object as a whole, and none of its parts in particular. 2251 /// This is for updates regarding the object as a whole, and none of its parts in particular.
2232 /// Note: this may not be cused by opensim (it probably should) but it's used by 2252 /// Note: this may not be used by opensim (it probably should) but it's used by
2233 /// external modules. 2253 /// external modules.
2234 /// </summary> 2254 /// </summary>
2235 public void SendGroupRootTerseUpdate() 2255 public void SendGroupRootTerseUpdate()
@@ -2244,6 +2264,7 @@ namespace OpenSim.Region.Framework.Scenes
2244 { 2264 {
2245 if (m_scene == null) // Need to check here as it's null during object creation 2265 if (m_scene == null) // Need to check here as it's null during object creation
2246 return; 2266 return;
2267
2247 m_scene.SceneGraph.AddToUpdateList(this); 2268 m_scene.SceneGraph.AddToUpdateList(this);
2248 } 2269 }
2249 2270
@@ -3744,8 +3765,15 @@ namespace OpenSim.Region.Framework.Scenes
3744 3765
3745 HasGroupChanged = true; 3766 HasGroupChanged = true;
3746 } 3767 }
3768<<<<<<< HEAD:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
3747 lockPartsForRead(false); 3769 lockPartsForRead(false);
3748 ScheduleGroupForFullUpdate(); 3770 ScheduleGroupForFullUpdate();
3771=======
3772
3773 // Don't trigger the update here - otherwise some client issues occur when multiple updates are scheduled
3774 // for the same object with very different properties. The caller must schedule the update.
3775 //ScheduleGroupForFullUpdate();
3776>>>>>>> 0.6.9-post-fixes:OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
3749 } 3777 }
3750 3778
3751 public void TriggerScriptChangedEvent(Changed val) 3779 public void TriggerScriptChangedEvent(Changed val)