diff options
author | Melanie | 2010-04-05 18:10:36 +0100 |
---|---|---|
committer | Melanie | 2010-04-05 18:10:36 +0100 |
commit | 04a68db1954387adc7bc2c8d71619a0262edb2f2 (patch) | |
tree | d10d97f32d8ccc481fa66f4b93354030289a946d | |
parent | Change land overlay to send group owned status properly (diff) | |
parent | add nant distbin target (diff) | |
download | opensim-SC_OLD-04a68db1954387adc7bc2c8d71619a0262edb2f2.zip opensim-SC_OLD-04a68db1954387adc7bc2c8d71619a0262edb2f2.tar.gz opensim-SC_OLD-04a68db1954387adc7bc2c8d71619a0262edb2f2.tar.bz2 opensim-SC_OLD-04a68db1954387adc7bc2c8d71619a0262edb2f2.tar.xz |
Merge branch '0.6.9-post-fixes' into careminster
-rw-r--r-- | .nant/local.include | 71 | ||||
-rw-r--r-- | OpenSim/Framework/Servers/VersionInfo.cs | 1 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 44 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 40 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneGraph.cs | 62 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 40 |
6 files changed, 199 insertions, 59 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/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) |