diff options
Diffstat (limited to 'OpenSim/Region')
103 files changed, 1005 insertions, 8410 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index a350510..a499811 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs | |||
@@ -115,13 +115,8 @@ namespace OpenSim | |||
115 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) | 115 | if (!String.IsNullOrEmpty(asyncCallMethodStr) && Utils.EnumTryParse<FireAndForgetMethod>(asyncCallMethodStr, out asyncCallMethod)) |
116 | Util.FireAndForgetMethod = asyncCallMethod; | 116 | Util.FireAndForgetMethod = asyncCallMethod; |
117 | 117 | ||
118 | <<<<<<< HEAD | ||
119 | stpMinThreads = startupConfig.GetInt("MinPoolThreads", 15); | ||
120 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 300); | ||
121 | ======= | ||
122 | stpMinThreads = startupConfig.GetInt("MinPoolThreads", 2 ); | 118 | stpMinThreads = startupConfig.GetInt("MinPoolThreads", 2 ); |
123 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 25); | 119 | stpMaxThreads = startupConfig.GetInt("MaxPoolThreads", 25); |
124 | >>>>>>> avn/ubitvar | ||
125 | m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); | 120 | m_consolePrompt = startupConfig.GetString("ConsolePrompt", @"Region (\R) "); |
126 | } | 121 | } |
127 | 122 | ||
@@ -273,20 +268,12 @@ namespace OpenSim | |||
273 | SavePrimsXml2); | 268 | SavePrimsXml2); |
274 | 269 | ||
275 | m_console.Commands.AddCommand("Archiving", false, "load oar", | 270 | m_console.Commands.AddCommand("Archiving", false, "load oar", |
276 | <<<<<<< HEAD | ||
277 | ======= | ||
278 | |||
279 | >>>>>>> avn/ubitvar | ||
280 | "load oar [--merge] [--skip-assets]" | 271 | "load oar [--merge] [--skip-assets]" |
281 | + " [--default-user \"User Name\"]" | 272 | + " [--default-user \"User Name\"]" |
282 | + " [--force-terrain] [--force-parcels]" | 273 | + " [--force-terrain] [--force-parcels]" |
283 | + " [--no-objects]" | 274 | + " [--no-objects]" |
284 | + " [--rotation degrees] [--rotation-center \"<x,y,z>\"]" | 275 | + " [--rotation degrees] [--rotation-center \"<x,y,z>\"]" |
285 | <<<<<<< HEAD | ||
286 | + " [--displacement \"<x,y,z>\"]" | ||
287 | ======= | ||
288 | + " [--displacement \"<x,y,z>\"]" | 276 | + " [--displacement \"<x,y,z>\"]" |
289 | >>>>>>> avn/ubitvar | ||
290 | + " [<OAR path>]", | 277 | + " [<OAR path>]", |
291 | "Load a region's data from an OAR archive.", | 278 | "Load a region's data from an OAR archive.", |
292 | "--merge will merge the OAR with the existing scene (suppresses terrain and parcel info loading).\n" | 279 | "--merge will merge the OAR with the existing scene (suppresses terrain and parcel info loading).\n" |
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs index 760decd..5cd9045 100644 --- a/OpenSim/Region/Application/OpenSimBase.cs +++ b/OpenSim/Region/Application/OpenSimBase.cs | |||
@@ -276,13 +276,9 @@ namespace OpenSim | |||
276 | 276 | ||
277 | base.StartupSpecific(); | 277 | base.StartupSpecific(); |
278 | 278 | ||
279 | <<<<<<< HEAD | ||
280 | if (EnableInitialPluginLoad) | ||
281 | LoadPlugins(); | ||
282 | 279 | ||
283 | // We still want to post initalize any plugins even if loading has been disabled since a test may have | 280 | // We still want to post initalize any plugins even if loading has been disabled since a test may have |
284 | // inserted them manually. | 281 | // inserted them manually. |
285 | ======= | ||
286 | LoadPlugins(); | 282 | LoadPlugins(); |
287 | 283 | ||
288 | if (m_plugins.Count == 0) // We failed to load any modules. Mono Addins glitch! | 284 | if (m_plugins.Count == 0) // We failed to load any modules. Mono Addins glitch! |
@@ -290,7 +286,6 @@ namespace OpenSim | |||
290 | Environment.Exit(1); | 286 | Environment.Exit(1); |
291 | } | 287 | } |
292 | 288 | ||
293 | >>>>>>> avn/ubitvar | ||
294 | foreach (IApplicationPlugin plugin in m_plugins) | 289 | foreach (IApplicationPlugin plugin in m_plugins) |
295 | plugin.PostInitialise(); | 290 | plugin.PostInitialise(); |
296 | 291 | ||
@@ -832,10 +827,6 @@ namespace OpenSim | |||
832 | { | 827 | { |
833 | Vector3 regionExtent = new Vector3(regionInfo.RegionSizeX, regionInfo.RegionSizeY, regionInfo.RegionSizeZ); | 828 | Vector3 regionExtent = new Vector3(regionInfo.RegionSizeX, regionInfo.RegionSizeY, regionInfo.RegionSizeZ); |
834 | PhysicsScene physicsScene = GetPhysicsScene(regionInfo.RegionName, regionExtent); | 829 | PhysicsScene physicsScene = GetPhysicsScene(regionInfo.RegionName, regionExtent); |
835 | <<<<<<< HEAD | ||
836 | |||
837 | ======= | ||
838 | >>>>>>> avn/ubitvar | ||
839 | SceneCommunicationService sceneGridService = new SceneCommunicationService(); | 830 | SceneCommunicationService sceneGridService = new SceneCommunicationService(); |
840 | 831 | ||
841 | return new Scene( | 832 | return new Scene( |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index 4e6d196..1236e83 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | |||
@@ -45,7 +45,6 @@ using OpenSim.Region.Framework.Scenes; | |||
45 | using OpenSim.Region.Framework.Scenes.Serialization; | 45 | using OpenSim.Region.Framework.Scenes.Serialization; |
46 | using OpenSim.Framework.Servers; | 46 | using OpenSim.Framework.Servers; |
47 | using OpenSim.Framework.Servers.HttpServer; | 47 | using OpenSim.Framework.Servers.HttpServer; |
48 | using OpenSim.Framework.Client; | ||
49 | using OpenSim.Services.Interfaces; | 48 | using OpenSim.Services.Interfaces; |
50 | 49 | ||
51 | using Caps = OpenSim.Framework.Capabilities.Caps; | 50 | using Caps = OpenSim.Framework.Capabilities.Caps; |
@@ -360,8 +359,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
360 | public string SeedCapRequest(string request, string path, string param, | 359 | public string SeedCapRequest(string request, string path, string param, |
361 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) | 360 | IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) |
362 | { | 361 | { |
363 | // m_log.DebugFormat( | 362 | m_log.DebugFormat( |
364 | // "[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID); | 363 | "[CAPS]: Received SEED caps request in {0} for agent {1}", m_regionName, m_HostCapsObj.AgentID); |
365 | 364 | ||
366 | if (!m_HostCapsObj.WaitForActivation()) | 365 | if (!m_HostCapsObj.WaitForActivation()) |
367 | return string.Empty; | 366 | return string.Empty; |
@@ -789,99 +788,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
789 | } | 788 | } |
790 | else if (inventoryType == "object") | 789 | else if (inventoryType == "object") |
791 | { | 790 | { |
792 | <<<<<<< HEAD | ||
793 | inType = (sbyte)InventoryType.Object; | ||
794 | assType = (sbyte)AssetType.Object; | ||
795 | |||
796 | List<Vector3> positions = new List<Vector3>(); | ||
797 | List<Quaternion> rotations = new List<Quaternion>(); | ||
798 | OSDMap request = (OSDMap)OSDParser.DeserializeLLSDXml(data); | ||
799 | OSDArray instance_list = (OSDArray)request["instance_list"]; | ||
800 | OSDArray mesh_list = (OSDArray)request["mesh_list"]; | ||
801 | OSDArray texture_list = (OSDArray)request["texture_list"]; | ||
802 | SceneObjectGroup grp = null; | ||
803 | |||
804 | InventoryFolderBase textureUploadFolder = null; | ||
805 | |||
806 | List<InventoryFolderBase> foldersToUpdate = new List<InventoryFolderBase>(); | ||
807 | List<InventoryItemBase> itemsToUpdate = new List<InventoryItemBase>(); | ||
808 | IClientInventory clientInv = null; | ||
809 | |||
810 | if (texture_list.Count > 0) | ||
811 | { | ||
812 | ScenePresence avatar = null; | ||
813 | m_Scene.TryGetScenePresence(m_HostCapsObj.AgentID, out avatar); | ||
814 | |||
815 | if (avatar != null) | ||
816 | { | ||
817 | IClientCore core = (IClientCore)avatar.ControllingClient; | ||
818 | |||
819 | if (core.TryGet<IClientInventory>(out clientInv)) | ||
820 | { | ||
821 | var systemTextureFolder = m_Scene.InventoryService.GetFolderForType(m_HostCapsObj.AgentID, FolderType.Texture); | ||
822 | textureUploadFolder = new InventoryFolderBase(UUID.Random(), assetName, m_HostCapsObj.AgentID, (short)FolderType.None, systemTextureFolder.ID, 1); | ||
823 | if (m_Scene.InventoryService.AddFolder(textureUploadFolder)) | ||
824 | { | ||
825 | foldersToUpdate.Add(textureUploadFolder); | ||
826 | |||
827 | m_log.DebugFormat( | ||
828 | "[BUNCH OF CAPS]: Created new folder '{0}' ({1}) for textures uploaded with mesh object {2}", | ||
829 | textureUploadFolder.Name, textureUploadFolder.ID, assetName); | ||
830 | } | ||
831 | else | ||
832 | { | ||
833 | textureUploadFolder = null; | ||
834 | } | ||
835 | } | ||
836 | } | ||
837 | } | ||
838 | |||
839 | List<UUID> textures = new List<UUID>(); | ||
840 | for (int i = 0; i < texture_list.Count; i++) | ||
841 | { | ||
842 | AssetBase textureAsset = new AssetBase(UUID.Random(), assetName, (sbyte)AssetType.Texture, ""); | ||
843 | textureAsset.Data = texture_list[i].AsBinary(); | ||
844 | m_assetService.Store(textureAsset); | ||
845 | textures.Add(textureAsset.FullID); | ||
846 | |||
847 | if (textureUploadFolder != null) | ||
848 | { | ||
849 | InventoryItemBase textureItem = new InventoryItemBase(); | ||
850 | textureItem.Owner = m_HostCapsObj.AgentID; | ||
851 | textureItem.CreatorId = m_HostCapsObj.AgentID.ToString(); | ||
852 | textureItem.CreatorData = String.Empty; | ||
853 | textureItem.ID = UUID.Random(); | ||
854 | textureItem.AssetID = textureAsset.FullID; | ||
855 | textureItem.Description = assetDescription; | ||
856 | textureItem.Name = assetName + " - Texture " + (i + 1).ToString(); | ||
857 | textureItem.AssetType = (int)AssetType.Texture; | ||
858 | textureItem.InvType = (int)InventoryType.Texture; | ||
859 | textureItem.Folder = textureUploadFolder.ID; | ||
860 | textureItem.CurrentPermissions | ||
861 | = (uint)(PermissionMask.Move | PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer | PermissionMask.Export); | ||
862 | textureItem.BasePermissions = (uint)PermissionMask.All | (uint)PermissionMask.Export; | ||
863 | textureItem.EveryOnePermissions = 0; | ||
864 | textureItem.NextPermissions = (uint)PermissionMask.All; | ||
865 | textureItem.CreationDate = Util.UnixTimeSinceEpoch(); | ||
866 | m_Scene.InventoryService.AddItem(textureItem); | ||
867 | itemsToUpdate.Add(textureItem); | ||
868 | |||
869 | m_log.DebugFormat( | ||
870 | "[BUNCH OF CAPS]: Created new inventory item '{0}' ({1}) for texture uploaded with mesh object {2}", | ||
871 | textureItem.Name, textureItem.ID, assetName); | ||
872 | } | ||
873 | } | ||
874 | |||
875 | if (clientInv != null && (foldersToUpdate.Count > 0 || itemsToUpdate.Count > 0)) | ||
876 | { | ||
877 | clientInv.SendBulkUpdateInventory(foldersToUpdate.ToArray(), itemsToUpdate.ToArray()); | ||
878 | } | ||
879 | ======= | ||
880 | if (assetType == "mesh") // this code for now is for mesh models uploads only | 791 | if (assetType == "mesh") // this code for now is for mesh models uploads only |
881 | { | 792 | { |
882 | inType = (sbyte)InventoryType.Object; | 793 | inType = (sbyte)InventoryType.Object; |
883 | assType = (sbyte)AssetType.Object; | 794 | assType = (sbyte)AssetType.Object; |
884 | >>>>>>> avn/ubitvar | ||
885 | 795 | ||
886 | List<Vector3> positions = new List<Vector3>(); | 796 | List<Vector3> positions = new List<Vector3>(); |
887 | List<Quaternion> rotations = new List<Quaternion>(); | 797 | List<Quaternion> rotations = new List<Quaternion>(); |
@@ -1467,24 +1377,17 @@ namespace OpenSim.Region.ClientStack.Linden | |||
1467 | { | 1377 | { |
1468 | string message; | 1378 | string message; |
1469 | copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID, out message); | 1379 | copyItem = m_Scene.GiveInventoryItem(m_HostCapsObj.AgentID, item.Owner, itemID, folderID, out message); |
1470 | if (client != null) | 1380 | if (copyItem != null && client != null) |
1471 | { | 1381 | { |
1472 | if (copyItem != null) | 1382 | m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder); |
1473 | { | 1383 | client.SendBulkUpdateInventory(copyItem); |
1474 | m_log.InfoFormat("[CAPS]: CopyInventoryFromNotecard, ItemID:{0}, FolderID:{1}", copyItem.ID, copyItem.Folder); | ||
1475 | client.SendBulkUpdateInventory(copyItem); | ||
1476 | } | ||
1477 | else | ||
1478 | { | ||
1479 | client.SendAgentAlertMessage(message, false); | ||
1480 | } | ||
1481 | } | 1384 | } |
1482 | } | 1385 | } |
1483 | else | 1386 | else |
1484 | { | 1387 | { |
1485 | m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID); | 1388 | m_log.ErrorFormat("[CAPS]: CopyInventoryFromNotecard - Failed to retrieve item {0} from notecard {1}", itemID, notecardID); |
1486 | if (client != null) | 1389 | if (client != null) |
1487 | client.SendAgentAlertMessage("Failed to retrieve item", false); | 1390 | client.SendAlertMessage("Failed to retrieve item"); |
1488 | } | 1391 | } |
1489 | } | 1392 | } |
1490 | catch (Exception e) | 1393 | catch (Exception e) |
@@ -1656,14 +1559,13 @@ namespace OpenSim.Region.ClientStack.Linden | |||
1656 | string param, IOSHttpRequest httpRequest, | 1559 | string param, IOSHttpRequest httpRequest, |
1657 | IOSHttpResponse httpResponse) | 1560 | IOSHttpResponse httpResponse) |
1658 | { | 1561 | { |
1659 | OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); | 1562 | // OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); |
1660 | OSDMap accessPrefs = (OSDMap)req["access_prefs"]; | ||
1661 | string desiredMaturity = accessPrefs["max"]; | ||
1662 | |||
1663 | OSDMap resp = new OSDMap(); | 1563 | OSDMap resp = new OSDMap(); |
1664 | OSDMap respAccessPrefs = new OSDMap(); | 1564 | |
1665 | respAccessPrefs["max"] = desiredMaturity; // echoing the maturity back means success | 1565 | OSDMap accessPrefs = new OSDMap(); |
1666 | resp["access_prefs"] = respAccessPrefs; | 1566 | accessPrefs["max"] = "A"; |
1567 | |||
1568 | resp["access_prefs"] = accessPrefs; | ||
1667 | 1569 | ||
1668 | string response = OSDParser.SerializeLLSDXmlString(resp); | 1570 | string response = OSDParser.SerializeLLSDXmlString(resp); |
1669 | return response; | 1571 | return response; |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCapsModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCapsModule.cs index c241075..b735dfa 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCapsModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCapsModule.cs | |||
@@ -40,8 +40,8 @@ using OpenSim.Region.Framework.Interfaces; | |||
40 | using OpenSim.Region.Framework.Scenes; | 40 | using OpenSim.Region.Framework.Scenes; |
41 | using Caps = OpenSim.Framework.Capabilities.Caps; | 41 | using Caps = OpenSim.Framework.Capabilities.Caps; |
42 | 42 | ||
43 | [assembly: Addin("LindenCaps", OpenSim.VersionInfo.VersionNumber)] | 43 | [assembly: Addin("LindenCaps", "0.1")] |
44 | [assembly: AddinDependency("OpenSim.Region.Framework", OpenSim.VersionInfo.VersionNumber)] | 44 | [assembly: AddinDependency("OpenSim", "0.5")] |
45 | namespace OpenSim.Region.ClientStack.Linden | 45 | namespace OpenSim.Region.ClientStack.Linden |
46 | { | 46 | { |
47 | 47 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index 5fb028c..5d50eba 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs | |||
@@ -177,7 +177,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
177 | } | 177 | } |
178 | 178 | ||
179 | /// <summary> | 179 | /// <summary> |
180 | <<<<<<< HEAD | ||
181 | /// Always returns a valid queue | 180 | /// Always returns a valid queue |
182 | /// </summary> | 181 | /// </summary> |
183 | /// <param name="agentId"></param> | 182 | /// <param name="agentId"></param> |
@@ -201,8 +200,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
201 | } | 200 | } |
202 | 201 | ||
203 | /// <summary> | 202 | /// <summary> |
204 | ======= | 203 | |
205 | >>>>>>> avn/ubitvar | ||
206 | /// May return a null queue | 204 | /// May return a null queue |
207 | /// </summary> | 205 | /// </summary> |
208 | /// <param name="agentId"></param> | 206 | /// <param name="agentId"></param> |
@@ -290,17 +288,11 @@ namespace OpenSim.Region.ClientStack.Linden | |||
290 | public void OnRegisterCaps(UUID agentID, Caps caps) | 288 | public void OnRegisterCaps(UUID agentID, Caps caps) |
291 | { | 289 | { |
292 | // Register an event queue for the client | 290 | // Register an event queue for the client |
293 | <<<<<<< HEAD | ||
294 | 291 | ||
295 | if (DebugLevel > 0) | 292 | if (DebugLevel > 0) |
296 | m_log.DebugFormat( | 293 | m_log.DebugFormat( |
297 | "[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}", | 294 | "[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}", |
298 | agentID, caps, m_scene.RegionInfo.RegionName); | 295 | agentID, caps, m_scene.RegionInfo.RegionName); |
299 | ======= | ||
300 | m_log.DebugFormat( | ||
301 | "[EVENTQUEUE]: OnRegisterCaps: agentID {0} caps {1} region {2}", | ||
302 | agentID, caps, m_scene.RegionInfo.RegionName); | ||
303 | >>>>>>> avn/ubitvar | ||
304 | 296 | ||
305 | UUID eventQueueGetUUID; | 297 | UUID eventQueueGetUUID; |
306 | Queue<OSD> queue; | 298 | Queue<OSD> queue; |
@@ -519,14 +511,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
519 | 511 | ||
520 | public virtual void EnableSimulator(ulong handle, IPEndPoint endPoint, UUID avatarID, int regionSizeX, int regionSizeY) | 512 | public virtual void EnableSimulator(ulong handle, IPEndPoint endPoint, UUID avatarID, int regionSizeX, int regionSizeY) |
521 | { | 513 | { |
522 | <<<<<<< HEAD | ||
523 | if (DebugLevel > 0) | 514 | if (DebugLevel > 0) |
524 | m_log.DebugFormat("{0} EnableSimulator. handle={1}, endPoint={2}, avatarID={3}", | 515 | m_log.DebugFormat("{0} EnableSimulator. handle={1}, endPoint={2}, avatarID={3}", |
525 | LogHeader, handle, endPoint, avatarID, regionSizeX, regionSizeY); | 516 | LogHeader, handle, endPoint, avatarID, regionSizeX, regionSizeY); |
526 | ======= | ||
527 | m_log.DebugFormat("{0} EnableSimulator. handle={1}, avatarID={2}, regionSize={3},{4}>", | ||
528 | LogHeader, handle, avatarID, regionSizeX, regionSizeY); | ||
529 | >>>>>>> avn/ubitvar | ||
530 | 517 | ||
531 | OSD item = EventQueueHelper.EnableSimulator(handle, endPoint, regionSizeX, regionSizeY); | 518 | OSD item = EventQueueHelper.EnableSimulator(handle, endPoint, regionSizeX, regionSizeY); |
532 | Enqueue(item, avatarID); | 519 | Enqueue(item, avatarID); |
@@ -535,15 +522,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
535 | public virtual void EstablishAgentCommunication(UUID avatarID, IPEndPoint endPoint, string capsPath, | 522 | public virtual void EstablishAgentCommunication(UUID avatarID, IPEndPoint endPoint, string capsPath, |
536 | ulong regionHandle, int regionSizeX, int regionSizeY) | 523 | ulong regionHandle, int regionSizeX, int regionSizeY) |
537 | { | 524 | { |
538 | <<<<<<< HEAD | ||
539 | if (DebugLevel > 0) | 525 | if (DebugLevel > 0) |
540 | m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, endPoint={2}, avatarID={3}", | 526 | m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, endPoint={2}, avatarID={3}", |
541 | LogHeader, regionHandle, endPoint, avatarID, regionSizeX, regionSizeY); | 527 | LogHeader, regionHandle, endPoint, avatarID, regionSizeX, regionSizeY); |
542 | 528 | ||
543 | ======= | ||
544 | m_log.DebugFormat("{0} EstablishAgentCommunication. handle={1}, avatarID={2}, regionSize={3},{4}>", | ||
545 | LogHeader, regionHandle, avatarID, regionSizeX, regionSizeY); | ||
546 | >>>>>>> avn/ubitvar | ||
547 | OSD item = EventQueueHelper.EstablishAgentCommunication(avatarID, endPoint.ToString(), capsPath, regionHandle, regionSizeX, regionSizeY); | 529 | OSD item = EventQueueHelper.EstablishAgentCommunication(avatarID, endPoint.ToString(), capsPath, regionHandle, regionSizeX, regionSizeY); |
548 | Enqueue(item, avatarID); | 530 | Enqueue(item, avatarID); |
549 | } | 531 | } |
@@ -553,14 +535,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
553 | uint locationID, uint flags, string capsURL, | 535 | uint locationID, uint flags, string capsURL, |
554 | UUID avatarID, int regionSizeX, int regionSizeY) | 536 | UUID avatarID, int regionSizeX, int regionSizeY) |
555 | { | 537 | { |
556 | <<<<<<< HEAD | ||
557 | if (DebugLevel > 0) | 538 | if (DebugLevel > 0) |
558 | m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, endPoint={2}, avatarID={3}", | 539 | m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, endPoint={2}, avatarID={3}", |
559 | LogHeader, regionHandle, regionExternalEndPoint, avatarID, regionSizeX, regionSizeY); | 540 | LogHeader, regionHandle, regionExternalEndPoint, avatarID, regionSizeX, regionSizeY); |
560 | ======= | ||
561 | m_log.DebugFormat("{0} TeleportFinishEvent. handle={1}, avatarID={2}, regionSize={3},{4}>", | ||
562 | LogHeader, regionHandle, avatarID, regionSizeX, regionSizeY); | ||
563 | >>>>>>> avn/ubitvar | ||
564 | 541 | ||
565 | OSD item = EventQueueHelper.TeleportFinishEvent(regionHandle, simAccess, regionExternalEndPoint, | 542 | OSD item = EventQueueHelper.TeleportFinishEvent(regionHandle, simAccess, regionExternalEndPoint, |
566 | locationID, flags, capsURL, avatarID, regionSizeX, regionSizeY); | 543 | locationID, flags, capsURL, avatarID, regionSizeX, regionSizeY); |
@@ -571,14 +548,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
571 | IPEndPoint newRegionExternalEndPoint, | 548 | IPEndPoint newRegionExternalEndPoint, |
572 | string capsURL, UUID avatarID, UUID sessionID, int regionSizeX, int regionSizeY) | 549 | string capsURL, UUID avatarID, UUID sessionID, int regionSizeX, int regionSizeY) |
573 | { | 550 | { |
574 | <<<<<<< HEAD | ||
575 | if (DebugLevel > 0) | 551 | if (DebugLevel > 0) |
576 | m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>", | 552 | m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>", |
577 | LogHeader, handle, avatarID, regionSizeX, regionSizeY); | 553 | LogHeader, handle, avatarID, regionSizeX, regionSizeY); |
578 | ======= | ||
579 | m_log.DebugFormat("{0} CrossRegion. handle={1}, avatarID={2}, regionSize={3},{4}>", | ||
580 | LogHeader, handle, avatarID, regionSizeX, regionSizeY); | ||
581 | >>>>>>> avn/ubitvar | ||
582 | 554 | ||
583 | OSD item = EventQueueHelper.CrossRegion(handle, pos, lookAt, newRegionExternalEndPoint, | 555 | OSD item = EventQueueHelper.CrossRegion(handle, pos, lookAt, newRegionExternalEndPoint, |
584 | capsURL, avatarID, sessionID, regionSizeX, regionSizeY); | 556 | capsURL, avatarID, sessionID, regionSizeX, regionSizeY); |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs index 8b7e4c1..50e22f5 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs | |||
@@ -77,13 +77,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
77 | llsdSimInfo.Add("Handle", new OSDBinary(ulongToByteArray(handle))); | 77 | llsdSimInfo.Add("Handle", new OSDBinary(ulongToByteArray(handle))); |
78 | llsdSimInfo.Add("IP", new OSDBinary(endPoint.Address.GetAddressBytes())); | 78 | llsdSimInfo.Add("IP", new OSDBinary(endPoint.Address.GetAddressBytes())); |
79 | llsdSimInfo.Add("Port", new OSDInteger(endPoint.Port)); | 79 | llsdSimInfo.Add("Port", new OSDInteger(endPoint.Port)); |
80 | <<<<<<< HEAD | ||
81 | llsdSimInfo.Add("RegionSizeX", OSD.FromUInteger((uint) regionSizeX)); | ||
82 | llsdSimInfo.Add("RegionSizeY", OSD.FromUInteger((uint) regionSizeY)); | ||
83 | ======= | ||
84 | llsdSimInfo.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX)); | 80 | llsdSimInfo.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX)); |
85 | llsdSimInfo.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY)); | 81 | llsdSimInfo.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY)); |
86 | >>>>>>> avn/ubitvar | ||
87 | 82 | ||
88 | OSDArray arr = new OSDArray(1); | 83 | OSDArray arr = new OSDArray(1); |
89 | arr.Add(llsdSimInfo); | 84 | arr.Add(llsdSimInfo); |
@@ -176,12 +171,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
176 | info.Add("SimAccess", OSD.FromInteger(simAccess)); | 171 | info.Add("SimAccess", OSD.FromInteger(simAccess)); |
177 | info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes())); | 172 | info.Add("SimIP", OSD.FromBinary(regionExternalEndPoint.Address.GetAddressBytes())); |
178 | info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port)); | 173 | info.Add("SimPort", OSD.FromInteger(regionExternalEndPoint.Port)); |
179 | <<<<<<< HEAD | ||
180 | info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation | ||
181 | ======= | ||
182 | // info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation | 174 | // info.Add("TeleportFlags", OSD.FromULong(1L << 4)); // AgentManager.TeleportFlags.ViaLocation |
183 | info.Add("TeleportFlags", OSD.FromUInteger(flags)); | 175 | info.Add("TeleportFlags", OSD.FromUInteger(flags)); |
184 | >>>>>>> avn/ubitvar | ||
185 | info.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX)); | 176 | info.Add("RegionSizeX", OSD.FromUInteger((uint)regionSizeX)); |
186 | info.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY)); | 177 | info.Add("RegionSizeY", OSD.FromUInteger((uint)regionSizeY)); |
187 | 178 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs index 91efe8a..b5a70040 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs | |||
@@ -60,11 +60,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
60 | private IAssetService m_AssetService; | 60 | private IAssetService m_AssetService; |
61 | private bool m_Enabled = true; | 61 | private bool m_Enabled = true; |
62 | private string m_URL; | 62 | private string m_URL; |
63 | <<<<<<< HEAD | 63 | |
64 | private string m_URL2; | 64 | private string m_URL2; |
65 | private string m_RedirectURL = null; | 65 | private string m_RedirectURL = null; |
66 | private string m_RedirectURL2 = null; | 66 | private string m_RedirectURL2 = null; |
67 | ======= | ||
68 | 67 | ||
69 | struct aPollRequest | 68 | struct aPollRequest |
70 | { | 69 | { |
@@ -94,7 +93,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
94 | new OpenMetaverse.BlockingQueue<aPollRequest>(); | 93 | new OpenMetaverse.BlockingQueue<aPollRequest>(); |
95 | 94 | ||
96 | private Dictionary<UUID, PollServiceMeshEventArgs> m_pollservices = new Dictionary<UUID, PollServiceMeshEventArgs>(); | 95 | private Dictionary<UUID, PollServiceMeshEventArgs> m_pollservices = new Dictionary<UUID, PollServiceMeshEventArgs>(); |
97 | >>>>>>> avn/ubitvar | 96 | |
98 | 97 | ||
99 | #region Region Module interfaceBase Members | 98 | #region Region Module interfaceBase Members |
100 | 99 | ||
@@ -129,12 +128,9 @@ namespace OpenSim.Region.ClientStack.Linden | |||
129 | if (m_URL2 != string.Empty) | 128 | if (m_URL2 != string.Empty) |
130 | { | 129 | { |
131 | m_Enabled = true; | 130 | m_Enabled = true; |
132 | <<<<<<< HEAD | 131 | |
133 | m_RedirectURL2 = config.GetString("GetMesh2RedirectURL"); | 132 | m_RedirectURL2 = config.GetString("GetMesh2RedirectURL"); |
134 | } | 133 | } |
135 | ======= | ||
136 | |||
137 | >>>>>>> avn/ubitvar | ||
138 | } | 134 | } |
139 | 135 | ||
140 | public void AddRegion(Scene pScene) | 136 | public void AddRegion(Scene pScene) |
@@ -177,7 +173,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
177 | 173 | ||
178 | for (uint i = 0; i < 2; i++) | 174 | for (uint i = 0; i < 2; i++) |
179 | { | 175 | { |
180 | m_workerThreads[i] = Watchdog.StartThread(DoMeshRequests, | 176 | m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests, |
181 | String.Format("MeshWorkerThread{0}", i), | 177 | String.Format("MeshWorkerThread{0}", i), |
182 | ThreadPriority.Normal, | 178 | ThreadPriority.Normal, |
183 | false, | 179 | false, |
@@ -336,21 +332,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
336 | 332 | ||
337 | public void RegisterCaps(UUID agentID, Caps caps) | 333 | public void RegisterCaps(UUID agentID, Caps caps) |
338 | { | 334 | { |
339 | <<<<<<< HEAD | ||
340 | UUID capID = UUID.Random(); | ||
341 | bool getMeshRegistered = false; | ||
342 | |||
343 | if (m_URL == string.Empty) | ||
344 | { | ||
345 | |||
346 | } | ||
347 | else if (m_URL == "localhost") | ||
348 | { | ||
349 | getMeshRegistered = true; | ||
350 | caps.RegisterHandler( | ||
351 | "GetMesh", | ||
352 | new GetMeshHandler("/CAPS/" + capID + "/", m_AssetService, "GetMesh", agentID.ToString(), m_RedirectURL)); | ||
353 | ======= | ||
354 | // UUID capID = UUID.Random(); | 335 | // UUID capID = UUID.Random(); |
355 | if (m_URL == "localhost") | 336 | if (m_URL == "localhost") |
356 | { | 337 | { |
@@ -375,34 +356,13 @@ namespace OpenSim.Region.ClientStack.Linden | |||
375 | caps.RegisterHandler("GetMesh", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl)); | 356 | caps.RegisterHandler("GetMesh", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl)); |
376 | m_pollservices[agentID] = args; | 357 | m_pollservices[agentID] = args; |
377 | m_capsDict[agentID] = capUrl; | 358 | m_capsDict[agentID] = capUrl; |
378 | |||
379 | |||
380 | |||
381 | >>>>>>> avn/ubitvar | ||
382 | } | 359 | } |
383 | else | 360 | else |
384 | { | 361 | { |
385 | caps.RegisterHandler("GetMesh", m_URL); | 362 | caps.RegisterHandler("GetMesh", m_URL); |
386 | } | 363 | } |
387 | |||
388 | if(m_URL2 == string.Empty) | ||
389 | { | ||
390 | |||
391 | } | ||
392 | else if (m_URL2 == "localhost") | ||
393 | { | ||
394 | if (!getMeshRegistered) | ||
395 | { | ||
396 | caps.RegisterHandler( | ||
397 | "GetMesh2", | ||
398 | new GetMeshHandler("/CAPS/" + capID + "/", m_AssetService, "GetMesh2", agentID.ToString(), m_RedirectURL2)); | ||
399 | } | ||
400 | } | ||
401 | else | ||
402 | { | ||
403 | caps.RegisterHandler("GetMesh2", m_URL2); | ||
404 | } | ||
405 | } | 364 | } |
365 | |||
406 | private void DeregisterCaps(UUID agentID, Caps caps) | 366 | private void DeregisterCaps(UUID agentID, Caps caps) |
407 | { | 367 | { |
408 | string capUrl; | 368 | string capUrl; |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs index b9396b7..79a3458 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs | |||
@@ -82,24 +82,22 @@ namespace OpenSim.Region.ClientStack.Linden | |||
82 | private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue = | 82 | private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue = |
83 | new OpenMetaverse.BlockingQueue<aPollRequest>(); | 83 | new OpenMetaverse.BlockingQueue<aPollRequest>(); |
84 | 84 | ||
85 | <<<<<<< HEAD | 85 | |
86 | // TODO: Change this to a config option | 86 | // TODO: Change this to a config option |
87 | private string m_RedirectURL = null; | 87 | private string m_RedirectURL = null; |
88 | ======= | ||
89 | private Dictionary<UUID,PollServiceTextureEventArgs> m_pollservices = new Dictionary<UUID,PollServiceTextureEventArgs>(); | ||
90 | >>>>>>> avn/ubitvar | ||
91 | 88 | ||
92 | private string m_URL; | 89 | private Dictionary<UUID,PollServiceTextureEventArgs> m_pollservices = new Dictionary<UUID,PollServiceTextureEventArgs>(); |
90 | |||
93 | 91 | ||
94 | #region ISharedRegionModule Members | 92 | #region ISharedRegionModule Members |
95 | 93 | ||
96 | public void Initialise(IConfigSource source) | 94 | public void Initialise(IConfigSource source) |
97 | { | 95 | { |
98 | IConfig config = source.Configs["ClientStack.LindenCaps"]; | 96 | IConfig config = source.Configs["ClientStack.LindenCaps"]; |
99 | <<<<<<< HEAD | 97 | |
100 | if (config == null) | 98 | if (config == null) |
101 | return; | 99 | return; |
102 | 100 | /* | |
103 | m_URL = config.GetString("Cap_GetTexture", string.Empty); | 101 | m_URL = config.GetString("Cap_GetTexture", string.Empty); |
104 | // Cap doesn't exist | 102 | // Cap doesn't exist |
105 | if (m_URL != string.Empty) | 103 | if (m_URL != string.Empty) |
@@ -107,10 +105,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
107 | m_Enabled = true; | 105 | m_Enabled = true; |
108 | m_RedirectURL = config.GetString("GetTextureRedirectURL"); | 106 | m_RedirectURL = config.GetString("GetTextureRedirectURL"); |
109 | } | 107 | } |
110 | ======= | 108 | */ |
111 | if (config != null) | 109 | m_Url = config.GetString("Cap_GetTexture", "localhost"); |
112 | m_Url = config.GetString("Cap_GetTexture", "localhost"); | ||
113 | >>>>>>> avn/ubitvar | ||
114 | } | 110 | } |
115 | 111 | ||
116 | public void AddRegion(Scene s) | 112 | public void AddRegion(Scene s) |
@@ -142,7 +138,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
142 | 138 | ||
143 | for (uint i = 0; i < 2; i++) | 139 | for (uint i = 0; i < 2; i++) |
144 | { | 140 | { |
145 | m_workerThreads[i] = Watchdog.StartThread(DoTextureRequests, | 141 | m_workerThreads[i] = WorkManager.StartThread(DoTextureRequests, |
146 | String.Format("TextureWorkerThread{0}", i), | 142 | String.Format("TextureWorkerThread{0}", i), |
147 | ThreadPriority.Normal, | 143 | ThreadPriority.Normal, |
148 | false, | 144 | false, |
@@ -237,12 +233,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
237 | public PollServiceTextureEventArgs(UUID pId, Scene scene) : | 233 | public PollServiceTextureEventArgs(UUID pId, Scene scene) : |
238 | base(null, "", null, null, null, pId, int.MaxValue) | 234 | base(null, "", null, null, null, pId, int.MaxValue) |
239 | { | 235 | { |
240 | <<<<<<< HEAD | ||
241 | // m_log.DebugFormat("[GETTEXTURE]: /CAPS/{0} in region {1}", capID, m_scene.RegionInfo.RegionName); | ||
242 | caps.RegisterHandler( | ||
243 | "GetTexture", | ||
244 | new GetTextureHandler("/CAPS/" + capID + "/", m_assetService, "GetTexture", agentID.ToString(), m_RedirectURL)); | ||
245 | ======= | ||
246 | m_scene = scene; | 236 | m_scene = scene; |
247 | // x is request id, y is userid | 237 | // x is request id, y is userid |
248 | HasEvents = (x, y) => | 238 | HasEvents = (x, y) => |
@@ -312,7 +302,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
312 | 302 | ||
313 | return response; | 303 | return response; |
314 | }; | 304 | }; |
315 | >>>>>>> avn/ubitvar | ||
316 | } | 305 | } |
317 | 306 | ||
318 | public void Process(aPollRequest requestinfo) | 307 | public void Process(aPollRequest requestinfo) |
@@ -402,11 +391,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
402 | } | 391 | } |
403 | IExternalCapsModule handler = m_scene.RequestModuleInterface<IExternalCapsModule>(); | 392 | IExternalCapsModule handler = m_scene.RequestModuleInterface<IExternalCapsModule>(); |
404 | if (handler != null) | 393 | if (handler != null) |
405 | <<<<<<< HEAD | ||
406 | handler.RegisterExternalUserCapsHandler(agentID,caps,"GetTexture", m_URL); | ||
407 | ======= | ||
408 | handler.RegisterExternalUserCapsHandler(agentID, caps, "GetTexture", capUrl); | 394 | handler.RegisterExternalUserCapsHandler(agentID, caps, "GetTexture", capUrl); |
409 | >>>>>>> avn/ubitvar | ||
410 | else | 395 | else |
411 | caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl)); | 396 | caps.RegisterHandler("GetTexture", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl)); |
412 | m_pollservices[agentID] = args; | 397 | m_pollservices[agentID] = args; |
@@ -422,7 +407,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
422 | { | 407 | { |
423 | PollServiceTextureEventArgs args; | 408 | PollServiceTextureEventArgs args; |
424 | 409 | ||
425 | MainServer.Instance.RemoveHTTPHandler("", m_URL); | 410 | MainServer.Instance.RemoveHTTPHandler("", m_Url); |
426 | m_capsDict.Remove(agentID); | 411 | m_capsDict.Remove(agentID); |
427 | 412 | ||
428 | if (m_pollservices.TryGetValue(agentID, out args)) | 413 | if (m_pollservices.TryGetValue(agentID, out args)) |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs index 54542c9..d07f66e 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs | |||
@@ -157,11 +157,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
157 | m_features["MeshXferEnabled"] = true; | 157 | m_features["MeshXferEnabled"] = true; |
158 | 158 | ||
159 | m_features["PhysicsMaterialsEnabled"] = true; | 159 | m_features["PhysicsMaterialsEnabled"] = true; |
160 | <<<<<<< HEAD | ||
161 | 160 | ||
162 | ======= | ||
163 | |||
164 | >>>>>>> avn/ubitvar | ||
165 | OSDMap typesMap = new OSDMap(); | 161 | OSDMap typesMap = new OSDMap(); |
166 | typesMap["convex"] = true; | 162 | typesMap["convex"] = true; |
167 | typesMap["none"] = true; | 163 | typesMap["none"] = true; |
@@ -169,7 +165,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
169 | m_features["PhysicsShapeTypes"] = typesMap; | 165 | m_features["PhysicsShapeTypes"] = typesMap; |
170 | 166 | ||
171 | // Extra information for viewers that want to use it | 167 | // Extra information for viewers that want to use it |
172 | <<<<<<< HEAD | ||
173 | // TODO: Take these out of here into their respective modules, like map-server-url | 168 | // TODO: Take these out of here into their respective modules, like map-server-url |
174 | OSDMap extrasMap; | 169 | OSDMap extrasMap; |
175 | if(m_features.ContainsKey("OpenSimExtras")) | 170 | if(m_features.ContainsKey("OpenSimExtras")) |
@@ -179,15 +174,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
179 | else | 174 | else |
180 | extrasMap = new OSDMap(); | 175 | extrasMap = new OSDMap(); |
181 | 176 | ||
182 | ======= | ||
183 | |||
184 | OSDMap extrasMap = new OSDMap(); | ||
185 | |||
186 | extrasMap["AvatarSkeleton"] = true; | 177 | extrasMap["AvatarSkeleton"] = true; |
187 | extrasMap["AnimationSet"] = true; | 178 | extrasMap["AnimationSet"] = true; |
188 | 179 | ||
189 | // TODO: Take these out of here into their respective modules, like map-server-url | 180 | // TODO: Take these out of here into their respective modules, like map-server-url |
190 | >>>>>>> avn/ubitvar | ||
191 | if (m_SearchURL != string.Empty) | 181 | if (m_SearchURL != string.Empty) |
192 | extrasMap["search-server-url"] = m_SearchURL; | 182 | extrasMap["search-server-url"] = m_SearchURL; |
193 | if (!string.IsNullOrEmpty(m_DestinationGuideURL)) | 183 | if (!string.IsNullOrEmpty(m_DestinationGuideURL)) |
@@ -199,13 +189,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
199 | if (m_GridName != string.Empty) | 189 | if (m_GridName != string.Empty) |
200 | extrasMap["GridName"] = m_GridName; | 190 | extrasMap["GridName"] = m_GridName; |
201 | 191 | ||
202 | <<<<<<< HEAD | ||
203 | if (extrasMap.Count > 0) | 192 | if (extrasMap.Count > 0) |
204 | m_features["OpenSimExtras"] = extrasMap; | 193 | m_features["OpenSimExtras"] = extrasMap; |
205 | ======= | ||
206 | m_features["OpenSimExtras"] = extrasMap; | ||
207 | |||
208 | >>>>>>> avn/ubitvar | ||
209 | } | 194 | } |
210 | } | 195 | } |
211 | 196 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/Tests/WebFetchInvDescModuleTests.cs b/OpenSim/Region/ClientStack/Linden/Caps/Tests/WebFetchInvDescModuleTests.cs index dd4a691..db16ccb 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/Tests/WebFetchInvDescModuleTests.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/Tests/WebFetchInvDescModuleTests.cs | |||
@@ -52,6 +52,7 @@ using OSDMap = OpenMetaverse.StructuredData.OSDMap; | |||
52 | 52 | ||
53 | namespace OpenSim.Region.ClientStack.Linden.Caps.Tests | 53 | namespace OpenSim.Region.ClientStack.Linden.Caps.Tests |
54 | { | 54 | { |
55 | /* | ||
55 | [TestFixture] | 56 | [TestFixture] |
56 | public class WebFetchInvDescModuleTests : OpenSimTestCase | 57 | public class WebFetchInvDescModuleTests : OpenSimTestCase |
57 | { | 58 | { |
@@ -156,4 +157,5 @@ namespace OpenSim.Region.ClientStack.Linden.Caps.Tests | |||
156 | Assert.That((int)folderOsd["descendents"], Is.EqualTo(16)); | 157 | Assert.That((int)folderOsd["descendents"], Is.EqualTo(16)); |
157 | } | 158 | } |
158 | } | 159 | } |
160 | */ | ||
159 | } \ No newline at end of file | 161 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs index c27d101..8fd8d1f 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs | |||
@@ -66,16 +66,19 @@ namespace OpenSim.Region.ClientStack.Linden | |||
66 | private bool m_persistBakedTextures; | 66 | private bool m_persistBakedTextures; |
67 | 67 | ||
68 | private IBakedTextureModule m_BakedTextureModule; | 68 | private IBakedTextureModule m_BakedTextureModule; |
69 | 69 | private string m_URL; | |
70 | private IBakedTextureModule m_BakedTextureModule; | ||
71 | 70 | ||
72 | public void Initialise(IConfigSource source) | 71 | public void Initialise(IConfigSource source) |
73 | { | 72 | { |
73 | IConfig config = source.Configs["ClientStack.LindenCaps"]; | ||
74 | if (config == null) | ||
75 | return; | ||
76 | |||
77 | m_URL = config.GetString("Cap_UploadBakedTexture", string.Empty); | ||
78 | |||
74 | IConfig appearanceConfig = source.Configs["Appearance"]; | 79 | IConfig appearanceConfig = source.Configs["Appearance"]; |
75 | if (appearanceConfig != null) | 80 | if (appearanceConfig != null) |
76 | m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); | 81 | m_persistBakedTextures = appearanceConfig.GetBoolean("PersistBakedTextures", m_persistBakedTextures); |
77 | |||
78 | |||
79 | } | 82 | } |
80 | 83 | ||
81 | public void AddRegion(Scene s) | 84 | public void AddRegion(Scene s) |
@@ -91,13 +94,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
91 | s.EventManager.OnRemovePresence -= DeRegisterPresence; | 94 | s.EventManager.OnRemovePresence -= DeRegisterPresence; |
92 | m_BakedTextureModule = null; | 95 | m_BakedTextureModule = null; |
93 | m_scene = null; | 96 | m_scene = null; |
94 | <<<<<<< HEAD | ||
95 | } | ||
96 | ======= | ||
97 | } | 97 | } |
98 | >>>>>>> avn/ubitvar | ||
99 | |||
100 | |||
101 | 98 | ||
102 | public void RegionLoaded(Scene s) | 99 | public void RegionLoaded(Scene s) |
103 | { | 100 | { |
@@ -109,173 +106,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
109 | 106 | ||
110 | private void DeRegisterPresence(UUID agentId) | 107 | private void DeRegisterPresence(UUID agentId) |
111 | { | 108 | { |
112 | <<<<<<< HEAD | ||
113 | ScenePresence presence = null; | ||
114 | if (m_scene.TryGetScenePresence(agentId, out presence)) | ||
115 | { | ||
116 | presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings; | ||
117 | } | ||
118 | |||
119 | } | ||
120 | |||
121 | private void RegisterNewPresence(ScenePresence presence) | ||
122 | { | ||
123 | presence.ControllingClient.OnSetAppearance += CaptureAppearanceSettings; | ||
124 | |||
125 | } | ||
126 | |||
127 | private void CaptureAppearanceSettings(IClientAPI remoteClient, Primitive.TextureEntry textureEntry, byte[] visualParams, Vector3 avSize, WearableCacheItem[] cacheItems) | ||
128 | { | ||
129 | int maxCacheitemsLoop = cacheItems.Length; | ||
130 | if (maxCacheitemsLoop > AvatarWearable.MAX_WEARABLES) | ||
131 | { | ||
132 | maxCacheitemsLoop = AvatarWearable.MAX_WEARABLES; | ||
133 | m_log.WarnFormat("[CACHEDBAKES]: Too Many Cache items Provided {0}, the max is {1}. Truncating!", cacheItems.Length, AvatarWearable.MAX_WEARABLES); | ||
134 | } | ||
135 | |||
136 | m_BakedTextureModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); | ||
137 | if (cacheItems.Length > 0) | ||
138 | { | ||
139 | // m_log.Debug("[Cacheitems]: " + cacheItems.Length); | ||
140 | // for (int iter = 0; iter < maxCacheitemsLoop; iter++) | ||
141 | // { | ||
142 | // m_log.Debug("[Cacheitems] {" + iter + "/" + cacheItems[iter].TextureIndex + "}: c-" + cacheItems[iter].CacheId + ", t-" + | ||
143 | // cacheItems[iter].TextureID); | ||
144 | // } | ||
145 | |||
146 | ScenePresence p = null; | ||
147 | if (m_scene.TryGetScenePresence(remoteClient.AgentId, out p)) | ||
148 | { | ||
149 | |||
150 | WearableCacheItem[] existingitems = p.Appearance.WearableCacheItems; | ||
151 | if (existingitems == null) | ||
152 | { | ||
153 | if (m_BakedTextureModule != null) | ||
154 | { | ||
155 | WearableCacheItem[] savedcache = null; | ||
156 | try | ||
157 | { | ||
158 | if (p.Appearance.WearableCacheItemsDirty) | ||
159 | { | ||
160 | savedcache = m_BakedTextureModule.Get(p.UUID); | ||
161 | p.Appearance.WearableCacheItems = savedcache; | ||
162 | p.Appearance.WearableCacheItemsDirty = false; | ||
163 | } | ||
164 | |||
165 | } | ||
166 | /* | ||
167 | * The following Catch types DO NOT WORK with m_BakedTextureModule.Get | ||
168 | * it jumps to the General Packet Exception Handler if you don't catch Exception! | ||
169 | * | ||
170 | catch (System.Net.Sockets.SocketException) | ||
171 | { | ||
172 | cacheItems = null; | ||
173 | } | ||
174 | catch (WebException) | ||
175 | { | ||
176 | cacheItems = null; | ||
177 | } | ||
178 | catch (InvalidOperationException) | ||
179 | { | ||
180 | cacheItems = null; | ||
181 | } */ | ||
182 | catch (Exception) | ||
183 | { | ||
184 | // The service logs a sufficient error message. | ||
185 | } | ||
186 | |||
187 | |||
188 | if (savedcache != null) | ||
189 | existingitems = savedcache; | ||
190 | } | ||
191 | } | ||
192 | // Existing items null means it's a fully new appearance | ||
193 | if (existingitems == null) | ||
194 | { | ||
195 | |||
196 | for (int i = 0; i < maxCacheitemsLoop; i++) | ||
197 | { | ||
198 | if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex) | ||
199 | { | ||
200 | Primitive.TextureEntryFace face = textureEntry.FaceTextures[cacheItems[i].TextureIndex]; | ||
201 | if (face == null) | ||
202 | { | ||
203 | textureEntry.CreateFace(cacheItems[i].TextureIndex); | ||
204 | textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID = | ||
205 | AppearanceManager.DEFAULT_AVATAR_TEXTURE; | ||
206 | continue; | ||
207 | } | ||
208 | cacheItems[i].TextureID =face.TextureID; | ||
209 | if (m_scene.AssetService != null) | ||
210 | cacheItems[i].TextureAsset = | ||
211 | m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString()); | ||
212 | } | ||
213 | else | ||
214 | { | ||
215 | m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}. Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length); | ||
216 | } | ||
217 | |||
218 | |||
219 | } | ||
220 | } | ||
221 | else | ||
222 | |||
223 | |||
224 | { | ||
225 | // for each uploaded baked texture | ||
226 | for (int i = 0; i < maxCacheitemsLoop; i++) | ||
227 | { | ||
228 | if (textureEntry.FaceTextures.Length > cacheItems[i].TextureIndex) | ||
229 | { | ||
230 | Primitive.TextureEntryFace face = textureEntry.FaceTextures[cacheItems[i].TextureIndex]; | ||
231 | if (face == null) | ||
232 | { | ||
233 | textureEntry.CreateFace(cacheItems[i].TextureIndex); | ||
234 | textureEntry.FaceTextures[cacheItems[i].TextureIndex].TextureID = | ||
235 | AppearanceManager.DEFAULT_AVATAR_TEXTURE; | ||
236 | continue; | ||
237 | } | ||
238 | cacheItems[i].TextureID = | ||
239 | face.TextureID; | ||
240 | } | ||
241 | else | ||
242 | { | ||
243 | m_log.WarnFormat("[CACHEDBAKES]: Invalid Texture Index Provided, Texture doesn't exist or hasn't been uploaded yet {0}, the max is {1}. Skipping!", cacheItems[i].TextureIndex, textureEntry.FaceTextures.Length); | ||
244 | } | ||
245 | } | ||
246 | |||
247 | for (int i = 0; i < maxCacheitemsLoop; i++) | ||
248 | { | ||
249 | if (cacheItems[i].TextureAsset == null) | ||
250 | { | ||
251 | cacheItems[i].TextureAsset = | ||
252 | m_scene.AssetService.GetCached(cacheItems[i].TextureID.ToString()); | ||
253 | } | ||
254 | } | ||
255 | } | ||
256 | |||
257 | |||
258 | |||
259 | p.Appearance.WearableCacheItems = cacheItems; | ||
260 | |||
261 | |||
262 | |||
263 | if (m_BakedTextureModule != null) | ||
264 | { | ||
265 | m_BakedTextureModule.Store(remoteClient.AgentId, cacheItems); | ||
266 | p.Appearance.WearableCacheItemsDirty = true; | ||
267 | |||
268 | } | ||
269 | } | ||
270 | } | ||
271 | ======= | ||
272 | // ScenePresence presence = null; | ||
273 | // if (m_scene.TryGetScenePresence(agentId, out presence)) | ||
274 | { | ||
275 | // presence.ControllingClient.OnSetAppearance -= CaptureAppearanceSettings; | ||
276 | } | ||
277 | |||
278 | >>>>>>> avn/ubitvar | ||
279 | } | 109 | } |
280 | 110 | ||
281 | private void RegisterNewPresence(ScenePresence presence) | 111 | private void RegisterNewPresence(ScenePresence presence) |
@@ -441,25 +271,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
441 | 271 | ||
442 | public void RegisterCaps(UUID agentID, Caps caps) | 272 | public void RegisterCaps(UUID agentID, Caps caps) |
443 | { | 273 | { |
444 | UploadBakedTextureHandler avatarhandler = new UploadBakedTextureHandler( | ||
445 | caps, m_scene.AssetService, m_persistBakedTextures); | ||
446 | |||
447 | <<<<<<< HEAD | ||
448 | |||
449 | |||
450 | caps.RegisterHandler( | ||
451 | "UploadBakedTexture", | ||
452 | new RestStreamHandler( | ||
453 | "POST", | ||
454 | "/CAPS/" + caps.CapsObjectPath + m_uploadBakedTexturePath, | ||
455 | avatarhandler.UploadBakedTexture, | ||
456 | "UploadBakedTexture", | ||
457 | agentID.ToString())); | ||
458 | |||
459 | |||
460 | |||
461 | |||
462 | ======= | ||
463 | //caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture)); | 274 | //caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture)); |
464 | if (m_URL == "localhost") | 275 | if (m_URL == "localhost") |
465 | { | 276 | { |
@@ -480,7 +291,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
480 | { | 291 | { |
481 | caps.RegisterHandler("UploadBakedTexture", m_URL); | 292 | caps.RegisterHandler("UploadBakedTexture", m_URL); |
482 | } | 293 | } |
483 | >>>>>>> avn/ubitvar | ||
484 | } | 294 | } |
485 | } | 295 | } |
486 | } | 296 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs index 92f8c51..6e2f7f3 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | |||
@@ -64,11 +64,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
64 | public List<UUID> folders; | 64 | public List<UUID> folders; |
65 | } | 65 | } |
66 | 66 | ||
67 | <<<<<<< HEAD | ||
68 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
69 | ======= | ||
70 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 67 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
71 | >>>>>>> avn/ubitvar | ||
72 | 68 | ||
73 | /// <summary> | 69 | /// <summary> |
74 | /// Control whether requests will be processed asynchronously. | 70 | /// Control whether requests will be processed asynchronously. |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 806269f..f76db1e 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -723,11 +723,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
723 | if (!m_packetHandlers.ContainsKey(packetType)) | 723 | if (!m_packetHandlers.ContainsKey(packetType)) |
724 | { | 724 | { |
725 | m_packetHandlers.Add( | 725 | m_packetHandlers.Add( |
726 | <<<<<<< HEAD | ||
727 | packetType, new PacketProcessor() { method = handler, Async = doAsync, InEngine = inEngine }); | 726 | packetType, new PacketProcessor() { method = handler, Async = doAsync, InEngine = inEngine }); |
728 | ======= | ||
729 | packetType, new PacketProcessor() { method = handler, Async = doAsync }); | ||
730 | >>>>>>> avn/ubitvar | ||
731 | result = true; | 727 | result = true; |
732 | } | 728 | } |
733 | } | 729 | } |
@@ -1228,15 +1224,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1228 | /// <param name="map">heightmap</param> | 1224 | /// <param name="map">heightmap</param> |
1229 | public virtual void SendLayerData(float[] map) | 1225 | public virtual void SendLayerData(float[] map) |
1230 | { | 1226 | { |
1231 | <<<<<<< HEAD | ||
1232 | Util.FireAndForget(DoSendLayerData, m_scene.Heightmap.GetTerrainData(), "LLClientView.DoSendLayerData"); | 1227 | Util.FireAndForget(DoSendLayerData, m_scene.Heightmap.GetTerrainData(), "LLClientView.DoSendLayerData"); |
1233 | ======= | ||
1234 | Util.FireAndForget(DoSendLayerData, m_scene.Heightmap.GetTerrainData()); | ||
1235 | 1228 | ||
1236 | // Send it sync, and async. It's not that much data | 1229 | // Send it sync, and async. It's not that much data |
1237 | // and it improves user experience just so much! | 1230 | // and it improves user experience just so much! |
1238 | // DoSendLayerData(map); | 1231 | // DoSendLayerData(map); |
1239 | >>>>>>> avn/ubitvar | ||
1240 | } | 1232 | } |
1241 | 1233 | ||
1242 | /// <summary> | 1234 | /// <summary> |
@@ -1250,18 +1242,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1250 | try | 1242 | try |
1251 | { | 1243 | { |
1252 | // Send LayerData in typerwriter pattern | 1244 | // Send LayerData in typerwriter pattern |
1253 | <<<<<<< HEAD | 1245 | |
1254 | //for (int y = 0; y < 16; y++) | ||
1255 | //{ | ||
1256 | // for (int x = 0; x < 16; x++) | ||
1257 | // { | ||
1258 | // SendLayerData(x, y, map); | ||
1259 | // } | ||
1260 | //} | ||
1261 | |||
1262 | // Send LayerData in a spiral pattern. Fun! | ||
1263 | SendLayerTopRight(map, 0, 0, map.SizeX/Constants.TerrainPatchSize-1, map.SizeY/Constants.TerrainPatchSize-1); | ||
1264 | ======= | ||
1265 | for (int y = 0; y < 16; y++) | 1246 | for (int y = 0; y < 16; y++) |
1266 | { | 1247 | { |
1267 | for (int x = 0; x < 16; x++) | 1248 | for (int x = 0; x < 16; x++) |
@@ -1269,7 +1250,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1269 | SendLayerData(x, y, map); | 1250 | SendLayerData(x, y, map); |
1270 | } | 1251 | } |
1271 | } | 1252 | } |
1272 | >>>>>>> avn/ubitvar | ||
1273 | } | 1253 | } |
1274 | catch (Exception e) | 1254 | catch (Exception e) |
1275 | { | 1255 | { |
@@ -1277,74 +1257,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1277 | } | 1257 | } |
1278 | } | 1258 | } |
1279 | 1259 | ||
1280 | <<<<<<< HEAD | ||
1281 | private void SendLayerTopRight(TerrainData map, int x1, int y1, int x2, int y2) | ||
1282 | ======= | ||
1283 | // Legacy form of invocation that passes around a bare data array. | ||
1284 | // Just ignore what was passed and use the real terrain info that is part of the scene. | ||
1285 | // As a HORRIBLE kludge in an attempt to not change the definition of IClientAPI, | ||
1286 | // there is a special form for specifying multiple terrain patches to send. | ||
1287 | // The form is to pass 'px' as negative the number of patches to send and to | ||
1288 | // pass the float array as pairs of patch X and Y coordinates. So, passing 'px' | ||
1289 | // as -2 and map= [3, 5, 8, 4] would mean to send two terrain heightmap patches | ||
1290 | // and the patches to send are <3,5> and <8,4>. | ||
1291 | public void SendLayerData(int px, int py, float[] map) | ||
1292 | >>>>>>> avn/ubitvar | ||
1293 | { | ||
1294 | if (px >= 0) | ||
1295 | { | ||
1296 | SendLayerData(px, py, m_scene.Heightmap.GetTerrainData()); | ||
1297 | } | ||
1298 | else | ||
1299 | { | ||
1300 | int numPatches = -px; | ||
1301 | int[] xPatches = new int[numPatches]; | ||
1302 | int[] yPatches = new int[numPatches]; | ||
1303 | for (int pp = 0; pp < numPatches; pp++) | ||
1304 | { | ||
1305 | xPatches[pp] = (int)map[pp * 2]; | ||
1306 | yPatches[pp] = (int)map[pp * 2 + 1]; | ||
1307 | } | ||
1308 | |||
1309 | // DebugSendingPatches("SendLayerData", xPatches, yPatches); | ||
1310 | |||
1311 | <<<<<<< HEAD | ||
1312 | if (x2 - x1 > 0 && y2 - y1 > 0) | ||
1313 | SendLayerBottomLeft(map, x1, y1 + 1, x2 - 1, y2); | ||
1314 | } | ||
1315 | |||
1316 | void SendLayerBottomLeft(TerrainData map, int x1, int y1, int x2, int y2) | ||
1317 | { | ||
1318 | // Row in reverse | ||
1319 | for (int i = x2; i >= x1; i--) | ||
1320 | SendLayerData(i, y2, map); | ||
1321 | |||
1322 | // Column in reverse | ||
1323 | for (int j = y2 - 1; j >= y1; j--) | ||
1324 | SendLayerData(x1, j, map); | ||
1325 | |||
1326 | if (x2 - x1 > 0 && y2 - y1 > 0) | ||
1327 | SendLayerTopRight(map, x1 + 1, y1, x2, y2 - 1); | ||
1328 | } | ||
1329 | |||
1330 | /// <summary> | ||
1331 | /// Sends a set of four patches (x, x+1, ..., x+3) to the client | ||
1332 | /// </summary> | ||
1333 | /// <param name="map">heightmap</param> | ||
1334 | /// <param name="px">X coordinate for patches 0..12</param> | ||
1335 | /// <param name="py">Y coordinate for patches 0..15</param> | ||
1336 | // private void SendLayerPacket(float[] map, int y, int x) | ||
1337 | // { | ||
1338 | // int[] patches = new int[4]; | ||
1339 | // patches[0] = x + 0 + y * 16; | ||
1340 | // patches[1] = x + 1 + y * 16; | ||
1341 | // patches[2] = x + 2 + y * 16; | ||
1342 | // patches[3] = x + 3 + y * 16; | ||
1343 | |||
1344 | // Packet layerpack = LLClientView.TerrainManager.CreateLandPacket(map, patches); | ||
1345 | // OutPacket(layerpack, ThrottleOutPacketType.Land); | ||
1346 | // } | ||
1347 | |||
1348 | // Legacy form of invocation that passes around a bare data array. | 1260 | // Legacy form of invocation that passes around a bare data array. |
1349 | // Just ignore what was passed and use the real terrain info that is part of the scene. | 1261 | // Just ignore what was passed and use the real terrain info that is part of the scene. |
1350 | // As a HORRIBLE kludge in an attempt to not change the definition of IClientAPI, | 1262 | // As a HORRIBLE kludge in an attempt to not change the definition of IClientAPI, |
@@ -1393,29 +1305,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1393 | } | 1305 | } |
1394 | 1306 | ||
1395 | /// <summary> | 1307 | /// <summary> |
1396 | ======= | ||
1397 | SendLayerData(xPatches, yPatches, m_scene.Heightmap.GetTerrainData()); | ||
1398 | } | ||
1399 | } | ||
1400 | 1308 | ||
1401 | private void DebugSendingPatches(string pWho, int[] pX, int[] pY) | ||
1402 | { | ||
1403 | if (m_log.IsDebugEnabled) | ||
1404 | { | ||
1405 | int numPatches = pX.Length; | ||
1406 | string Xs = ""; | ||
1407 | string Ys = ""; | ||
1408 | for (int pp = 0; pp < numPatches; pp++) | ||
1409 | { | ||
1410 | Xs += String.Format("{0}", (int)pX[pp]) + ","; | ||
1411 | Ys += String.Format("{0}", (int)pY[pp]) + ","; | ||
1412 | } | ||
1413 | m_log.DebugFormat("{0} {1}: numPatches={2}, X={3}, Y={4}", LogHeader, pWho, numPatches, Xs, Ys); | ||
1414 | } | ||
1415 | } | ||
1416 | |||
1417 | /// <summary> | ||
1418 | >>>>>>> avn/ubitvar | ||
1419 | /// Sends a terrain packet for the point specified. | 1309 | /// Sends a terrain packet for the point specified. |
1420 | /// This is a legacy call that has refarbed the terrain into a flat map of floats. | 1310 | /// This is a legacy call that has refarbed the terrain into a flat map of floats. |
1421 | /// We just use the terrain from the region we know about. | 1311 | /// We just use the terrain from the region we know about. |
@@ -1467,40 +1357,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1467 | } | 1357 | } |
1468 | } | 1358 | } |
1469 | 1359 | ||
1470 | <<<<<<< HEAD | ||
1471 | // When a user edits the terrain, so much data is sent, the data queues up fast and presents a | ||
1472 | // sub optimal editing experience. To alleviate this issue, when the user edits the terrain, we | ||
1473 | // start skipping the queues until they're done editing the terrain. We also make them | ||
1474 | // unreliable because it's extremely likely that multiple packets will be sent for a terrain patch | ||
1475 | // area invalidating previous packets for that area. | ||
1476 | |||
1477 | // It's possible for an editing user to flood themselves with edited packets but the majority | ||
1478 | // of use cases are such that only a tiny percentage of users will be editing the terrain. | ||
1479 | // Other, non-editing users will see the edits much slower. | ||
1480 | |||
1481 | // One last note on this topic, by the time users are going to be editing the terrain, it's | ||
1482 | // extremely likely that the sim will have rezzed already and therefore this is not likely going | ||
1483 | // to cause any additional issues with lost packets, objects or terrain patches. | ||
1484 | |||
1485 | // m_justEditedTerrain is volatile, so test once and duplicate two affected statements so we | ||
1486 | // only have one cache miss. | ||
1487 | private void SendTheLayerPacket(LayerDataPacket layerpack) | 1360 | private void SendTheLayerPacket(LayerDataPacket layerpack) |
1488 | { | 1361 | { |
1489 | if (m_justEditedTerrain) | ||
1490 | { | ||
1491 | layerpack.Header.Reliable = false; | ||
1492 | OutPacket(layerpack, ThrottleOutPacketType.Unknown ); | ||
1493 | } | ||
1494 | else | ||
1495 | { | ||
1496 | layerpack.Header.Reliable = true; | ||
1497 | OutPacket(layerpack, ThrottleOutPacketType.Land); | ||
1498 | } | ||
1499 | ======= | ||
1500 | private void SendTheLayerPacket(LayerDataPacket layerpack) | ||
1501 | { | ||
1502 | OutPacket(layerpack, ThrottleOutPacketType.Land); | 1362 | OutPacket(layerpack, ThrottleOutPacketType.Land); |
1503 | >>>>>>> avn/ubitvar | ||
1504 | } | 1363 | } |
1505 | 1364 | ||
1506 | /// <summary> | 1365 | /// <summary> |
@@ -2490,15 +2349,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2490 | { | 2349 | { |
2491 | if (agentid == AgentId) | 2350 | if (agentid == AgentId) |
2492 | { | 2351 | { |
2493 | <<<<<<< HEAD | ||
2494 | ActiveGroupId = activegroupid; | 2352 | ActiveGroupId = activegroupid; |
2495 | ActiveGroupName = groupname; | 2353 | ActiveGroupName = groupname; |
2496 | ActiveGroupPowers = grouppowers; | 2354 | ActiveGroupPowers = grouppowers; |
2497 | ======= | ||
2498 | m_activeGroupID = activegroupid; | ||
2499 | m_activeGroupName = groupname; | ||
2500 | m_activeGroupPowers = grouppowers; | ||
2501 | >>>>>>> avn/ubitvar | ||
2502 | } | 2355 | } |
2503 | 2356 | ||
2504 | AgentDataUpdatePacket sendAgentDataUpdate = (AgentDataUpdatePacket)PacketPool.Instance.GetPacket(PacketType.AgentDataUpdate); | 2357 | AgentDataUpdatePacket sendAgentDataUpdate = (AgentDataUpdatePacket)PacketPool.Instance.GetPacket(PacketType.AgentDataUpdate); |
@@ -3888,15 +3741,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3888 | avp.Sender.IsTrial = false; | 3741 | avp.Sender.IsTrial = false; |
3889 | avp.Sender.ID = agentID; | 3742 | avp.Sender.ID = agentID; |
3890 | avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0]; | 3743 | avp.AppearanceData = new AvatarAppearancePacket.AppearanceDataBlock[0]; |
3891 | <<<<<<< HEAD | ||
3892 | avp.AppearanceHover = new AvatarAppearancePacket.AppearanceHoverBlock[0]; | 3744 | avp.AppearanceHover = new AvatarAppearancePacket.AppearanceHoverBlock[0]; |
3893 | ======= | ||
3894 | 3745 | ||
3895 | // this need be use in future | 3746 | // this need be use in future ? |
3896 | // avp.AppearanceData[0].AppearanceVersion = 0; | 3747 | // avp.AppearanceData[0].AppearanceVersion = 0; |
3897 | // avp.AppearanceData[0].CofVersion = 0; | 3748 | // avp.AppearanceData[0].CofVersion = 0; |
3898 | 3749 | ||
3899 | >>>>>>> avn/ubitvar | ||
3900 | //m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString()); | 3750 | //m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString()); |
3901 | OutPacket(avp, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority); | 3751 | OutPacket(avp, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority); |
3902 | } | 3752 | } |
@@ -4014,22 +3864,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4014 | /// </summary> | 3864 | /// </summary> |
4015 | public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) | 3865 | public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) |
4016 | { | 3866 | { |
4017 | <<<<<<< HEAD | ||
4018 | if (entity.UUID == m_agentId && !updateFlags.HasFlag(PrimUpdateFlags.FullUpdate)) | 3867 | if (entity.UUID == m_agentId && !updateFlags.HasFlag(PrimUpdateFlags.FullUpdate)) |
4019 | { | 3868 | { |
4020 | ImprovedTerseObjectUpdatePacket packet | 3869 | ImprovedTerseObjectUpdatePacket packet |
4021 | = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate); | 3870 | = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(PacketType.ImprovedTerseObjectUpdate); |
4022 | ======= | ||
4023 | if (entity is SceneObjectPart) | ||
4024 | { | ||
4025 | SceneObjectPart e = (SceneObjectPart)entity; | ||
4026 | SceneObjectGroup g = e.ParentGroup; | ||
4027 | if (g.HasPrivateAttachmentPoint && g.OwnerID != AgentId) | ||
4028 | return; // Don't send updates for other people's HUDs | ||
4029 | } | ||
4030 | |||
4031 | uint priority = m_prioritizer.GetUpdatePriority(this, entity); | ||
4032 | >>>>>>> avn/ubitvar | ||
4033 | 3871 | ||
4034 | packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; | 3872 | packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle; |
4035 | packet.RegionData.TimeDilation = Utils.FloatToUInt16(1, 0.0f, 1.0f); | 3873 | packet.RegionData.TimeDilation = Utils.FloatToUInt16(1, 0.0f, 1.0f); |
@@ -4037,6 +3875,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4037 | packet.ObjectData[0] = CreateImprovedTerseBlock(entity, false); | 3875 | packet.ObjectData[0] = CreateImprovedTerseBlock(entity, false); |
4038 | OutPacket(packet, ThrottleOutPacketType.Unknown, true); | 3876 | OutPacket(packet, ThrottleOutPacketType.Unknown, true); |
4039 | } | 3877 | } |
3878 | |||
3879 | else if (entity is SceneObjectPart) | ||
3880 | { | ||
3881 | SceneObjectPart e = (SceneObjectPart)entity; | ||
3882 | SceneObjectGroup g = e.ParentGroup; | ||
3883 | if (g.HasPrivateAttachmentPoint && g.OwnerID != AgentId) | ||
3884 | return; // Don't send updates for other people's HUDs | ||
3885 | } | ||
3886 | |||
4040 | else | 3887 | else |
4041 | { | 3888 | { |
4042 | //double priority = m_prioritizer.GetUpdatePriority(this, entity); | 3889 | //double priority = m_prioritizer.GetUpdatePriority(this, entity); |
@@ -4385,15 +4232,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4385 | 4232 | ||
4386 | OutPacket(packet, ThrottleOutPacketType.Task, true); | 4233 | OutPacket(packet, ThrottleOutPacketType.Task, true); |
4387 | } | 4234 | } |
4388 | <<<<<<< HEAD | ||
4389 | 4235 | ||
4390 | // m_log.DebugFormat( | 4236 | // m_log.DebugFormat( |
4391 | // "[LLCLIENTVIEW]: Sent {0} updates in ProcessEntityUpdates() for {1} {2} in {3}", | 4237 | // "[LLCLIENTVIEW]: Sent {0} updates in ProcessEntityUpdates() for {1} {2} in {3}", |
4392 | // updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name); | 4238 | // updatesThisCall, Name, SceneAgent.IsChildAgent ? "child" : "root", Scene.Name); |
4393 | // | 4239 | // |
4394 | #endregion Packet Sending | ||
4395 | ======= | ||
4396 | >>>>>>> avn/ubitvar | ||
4397 | } | 4240 | } |
4398 | 4241 | ||
4399 | public void ReprioritizeUpdates() | 4242 | public void ReprioritizeUpdates() |
@@ -5360,11 +5203,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5360 | { | 5203 | { |
5361 | ScenePresence presence = (ScenePresence)entity; | 5204 | ScenePresence presence = (ScenePresence)entity; |
5362 | 5205 | ||
5363 | <<<<<<< HEAD | ||
5364 | // m_log.DebugFormat( | ||
5365 | // "[LLCLIENTVIEW]: Sending terse update to {0} with pos {1}, vel {2} in {3}", | ||
5366 | // Name, presence.OffsetPosition, presence.Velocity, m_scene.Name); | ||
5367 | ======= | ||
5368 | position = presence.OffsetPosition; | 5206 | position = presence.OffsetPosition; |
5369 | rotation = presence.Rotation; | 5207 | rotation = presence.Rotation; |
5370 | angularVelocity = presence.AngularVelocity; | 5208 | angularVelocity = presence.AngularVelocity; |
@@ -5373,7 +5211,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5373 | attachPoint = 0; | 5211 | attachPoint = 0; |
5374 | // m_log.DebugFormat( | 5212 | // m_log.DebugFormat( |
5375 | // "[LLCLIENTVIEW]: Sending terse update to {0} with position {1} in {2}", Name, presence.OffsetPosition, m_scene.Name); | 5213 | // "[LLCLIENTVIEW]: Sending terse update to {0} with position {1} in {2}", Name, presence.OffsetPosition, m_scene.Name); |
5376 | >>>>>>> avn/ubitvar | ||
5377 | 5214 | ||
5378 | // attachPoint = presence.State; // Core: commented | 5215 | // attachPoint = presence.State; // Core: commented |
5379 | collisionPlane = presence.CollisionPlane; | 5216 | collisionPlane = presence.CollisionPlane; |
@@ -5495,24 +5332,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5495 | // "[LLCLIENTVIEW]: Sending full update to {0} with pos {1}, vel {2} in {3}", Name, data.OffsetPosition, data.Velocity, m_scene.Name); | 5332 | // "[LLCLIENTVIEW]: Sending full update to {0} with pos {1}, vel {2} in {3}", Name, data.OffsetPosition, data.Velocity, m_scene.Name); |
5496 | 5333 | ||
5497 | byte[] objectData = new byte[76]; | 5334 | byte[] objectData = new byte[76]; |
5498 | <<<<<<< HEAD | ||
5499 | |||
5500 | data.CollisionPlane.ToBytes(objectData, 0); | ||
5501 | data.OffsetPosition.ToBytes(objectData, 16); | ||
5502 | data.Velocity.ToBytes(objectData, 28); | ||
5503 | // data.Acceleration.ToBytes(objectData, 40); | ||
5504 | |||
5505 | // Whilst not in mouselook, an avatar will transmit only the Z rotation as this is the only axis | ||
5506 | // it rotates around. | ||
5507 | // In mouselook, X and Y co-ordinate will also be sent but when used in Rotation, these cause unwanted | ||
5508 | // excessive up and down movements of the camera when looking up and down. | ||
5509 | // See http://opensimulator.org/mantis/view.php?id=3274 | ||
5510 | // This does not affect head movement, since this is controlled entirely by camera movement rather than | ||
5511 | // body rotation. We still need to transmit X and Y for sitting avatars but mouselook does not change | ||
5512 | // the rotation in this case. | ||
5513 | Quaternion rot = data.Rotation; | ||
5514 | ======= | ||
5515 | >>>>>>> avn/ubitvar | ||
5516 | 5335 | ||
5517 | Vector3 velocity = new Vector3(0, 0, 0); | 5336 | Vector3 velocity = new Vector3(0, 0, 0); |
5518 | Vector3 acceleration = new Vector3(0, 0, 0); | 5337 | Vector3 acceleration = new Vector3(0, 0, 0); |
@@ -5596,11 +5415,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5596 | //update.JointType = 0; | 5415 | //update.JointType = 0; |
5597 | update.Material = data.Material; | 5416 | update.Material = data.Material; |
5598 | update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim | 5417 | update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim |
5599 | <<<<<<< HEAD | ||
5600 | |||
5601 | ======= | ||
5602 | /* | 5418 | /* |
5603 | >>>>>>> avn/ubitvar | ||
5604 | if (data.ParentGroup.IsAttachment) | 5419 | if (data.ParentGroup.IsAttachment) |
5605 | { | 5420 | { |
5606 | update.NameValue | 5421 | update.NameValue |
@@ -5625,7 +5440,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5625 | // case for attachments may contain conflicting values that can end up crashing the viewer. | 5440 | // case for attachments may contain conflicting values that can end up crashing the viewer. |
5626 | update.State = data.ParentGroup.RootPart.Shape.State; | 5441 | update.State = data.ParentGroup.RootPart.Shape.State; |
5627 | } | 5442 | } |
5628 | */ | 5443 | */ |
5629 | 5444 | ||
5630 | if (data.ParentGroup.IsAttachment) | 5445 | if (data.ParentGroup.IsAttachment) |
5631 | { | 5446 | { |
@@ -9365,11 +9180,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
9365 | if ((locX >= m_scene.RegionInfo.WorldLocX) | 9180 | if ((locX >= m_scene.RegionInfo.WorldLocX) |
9366 | && (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX)) | 9181 | && (locX < (m_scene.RegionInfo.WorldLocX + m_scene.RegionInfo.RegionSizeX)) |
9367 | && (locY >= m_scene.RegionInfo.WorldLocY) | 9182 | && (locY >= m_scene.RegionInfo.WorldLocY) |
9368 | <<<<<<< HEAD | ||
9369 | && (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY)) ) | ||
9370 | ======= | ||
9371 | && (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY))) | 9183 | && (locY < (m_scene.RegionInfo.WorldLocY + m_scene.RegionInfo.RegionSizeY))) |
9372 | >>>>>>> avn/ubitvar | ||
9373 | { | 9184 | { |
9374 | tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle; | 9185 | tpLocReq.Info.RegionHandle = m_scene.RegionInfo.RegionHandle; |
9375 | tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX; | 9186 | tpLocReq.Info.Position.X += locX - m_scene.RegionInfo.WorldLocX; |
@@ -12285,7 +12096,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12285 | /// <param name="packet"></param> | 12096 | /// <param name="packet"></param> |
12286 | /// <returns></returns> | 12097 | /// <returns></returns> |
12287 | // TODO: Convert old handler to use new method | 12098 | // TODO: Convert old handler to use new method |
12288 | /*protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) | 12099 | /* |
12100 | protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) | ||
12289 | { | 12101 | { |
12290 | AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; | 12102 | AgentCachedTexturePacket cachedtex = (AgentCachedTexturePacket)packet; |
12291 | AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); | 12103 | AgentCachedTextureResponsePacket cachedresp = (AgentCachedTextureResponsePacket)PacketPool.Instance.GetPacket(PacketType.AgentCachedTextureResponse); |
@@ -12340,27 +12152,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12340 | } | 12152 | } |
12341 | } | 12153 | } |
12342 | 12154 | ||
12343 | <<<<<<< HEAD | ||
12344 | if (cacheItems != null) | ||
12345 | { | ||
12346 | // We need to make sure the asset stored in the bake is available on this server also by its assetid before we map it to a Cacheid. | ||
12347 | // Copy the baked textures to the sim's assets cache (local only). | ||
12348 | foreach (WearableCacheItem item in cacheItems) | ||
12349 | { | ||
12350 | if (cache.GetCached(item.TextureID.ToString()) == null) | ||
12351 | { | ||
12352 | item.TextureAsset.Temporary = true; | ||
12353 | item.TextureAsset.Local = true; | ||
12354 | cache.Store(item.TextureAsset); | ||
12355 | } | ||
12356 | } | ||
12357 | |||
12358 | // Return the cached textures | ||
12359 | for (int i = 0; i < maxWearablesLoop; i++) | ||
12360 | { | ||
12361 | WearableCacheItem item = | ||
12362 | WearableCacheItem.SearchTextureIndex(cachedtex.WearableData[i].TextureIndex, cacheItems); | ||
12363 | ======= | ||
12364 | CachedTextureRequest handlerCachedTextureRequest = OnCachedTextureRequest; | 12155 | CachedTextureRequest handlerCachedTextureRequest = OnCachedTextureRequest; |
12365 | if (handlerCachedTextureRequest != null) | 12156 | if (handlerCachedTextureRequest != null) |
12366 | { | 12157 | { |
@@ -12368,7 +12159,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12368 | } | 12159 | } |
12369 | 12160 | ||
12370 | return true; | 12161 | return true; |
12371 | }*/ | 12162 | } |
12163 | */ | ||
12372 | 12164 | ||
12373 | protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) | 12165 | protected bool HandleAgentTextureCached(IClientAPI simclient, Packet packet) |
12374 | { | 12166 | { |
@@ -12408,21 +12200,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12408 | for (int i = 0; i < maxWearablesLoop; i++) | 12200 | for (int i = 0; i < maxWearablesLoop; i++) |
12409 | { | 12201 | { |
12410 | int idx = cachedtex.WearableData[i].TextureIndex; | 12202 | int idx = cachedtex.WearableData[i].TextureIndex; |
12411 | >>>>>>> avn/ubitvar | ||
12412 | |||
12413 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | 12203 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); |
12414 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | 12204 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; |
12415 | cachedresp.WearableData[i].HostName = new byte[0]; | 12205 | cachedresp.WearableData[i].HostName = new byte[0]; |
12416 | <<<<<<< HEAD | ||
12417 | if (item != null && cachedtex.WearableData[i].ID == item.CacheId) | ||
12418 | { | ||
12419 | cachedresp.WearableData[i].TextureID = item.TextureID; | ||
12420 | ======= | ||
12421 | if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId) | 12206 | if (cachedtex.WearableData[i].ID == cacheItems[idx].CacheId) |
12422 | { | 12207 | { |
12423 | cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID; | 12208 | cachedresp.WearableData[i].TextureID = cacheItems[idx].TextureID; |
12424 | cacheHits++; | 12209 | cacheHits++; |
12425 | >>>>>>> avn/ubitvar | ||
12426 | } | 12210 | } |
12427 | else | 12211 | else |
12428 | { | 12212 | { |
@@ -12432,29 +12216,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
12432 | } | 12216 | } |
12433 | else | 12217 | else |
12434 | { | 12218 | { |
12435 | <<<<<<< HEAD | ||
12436 | // Cached textures not available | ||
12437 | ======= | ||
12438 | >>>>>>> avn/ubitvar | ||
12439 | for (int i = 0; i < maxWearablesLoop; i++) | 12219 | for (int i = 0; i < maxWearablesLoop; i++) |
12440 | { | 12220 | { |
12441 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); | 12221 | cachedresp.WearableData[i] = new AgentCachedTextureResponsePacket.WearableDataBlock(); |
12442 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; | 12222 | cachedresp.WearableData[i].TextureIndex = cachedtex.WearableData[i].TextureIndex; |
12443 | cachedresp.WearableData[i].TextureID = UUID.Zero; | 12223 | cachedresp.WearableData[i].TextureID = UUID.Zero; |
12444 | <<<<<<< HEAD | ||
12445 | cachedresp.WearableData[i].HostName = new byte[0]; | ||
12446 | } | ||
12447 | } | ||
12448 | |||
12449 | ======= | ||
12450 | //UUID.Parse("8334fb6e-c2f5-46ee-807d-a435f61a8d46"); | ||
12451 | cachedresp.WearableData[i].HostName = new byte[0]; | 12224 | cachedresp.WearableData[i].HostName = new byte[0]; |
12452 | } | 12225 | } |
12453 | } | 12226 | } |
12454 | 12227 | ||
12455 | m_log.DebugFormat("texture cached: hits {0}", cacheHits); | 12228 | m_log.DebugFormat("texture cached: hits {0}", cacheHits); |
12456 | 12229 | ||
12457 | >>>>>>> avn/ubitvar | ||
12458 | cachedresp.Header.Zerocoded = true; | 12230 | cachedresp.Header.Zerocoded = true; |
12459 | OutPacket(cachedresp, ThrottleOutPacketType.Task); | 12231 | OutPacket(cachedresp, ThrottleOutPacketType.Task); |
12460 | 12232 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs index 9293882..86a7188 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPClient.cs | |||
@@ -96,9 +96,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
96 | set | 96 | set |
97 | { | 97 | { |
98 | m_throttleDebugLevel = value; | 98 | m_throttleDebugLevel = value; |
99 | /* | ||
99 | m_throttleClient.DebugLevel = m_throttleDebugLevel; | 100 | m_throttleClient.DebugLevel = m_throttleDebugLevel; |
100 | foreach (TokenBucket tb in m_throttleCategories) | 101 | foreach (TokenBucket tb in m_throttleCategories) |
101 | tb.DebugLevel = m_throttleDebugLevel; | 102 | tb.DebugLevel = m_throttleDebugLevel; |
103 | */ | ||
102 | } | 104 | } |
103 | } | 105 | } |
104 | private int m_throttleDebugLevel; | 106 | private int m_throttleDebugLevel; |
@@ -250,22 +252,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
250 | if (maxRTO != 0) | 252 | if (maxRTO != 0) |
251 | m_maxRTO = maxRTO; | 253 | m_maxRTO = maxRTO; |
252 | 254 | ||
253 | <<<<<<< HEAD | ||
254 | ProcessUnackedSends = true; | ||
255 | |||
256 | // Create a token bucket throttle for this client that has the scene token bucket as a parent | ||
257 | m_throttleClient | ||
258 | = new AdaptiveTokenBucket( | ||
259 | string.Format("adaptive throttle for {0} in {1}", AgentID, server.Scene.Name), | ||
260 | parentThrottle, 0, rates.Total, rates.MinimumAdaptiveThrottleRate, rates.AdaptiveThrottlesEnabled); | ||
261 | |||
262 | ======= | ||
263 | m_burstTime = rates.BrustTime; | 255 | m_burstTime = rates.BrustTime; |
264 | float m_burst = rates.ClientMaxRate * m_burstTime; | 256 | float m_burst = rates.ClientMaxRate * m_burstTime; |
265 | 257 | ||
266 | // Create a token bucket throttle for this client that has the scene token bucket as a parent | 258 | // Create a token bucket throttle for this client that has the scene token bucket as a parent |
267 | m_throttleClient = new AdaptiveTokenBucket(parentThrottle, rates.ClientMaxRate, m_burst, rates.AdaptiveThrottlesEnabled); | 259 | m_throttleClient = new AdaptiveTokenBucket(parentThrottle, rates.ClientMaxRate, m_burst, rates.AdaptiveThrottlesEnabled); |
268 | >>>>>>> avn/ubitvar | 260 | |
269 | // Create an array of token buckets for this clients different throttle categories | 261 | // Create an array of token buckets for this clients different throttle categories |
270 | m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT]; | 262 | m_throttleCategories = new TokenBucket[THROTTLE_CATEGORY_COUNT]; |
271 | 263 | ||
@@ -278,19 +270,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
278 | ThrottleOutPacketType type = (ThrottleOutPacketType)i; | 270 | ThrottleOutPacketType type = (ThrottleOutPacketType)i; |
279 | 271 | ||
280 | // Initialize the packet outboxes, where packets sit while they are waiting for tokens | 272 | // Initialize the packet outboxes, where packets sit while they are waiting for tokens |
281 | <<<<<<< HEAD | ||
282 | m_packetOutboxes[i] = new OpenSim.Framework.LocklessQueue<OutgoingPacket>(); | ||
283 | |||
284 | // Initialize the token buckets that control the throttling for each category | ||
285 | m_throttleCategories[i] | ||
286 | = new TokenBucket( | ||
287 | string.Format("{0} throttle for {1} in {2}", type, AgentID, server.Scene.Name), | ||
288 | m_throttleClient, rates.GetRate(type), 0); | ||
289 | ======= | ||
290 | m_packetOutboxes[i] = new DoubleLocklessQueue<OutgoingPacket>(); | 273 | m_packetOutboxes[i] = new DoubleLocklessQueue<OutgoingPacket>(); |
291 | // Initialize the token buckets that control the throttling for each category | 274 | // Initialize the token buckets that control the throttling for each category |
292 | m_throttleCategories[i] = new TokenBucket(m_throttleClient, rates.GetRate(type), m_burst); | 275 | m_throttleCategories[i] = new TokenBucket(m_throttleClient, rates.GetRate(type), m_burst); |
293 | >>>>>>> avn/ubitvar | ||
294 | } | 276 | } |
295 | 277 | ||
296 | // Default the retransmission timeout to one second | 278 | // Default the retransmission timeout to one second |
@@ -337,12 +319,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
337 | m_info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate; | 319 | m_info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate; |
338 | m_info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate; | 320 | m_info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate; |
339 | m_info.totalThrottle = (int)m_throttleClient.DripRate; | 321 | m_info.totalThrottle = (int)m_throttleClient.DripRate; |
340 | <<<<<<< HEAD | ||
341 | m_info.targetThrottle = (int)m_throttleClient.TargetDripRate; | ||
342 | m_info.maxThrottle = (int)m_throttleClient.MaxDripRate; | ||
343 | ======= | ||
344 | >>>>>>> avn/ubitvar | ||
345 | |||
346 | return m_info; | 322 | return m_info; |
347 | } | 323 | } |
348 | 324 | ||
@@ -460,13 +436,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
460 | int texture = (int)(BitConverter.ToSingle(adjData, pos) * scale); pos += 4; | 436 | int texture = (int)(BitConverter.ToSingle(adjData, pos) * scale); pos += 4; |
461 | int asset = (int)(BitConverter.ToSingle(adjData, pos) * scale); | 437 | int asset = (int)(BitConverter.ToSingle(adjData, pos) * scale); |
462 | 438 | ||
463 | if (ThrottleDebugLevel > 0) | 439 | |
464 | { | ||
465 | long total = resend + land + wind + cloud + task + texture + asset; | ||
466 | m_log.DebugFormat( | ||
467 | "[LLUDPCLIENT]: {0} is setting throttles in {1} to Resend={2}, Land={3}, Wind={4}, Cloud={5}, Task={6}, Texture={7}, Asset={8}, TOTAL = {9}", | ||
468 | AgentID, m_udpServer.Scene.Name, resend, land, wind, cloud, task, texture, asset, total); | ||
469 | } | ||
470 | 440 | ||
471 | // Make sure none of the throttles are set below our packet MTU, | 441 | // Make sure none of the throttles are set below our packet MTU, |
472 | // otherwise a throttle could become permanently clogged | 442 | // otherwise a throttle could become permanently clogged |
@@ -486,32 +456,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
486 | // the task queue (e.g. object updates) | 456 | // the task queue (e.g. object updates) |
487 | task = task + (int)(m_cannibalrate * texture); | 457 | task = task + (int)(m_cannibalrate * texture); |
488 | texture = (int)((1 - m_cannibalrate) * texture); | 458 | texture = (int)((1 - m_cannibalrate) * texture); |
489 | <<<<<<< HEAD | ||
490 | |||
491 | //int total = resend + land + wind + cloud + task + texture + asset; | ||
492 | |||
493 | if (ThrottleDebugLevel > 0) | ||
494 | { | ||
495 | long total = resend + land + wind + cloud + task + texture + asset; | ||
496 | m_log.DebugFormat( | ||
497 | "[LLUDPCLIENT]: {0} is setting throttles in {1} to Resend={2}, Land={3}, Wind={4}, Cloud={5}, Task={6}, Texture={7}, Asset={8}, TOTAL = {9}", | ||
498 | AgentID, m_udpServer.Scene.Name, resend, land, wind, cloud, task, texture, asset, total); | ||
499 | } | ||
500 | ======= | ||
501 | 459 | ||
502 | int total = resend + land + wind + cloud + task + texture + asset; | 460 | int total = resend + land + wind + cloud + task + texture + asset; |
503 | 461 | ||
504 | float m_burst = total * m_burstTime; | 462 | float m_burst = total * m_burstTime; |
505 | 463 | ||
506 | //m_log.DebugFormat("[LLUDPCLIENT]: {0} is setting throttles. Resend={1}, Land={2}, Wind={3}, Cloud={4}, Task={5}, Texture={6}, Asset={7}, Total={8}", | 464 | if (ThrottleDebugLevel > 0) |
507 | // AgentID, resend, land, wind, cloud, task, texture, asset, total); | ||
508 | >>>>>>> avn/ubitvar | ||
509 | |||
510 | // Update the token buckets with new throttle values | ||
511 | if (m_throttleClient.AdaptiveEnabled) | ||
512 | { | 465 | { |
513 | long total = resend + land + wind + cloud + task + texture + asset; | 466 | m_log.DebugFormat( |
514 | m_throttleClient.TargetDripRate = total; | 467 | "[LLUDPCLIENT]: {0} is setting throttles in {1} to Resend={2}, Land={3}, Wind={4}, Cloud={5}, Task={6}, Texture={7}, Asset={8}, TOTAL = {9}", |
468 | AgentID, m_udpServer.Scene.Name, resend, land, wind, cloud, task, texture, asset, total); | ||
515 | } | 469 | } |
516 | 470 | ||
517 | TokenBucket bucket; | 471 | TokenBucket bucket; |
@@ -887,20 +841,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
887 | /// signature</param> | 841 | /// signature</param> |
888 | public void FireQueueEmpty(object o) | 842 | public void FireQueueEmpty(object o) |
889 | { | 843 | { |
890 | <<<<<<< HEAD | ||
891 | // m_log.DebugFormat("[LLUDPCLIENT]: FireQueueEmpty for {0} in {1}", AgentID, m_udpServer.Scene.Name); | ||
892 | |||
893 | // int start = Environment.TickCount & Int32.MaxValue; | ||
894 | // const int MIN_CALLBACK_MS = 30; | ||
895 | |||
896 | // if (m_udpServer.IsRunningOutbound) | ||
897 | // { | ||
898 | ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o; | ||
899 | QueueEmpty callback = OnQueueEmpty; | ||
900 | ======= | ||
901 | ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o; | 844 | ThrottleOutPacketTypeFlags categories = (ThrottleOutPacketTypeFlags)o; |
902 | QueueEmpty callback = OnQueueEmpty; | 845 | QueueEmpty callback = OnQueueEmpty; |
903 | >>>>>>> avn/ubitvar | ||
904 | 846 | ||
905 | if (callback != null) | 847 | if (callback != null) |
906 | { | 848 | { |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 41e19fd..cb05e8f 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -473,17 +473,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
473 | } | 473 | } |
474 | #endregion BinaryStats | 474 | #endregion BinaryStats |
475 | 475 | ||
476 | <<<<<<< HEAD | 476 | Throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps * 10e-3f); |
477 | // FIXME: Can't add info here because don't know scene yet. | ||
478 | // m_throttle | ||
479 | // = new TokenBucket( | ||
480 | // string.Format("server throttle bucket for {0}", Scene.Name), null, sceneThrottleBps); | ||
481 | |||
482 | Throttle = new TokenBucket("server throttle bucket", null, 0, sceneThrottleBps); | ||
483 | |||
484 | ======= | ||
485 | m_throttle = new TokenBucket(null, sceneThrottleBps, sceneThrottleBps * 10e-3f); | ||
486 | >>>>>>> avn/ubitvar | ||
487 | ThrottleRates = new ThrottleRates(configSource); | 477 | ThrottleRates = new ThrottleRates(configSource); |
488 | 478 | ||
489 | Random rnd = new Random(Util.EnvironmentTickCount()); | 479 | Random rnd = new Random(Util.EnvironmentTickCount()); |
@@ -784,151 +774,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
784 | if (UsePools) | 774 | if (UsePools) |
785 | EnablePoolStats(); | 775 | EnablePoolStats(); |
786 | 776 | ||
787 | <<<<<<< HEAD | 777 | |
788 | LLUDPServerCommands commands = new LLUDPServerCommands(MainConsole.Instance, this); | 778 | LLUDPServerCommands commands = new LLUDPServerCommands(MainConsole.Instance, this); |
789 | commands.Register(); | 779 | commands.Register(); |
790 | ======= | ||
791 | MainConsole.Instance.Commands.AddCommand( | ||
792 | "Debug", false, "debug lludp packet", | ||
793 | "debug lludp packet [--default] <level> [<avatar-first-name> <avatar-last-name>]", | ||
794 | "Turn on packet debugging", | ||
795 | "If level > 255 then all incoming and outgoing packets are logged.\n" | ||
796 | + "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n" | ||
797 | + "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n" | ||
798 | + "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n" | ||
799 | + "If level <= 50 then outgoing ImprovedTerseObjectUpdate packets are not logged.\n" | ||
800 | + "If level <= 0 then no packets are logged.\n" | ||
801 | + "If --default is specified then the level becomes the default logging level for all subsequent agents.\n" | ||
802 | + "In this case, you cannot also specify an avatar name.\n" | ||
803 | + "If an avatar name is given then only packets from that avatar are logged.", | ||
804 | HandlePacketCommand); | ||
805 | |||
806 | MainConsole.Instance.Commands.AddCommand( | ||
807 | "Debug", | ||
808 | false, | ||
809 | "debug lludp start", | ||
810 | "debug lludp start <in|out|all>", | ||
811 | "Control LLUDP packet processing.", | ||
812 | "No effect if packet processing has already started.\n" | ||
813 | + "in - start inbound processing.\n" | ||
814 | + "out - start outbound processing.\n" | ||
815 | + "all - start in and outbound processing.\n", | ||
816 | HandleStartCommand); | ||
817 | |||
818 | MainConsole.Instance.Commands.AddCommand( | ||
819 | "Debug", | ||
820 | false, | ||
821 | "debug lludp stop", | ||
822 | "debug lludp stop <in|out|all>", | ||
823 | "Stop LLUDP packet processing.", | ||
824 | "No effect if packet processing has already stopped.\n" | ||
825 | + "in - stop inbound processing.\n" | ||
826 | + "out - stop outbound processing.\n" | ||
827 | + "all - stop in and outbound processing.\n", | ||
828 | HandleStopCommand); | ||
829 | |||
830 | MainConsole.Instance.Commands.AddCommand( | ||
831 | "Debug", | ||
832 | false, | ||
833 | "debug lludp pool", | ||
834 | "debug lludp pool <on|off>", | ||
835 | "Turn object pooling within the lludp component on or off.", | ||
836 | HandlePoolCommand); | ||
837 | |||
838 | MainConsole.Instance.Commands.AddCommand( | ||
839 | "Debug", | ||
840 | false, | ||
841 | "debug lludp status", | ||
842 | "debug lludp status", | ||
843 | "Return status of LLUDP packet processing.", | ||
844 | HandleStatusCommand); | ||
845 | /* disabled | ||
846 | MainConsole.Instance.Commands.AddCommand( | ||
847 | "Debug", | ||
848 | false, | ||
849 | "debug lludp toggle agentupdate", | ||
850 | "debug lludp toggle agentupdate", | ||
851 | "Toggle whether agentupdate packets are processed or simply discarded.", | ||
852 | HandleAgentUpdateCommand); | ||
853 | */ | ||
854 | } | ||
855 | |||
856 | private void HandlePacketCommand(string module, string[] args) | ||
857 | { | ||
858 | if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene) | ||
859 | return; | ||
860 | |||
861 | bool setAsDefaultLevel = false; | ||
862 | OptionSet optionSet = new OptionSet().Add("default", o => setAsDefaultLevel = o != null); | ||
863 | List<string> filteredArgs = optionSet.Parse(args); | ||
864 | |||
865 | string name = null; | ||
866 | |||
867 | if (filteredArgs.Count == 6) | ||
868 | { | ||
869 | if (!setAsDefaultLevel) | ||
870 | { | ||
871 | name = string.Format("{0} {1}", filteredArgs[4], filteredArgs[5]); | ||
872 | } | ||
873 | else | ||
874 | { | ||
875 | MainConsole.Instance.OutputFormat("ERROR: Cannot specify a user name when setting default logging level"); | ||
876 | return; | ||
877 | } | ||
878 | } | ||
879 | |||
880 | if (filteredArgs.Count > 3) | ||
881 | { | ||
882 | int newDebug; | ||
883 | if (int.TryParse(filteredArgs[3], out newDebug)) | ||
884 | { | ||
885 | if (setAsDefaultLevel) | ||
886 | { | ||
887 | DefaultClientPacketDebugLevel = newDebug; | ||
888 | MainConsole.Instance.OutputFormat( | ||
889 | "Debug packet debug for new clients set to {0} in {1}", DefaultClientPacketDebugLevel, m_scene.Name); | ||
890 | } | ||
891 | else | ||
892 | { | ||
893 | m_scene.ForEachScenePresence(sp => | ||
894 | { | ||
895 | if (name == null || sp.Name == name) | ||
896 | { | ||
897 | MainConsole.Instance.OutputFormat( | ||
898 | "Packet debug for {0} ({1}) set to {2} in {3}", | ||
899 | sp.Name, sp.IsChildAgent ? "child" : "root", newDebug, m_scene.Name); | ||
900 | |||
901 | sp.ControllingClient.DebugPacketLevel = newDebug; | ||
902 | } | ||
903 | }); | ||
904 | } | ||
905 | } | ||
906 | else | ||
907 | { | ||
908 | MainConsole.Instance.Output("Usage: debug lludp packet [--default] 0..255 [<first-name> <last-name>]"); | ||
909 | } | ||
910 | } | ||
911 | } | ||
912 | 780 | ||
913 | private void HandleStartCommand(string module, string[] args) | ||
914 | { | ||
915 | if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene) | ||
916 | return; | ||
917 | |||
918 | if (args.Length != 4) | ||
919 | { | ||
920 | MainConsole.Instance.Output("Usage: debug lludp start <in|out|all>"); | ||
921 | return; | ||
922 | } | ||
923 | |||
924 | string subCommand = args[3]; | ||
925 | |||
926 | if (subCommand == "in" || subCommand == "all") | ||
927 | StartInbound(); | ||
928 | |||
929 | if (subCommand == "out" || subCommand == "all") | ||
930 | StartOutbound(); | ||
931 | >>>>>>> avn/ubitvar | ||
932 | } | 781 | } |
933 | 782 | ||
934 | public bool HandlesRegion(Location x) | 783 | public bool HandlesRegion(Location x) |
@@ -1126,36 +975,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1126 | // If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will | 975 | // If a Linden Lab 1.23.5 client receives an update packet after a kill packet for an object, it will |
1127 | // continue to display the deleted object until relog. Therefore, we need to always queue a kill object | 976 | // continue to display the deleted object until relog. Therefore, we need to always queue a kill object |
1128 | // packet so that it isn't sent before a queued update packet. | 977 | // packet so that it isn't sent before a queued update packet. |
1129 | <<<<<<< HEAD | ||
1130 | bool forceQueue = (type == PacketType.KillObject); | ||
1131 | 978 | ||
1132 | // if (type == PacketType.ImprovedTerseObjectUpdate) | ||
1133 | // { | ||
1134 | // m_log.DebugFormat("Direct send ITOU to {0} in {1}", udpClient.AgentID, Scene.Name); | ||
1135 | // SendPacketFinal(outgoingPacket); | ||
1136 | // return false; | ||
1137 | // } | ||
1138 | // else | ||
1139 | // { | ||
1140 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, forceQueue)) | ||
1141 | ======= | ||
1142 | bool requestQueue = type == PacketType.KillObject; | 979 | bool requestQueue = type == PacketType.KillObject; |
1143 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority)) | 980 | if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority)) |
1144 | >>>>>>> avn/ubitvar | ||
1145 | { | 981 | { |
1146 | SendPacketFinal(outgoingPacket); | 982 | SendPacketFinal(outgoingPacket); |
1147 | return true; | 983 | return true; |
1148 | } | 984 | } |
1149 | <<<<<<< HEAD | ||
1150 | else | ||
1151 | { | ||
1152 | return false; | ||
1153 | } | ||
1154 | // } | ||
1155 | ======= | ||
1156 | 985 | ||
1157 | return false; | 986 | return false; |
1158 | >>>>>>> avn/ubitvar | ||
1159 | 987 | ||
1160 | #endregion Queue or Send | 988 | #endregion Queue or Send |
1161 | } | 989 | } |
@@ -1462,7 +1290,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1462 | 1290 | ||
1463 | // If there is already a client for this endpoint, don't process UseCircuitCode | 1291 | // If there is already a client for this endpoint, don't process UseCircuitCode |
1464 | IClientAPI client = null; | 1292 | IClientAPI client = null; |
1465 | if (!m_scene.TryGetClient(endPoint, out client) || !(client is LLClientView)) | 1293 | if (!Scene.TryGetClient(endPoint, out client) || !(client is LLClientView)) |
1466 | { | 1294 | { |
1467 | // UseCircuitCode handling | 1295 | // UseCircuitCode handling |
1468 | if (packet.Type == PacketType.UseCircuitCode) | 1296 | if (packet.Type == PacketType.UseCircuitCode) |
@@ -1473,12 +1301,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1473 | if (m_pendingCache.Contains(endPoint)) | 1301 | if (m_pendingCache.Contains(endPoint)) |
1474 | return; | 1302 | return; |
1475 | 1303 | ||
1476 | <<<<<<< HEAD | ||
1477 | Util.FireAndForget(HandleUseCircuitCode, array, "LLUDPServer.HandleUseCircuitCode"); | ||
1478 | ======= | ||
1479 | m_pendingCache.AddOrUpdate(endPoint, new Queue<UDPPacketBuffer>(), 60); | 1304 | m_pendingCache.AddOrUpdate(endPoint, new Queue<UDPPacketBuffer>(), 60); |
1480 | } | 1305 | } |
1481 | >>>>>>> avn/ubitvar | ||
1482 | 1306 | ||
1483 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the | 1307 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the |
1484 | // buffer. | 1308 | // buffer. |
@@ -1507,14 +1331,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1507 | // Send ack straight away to let the viewer know that we got it. | 1331 | // Send ack straight away to let the viewer know that we got it. |
1508 | SendAckImmediate(endPoint, packet.Header.Sequence); | 1332 | SendAckImmediate(endPoint, packet.Header.Sequence); |
1509 | 1333 | ||
1510 | <<<<<<< HEAD | ||
1511 | Util.FireAndForget( | ||
1512 | HandleCompleteMovementIntoRegion, array, "LLUDPServer.HandleCompleteMovementIntoRegion"); | ||
1513 | ======= | ||
1514 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the | 1334 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the |
1515 | // buffer. | 1335 | // buffer. |
1516 | object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet }; | 1336 | object[] array = new object[] { new IPEndPoint(endPoint.Address, endPoint.Port), packet }; |
1517 | >>>>>>> avn/ubitvar | ||
1518 | 1337 | ||
1519 | Util.FireAndForget(HandleCompleteMovementIntoRegion, array); | 1338 | Util.FireAndForget(HandleCompleteMovementIntoRegion, array); |
1520 | 1339 | ||
@@ -1524,12 +1343,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1524 | } | 1343 | } |
1525 | 1344 | ||
1526 | // Determine which agent this packet came from | 1345 | // Determine which agent this packet came from |
1527 | <<<<<<< HEAD | ||
1528 | IClientAPI client; | ||
1529 | if (!Scene.TryGetClient(endPoint, out client) || !(client is LLClientView)) | ||
1530 | ======= | ||
1531 | if (client == null || !(client is LLClientView)) | 1346 | if (client == null || !(client is LLClientView)) |
1532 | >>>>>>> avn/ubitvar | ||
1533 | { | 1347 | { |
1534 | //m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet from an unrecognized source: " + address + " in " + m_scene.RegionInfo.RegionName); | 1348 | //m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet from an unrecognized source: " + address + " in " + m_scene.RegionInfo.RegionName); |
1535 | 1349 | ||
@@ -1547,7 +1361,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1547 | 1361 | ||
1548 | if (!udpClient.IsConnected) | 1362 | if (!udpClient.IsConnected) |
1549 | { | 1363 | { |
1550 | m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + m_scene.RegionInfo.RegionName); | 1364 | m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet for a unConnected client in " + Scene.RegionInfo.RegionName); |
1551 | return; | 1365 | return; |
1552 | } | 1366 | } |
1553 | 1367 | ||
@@ -1652,28 +1466,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1652 | LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length); | 1466 | LogPacketHeader(true, udpClient.CircuitCode, 0, packet.Type, (ushort)packet.Length); |
1653 | #endregion BinaryStats | 1467 | #endregion BinaryStats |
1654 | 1468 | ||
1655 | <<<<<<< HEAD | ||
1656 | if (packet.Type == PacketType.AgentUpdate) | ||
1657 | { | ||
1658 | if (DiscardInboundAgentUpdates) | ||
1659 | return; | ||
1660 | |||
1661 | ((LLClientView)client).TotalAgentUpdates++; | ||
1662 | 1469 | ||
1663 | AgentUpdatePacket agentUpdate = (AgentUpdatePacket)packet; | 1470 | //Ubit AgentUpdate mess removed from here |
1664 | 1471 | ||
1665 | LLClientView llClient = client as LLClientView; | ||
1666 | if (agentUpdate.AgentData.SessionID != client.SessionId | ||
1667 | || agentUpdate.AgentData.AgentID != client.AgentId | ||
1668 | || !(llClient == null || llClient.CheckAgentUpdateSignificance(agentUpdate.AgentData)) ) | ||
1669 | { | ||
1670 | PacketPool.Instance.ReturnPacket(packet); | ||
1671 | return; | ||
1672 | } | ||
1673 | } | ||
1674 | ======= | ||
1675 | // AgentUpdate mess removed from here | ||
1676 | >>>>>>> avn/ubitvar | ||
1677 | 1472 | ||
1678 | #region Ping Check Handling | 1473 | #region Ping Check Handling |
1679 | 1474 | ||
@@ -1853,7 +1648,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1853 | AuthenticateResponse sessionInfo; | 1648 | AuthenticateResponse sessionInfo; |
1854 | if (IsClientAuthorized(uccp, out sessionInfo)) | 1649 | if (IsClientAuthorized(uccp, out sessionInfo)) |
1855 | { | 1650 | { |
1856 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); | 1651 | AgentCircuitData aCircuit = Scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); |
1857 | 1652 | ||
1858 | // Begin the process of adding the client to the simulator | 1653 | // Begin the process of adding the client to the simulator |
1859 | client | 1654 | client |
@@ -1868,7 +1663,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1868 | // an existing child agent, and there is no circuit data | 1663 | // an existing child agent, and there is no circuit data |
1869 | if (client != null && aCircuit == null) | 1664 | if (client != null && aCircuit == null) |
1870 | { | 1665 | { |
1871 | m_scene.CloseAgent(client.AgentId, true); | 1666 | Scene.CloseAgent(client.AgentId, true); |
1872 | return; | 1667 | return; |
1873 | } | 1668 | } |
1874 | 1669 | ||
@@ -1908,14 +1703,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1908 | // We only want to send initial data to new clients, not ones which are being converted from child to root. | 1703 | // We only want to send initial data to new clients, not ones which are being converted from child to root. |
1909 | if (client != null) | 1704 | if (client != null) |
1910 | { | 1705 | { |
1911 | <<<<<<< HEAD | ||
1912 | AgentCircuitData aCircuit = Scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); | ||
1913 | ======= | ||
1914 | >>>>>>> avn/ubitvar | ||
1915 | bool tp = (aCircuit.teleportFlags > 0); | 1706 | bool tp = (aCircuit.teleportFlags > 0); |
1916 | // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from | 1707 | // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from |
1917 | if (!tp && !client.SceneAgent.SentInitialDataToClient) | 1708 | if (!tp) |
1918 | client.SceneAgent.SendInitialDataToClient(); | 1709 | client.SceneAgent.SendInitialDataToMe(); |
1919 | } | 1710 | } |
1920 | } | 1711 | } |
1921 | else | 1712 | else |
@@ -1923,17 +1714,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1923 | // Don't create clients for unauthorized requesters. | 1714 | // Don't create clients for unauthorized requesters. |
1924 | m_log.WarnFormat( | 1715 | m_log.WarnFormat( |
1925 | "[LLUDPSERVER]: Ignoring connection request for {0} to {1} with unknown circuit code {2} from IP {3}", | 1716 | "[LLUDPSERVER]: Ignoring connection request for {0} to {1} with unknown circuit code {2} from IP {3}", |
1926 | <<<<<<< HEAD | 1717 | |
1927 | uccp.CircuitCode.ID, Scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint); | 1718 | uccp.CircuitCode.ID, Scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint); |
1928 | } | ||
1929 | |||
1930 | ======= | ||
1931 | uccp.CircuitCode.ID, m_scene.RegionInfo.RegionName, uccp.CircuitCode.Code, endPoint); | ||
1932 | 1719 | ||
1933 | lock (m_pendingCache) | 1720 | lock (m_pendingCache) |
1934 | m_pendingCache.Remove(endPoint); | 1721 | m_pendingCache.Remove(endPoint); |
1935 | } | 1722 | } |
1936 | >>>>>>> avn/ubitvar | 1723 | |
1937 | // m_log.DebugFormat( | 1724 | // m_log.DebugFormat( |
1938 | // "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms", | 1725 | // "[LLUDPSERVER]: Handling UseCircuitCode request from {0} took {1}ms", |
1939 | // buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds); | 1726 | // buffer.RemoteEndPoint, (DateTime.Now - startTime).Milliseconds); |
@@ -2127,24 +1914,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2127 | { | 1914 | { |
2128 | if (!Scene.TryGetClient(agentID, out client)) | 1915 | if (!Scene.TryGetClient(agentID, out client)) |
2129 | { | 1916 | { |
2130 | <<<<<<< HEAD | ||
2131 | LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, Throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO); | ||
2132 | ======= | ||
2133 | createNew = true; | 1917 | createNew = true; |
2134 | } | 1918 | } |
2135 | else | 1919 | else |
2136 | { | 1920 | { |
2137 | if (client.SceneAgent == null) | 1921 | if (client.SceneAgent == null) |
2138 | { | 1922 | { |
2139 | m_scene.CloseAgent(agentID, true); | 1923 | Scene.CloseAgent(agentID, true); |
2140 | createNew = true; | 1924 | createNew = true; |
2141 | } | 1925 | } |
2142 | } | 1926 | } |
2143 | 1927 | ||
2144 | if (createNew) | 1928 | if (createNew) |
2145 | { | 1929 | { |
2146 | LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, m_throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO); | 1930 | LLUDPClient udpClient = new LLUDPClient(this, ThrottleRates, Throttle, circuitCode, agentID, remoteEndPoint, m_defaultRTO, m_maxRTO); |
2147 | >>>>>>> avn/ubitvar | 1931 | |
2148 | 1932 | ||
2149 | client = new LLClientView(Scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode); | 1933 | client = new LLClientView(Scene, this, udpClient, sessionInfo, agentID, sessionID, circuitCode); |
2150 | client.OnLogout += LogoutHandler; | 1934 | client.OnLogout += LogoutHandler; |
@@ -2174,29 +1958,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2174 | { | 1958 | { |
2175 | ClientLogoutsDueToNoReceives++; | 1959 | ClientLogoutsDueToNoReceives++; |
2176 | 1960 | ||
2177 | <<<<<<< HEAD | ||
2178 | m_log.WarnFormat( | ||
2179 | "[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.", | ||
2180 | client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, Scene.Name); | ||
2181 | ======= | ||
2182 | if (client.SceneAgent != null) | 1961 | if (client.SceneAgent != null) |
2183 | { | 1962 | { |
2184 | m_log.WarnFormat( | 1963 | m_log.WarnFormat( |
2185 | "[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.", | 1964 | "[LLUDPSERVER]: No packets received from {0} agent of {1} for {2}ms in {3}. Disconnecting.", |
2186 | client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, m_scene.Name); | 1965 | client.SceneAgent.IsChildAgent ? "child" : "root", client.Name, timeoutTicks, Scene.Name); |
2187 | >>>>>>> avn/ubitvar | ||
2188 | 1966 | ||
2189 | if (!client.SceneAgent.IsChildAgent) | 1967 | if (!client.SceneAgent.IsChildAgent) |
2190 | client.Kick("Simulator logged you out due to connection timeout."); | 1968 | client.Kick("Simulator logged you out due to connection timeout."); |
2191 | } | 1969 | } |
2192 | } | 1970 | } |
2193 | 1971 | ||
2194 | <<<<<<< HEAD | 1972 | if (!Scene.CloseAgent(client.AgentId, true)) |
2195 | Scene.CloseAgent(client.AgentId, true); | ||
2196 | ======= | ||
2197 | if (!m_scene.CloseAgent(client.AgentId, true)) | ||
2198 | client.Close(true,true); | 1973 | client.Close(true,true); |
2199 | >>>>>>> avn/ubitvar | ||
2200 | } | 1974 | } |
2201 | 1975 | ||
2202 | private void IncomingPacketHandler() | 1976 | private void IncomingPacketHandler() |
@@ -2209,7 +1983,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2209 | 1983 | ||
2210 | while (IsRunningInbound) | 1984 | while (IsRunningInbound) |
2211 | { | 1985 | { |
2212 | m_scene.ThreadAlive(1); | 1986 | Scene.ThreadAlive(1); |
2213 | try | 1987 | try |
2214 | { | 1988 | { |
2215 | IncomingPacket incomingPacket = null; | 1989 | IncomingPacket incomingPacket = null; |
@@ -2261,7 +2035,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2261 | 2035 | ||
2262 | while (base.IsRunningOutbound) | 2036 | while (base.IsRunningOutbound) |
2263 | { | 2037 | { |
2264 | m_scene.ThreadAlive(2); | 2038 | Scene.ThreadAlive(2); |
2265 | try | 2039 | try |
2266 | { | 2040 | { |
2267 | m_packetSent = false; | 2041 | m_packetSent = false; |
@@ -2524,15 +2298,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2524 | { | 2298 | { |
2525 | m_currentIncomingClient = null; | 2299 | m_currentIncomingClient = null; |
2526 | } | 2300 | } |
2527 | <<<<<<< HEAD | ||
2528 | } | ||
2529 | else | ||
2530 | { | ||
2531 | m_log.DebugFormat( | ||
2532 | "[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}", | ||
2533 | packet.Type, client.Name, Scene.RegionInfo.RegionName); | ||
2534 | } | ||
2535 | ======= | ||
2536 | // } | 2301 | // } |
2537 | // else | 2302 | // else |
2538 | // { | 2303 | // { |
@@ -2540,7 +2305,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2540 | // "[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}", | 2305 | // "[LLUDPSERVER]: Dropped incoming {0} for dead client {1} in {2}", |
2541 | // packet.Type, client.Name, m_scene.RegionInfo.RegionName); | 2306 | // packet.Type, client.Name, m_scene.RegionInfo.RegionName); |
2542 | // } | 2307 | // } |
2543 | >>>>>>> avn/ubitvar | ||
2544 | 2308 | ||
2545 | IncomingPacketsProcessed++; | 2309 | IncomingPacketsProcessed++; |
2546 | } | 2310 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs index ac6c0b4..4ff52eb 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServerCommands.cs | |||
@@ -224,7 +224,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
224 | ConsoleDisplayList cdl = new ConsoleDisplayList(); | 224 | ConsoleDisplayList cdl = new ConsoleDisplayList(); |
225 | cdl.AddRow("Adaptive throttles", m_udpServer.ThrottleRates.AdaptiveThrottlesEnabled); | 225 | cdl.AddRow("Adaptive throttles", m_udpServer.ThrottleRates.AdaptiveThrottlesEnabled); |
226 | 226 | ||
227 | long maxSceneDripRate = m_udpServer.Throttle.MaxDripRate; | 227 | long maxSceneDripRate = (long)m_udpServer.Throttle.MaxDripRate; |
228 | cdl.AddRow( | 228 | cdl.AddRow( |
229 | "Max scene throttle", | 229 | "Max scene throttle", |
230 | maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset"); | 230 | maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset"); |
@@ -505,7 +505,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
505 | m_console.OutputFormat("Debug settings for {0}", m_udpServer.Scene.Name); | 505 | m_console.OutputFormat("Debug settings for {0}", m_udpServer.Scene.Name); |
506 | ConsoleDisplayList cdl = new ConsoleDisplayList(); | 506 | ConsoleDisplayList cdl = new ConsoleDisplayList(); |
507 | 507 | ||
508 | long maxSceneDripRate = m_udpServer.Throttle.MaxDripRate; | 508 | long maxSceneDripRate = (long)m_udpServer.Throttle.MaxDripRate; |
509 | cdl.AddRow( | 509 | cdl.AddRow( |
510 | "max-scene-throttle", | 510 | "max-scene-throttle", |
511 | maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset"); | 511 | maxSceneDripRate != 0 ? string.Format("{0} kbps", maxSceneDripRate * 8 / 1000) : "unset"); |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/ThrottleTests.cs b/OpenSim/Region/ClientStack/Linden/UDP/Tests/ThrottleTests.cs index 3c82a78..5e41dbd 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/Tests/ThrottleTests.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/Tests/ThrottleTests.cs | |||
@@ -35,6 +35,7 @@ using OpenSim.Tests.Common; | |||
35 | 35 | ||
36 | namespace OpenSim.Region.ClientStack.LindenUDP.Tests | 36 | namespace OpenSim.Region.ClientStack.LindenUDP.Tests |
37 | { | 37 | { |
38 | /* | ||
38 | [TestFixture] | 39 | [TestFixture] |
39 | public class ThrottleTests : OpenSimTestCase | 40 | public class ThrottleTests : OpenSimTestCase |
40 | { | 41 | { |
@@ -57,16 +58,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
57 | [Test] | 58 | [Test] |
58 | public void TestSetRequestDripRate() | 59 | public void TestSetRequestDripRate() |
59 | { | 60 | { |
61 | |||
60 | TestHelpers.InMethod(); | 62 | TestHelpers.InMethod(); |
61 | 63 | ||
62 | TokenBucket tb = new TokenBucket("tb", null, 5000, 0); | 64 | TokenBucket tb = new TokenBucket(null, 5000f,10000f); |
63 | AssertRates(tb, 5000, 0, 5000, 0); | 65 | AssertRates(tb, 5000, 0, 5000, 0); |
64 | 66 | ||
65 | tb.RequestedDripRate = 4000; | 67 | tb.RequestedDripRate = 4000f; |
66 | AssertRates(tb, 4000, 0, 4000, 0); | 68 | AssertRates(tb, 4000, 0, 4000, 0); |
67 | 69 | ||
68 | tb.RequestedDripRate = 6000; | 70 | tb.RequestedDripRate = 6000; |
69 | AssertRates(tb, 6000, 0, 6000, 0); | 71 | AssertRates(tb, 6000, 0, 6000, 0); |
72 | |||
70 | } | 73 | } |
71 | 74 | ||
72 | [Test] | 75 | [Test] |
@@ -74,7 +77,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
74 | { | 77 | { |
75 | TestHelpers.InMethod(); | 78 | TestHelpers.InMethod(); |
76 | 79 | ||
77 | TokenBucket tb = new TokenBucket("tb", null, 5000, 10000); | 80 | TokenBucket tb = new TokenBucket(null, 5000,15000); |
78 | AssertRates(tb, 5000, 0, 5000, 10000); | 81 | AssertRates(tb, 5000, 0, 5000, 10000); |
79 | 82 | ||
80 | tb.RequestedDripRate = 4000; | 83 | tb.RequestedDripRate = 4000; |
@@ -92,9 +95,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
92 | { | 95 | { |
93 | TestHelpers.InMethod(); | 96 | TestHelpers.InMethod(); |
94 | 97 | ||
95 | TokenBucket tbParent = new TokenBucket("tbParent", null, 0, 0); | 98 | TokenBucket tbParent = new TokenBucket("tbParent", null, 0); |
96 | TokenBucket tbChild1 = new TokenBucket("tbChild1", tbParent, 3000, 0); | 99 | TokenBucket tbChild1 = new TokenBucket("tbChild1", tbParent, 3000); |
97 | TokenBucket tbChild2 = new TokenBucket("tbChild2", tbParent, 5000, 0); | 100 | TokenBucket tbChild2 = new TokenBucket("tbChild2", tbParent, 5000); |
98 | 101 | ||
99 | AssertRates(tbParent, 8000, 8000, 8000, 0); | 102 | AssertRates(tbParent, 8000, 8000, 8000, 0); |
100 | AssertRates(tbChild1, 3000, 0, 3000, 0); | 103 | AssertRates(tbChild1, 3000, 0, 3000, 0); |
@@ -113,6 +116,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
113 | AssertRates(tbParent, 6000, 8000, 6000, 0); | 116 | AssertRates(tbParent, 6000, 8000, 6000, 0); |
114 | AssertRates(tbChild1, 3000, 0, 6000 / 8 * 3, 0); | 117 | AssertRates(tbChild1, 3000, 0, 6000 / 8 * 3, 0); |
115 | AssertRates(tbChild2, 5000, 0, 6000 / 8 * 5, 0); | 118 | AssertRates(tbChild2, 5000, 0, 6000 / 8 * 5, 0); |
119 | |||
116 | } | 120 | } |
117 | 121 | ||
118 | private void AssertRates( | 122 | private void AssertRates( |
@@ -424,4 +428,5 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
424 | udpClient.SetThrottles(throttles); | 428 | udpClient.SetThrottles(throttles); |
425 | } | 429 | } |
426 | } | 430 | } |
431 | */ | ||
427 | } \ No newline at end of file | 432 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs b/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs index 7a42d82..14099fe 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/TokenBucket.cs | |||
@@ -42,24 +42,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
42 | public class TokenBucket | 42 | public class TokenBucket |
43 | { | 43 | { |
44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
45 | <<<<<<< HEAD | ||
46 | 45 | ||
47 | public string Identifier { get; private set; } | ||
48 | |||
49 | public int DebugLevel { get; set; } | ||
50 | |||
51 | /// <summary> | ||
52 | /// Number of ticks (ms) per quantum, drip rate and max burst | ||
53 | /// are defined over this interval. | ||
54 | /// </summary> | ||
55 | protected const Int32 m_ticksPerQuantum = 1000; | ||
56 | ======= | ||
57 | private static Int32 m_counter = 0; | 46 | private static Int32 m_counter = 0; |
58 | 47 | ||
59 | // private Int32 m_identifier; | 48 | // private Int32 m_identifier; |
60 | 49 | ||
61 | protected const float m_timeScale = 1e-3f; | 50 | protected const float m_timeScale = 1e-3f; |
62 | >>>>>>> avn/ubitvar | ||
63 | 51 | ||
64 | /// <summary> | 52 | /// <summary> |
65 | /// This is the number of m_minimumDripRate bytes | 53 | /// This is the number of m_minimumDripRate bytes |
@@ -72,11 +60,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
72 | 60 | ||
73 | /// <summary> | 61 | /// <summary> |
74 | /// </summary> | 62 | /// </summary> |
75 | <<<<<<< HEAD | ||
76 | protected const Int32 m_minimumDripRate = LLUDPServer.MTU; | ||
77 | ======= | ||
78 | protected const float m_minimumDripRate = 1400; | 63 | protected const float m_minimumDripRate = 1400; |
79 | >>>>>>> avn/ubitvar | ||
80 | 64 | ||
81 | /// <summary>Time of the last drip, in system ticks</summary> | 65 | /// <summary>Time of the last drip, in system ticks</summary> |
82 | protected Int32 m_lastDrip; | 66 | protected Int32 m_lastDrip; |
@@ -90,27 +74,31 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
90 | /// <summary> | 74 | /// <summary> |
91 | /// Map of children buckets and their requested maximum burst rate | 75 | /// Map of children buckets and their requested maximum burst rate |
92 | /// </summary> | 76 | /// </summary> |
93 | <<<<<<< HEAD | 77 | |
94 | protected Dictionary<TokenBucket,Int64> m_children = new Dictionary<TokenBucket,Int64>(); | ||
95 | ======= | ||
96 | protected Dictionary<TokenBucket, float> m_children = new Dictionary<TokenBucket, float>(); | 78 | protected Dictionary<TokenBucket, float> m_children = new Dictionary<TokenBucket, float>(); |
97 | 79 | ||
98 | #region Properties | 80 | #region Properties |
99 | >>>>>>> avn/ubitvar | ||
100 | 81 | ||
101 | /// <summary> | 82 | /// <summary> |
102 | /// The parent bucket of this bucket, or null if this bucket has no | 83 | /// The parent bucket of this bucket, or null if this bucket has no |
103 | /// parent. The parent bucket will limit the aggregate bandwidth of all | 84 | /// parent. The parent bucket will limit the aggregate bandwidth of all |
104 | /// of its children buckets | 85 | /// of its children buckets |
105 | /// </summary> | 86 | /// </summary> |
106 | public TokenBucket Parent { get; protected set; } | 87 | protected TokenBucket m_parent; |
107 | 88 | public TokenBucket Parent | |
89 | { | ||
90 | get { return m_parent; } | ||
91 | set { m_parent = value; } | ||
92 | } | ||
108 | /// <summary> | 93 | /// <summary> |
109 | /// This is the maximum number | 94 | /// This is the maximum number |
110 | /// of tokens that can accumulate in the bucket at any one time. This | 95 | /// of tokens that can accumulate in the bucket at any one time. This |
111 | /// also sets the total request for leaf nodes | 96 | /// also sets the total request for leaf nodes |
112 | /// </summary> | 97 | /// </summary> |
113 | protected float m_burst; | 98 | protected float m_burst; |
99 | //not in use | ||
100 | public float MaxDripRate { get; set; } | ||
101 | |||
114 | public float RequestedBurst | 102 | public float RequestedBurst |
115 | { | 103 | { |
116 | get { return m_burst; } | 104 | get { return m_burst; } |
@@ -143,63 +131,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
143 | /// Can never be above MaxDripRate. | 131 | /// Can never be above MaxDripRate. |
144 | /// Tokens are added to the bucket at any time | 132 | /// Tokens are added to the bucket at any time |
145 | /// <seealso cref="RemoveTokens"/> is called, at the granularity of | 133 | /// <seealso cref="RemoveTokens"/> is called, at the granularity of |
146 | <<<<<<< HEAD | ||
147 | /// the system tick interval (typically around 15-22ms) | ||
148 | /// FIXME: It is extremely confusing to be able to set a RequestedDripRate of 0 and then receive a positive | ||
149 | /// number on get if TotalDripRequest is set. This also stops us being able to retrieve the fact that | ||
150 | /// RequestedDripRate is set to 0. Really, this should always return m_dripRate and then we can get | ||
151 | /// (m_dripRate == 0 ? TotalDripRequest : m_dripRate) on some other properties. | ||
152 | /// </remarks> | ||
153 | public virtual Int64 RequestedDripRate | ||
154 | { | ||
155 | get { return (m_dripRate == 0 ? TotalDripRequest : m_dripRate); } | ||
156 | set | ||
157 | { | ||
158 | if (value <= 0) | ||
159 | m_dripRate = 0; | ||
160 | else if (MaxDripRate > 0 && value > MaxDripRate) | ||
161 | m_dripRate = MaxDripRate; | ||
162 | else | ||
163 | m_dripRate = value; | ||
164 | |||
165 | m_burstRate = (Int64)((double)m_dripRate * m_quantumsPerBurst); | ||
166 | |||
167 | if (Parent != null) | ||
168 | Parent.RegisterRequest(this, m_dripRate); | ||
169 | } | ||
170 | } | ||
171 | |||
172 | /// <summary> | ||
173 | /// Gets the drip rate. | ||
174 | /// </summary> | ||
175 | /// <value> | ||
176 | /// DripRate can never be above max drip rate or below min drip rate. | ||
177 | /// If we are a child bucket then the drip rate return is modifed by the total load on the capacity of the | ||
178 | /// parent bucket. | ||
179 | /// </value> | ||
180 | public virtual Int64 DripRate | ||
181 | { | ||
182 | get | ||
183 | { | ||
184 | double rate; | ||
185 | |||
186 | // FIXME: This doesn't properly work if we have a parent and children and a requested drip rate set | ||
187 | // on ourselves which is not equal to the child drip rates. | ||
188 | if (Parent == null) | ||
189 | { | ||
190 | if (TotalDripRequest > 0) | ||
191 | rate = Math.Min(RequestedDripRate, TotalDripRequest); | ||
192 | else | ||
193 | rate = RequestedDripRate; | ||
194 | } | ||
195 | else | ||
196 | { | ||
197 | rate = (double)RequestedDripRate * Parent.DripRateModifier(); | ||
198 | } | ||
199 | |||
200 | ======= | ||
201 | /// the system tick interval (typically around 15-22ms)</remarks> | 134 | /// the system tick interval (typically around 15-22ms)</remarks> |
202 | protected float m_dripRate; | 135 | protected float m_dripRate; |
136 | |||
203 | public virtual float RequestedDripRate | 137 | public virtual float RequestedDripRate |
204 | { | 138 | { |
205 | get { return (m_dripRate == 0 ? m_totalDripRequest : m_dripRate); } | 139 | get { return (m_dripRate == 0 ? m_totalDripRequest : m_dripRate); } |
@@ -212,7 +146,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
212 | } | 146 | } |
213 | } | 147 | } |
214 | 148 | ||
215 | public virtual float DripRate | 149 | public virtual float DripRate |
216 | { | 150 | { |
217 | get { | 151 | get { |
218 | float rate = Math.Min(RequestedDripRate,TotalDripRequest); | 152 | float rate = Math.Min(RequestedDripRate,TotalDripRequest); |
@@ -220,28 +154,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
220 | return rate; | 154 | return rate; |
221 | 155 | ||
222 | rate *= m_parent.DripRateModifier(); | 156 | rate *= m_parent.DripRateModifier(); |
223 | >>>>>>> avn/ubitvar | ||
224 | if (rate < m_minimumDripRate) | 157 | if (rate < m_minimumDripRate) |
225 | rate = m_minimumDripRate; | 158 | rate = m_minimumDripRate; |
226 | else if (MaxDripRate > 0 && rate > MaxDripRate) | ||
227 | rate = MaxDripRate; | ||
228 | 159 | ||
229 | return (float)rate; | 160 | return (float)rate; |
230 | } | 161 | } |
231 | } | 162 | } |
232 | protected Int64 m_dripRate; | ||
233 | |||
234 | // <summary> | ||
235 | // The maximum rate for flow control. Drip rate can never be greater than this. | ||
236 | // </summary> | ||
237 | public Int64 MaxDripRate { get; set; } | ||
238 | 163 | ||
239 | /// <summary> | 164 | /// <summary> |
240 | /// The current total of the requested maximum burst rates of children buckets. | 165 | /// The current total of the requested maximum burst rates of children buckets. |
241 | /// </summary> | 166 | /// </summary> |
242 | <<<<<<< HEAD | ||
243 | public Int64 TotalDripRequest { get; protected set; } | ||
244 | ======= | ||
245 | protected float m_totalDripRequest; | 167 | protected float m_totalDripRequest; |
246 | public float TotalDripRequest | 168 | public float TotalDripRequest |
247 | { | 169 | { |
@@ -252,7 +174,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
252 | #endregion Properties | 174 | #endregion Properties |
253 | 175 | ||
254 | #region Constructor | 176 | #region Constructor |
255 | >>>>>>> avn/ubitvar | 177 | |
256 | 178 | ||
257 | /// <summary> | 179 | /// <summary> |
258 | /// Default constructor | 180 | /// Default constructor |
@@ -260,36 +182,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
260 | /// <param name="identifier">Identifier for this token bucket</param> | 182 | /// <param name="identifier">Identifier for this token bucket</param> |
261 | /// <param name="parent">Parent bucket if this is a child bucket, or | 183 | /// <param name="parent">Parent bucket if this is a child bucket, or |
262 | /// null if this is a root bucket</param> | 184 | /// null if this is a root bucket</param> |
263 | <<<<<<< HEAD | ||
264 | /// <param name="requestedDripRate"> | ||
265 | /// Requested rate that the bucket fills, in bytes per | ||
266 | /// second. If zero, the bucket always remains full. | ||
267 | /// </param> | ||
268 | public TokenBucket(string identifier, TokenBucket parent, Int64 requestedDripRate, Int64 maxDripRate) | ||
269 | ======= | ||
270 | /// <param name="maxBurst">Maximum size of the bucket in bytes, or | 185 | /// <param name="maxBurst">Maximum size of the bucket in bytes, or |
271 | /// zero if this bucket has no maximum capacity</param> | 186 | /// zero if this bucket has no maximum capacity</param> |
272 | /// <param name="dripRate">Rate that the bucket fills, in bytes per | 187 | /// <param name="dripRate">Rate that the bucket fills, in bytes per |
273 | /// second. If zero, the bucket always remains full</param> | 188 | /// second. If zero, the bucket always remains full</param> |
274 | public TokenBucket(TokenBucket parent, float dripRate, float MaxBurst) | 189 | public TokenBucket(TokenBucket parent, float dripRate, float MaxBurst) |
275 | >>>>>>> avn/ubitvar | ||
276 | { | 190 | { |
277 | Identifier = identifier; | 191 | m_counter++; |
278 | 192 | ||
279 | Parent = parent; | 193 | Parent = parent; |
280 | <<<<<<< HEAD | ||
281 | RequestedDripRate = requestedDripRate; | ||
282 | MaxDripRate = maxDripRate; | ||
283 | m_lastDrip = Util.EnvironmentTickCount(); | ||
284 | ======= | ||
285 | RequestedDripRate = dripRate; | 194 | RequestedDripRate = dripRate; |
286 | RequestedBurst = MaxBurst; | 195 | RequestedBurst = MaxBurst; |
287 | // TotalDripRequest = dripRate; // this will be overwritten when a child node registers | 196 | // TotalDripRequest = dripRate; // this will be overwritten when a child node registers |
288 | // MaxBurst = (Int64)((double)dripRate * m_quantumsPerBurst); | 197 | // MaxBurst = (Int64)((double)dripRate * m_quantumsPerBurst); |
289 | m_lastDrip = Util.EnvironmentTickCount() + 100000; | 198 | m_lastDrip = Util.EnvironmentTickCount() + 100000; |
290 | >>>>>>> avn/ubitvar | ||
291 | } | 199 | } |
292 | 200 | ||
201 | #endregion Constructor | ||
202 | |||
293 | /// <summary> | 203 | /// <summary> |
294 | /// Compute a modifier for the MaxBurst rate. This is 1.0, meaning | 204 | /// Compute a modifier for the MaxBurst rate. This is 1.0, meaning |
295 | /// no modification if the requested bandwidth is less than the | 205 | /// no modification if the requested bandwidth is less than the |
@@ -299,20 +209,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
299 | /// </summary> | 209 | /// </summary> |
300 | protected float DripRateModifier() | 210 | protected float DripRateModifier() |
301 | { | 211 | { |
302 | <<<<<<< HEAD | ||
303 | Int64 driprate = DripRate; | ||
304 | double modifier = driprate >= TotalDripRequest ? 1.0 : (double)driprate / (double)TotalDripRequest; | ||
305 | |||
306 | // if (DebugLevel > 0) | ||
307 | // m_log.DebugFormat( | ||
308 | // "[TOKEN BUCKET]: Returning drip modifier {0}/{1} = {2} from {3}", | ||
309 | // driprate, TotalDripRequest, modifier, Identifier); | ||
310 | |||
311 | return modifier; | ||
312 | ======= | ||
313 | float driprate = DripRate; | 212 | float driprate = DripRate; |
314 | return driprate >= TotalDripRequest ? 1.0f : driprate / TotalDripRequest; | 213 | return driprate >= TotalDripRequest ? 1.0f : driprate / TotalDripRequest; |
315 | >>>>>>> avn/ubitvar | ||
316 | } | 214 | } |
317 | 215 | ||
318 | /// <summary> | 216 | /// <summary> |
@@ -335,29 +233,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
335 | { | 233 | { |
336 | m_children[child] = request; | 234 | m_children[child] = request; |
337 | 235 | ||
338 | <<<<<<< HEAD | ||
339 | TotalDripRequest = 0; | ||
340 | foreach (KeyValuePair<TokenBucket, Int64> cref in m_children) | ||
341 | TotalDripRequest += cref.Value; | ||
342 | ======= | ||
343 | m_totalDripRequest = 0; | 236 | m_totalDripRequest = 0; |
344 | foreach (KeyValuePair<TokenBucket, float> cref in m_children) | 237 | foreach (KeyValuePair<TokenBucket, float> cref in m_children) |
345 | m_totalDripRequest += cref.Value; | 238 | m_totalDripRequest += cref.Value; |
346 | >>>>>>> avn/ubitvar | ||
347 | } | 239 | } |
348 | 240 | ||
349 | // Pass the new values up to the parent | 241 | // Pass the new values up to the parent |
350 | if (Parent != null) | 242 | if (m_parent != null) |
351 | { | 243 | m_parent.RegisterRequest(this, Math.Min(RequestedDripRate, TotalDripRequest)); |
352 | Int64 effectiveDripRate; | ||
353 | |||
354 | if (RequestedDripRate > 0) | ||
355 | effectiveDripRate = Math.Min(RequestedDripRate, TotalDripRequest); | ||
356 | else | ||
357 | effectiveDripRate = TotalDripRequest; | ||
358 | |||
359 | Parent.RegisterRequest(this, effectiveDripRate); | ||
360 | } | ||
361 | } | 244 | } |
362 | 245 | ||
363 | /// <summary> | 246 | /// <summary> |
@@ -370,15 +253,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
370 | { | 253 | { |
371 | m_children.Remove(child); | 254 | m_children.Remove(child); |
372 | 255 | ||
373 | <<<<<<< HEAD | ||
374 | TotalDripRequest = 0; | ||
375 | foreach (KeyValuePair<TokenBucket, Int64> cref in m_children) | ||
376 | TotalDripRequest += cref.Value; | ||
377 | ======= | ||
378 | m_totalDripRequest = 0; | 256 | m_totalDripRequest = 0; |
379 | foreach (KeyValuePair<TokenBucket, float> cref in m_children) | 257 | foreach (KeyValuePair<TokenBucket, float> cref in m_children) |
380 | m_totalDripRequest += cref.Value; | 258 | m_totalDripRequest += cref.Value; |
381 | >>>>>>> avn/ubitvar | ||
382 | } | 259 | } |
383 | 260 | ||
384 | // Pass the new values up to the parent | 261 | // Pass the new values up to the parent |
@@ -427,7 +304,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
427 | // with no drip rate... | 304 | // with no drip rate... |
428 | if (DripRate == 0) | 305 | if (DripRate == 0) |
429 | { | 306 | { |
430 | m_log.WarnFormat("[TOKENBUCKET] something odd is happening and drip rate is 0 for {0}", Identifier); | 307 | m_log.WarnFormat("[TOKENBUCKET] something odd is happening and drip rate is 0 for {0}", m_counter); |
431 | return; | 308 | return; |
432 | } | 309 | } |
433 | 310 | ||
@@ -453,17 +330,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
453 | public bool AdaptiveEnabled { get; set; } | 330 | public bool AdaptiveEnabled { get; set; } |
454 | 331 | ||
455 | /// <summary> | 332 | /// <summary> |
456 | <<<<<<< HEAD | ||
457 | /// Target drip rate for this bucket. | ||
458 | /// </summary> | ||
459 | /// <remarks>Usually set by the client. If adaptive is enabled then throttles will increase until we reach this.</remarks> | ||
460 | public Int64 TargetDripRate | ||
461 | { | ||
462 | get { return m_targetDripRate; } | ||
463 | set | ||
464 | { | ||
465 | m_targetDripRate = Math.Max(value, m_minimumFlow); | ||
466 | ======= | ||
467 | /// The minimum rate for flow control. Minimum drip rate is one | 333 | /// The minimum rate for flow control. Minimum drip rate is one |
468 | /// packet per second. | 334 | /// packet per second. |
469 | /// </summary> | 335 | /// </summary> |
@@ -479,13 +345,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
479 | public float MaxDripRate | 345 | public float MaxDripRate |
480 | { | 346 | { |
481 | get { return (m_maxDripRate == 0 ? m_totalDripRequest : m_maxDripRate); } | 347 | get { return (m_maxDripRate == 0 ? m_totalDripRequest : m_maxDripRate); } |
482 | set | 348 | set |
483 | { | 349 | { |
484 | m_maxDripRate = (value == 0 ? m_totalDripRequest : Math.Max(value, m_minimumFlow)); | 350 | m_maxDripRate = (value == 0 ? m_totalDripRequest : Math.Max(value, m_minimumFlow)); |
485 | >>>>>>> avn/ubitvar | ||
486 | } | 351 | } |
487 | } | 352 | } |
488 | protected Int64 m_targetDripRate; | 353 | |
354 | private bool m_enabled = false; | ||
489 | 355 | ||
490 | // <summary> | 356 | // <summary> |
491 | // Adjust drip rate in response to network conditions. | 357 | // Adjust drip rate in response to network conditions. |
@@ -493,109 +359,50 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
493 | public virtual float AdjustedDripRate | 359 | public virtual float AdjustedDripRate |
494 | { | 360 | { |
495 | get { return m_dripRate; } | 361 | get { return m_dripRate; } |
496 | <<<<<<< HEAD | 362 | set |
497 | set | ||
498 | { | 363 | { |
499 | m_dripRate = OpenSim.Framework.Util.Clamp<Int64>(value, m_minimumFlow, TargetDripRate); | 364 | m_dripRate = OpenSim.Framework.Util.Clamp<float>(value, m_minimumFlow, MaxDripRate); |
500 | m_burstRate = (Int64)((double)m_dripRate * m_quantumsPerBurst); | ||
501 | |||
502 | if (Parent != null) | ||
503 | Parent.RegisterRequest(this, m_dripRate); | ||
504 | ======= | ||
505 | set { | ||
506 | m_dripRate = OpenSim.Framework.Util.Clamp<float>(value,m_minimumFlow,MaxDripRate); | ||
507 | 365 | ||
508 | if (m_parent != null) | 366 | if (m_parent != null) |
509 | m_parent.RegisterRequest(this,m_dripRate); | 367 | m_parent.RegisterRequest(this, m_dripRate); |
510 | >>>>>>> avn/ubitvar | ||
511 | } | 368 | } |
512 | } | 369 | } |
513 | 370 | ||
514 | /// <summary> | 371 | |
515 | /// The minimum rate for adaptive flow control. | ||
516 | /// </summary> | ||
517 | protected Int64 m_minimumFlow = 32000; | ||
518 | |||
519 | <<<<<<< HEAD | ||
520 | /// <summary> | ||
521 | /// Constructor for the AdaptiveTokenBucket class | ||
522 | /// <param name="identifier">Unique identifier for the client</param> | ||
523 | /// <param name="parent">Parent bucket in the hierarchy</param> | ||
524 | /// <param name="requestedDripRate"></param> | ||
525 | /// <param name="maxDripRate">The ceiling rate for adaptation</param> | ||
526 | /// <param name="minDripRate">The floor rate for adaptation</param> | ||
527 | /// </summary> | ||
528 | public AdaptiveTokenBucket(string identifier, TokenBucket parent, Int64 requestedDripRate, Int64 maxDripRate, Int64 minDripRate, bool enabled) | ||
529 | : base(identifier, parent, requestedDripRate, maxDripRate) | ||
530 | { | ||
531 | AdaptiveEnabled = enabled; | ||
532 | |||
533 | if (AdaptiveEnabled) | ||
534 | { | ||
535 | // m_log.DebugFormat("[TOKENBUCKET]: Adaptive throttle enabled"); | ||
536 | m_minimumFlow = minDripRate; | ||
537 | TargetDripRate = m_minimumFlow; | ||
538 | AdjustedDripRate = m_minimumFlow; | ||
539 | } | ||
540 | ======= | ||
541 | // <summary> | 372 | // <summary> |
542 | // | 373 | // |
543 | // </summary> | 374 | // </summary> |
544 | public AdaptiveTokenBucket(TokenBucket parent, float maxDripRate,float maxBurst, bool enabled) | 375 | public AdaptiveTokenBucket(TokenBucket parent, float maxDripRate, float maxBurst, bool enabled) |
545 | : base(parent, maxDripRate,maxBurst) | 376 | : base(parent, maxDripRate, maxBurst) |
546 | { | 377 | { |
547 | m_enabled = enabled; | 378 | m_enabled = enabled; |
548 | 379 | ||
549 | MaxDripRate = maxDripRate; | 380 | MaxDripRate = maxDripRate; |
550 | 381 | ||
551 | if (enabled) | 382 | if (enabled) |
552 | AdjustedDripRate = m_maxDripRate * .5f; | 383 | AdjustedDripRate = m_maxDripRate * .5f; |
553 | else | 384 | else |
554 | AdjustedDripRate = m_maxDripRate; | 385 | AdjustedDripRate = m_maxDripRate; |
555 | >>>>>>> avn/ubitvar | ||
556 | } | 386 | } |
557 | 387 | ||
558 | /// <summary> | 388 | /// <summary> |
559 | /// Reliable packets sent to the client for which we never received an ack adjust the drip rate down. | 389 | /// Reliable packets sent to the client for which we never received an ack adjust the drip rate down. |
560 | /// <param name="packets">Number of packets that expired without successful delivery</param> | 390 | /// <param name="packets">Number of packets that expired without successful delivery</param> |
561 | /// </summary> | 391 | /// </summary> |
562 | public void ExpirePackets(Int32 packets) | 392 | public void ExpirePackets(Int32 count) |
563 | { | ||
564 | if (AdaptiveEnabled) | ||
565 | { | ||
566 | if (DebugLevel > 0) | ||
567 | m_log.WarnFormat( | ||
568 | "[ADAPTIVEBUCKET] drop {0} by {1} expired packets for {2}", | ||
569 | AdjustedDripRate, packets, Identifier); | ||
570 | |||
571 | // AdjustedDripRate = (Int64) (AdjustedDripRate / Math.Pow(2,packets)); | ||
572 | |||
573 | // Compute the fallback solely on the rate allocated beyond the minimum, this | ||
574 | // should smooth out the fallback to the minimum rate | ||
575 | AdjustedDripRate = m_minimumFlow + (Int64) ((AdjustedDripRate - m_minimumFlow) / Math.Pow(2, packets)); | ||
576 | } | ||
577 | } | ||
578 | |||
579 | /// <summary> | ||
580 | /// Reliable packets acked by the client adjust the drip rate up. | ||
581 | /// <param name="packets">Number of packets successfully acknowledged</param> | ||
582 | /// </summary> | ||
583 | public void AcknowledgePackets(Int32 packets) | ||
584 | { | 393 | { |
585 | if (AdaptiveEnabled) | 394 | // m_log.WarnFormat("[ADAPTIVEBUCKET] drop {0} by {1} expired packets",AdjustedDripRate,count); |
586 | AdjustedDripRate = AdjustedDripRate + packets * LLUDPServer.MTU; | 395 | if (m_enabled) |
396 | AdjustedDripRate = (Int64)(AdjustedDripRate / Math.Pow(2, count)); | ||
587 | } | 397 | } |
588 | 398 | ||
589 | /// <summary> | 399 | // <summary> |
590 | /// Adjust the minimum flow level for the adaptive throttle, this will drop adjusted | 400 | // |
591 | /// throttles back to the minimum levels | 401 | // </summary> |
592 | /// <param>minDripRate--the new minimum flow</param> | 402 | public void AcknowledgePackets(Int32 count) |
593 | /// </summary> | ||
594 | public void ResetMinimumAdaptiveFlow(Int64 minDripRate) | ||
595 | { | 403 | { |
596 | m_minimumFlow = minDripRate; | 404 | if (m_enabled) |
597 | TargetDripRate = m_minimumFlow; | 405 | AdjustedDripRate = AdjustedDripRate + count; |
598 | AdjustedDripRate = m_minimumFlow; | ||
599 | } | 406 | } |
600 | } | 407 | } |
601 | } | 408 | } |
diff --git a/OpenSim/Region/ClientStack/RegionApplicationBase.cs b/OpenSim/Region/ClientStack/RegionApplicationBase.cs index d58ab94..332bff9 100644 --- a/OpenSim/Region/ClientStack/RegionApplicationBase.cs +++ b/OpenSim/Region/ClientStack/RegionApplicationBase.cs | |||
@@ -141,11 +141,6 @@ namespace OpenSim.Region.ClientStack | |||
141 | PhysicsPluginManager physicsPluginManager; | 141 | PhysicsPluginManager physicsPluginManager; |
142 | physicsPluginManager = new PhysicsPluginManager(); | 142 | physicsPluginManager = new PhysicsPluginManager(); |
143 | physicsPluginManager.LoadPluginsFromAssemblies("Physics"); | 143 | physicsPluginManager.LoadPluginsFromAssemblies("Physics"); |
144 | <<<<<<< HEAD | ||
145 | |||
146 | ======= | ||
147 | |||
148 | >>>>>>> avn/ubitvar | ||
149 | return physicsPluginManager.GetPhysicsScene(engine, meshEngine, config, osSceneIdentifier, regionExtent); | 144 | return physicsPluginManager.GetPhysicsScene(engine, meshEngine, config, osSceneIdentifier, regionExtent); |
150 | } | 145 | } |
151 | } | 146 | } |
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs index 345b53d..fdff199 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs | |||
@@ -455,8 +455,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
455 | m_transactions.RemoveXferUploader(m_transactionID); | 455 | m_transactions.RemoveXferUploader(m_transactionID); |
456 | } | 456 | } |
457 | 457 | ||
458 | <<<<<<< HEAD | 458 | |
459 | ======= | ||
460 | private void ValidateAssets() | 459 | private void ValidateAssets() |
461 | { | 460 | { |
462 | if (m_asset.Type == (sbyte)CustomAssetType.AnimationSet) | 461 | if (m_asset.Type == (sbyte)CustomAssetType.AnimationSet) |
@@ -599,6 +598,5 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
599 | 598 | ||
600 | return result; | 599 | return result; |
601 | } | 600 | } |
602 | >>>>>>> avn/ubitvar | ||
603 | } | 601 | } |
604 | } | 602 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index b24dc0c..92beed2 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -406,25 +406,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
406 | 406 | ||
407 | Dictionary<SceneObjectGroup, string> scriptStates = new Dictionary<SceneObjectGroup, string>(); | 407 | Dictionary<SceneObjectGroup, string> scriptStates = new Dictionary<SceneObjectGroup, string>(); |
408 | 408 | ||
409 | <<<<<<< HEAD | ||
410 | foreach (SceneObjectGroup so in attachments) | ||
411 | { | ||
412 | // Scripts MUST be snapshotted before the object is | ||
413 | // removed from the scene because doing otherwise will | ||
414 | // clobber the run flag | ||
415 | // This must be done outside the sp.AttachmentSyncLock so that there is no risk of a deadlock from | ||
416 | // scripts performing attachment operations at the same time. Getting object states stops the scripts. | ||
417 | scriptStates[so] = PrepareScriptInstanceForSave(so, false); | ||
418 | |||
419 | // m_log.DebugFormat( | ||
420 | // "[ATTACHMENTS MODULE]: For object {0} for {1} in {2} got saved state {3}", | ||
421 | // so.Name, sp.Name, m_scene.Name, scriptStates[so]); | ||
422 | } | ||
423 | 409 | ||
424 | lock (sp.AttachmentsSyncLock) | ||
425 | ======= | ||
426 | if (sp.PresenceType != PresenceType.Npc) | 410 | if (sp.PresenceType != PresenceType.Npc) |
427 | >>>>>>> avn/ubitvar | ||
428 | { | 411 | { |
429 | foreach (SceneObjectGroup so in attachments) | 412 | foreach (SceneObjectGroup so in attachments) |
430 | { | 413 | { |
@@ -477,18 +460,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
477 | if (!Enabled) | 460 | if (!Enabled) |
478 | return false; | 461 | return false; |
479 | 462 | ||
480 | <<<<<<< HEAD | ||
481 | group.DetachFromBackup(); | ||
482 | |||
483 | bool success = AttachObjectInternal(sp, group, attachmentPt, silent, addToInventory, false, append); | ||
484 | |||
485 | if (!success) | ||
486 | group.AttachToBackup(); | ||
487 | |||
488 | return success; | ||
489 | ======= | ||
490 | return AttachObjectInternal(sp, group, attachmentPt, silent, useAttachData, addToInventory, false, append); | 463 | return AttachObjectInternal(sp, group, attachmentPt, silent, useAttachData, addToInventory, false, append); |
491 | >>>>>>> avn/ubitvar | ||
492 | } | 464 | } |
493 | 465 | ||
494 | /// <summary> | 466 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 1e9cfba..0d3b39e 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | |||
@@ -229,7 +229,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
229 | private void SendAppearance(ScenePresence sp) | 229 | private void SendAppearance(ScenePresence sp) |
230 | { | 230 | { |
231 | // Send the appearance to everyone in the scene | 231 | // Send the appearance to everyone in the scene |
232 | sp.SendAppearanceToAllOtherClients(); | 232 | sp.SendAppearanceToAllOtherAgents(); |
233 | 233 | ||
234 | // Send animations back to the avatar as well | 234 | // Send animations back to the avatar as well |
235 | sp.Animator.SendAnimPack(); | 235 | sp.Animator.SendAnimPack(); |
@@ -460,7 +460,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
460 | { | 460 | { |
461 | m_log.Debug("[UpdateBakedCache] uploading to bakedModule cache"); | 461 | m_log.Debug("[UpdateBakedCache] uploading to bakedModule cache"); |
462 | 462 | ||
463 | m_BakedTextureModule.Store(sp.UUID); | 463 | m_BakedTextureModule.Store(sp.UUID, wearableCache); |
464 | } | 464 | } |
465 | } | 465 | } |
466 | 466 | ||
@@ -529,12 +529,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
529 | ); | 529 | ); |
530 | } | 530 | } |
531 | } | 531 | } |
532 | <<<<<<< HEAD | ||
533 | |||
534 | // m_log.DebugFormat( | ||
535 | // "[AVFACTORY]: Looking for texture {0}, id {1} for {2} {3}", | ||
536 | // face.TextureID, idx, client.Name, client.AgentId); | ||
537 | ======= | ||
538 | */ | 532 | */ |
539 | bool wearableCacheValid = false; | 533 | bool wearableCacheValid = false; |
540 | if (wearableCache == null) | 534 | if (wearableCache == null) |
@@ -577,15 +571,9 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
577 | if (wearableCacheValid) | 571 | if (wearableCacheValid) |
578 | m_log.Debug("[ValidateBakedCache] have valid local cache"); | 572 | m_log.Debug("[ValidateBakedCache] have valid local cache"); |
579 | } | 573 | } |
580 | >>>>>>> avn/ubitvar | ||
581 | 574 | ||
582 | bool checkExternal = false; | 575 | bool checkExternal = false; |
583 | 576 | ||
584 | <<<<<<< HEAD | ||
585 | if (m_scene.AssetService.Get(face.TextureID.ToString()) == null) | ||
586 | return false; | ||
587 | } | ||
588 | ======= | ||
589 | if (!wearableCacheValid) | 577 | if (!wearableCacheValid) |
590 | { | 578 | { |
591 | // only use external bake module on login condition check | 579 | // only use external bake module on login condition check |
@@ -658,7 +646,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
658 | } | 646 | } |
659 | } | 647 | } |
660 | } | 648 | } |
661 | >>>>>>> avn/ubitvar | ||
662 | 649 | ||
663 | sp.Appearance.WearableCacheItems = wearableCache; | 650 | sp.Appearance.WearableCacheItems = wearableCache; |
664 | 651 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs index b7ff4e0..dd93449 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/Tests/AvatarFactoryModuleTests.cs | |||
@@ -132,7 +132,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
132 | for (byte i = 0; i < visualParams.Length; i++) | 132 | for (byte i = 0; i < visualParams.Length; i++) |
133 | visualParams[i] = i; | 133 | visualParams[i] = i; |
134 | 134 | ||
135 | <<<<<<< HEAD | ||
136 | Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); | 135 | Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); |
137 | uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); | 136 | uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); |
138 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); | 137 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); |
@@ -145,12 +144,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
145 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); | 144 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); |
146 | 145 | ||
147 | Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); | 146 | Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); |
148 | ======= | ||
149 | afm.SetAppearance(sp, new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)), visualParams, new WearableCacheItem[0]); | ||
150 | |||
151 | // TODO: Check baked texture | ||
152 | Assert.AreEqual(visualParams, sp.Appearance.VisualParams); | ||
153 | >>>>>>> avn/ubitvar | ||
154 | } | 147 | } |
155 | 148 | ||
156 | [Test] | 149 | [Test] |
@@ -188,11 +181,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory | |||
188 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); | 181 | Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); |
189 | eyesFace.TextureID = eyesTextureId; | 182 | eyesFace.TextureID = eyesTextureId; |
190 | 183 | ||
191 | <<<<<<< HEAD | ||
192 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); | ||
193 | ======= | ||
194 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, new WearableCacheItem[0]); | 184 | afm.SetAppearance(sp, bakedTextureEntry, visualParams, new WearableCacheItem[0]); |
195 | >>>>>>> avn/ubitvar | ||
196 | afm.SaveBakedTextures(userId); | 185 | afm.SaveBakedTextures(userId); |
197 | // Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId); | 186 | // Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId); |
198 | 187 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs index 7d2cad6..b8a1dba 100644 --- a/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/BakedTextures/XBakesModule.cs | |||
@@ -151,6 +151,14 @@ namespace OpenSim.Region.CoreModules.Avatar.BakedTextures | |||
151 | } | 151 | } |
152 | } | 152 | } |
153 | 153 | ||
154 | public void Store(UUID agentId) | ||
155 | { | ||
156 | } | ||
157 | public void UpdateMeshAvatar(UUID agentId) | ||
158 | { | ||
159 | } | ||
160 | |||
161 | |||
154 | public void Store(UUID agentId, WearableCacheItem[] data) | 162 | public void Store(UUID agentId, WearableCacheItem[] data) |
155 | { | 163 | { |
156 | if (m_URL == String.Empty) | 164 | if (m_URL == String.Empty) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs index 2801ef0..0b5d95b 100644 --- a/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs | |||
@@ -214,13 +214,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat | |||
214 | UUID destination = c.Destination; | 214 | UUID destination = c.Destination; |
215 | Vector3 fromPos = c.Position; | 215 | Vector3 fromPos = c.Position; |
216 | Vector3 regionPos = new Vector3(scene.RegionInfo.WorldLocX, scene.RegionInfo.WorldLocY, 0); | 216 | Vector3 regionPos = new Vector3(scene.RegionInfo.WorldLocX, scene.RegionInfo.WorldLocY, 0); |
217 | <<<<<<< HEAD | ||
218 | ======= | ||
219 | 217 | ||
220 | bool checkParcelHide = false; | 218 | bool checkParcelHide = false; |
221 | UUID sourceParcelID = UUID.Zero; | 219 | UUID sourceParcelID = UUID.Zero; |
222 | Vector3 hidePos = fromPos; | 220 | Vector3 hidePos = fromPos; |
223 | >>>>>>> avn/ubitvar | ||
224 | 221 | ||
225 | if (c.Channel == DEBUG_CHANNEL) c.Type = ChatTypeEnum.DebugChannel; | 222 | if (c.Channel == DEBUG_CHANNEL) c.Type = ChatTypeEnum.DebugChannel; |
226 | 223 | ||
@@ -377,27 +374,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat | |||
377 | // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType); | 374 | // m_log.DebugFormat("[CHAT] Broadcast: fromID {0} fromName {1}, cType {2}, sType {3}", fromID, fromName, cType, sourceType); |
378 | HashSet<UUID> receiverIDs = new HashSet<UUID>(); | 375 | HashSet<UUID> receiverIDs = new HashSet<UUID>(); |
379 | 376 | ||
380 | <<<<<<< HEAD | ||
381 | ((Scene)c.Scene).ForEachRootClient( | ||
382 | delegate(IClientAPI client) | ||
383 | { | ||
384 | // don't forward SayOwner chat from objects to | ||
385 | // non-owner agents | ||
386 | if ((c.Type == ChatTypeEnum.Owner) && | ||
387 | (null != c.SenderObject) && | ||
388 | (((SceneObjectPart)c.SenderObject).OwnerID != client.AgentId)) | ||
389 | return; | ||
390 | |||
391 | client.SendChatMessage( | ||
392 | c.Message, (byte)cType, CenterOfRegion, fromName, fromID, ownerID, | ||
393 | (byte)sourceType, (byte)ChatAudibleLevel.Fully); | ||
394 | |||
395 | receiverIDs.Add(client.AgentId); | ||
396 | }); | ||
397 | |||
398 | (c.Scene as Scene).EventManager.TriggerOnChatToClients( | ||
399 | fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully); | ||
400 | ======= | ||
401 | if (c.Scene != null) | 377 | if (c.Scene != null) |
402 | { | 378 | { |
403 | ((Scene)c.Scene).ForEachRootClient | 379 | ((Scene)c.Scene).ForEachRootClient |
@@ -419,7 +395,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Chat | |||
419 | (c.Scene as Scene).EventManager.TriggerOnChatToClients( | 395 | (c.Scene as Scene).EventManager.TriggerOnChatToClients( |
420 | fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully); | 396 | fromID, receiverIDs, c.Message, cType, CenterOfRegion, fromName, sourceType, ChatAudibleLevel.Fully); |
421 | } | 397 | } |
422 | >>>>>>> avn/ubitvar | ||
423 | } | 398 | } |
424 | 399 | ||
425 | /// <summary> | 400 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs index b0b7054..4e1958a 100644 --- a/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Combat/CombatModule.cs | |||
@@ -183,15 +183,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Combat.CombatModule | |||
183 | try | 183 | try |
184 | { | 184 | { |
185 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 185 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
186 | <<<<<<< HEAD | ||
187 | |||
188 | if (obj == null) | ||
189 | return; | ||
190 | |||
191 | ======= | ||
192 | if (obj == null) | 186 | if (obj == null) |
193 | return; | 187 | return; |
194 | >>>>>>> avn/ubitvar | ||
195 | if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0 | 188 | if ((obj.LandData.Flags & (uint)ParcelFlags.AllowDamage) != 0 |
196 | || avatar.Scene.RegionInfo.RegionSettings.AllowDamage) | 189 | || avatar.Scene.RegionInfo.RegionSettings.AllowDamage) |
197 | { | 190 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index 5573c94..3c82fd9 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -188,7 +188,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
188 | SendGridInstantMessageViaXMLRPC(im, result); | 188 | SendGridInstantMessageViaXMLRPC(im, result); |
189 | } | 189 | } |
190 | 190 | ||
191 | public void HandleUndeliverableMessage(GridInstantMessage im, MessageResultNotification result) | 191 | public virtual void HandleUndeliverableMessage(GridInstantMessage im, MessageResultNotification result) |
192 | { | 192 | { |
193 | UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage; | 193 | UndeliveredMessage handlerUndeliveredMessage = OnUndeliveredMessage; |
194 | 194 | ||
@@ -445,14 +445,11 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
445 | return resp; | 445 | return resp; |
446 | } | 446 | } |
447 | 447 | ||
448 | <<<<<<< HEAD | 448 | |
449 | /// <summary> | 449 | /// <summary> |
450 | /// delegate for sending a grid instant message asynchronously | 450 | /// delegate for sending a grid instant message asynchronously |
451 | /// </summary> | 451 | /// </summary> |
452 | public delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result); | ||
453 | ======= | ||
454 | private delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result); | 452 | private delegate void GridInstantMessageDelegate(GridInstantMessage im, MessageResultNotification result); |
455 | >>>>>>> avn/ubitvar | ||
456 | 453 | ||
457 | private class GIM { | 454 | private class GIM { |
458 | public GridInstantMessage im; | 455 | public GridInstantMessage im; |
@@ -479,31 +476,22 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
479 | } | 476 | } |
480 | } | 477 | } |
481 | 478 | ||
482 | <<<<<<< HEAD | 479 | |
483 | d.BeginInvoke(im, result, GridInstantMessageCompleted, d); | ||
484 | ======= | ||
485 | private void GridInstantMessageCompleted(IAsyncResult iar) | 480 | private void GridInstantMessageCompleted(IAsyncResult iar) |
486 | { | 481 | { |
487 | GridInstantMessageDelegate d = (GridInstantMessageDelegate)iar.AsyncState; | 482 | GridInstantMessageDelegate d = (GridInstantMessageDelegate)iar.AsyncState; |
488 | d.EndInvoke(iar); | 483 | d.EndInvoke(iar); |
489 | >>>>>>> avn/ubitvar | ||
490 | } | 484 | } |
491 | 485 | ||
492 | /// <summary> | 486 | /// <summary> |
493 | /// Internal SendGridInstantMessage over XMLRPC method. | 487 | /// Internal SendGridInstantMessage over XMLRPC method. |
494 | /// </summary> | 488 | /// </summary> |
495 | <<<<<<< HEAD | 489 | |
496 | /// <remarks> | ||
497 | /// This is called from within a dedicated thread. | ||
498 | /// </remarks> | ||
499 | private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result) | ||
500 | ======= | ||
501 | /// <param name="prevRegionHandle"> | 490 | /// <param name="prevRegionHandle"> |
502 | /// Pass in 0 the first time this method is called. It will be called recursively with the last | 491 | /// Pass in 0 the first time this method is called. It will be called recursively with the last |
503 | /// regionhandle tried | 492 | /// regionhandle tried |
504 | /// </param> | 493 | /// </param> |
505 | private void SendGridInstantMessageViaXMLRPCAsyncMain(GridInstantMessage im, MessageResultNotification result) | 494 | private void SendGridInstantMessageViaXMLRPCAsyncMain(GridInstantMessage im, MessageResultNotification result) |
506 | >>>>>>> avn/ubitvar | ||
507 | { | 495 | { |
508 | GIM gim; | 496 | GIM gim; |
509 | do { | 497 | do { |
@@ -525,87 +513,124 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
525 | } | 513 | } |
526 | } while (gim != null); | 514 | } while (gim != null); |
527 | } | 515 | } |
516 | |||
528 | private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result, UUID prevRegionID) | 517 | private void SendGridInstantMessageViaXMLRPCAsync(GridInstantMessage im, MessageResultNotification result, UUID prevRegionID) |
529 | { | 518 | { |
530 | 519 | ||
531 | UUID toAgentID = new UUID(im.toAgentID); | 520 | UUID toAgentID = new UUID(im.toAgentID); |
521 | PresenceInfo upd = null; | ||
532 | UUID regionID; | 522 | UUID regionID; |
533 | bool needToLookupAgent; | 523 | bool lookupAgent = false; |
534 | 524 | ||
535 | lock (m_UserRegionMap) | 525 | lock (m_UserRegionMap) |
536 | needToLookupAgent = !m_UserRegionMap.TryGetValue(toAgentID, out regionID); | ||
537 | |||
538 | while (true) | ||
539 | { | 526 | { |
540 | if (needToLookupAgent) | 527 | if (m_UserRegionMap.ContainsKey(toAgentID)) |
541 | { | 528 | { |
542 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() }); | 529 | upd = new PresenceInfo(); |
530 | upd.RegionID = m_UserRegionMap[toAgentID]; | ||
531 | |||
532 | // We need to compare the current regionhandle with the previous region handle | ||
533 | // or the recursive loop will never end because it will never try to lookup the agent again | ||
534 | if (prevRegionID == upd.RegionID) | ||
535 | { | ||
536 | lookupAgent = true; | ||
537 | } | ||
538 | } | ||
539 | else | ||
540 | { | ||
541 | lookupAgent = true; | ||
542 | } | ||
543 | } | ||
543 | 544 | ||
544 | UUID foundRegionID = UUID.Zero; | ||
545 | 545 | ||
546 | if (presences != null) | 546 | // Are we needing to look-up an agent? |
547 | if (lookupAgent) | ||
548 | { | ||
549 | // Non-cached user agent lookup. | ||
550 | PresenceInfo[] presences = PresenceService.GetAgents(new string[] { toAgentID.ToString() }); | ||
551 | if (presences != null && presences.Length > 0) | ||
552 | { | ||
553 | foreach (PresenceInfo p in presences) | ||
547 | { | 554 | { |
548 | foreach (PresenceInfo p in presences) | 555 | if (p.RegionID != UUID.Zero) |
549 | { | 556 | { |
550 | if (p.RegionID != UUID.Zero) | 557 | upd = p; |
551 | { | 558 | break; |
552 | foundRegionID = p.RegionID; | ||
553 | break; | ||
554 | } | ||
555 | } | 559 | } |
556 | } | 560 | } |
557 | |||
558 | // If not found or the found region is the same as the last lookup, then message is undeliverable | ||
559 | if (foundRegionID == UUID.Zero || foundRegionID == regionID) | ||
560 | break; | ||
561 | else | ||
562 | regionID = foundRegionID; | ||
563 | } | 561 | } |
564 | 562 | ||
565 | GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, regionID); | 563 | if (upd != null) |
566 | if (reginfo == null) | ||
567 | { | 564 | { |
568 | m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", regionID); | 565 | // check if we've tried this before.. |
569 | break; | 566 | // This is one way to end the recursive loop |
567 | // | ||
568 | if (upd.RegionID == prevRegionID) | ||
569 | { | ||
570 | // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); | ||
571 | HandleUndeliverableMessage(im, result); | ||
572 | return; | ||
573 | } | ||
570 | } | 574 | } |
575 | else | ||
576 | { | ||
577 | // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); | ||
578 | HandleUndeliverableMessage(im, result); | ||
579 | return; | ||
580 | } | ||
581 | } | ||
571 | 582 | ||
572 | <<<<<<< HEAD | ||
573 | // Try to send the message to the agent via the retrieved region. | ||
574 | Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im); | ||
575 | msgdata["region_handle"] = 0; | ||
576 | bool imresult = doIMSending(reginfo, msgdata); | ||
577 | |||
578 | // If the message delivery was successful, then cache the entry. | ||
579 | if (imresult) | ||
580 | ======= | ||
581 | if (upd != null) | 583 | if (upd != null) |
582 | { | 584 | { |
583 | GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(UUID.Zero, | 585 | GridRegion reginfo = m_Scenes[0].GridService.GetRegionByUUID(UUID.Zero, |
584 | upd.RegionID); | 586 | upd.RegionID); |
585 | if (reginfo != null) | 587 | if (reginfo != null) |
586 | >>>>>>> avn/ubitvar | ||
587 | { | 588 | { |
588 | lock (m_UserRegionMap) | 589 | Hashtable msgdata = ConvertGridInstantMessageToXMLRPC(im); |
590 | // Not actually used anymore, left in for compatibility | ||
591 | // Remove at next interface change | ||
592 | // | ||
593 | msgdata["region_handle"] = 0; | ||
594 | bool imresult = doIMSending(reginfo, msgdata); | ||
595 | if (imresult) | ||
596 | { | ||
597 | // IM delivery successful, so store the Agent's location in our local cache. | ||
598 | lock (m_UserRegionMap) | ||
599 | { | ||
600 | if (m_UserRegionMap.ContainsKey(toAgentID)) | ||
601 | { | ||
602 | m_UserRegionMap[toAgentID] = upd.RegionID; | ||
603 | } | ||
604 | else | ||
605 | { | ||
606 | m_UserRegionMap.Add(toAgentID, upd.RegionID); | ||
607 | } | ||
608 | } | ||
609 | result(true); | ||
610 | } | ||
611 | else | ||
589 | { | 612 | { |
590 | m_UserRegionMap[toAgentID] = regionID; | 613 | // try again, but lookup user this time. |
614 | // Warning, this must call the Async version | ||
615 | // of this method or we'll be making thousands of threads | ||
616 | // The version within the spawned thread is SendGridInstantMessageViaXMLRPCAsync | ||
617 | // The version that spawns the thread is SendGridInstantMessageViaXMLRPC | ||
618 | |||
619 | // This is recursive!!!!! | ||
620 | SendGridInstantMessageViaXMLRPCAsync(im, result, | ||
621 | upd.RegionID); | ||
591 | } | 622 | } |
592 | result(true); | ||
593 | return; | ||
594 | } | 623 | } |
595 | 624 | else | |
596 | // If we reach this point in the first iteration of the while, then we may have unsuccessfully tried | 625 | { |
597 | // to use a locally cached region ID. All subsequent attempts need to lookup agent details from | 626 | m_log.WarnFormat("[GRID INSTANT MESSAGE]: Unable to find region {0}", upd.RegionID); |
598 | // the presence service. | 627 | HandleUndeliverableMessage(im, result); |
599 | needToLookupAgent = true; | 628 | } |
629 | } | ||
630 | else | ||
631 | { | ||
632 | HandleUndeliverableMessage(im, result); | ||
600 | } | 633 | } |
601 | |||
602 | // If we reached this point then the message was not deliverable. Remove the bad cache entry and | ||
603 | // signal the delivery failure. | ||
604 | lock (m_UserRegionMap) | ||
605 | m_UserRegionMap.Remove(toAgentID); | ||
606 | |||
607 | // m_log.Error("[GRID INSTANT MESSAGE]: Unable to deliver an instant message"); | ||
608 | HandleUndeliverableMessage(im, result); | ||
609 | } | 634 | } |
610 | 635 | ||
611 | /// <summary> | 636 | /// <summary> |
@@ -709,6 +734,5 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
709 | gim["message_key"] = m_MessageKey; | 734 | gim["message_key"] = m_MessageKey; |
710 | return gim; | 735 | return gim; |
711 | } | 736 | } |
712 | |||
713 | } | 737 | } |
714 | } | 738 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs index 76023bd..1650097 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/OfflineMessageModule.cs | |||
@@ -238,7 +238,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
238 | return; | 238 | return; |
239 | } | 239 | } |
240 | 240 | ||
241 | <<<<<<< HEAD | ||
242 | if (!m_ForwardOfflineGroupMessages) | 241 | if (!m_ForwardOfflineGroupMessages) |
243 | { | 242 | { |
244 | if (im.dialog == (byte)InstantMessageDialog.GroupNotice || | 243 | if (im.dialog == (byte)InstantMessageDialog.GroupNotice || |
@@ -246,9 +245,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
246 | return; | 245 | return; |
247 | } | 246 | } |
248 | 247 | ||
249 | bool success = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, bool>( | ||
250 | "POST", m_RestURL+"/SaveMessage/", im, 10000); | ||
251 | ======= | ||
252 | Scene scene = FindScene(new UUID(im.fromAgentID)); | 248 | Scene scene = FindScene(new UUID(im.fromAgentID)); |
253 | if (scene == null) | 249 | if (scene == null) |
254 | scene = m_SceneList[0]; | 250 | scene = m_SceneList[0]; |
@@ -256,7 +252,6 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
256 | SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>( | 252 | SendReply reply = SynchronousRestObjectRequester.MakeRequest<GridInstantMessage, SendReply>( |
257 | "POST", m_RestURL+"/SaveMessage/?scope=" + | 253 | "POST", m_RestURL+"/SaveMessage/?scope=" + |
258 | scene.RegionInfo.ScopeID.ToString(), im); | 254 | scene.RegionInfo.ScopeID.ToString(), im); |
259 | >>>>>>> avn/ubitvar | ||
260 | 255 | ||
261 | if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent) | 256 | if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent) |
262 | { | 257 | { |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 18e18a9..2d15b47 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs | |||
@@ -180,13 +180,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
180 | "[INVENTORY TRANSFER]: Inserting original folder {0} into agent {1}'s inventory", | 180 | "[INVENTORY TRANSFER]: Inserting original folder {0} into agent {1}'s inventory", |
181 | folderID, new UUID(im.toAgentID)); | 181 | folderID, new UUID(im.toAgentID)); |
182 | 182 | ||
183 | <<<<<<< HEAD | ||
184 | InventoryFolderBase folderCopy | 183 | InventoryFolderBase folderCopy |
185 | = scene.GiveInventoryFolder(client, receipientID, client.AgentId, folderID, UUID.Zero); | 184 | = scene.GiveInventoryFolder(client, recipientID, client.AgentId, folderID, UUID.Zero); |
186 | ======= | ||
187 | InventoryFolderBase folderCopy | ||
188 | = scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero); | ||
189 | >>>>>>> avn/ubitvar | ||
190 | 185 | ||
191 | if (folderCopy == null) | 186 | if (folderCopy == null) |
192 | { | 187 | { |
@@ -475,7 +470,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
475 | /// <param name="im"></param> | 470 | /// <param name="im"></param> |
476 | private void OnGridInstantMessage(GridInstantMessage im) | 471 | private void OnGridInstantMessage(GridInstantMessage im) |
477 | { | 472 | { |
478 | <<<<<<< HEAD | ||
479 | // Check if it's a type of message that we should handle | 473 | // Check if it's a type of message that we should handle |
480 | if (!((im.dialog == (byte) InstantMessageDialog.InventoryOffered) | 474 | if (!((im.dialog == (byte) InstantMessageDialog.InventoryOffered) |
481 | || (im.dialog == (byte) InstantMessageDialog.TaskInventoryOffered) | 475 | || (im.dialog == (byte) InstantMessageDialog.TaskInventoryOffered) |
@@ -488,8 +482,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
488 | "[INVENTORY TRANSFER]: {0} IM type received from grid. From={1} ({2}), To={3}", | 482 | "[INVENTORY TRANSFER]: {0} IM type received from grid. From={1} ({2}), To={3}", |
489 | (InstantMessageDialog)im.dialog, im.fromAgentID, im.fromAgentName, im.toAgentID); | 483 | (InstantMessageDialog)im.dialog, im.fromAgentID, im.fromAgentName, im.toAgentID); |
490 | 484 | ||
491 | ======= | ||
492 | >>>>>>> avn/ubitvar | ||
493 | // Check if this is ours to handle | 485 | // Check if this is ours to handle |
494 | // | 486 | // |
495 | Scene scene = FindClientScene(new UUID(im.toAgentID)); | 487 | Scene scene = FindClientScene(new UUID(im.toAgentID)); |
diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs index bea2834..4d1611c 100644 --- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs | |||
@@ -869,7 +869,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles | |||
869 | } | 869 | } |
870 | #endregion Notes | 870 | #endregion Notes |
871 | 871 | ||
872 | <<<<<<< HEAD | 872 | |
873 | #region User Preferences | 873 | #region User Preferences |
874 | /// <summary> | 874 | /// <summary> |
875 | /// Updates the user preferences. | 875 | /// Updates the user preferences. |
@@ -933,8 +933,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles | |||
933 | } | 933 | } |
934 | #endregion User Preferences | 934 | #endregion User Preferences |
935 | 935 | ||
936 | ======= | ||
937 | >>>>>>> avn/ubitvar | ||
938 | #region Avatar Properties | 936 | #region Avatar Properties |
939 | /// <summary> | 937 | /// <summary> |
940 | /// Update the avatars interests . | 938 | /// Update the avatars interests . |
@@ -1401,8 +1399,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles | |||
1401 | return null; | 1399 | return null; |
1402 | } | 1400 | } |
1403 | #endregion Util | 1401 | #endregion Util |
1404 | <<<<<<< HEAD | ||
1405 | ======= | ||
1406 | 1402 | ||
1407 | #region Web Util | 1403 | #region Web Util |
1408 | /// <summary> | 1404 | /// <summary> |
@@ -1580,6 +1576,5 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles | |||
1580 | return true; | 1576 | return true; |
1581 | } | 1577 | } |
1582 | #endregion Web Util | 1578 | #endregion Web Util |
1583 | >>>>>>> avn/ubitvar | ||
1584 | } | 1579 | } |
1585 | } | 1580 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 7937383..9a57599 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -154,16 +154,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
154 | // Add this agent in this region as a banned person | 154 | // Add this agent in this region as a banned person |
155 | public void Add(ulong pRegionHandle, UUID pAgentID) | 155 | public void Add(ulong pRegionHandle, UUID pAgentID) |
156 | { | 156 | { |
157 | <<<<<<< HEAD | ||
158 | if (!m_bannedRegions.TryGetValue(pAgentID, out m_idCache)) | ||
159 | { | ||
160 | m_idCache = new ExpiringCache<ulong, DateTime>(); | ||
161 | m_bannedRegions.Add(pAgentID, m_idCache, TimeSpan.FromSeconds(45)); | ||
162 | } | ||
163 | m_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(15)); | ||
164 | ======= | ||
165 | this.Add(pRegionHandle, pAgentID, 45, 15); | 157 | this.Add(pRegionHandle, pAgentID, 45, 15); |
166 | } | 158 | } |
159 | |||
167 | public void Add(ulong pRegionHandle, UUID pAgentID, double newTime, double extendTime) | 160 | public void Add(ulong pRegionHandle, UUID pAgentID, double newTime, double extendTime) |
168 | { | 161 | { |
169 | if (!m_bannedRegions.TryGetValue(pAgentID, out m_idCache)) | 162 | if (!m_bannedRegions.TryGetValue(pAgentID, out m_idCache)) |
@@ -172,8 +165,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
172 | m_bannedRegions.Add(pAgentID, m_idCache, TimeSpan.FromSeconds(newTime)); | 165 | m_bannedRegions.Add(pAgentID, m_idCache, TimeSpan.FromSeconds(newTime)); |
173 | } | 166 | } |
174 | m_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(extendTime), TimeSpan.FromSeconds(extendTime)); | 167 | m_idCache.Add(pRegionHandle, DateTime.Now + TimeSpan.FromSeconds(extendTime), TimeSpan.FromSeconds(extendTime)); |
175 | >>>>>>> avn/ubitvar | ||
176 | } | 168 | } |
169 | |||
177 | // Remove the agent from the region's banned list | 170 | // Remove the agent from the region's banned list |
178 | public void Remove(ulong pRegionHandle, UUID pAgentID) | 171 | public void Remove(ulong pRegionHandle, UUID pAgentID) |
179 | { | 172 | { |
@@ -183,6 +176,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
183 | } | 176 | } |
184 | } | 177 | } |
185 | } | 178 | } |
179 | |||
186 | private BannedRegionCache m_bannedRegionCache = new BannedRegionCache(); | 180 | private BannedRegionCache m_bannedRegionCache = new BannedRegionCache(); |
187 | 181 | ||
188 | private IEventQueue m_eqModule; | 182 | private IEventQueue m_eqModule; |
@@ -222,7 +216,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
222 | { | 216 | { |
223 | string transferVersionName = "SIMULATION"; | 217 | string transferVersionName = "SIMULATION"; |
224 | float maxTransferVersion = 0.3f; | 218 | float maxTransferVersion = 0.3f; |
225 | <<<<<<< HEAD | ||
226 | 219 | ||
227 | IConfig hypergridConfig = source.Configs["Hypergrid"]; | 220 | IConfig hypergridConfig = source.Configs["Hypergrid"]; |
228 | if (hypergridConfig != null) | 221 | if (hypergridConfig != null) |
@@ -235,8 +228,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
235 | if (m_GatekeeperURI != string.Empty && !m_GatekeeperURI.EndsWith("/")) | 228 | if (m_GatekeeperURI != string.Empty && !m_GatekeeperURI.EndsWith("/")) |
236 | m_GatekeeperURI += '/'; | 229 | m_GatekeeperURI += '/'; |
237 | } | 230 | } |
238 | ======= | ||
239 | >>>>>>> avn/ubitvar | ||
240 | 231 | ||
241 | IConfig transferConfig = source.Configs["EntityTransfer"]; | 232 | IConfig transferConfig = source.Configs["EntityTransfer"]; |
242 | if (transferConfig != null) | 233 | if (transferConfig != null) |
@@ -515,11 +506,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
515 | 506 | ||
516 | // TODO: Check other Scene HeightField | 507 | // TODO: Check other Scene HeightField |
517 | posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y]; | 508 | posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y]; |
518 | <<<<<<< HEAD | ||
519 | ======= | ||
520 | 509 | ||
521 | posZLimit += localHalfAVHeight + 0.1f; | 510 | posZLimit += localHalfAVHeight + 0.1f; |
522 | >>>>>>> avn/ubitvar | ||
523 | 511 | ||
524 | if ((position.Z < posZLimit) && !(Single.IsInfinity(posZLimit) || Single.IsNaN(posZLimit))) | 512 | if ((position.Z < posZLimit) && !(Single.IsInfinity(posZLimit) || Single.IsNaN(posZLimit))) |
525 | { | 513 | { |
@@ -622,15 +610,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
622 | Util.RegionHandleToRegionLoc(regionHandle, out regX, out regY); | 610 | Util.RegionHandleToRegionLoc(regionHandle, out regX, out regY); |
623 | 611 | ||
624 | MapBlockData block = new MapBlockData(); | 612 | MapBlockData block = new MapBlockData(); |
625 | <<<<<<< HEAD | ||
626 | block.X = (ushort)regX; | ||
627 | block.Y = (ushort)regY; | ||
628 | block.Access = (byte)SimAccess.Down; | ||
629 | ======= | ||
630 | block.X = (ushort)(regX); | 613 | block.X = (ushort)(regX); |
631 | block.Y = (ushort)(regY); | 614 | block.Y = (ushort)(regY); |
632 | block.Access = (byte)SimAccess.Down; // == not there | 615 | block.Access = (byte)SimAccess.Down; // == not there |
633 | >>>>>>> avn/ubitvar | ||
634 | 616 | ||
635 | List<MapBlockData> blocks = new List<MapBlockData>(); | 617 | List<MapBlockData> blocks = new List<MapBlockData>(); |
636 | blocks.Add(block); | 618 | blocks.Add(block); |
@@ -765,13 +747,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
765 | return; | 747 | return; |
766 | } | 748 | } |
767 | 749 | ||
768 | <<<<<<< HEAD | ||
769 | uint newRegionX, newRegionY, oldRegionX, oldRegionY; | ||
770 | Util.RegionHandleToRegionLoc(reg.RegionHandle, out newRegionX, out newRegionY); | ||
771 | Util.RegionHandleToRegionLoc(sp.Scene.RegionInfo.RegionHandle, out oldRegionX, out oldRegionY); | ||
772 | |||
773 | ======= | ||
774 | >>>>>>> avn/ubitvar | ||
775 | ulong destinationHandle = finalDestination.RegionHandle; | 750 | ulong destinationHandle = finalDestination.RegionHandle; |
776 | 751 | ||
777 | // Let's do DNS resolution only once in this process, please! | 752 | // Let's do DNS resolution only once in this process, please! |
@@ -794,11 +769,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
794 | string version; | 769 | string version; |
795 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); | 770 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); |
796 | if (!Scene.SimulationService.QueryAccess( | 771 | if (!Scene.SimulationService.QueryAccess( |
797 | <<<<<<< HEAD | ||
798 | finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, sp.Scene.GetFormatsOffered(), out version, out reason)) | 772 | finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, sp.Scene.GetFormatsOffered(), out version, out reason)) |
799 | ======= | ||
800 | finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, out version, out reason)) | ||
801 | >>>>>>> avn/ubitvar | ||
802 | { | 773 | { |
803 | sp.ControllingClient.SendTeleportFailed(reason); | 774 | sp.ControllingClient.SendTeleportFailed(reason); |
804 | 775 | ||
@@ -860,12 +831,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
860 | agentCircuit.Id0 = currentAgentCircuit.Id0; | 831 | agentCircuit.Id0 = currentAgentCircuit.Id0; |
861 | } | 832 | } |
862 | 833 | ||
863 | <<<<<<< HEAD | ||
864 | // if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY)) | ||
865 | float dist = (float)Math.Max(sp.Scene.DefaultDrawDistance, | ||
866 | (float)Math.Max(sp.Scene.RegionInfo.RegionSizeX, sp.Scene.RegionInfo.RegionSizeY)); | ||
867 | if (NeedsNewAgent(dist, oldRegionX, newRegionX, oldRegionY, newRegionY)) | ||
868 | ======= | ||
869 | IClientIPEndpoint ipepClient; | 834 | IClientIPEndpoint ipepClient; |
870 | 835 | ||
871 | uint newRegionX, newRegionY, oldRegionX, oldRegionY; | 836 | uint newRegionX, newRegionY, oldRegionX, oldRegionY; |
@@ -880,7 +845,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
880 | oldSizeX, oldSizeY, newSizeX, newSizeY); | 845 | oldSizeX, oldSizeY, newSizeX, newSizeY); |
881 | 846 | ||
882 | if (OutSideViewRange) | 847 | if (OutSideViewRange) |
883 | >>>>>>> avn/ubitvar | ||
884 | { | 848 | { |
885 | m_log.DebugFormat( | 849 | m_log.DebugFormat( |
886 | "[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}", | 850 | "[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}", |
@@ -911,11 +875,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
911 | float.TryParse(versionComponents[1], out versionNumber); | 875 | float.TryParse(versionComponents[1], out versionNumber); |
912 | 876 | ||
913 | if (versionNumber >= 0.2f && MaxOutgoingTransferVersion >= versionNumber) | 877 | if (versionNumber >= 0.2f && MaxOutgoingTransferVersion >= versionNumber) |
914 | <<<<<<< HEAD | ||
915 | TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason); | ||
916 | ======= | ||
917 | TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange , version, out reason); | 878 | TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange , version, out reason); |
918 | >>>>>>> avn/ubitvar | ||
919 | else | 879 | else |
920 | TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange, version, out reason); | 880 | TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange, version, out reason); |
921 | } | 881 | } |
@@ -973,21 +933,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
973 | m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring); | 933 | m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring); |
974 | 934 | ||
975 | // OK, it got this agent. Let's close some child agents | 935 | // OK, it got this agent. Let's close some child agents |
976 | <<<<<<< HEAD | ||
977 | sp.CloseChildAgents(newRegionX, newRegionY); | ||
978 | |||
979 | IClientIPEndpoint ipepClient; | ||
980 | string capsPath = String.Empty; | ||
981 | float dist = (float)Math.Max(sp.Scene.DefaultDrawDistance, | ||
982 | (float)Math.Max(sp.Scene.RegionInfo.RegionSizeX, sp.Scene.RegionInfo.RegionSizeY)); | ||
983 | if (NeedsNewAgent(dist, oldRegionX, newRegionX, oldRegionY, newRegionY)) | ||
984 | { | ||
985 | m_log.DebugFormat( | ||
986 | "[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for incoming agent {3} from {4}", | ||
987 | finalDestination.RegionName, newRegionX, newRegionY, sp.Name, Scene.Name); | ||
988 | ======= | ||
989 | >>>>>>> avn/ubitvar | ||
990 | |||
991 | 936 | ||
992 | if (OutSideViewRange) | 937 | if (OutSideViewRange) |
993 | { | 938 | { |
@@ -1157,11 +1102,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1157 | 1102 | ||
1158 | // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone | 1103 | // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone |
1159 | 1104 | ||
1160 | <<<<<<< HEAD | ||
1161 | if (NeedsClosing(sp.Scene.DefaultDrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) | ||
1162 | ======= | ||
1163 | if (OutSideViewRange) | 1105 | if (OutSideViewRange) |
1164 | >>>>>>> avn/ubitvar | ||
1165 | { | 1106 | { |
1166 | if (!sp.Scene.IncomingPreCloseClient(sp)) | 1107 | if (!sp.Scene.IncomingPreCloseClient(sp)) |
1167 | return; | 1108 | return; |
@@ -1226,35 +1167,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1226 | // Past this point we have to attempt clean up if the teleport fails, so update transfer state. | 1167 | // Past this point we have to attempt clean up if the teleport fails, so update transfer state. |
1227 | m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring); | 1168 | m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.Transferring); |
1228 | 1169 | ||
1229 | <<<<<<< HEAD | ||
1230 | IClientIPEndpoint ipepClient; | ||
1231 | string capsPath = String.Empty; | ||
1232 | float dist = (float)Math.Max(sp.Scene.DefaultDrawDistance, | ||
1233 | (float)Math.Max(sp.Scene.RegionInfo.RegionSizeX, sp.Scene.RegionInfo.RegionSizeY)); | ||
1234 | if (NeedsNewAgent(dist, oldRegionX, newRegionX, oldRegionY, newRegionY)) | ||
1235 | { | ||
1236 | m_log.DebugFormat( | ||
1237 | "[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}", | ||
1238 | finalDestination.RegionName, newRegionX, newRegionY, sp.Name, Scene.Name); | ||
1239 | |||
1240 | //sp.ControllingClient.SendTeleportProgress(teleportFlags, "Creating agent..."); | ||
1241 | #region IP Translation for NAT | ||
1242 | // Uses ipepClient above | ||
1243 | if (sp.ClientView.TryGet(out ipepClient)) | ||
1244 | { | ||
1245 | endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address); | ||
1246 | } | ||
1247 | #endregion | ||
1248 | capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath); | ||
1249 | } | ||
1250 | else | ||
1251 | { | ||
1252 | agentCircuit.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, reg.RegionHandle); | ||
1253 | capsPath = finalDestination.ServerURI + CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath); | ||
1254 | } | ||
1255 | |||
1256 | ======= | ||
1257 | >>>>>>> avn/ubitvar | ||
1258 | // We need to set this here to avoid an unlikely race condition when teleporting to a neighbour simulator, | 1170 | // We need to set this here to avoid an unlikely race condition when teleporting to a neighbour simulator, |
1259 | // where that neighbour simulator could otherwise request a child agent create on the source which then | 1171 | // where that neighbour simulator could otherwise request a child agent create on the source which then |
1260 | // closes our existing agent which is still signalled as root. | 1172 | // closes our existing agent which is still signalled as root. |
@@ -1333,11 +1245,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1333 | sp.MakeChildAgent(destinationHandle); | 1245 | sp.MakeChildAgent(destinationHandle); |
1334 | 1246 | ||
1335 | // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone | 1247 | // Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone |
1336 | <<<<<<< HEAD | ||
1337 | if (NeedsClosing(sp.Scene.DefaultDrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) | ||
1338 | ======= | ||
1339 | if (OutSideViewRange) | 1248 | if (OutSideViewRange) |
1340 | >>>>>>> avn/ubitvar | ||
1341 | { | 1249 | { |
1342 | if (!sp.Scene.IncomingPreCloseClient(sp)) | 1250 | if (!sp.Scene.IncomingPreCloseClient(sp)) |
1343 | return; | 1251 | return; |
@@ -1465,12 +1373,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1465 | // This returns 'true' if the new region already has a child agent for our | 1373 | // This returns 'true' if the new region already has a child agent for our |
1466 | // incoming agent. The implication is that, if 'false', we have to create the | 1374 | // incoming agent. The implication is that, if 'false', we have to create the |
1467 | // child and then teleport into the region. | 1375 | // child and then teleport into the region. |
1468 | <<<<<<< HEAD | ||
1469 | protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY) | ||
1470 | ======= | ||
1471 | protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, | 1376 | protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, |
1472 | int oldsizeX, int oldsizeY, int newsizeX, int newsizeY) | 1377 | int oldsizeX, int oldsizeY, int newsizeX, int newsizeY) |
1473 | >>>>>>> avn/ubitvar | ||
1474 | { | 1378 | { |
1475 | if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) | 1379 | if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) |
1476 | { | 1380 | { |
@@ -1487,9 +1391,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1487 | return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY, | 1391 | return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY, |
1488 | oldsizeX, oldsizeY, newsizeX, newsizeY); | 1392 | oldsizeX, oldsizeY, newsizeX, newsizeY); |
1489 | } | 1393 | } |
1490 | <<<<<<< HEAD | ||
1491 | |||
1492 | ======= | ||
1493 | /* | 1394 | /* |
1494 | protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, | 1395 | protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, |
1495 | uint oldsizeX, uint oldsizeY, uint newsizeX, uint newsizeY, GridRegion reg) | 1396 | uint oldsizeX, uint oldsizeY, uint newsizeX, uint newsizeY, GridRegion reg) |
@@ -1499,7 +1400,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1499 | oldsizeX, oldsizeY, newsizeX, newsizeY); | 1400 | oldsizeX, oldsizeY, newsizeX, newsizeY); |
1500 | } | 1401 | } |
1501 | */ | 1402 | */ |
1502 | >>>>>>> avn/ubitvar | ||
1503 | #endregion | 1403 | #endregion |
1504 | 1404 | ||
1505 | #region Landmark Teleport | 1405 | #region Landmark Teleport |
@@ -1580,82 +1480,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1580 | 1480 | ||
1581 | #region Agent Crossings | 1481 | #region Agent Crossings |
1582 | 1482 | ||
1583 | <<<<<<< HEAD | ||
1584 | // Given a position relative to the current region (which has previously been tested to | ||
1585 | // see that it is actually outside the current region), find the new region that the | ||
1586 | // point is actually in. | ||
1587 | // Returns the coordinates and information of the new region or 'null' of it doesn't exist. | ||
1588 | public GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, | ||
1589 | out string version, out Vector3 newpos, out string failureReason) | ||
1590 | ======= | ||
1591 | public bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason) | 1483 | public bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason) |
1592 | >>>>>>> avn/ubitvar | ||
1593 | { | 1484 | { |
1594 | reason = String.Empty; | 1485 | reason = String.Empty; |
1595 | version = String.Empty; | 1486 | version = String.Empty; |
1596 | <<<<<<< HEAD | ||
1597 | newpos = pos; | ||
1598 | failureReason = string.Empty; | ||
1599 | string homeURI = scene.GetAgentHomeURI(agentID); | ||
1600 | |||
1601 | // m_log.DebugFormat( | ||
1602 | // "[ENTITY TRANSFER MODULE]: Crossing agent {0} at pos {1} in {2}", agent.Name, pos, scene.Name); | ||
1603 | |||
1604 | // Compute world location of the object's position | ||
1605 | double presenceWorldX = (double)scene.RegionInfo.WorldLocX + pos.X; | ||
1606 | double presenceWorldY = (double)scene.RegionInfo.WorldLocY + pos.Y; | ||
1607 | |||
1608 | // Call the grid service to lookup the region containing the new position. | ||
1609 | GridRegion neighbourRegion = GetRegionContainingWorldLocation(scene.GridService, scene.RegionInfo.ScopeID, | ||
1610 | presenceWorldX, presenceWorldY, | ||
1611 | Math.Max(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY)); | ||
1612 | |||
1613 | if (neighbourRegion != null) | ||
1614 | { | ||
1615 | // Compute the entity's position relative to the new region | ||
1616 | newpos = new Vector3((float)(presenceWorldX - (double)neighbourRegion.RegionLocX), | ||
1617 | (float)(presenceWorldY - (double)neighbourRegion.RegionLocY), | ||
1618 | pos.Z); | ||
1619 | |||
1620 | if (m_bannedRegionCache.IfBanned(neighbourRegion.RegionHandle, agentID)) | ||
1621 | { | ||
1622 | failureReason = "Cannot region cross into banned parcel"; | ||
1623 | neighbourRegion = null; | ||
1624 | } | ||
1625 | else | ||
1626 | { | ||
1627 | // If not banned, make sure this agent is not in the list. | ||
1628 | m_bannedRegionCache.Remove(neighbourRegion.RegionHandle, agentID); | ||
1629 | } | ||
1630 | |||
1631 | // Check to see if we have access to the target region. | ||
1632 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); | ||
1633 | if (neighbourRegion != null | ||
1634 | && !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, myversion, scene.GetFormatsOffered(), out version, out failureReason)) | ||
1635 | { | ||
1636 | // remember banned | ||
1637 | m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID); | ||
1638 | neighbourRegion = null; | ||
1639 | } | ||
1640 | } | ||
1641 | else | ||
1642 | { | ||
1643 | // The destination region just doesn't exist | ||
1644 | failureReason = "Cannot cross into non-existent region"; | ||
1645 | } | ||
1646 | |||
1647 | if (neighbourRegion == null) | ||
1648 | m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}", | ||
1649 | LogHeader, scene.RegionInfo.RegionName, | ||
1650 | scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY, | ||
1651 | scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeY, | ||
1652 | pos); | ||
1653 | else | ||
1654 | m_log.DebugFormat("{0} GetDestination: new region={1} at <{2},{3}> of size <{4},{5}>, newpos=<{6},{7}>", | ||
1655 | LogHeader, neighbourRegion.RegionName, | ||
1656 | neighbourRegion.RegionLocX, neighbourRegion.RegionLocY, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY, | ||
1657 | newpos.X, newpos.Y); | ||
1658 | ======= | ||
1659 | 1487 | ||
1660 | UUID agentID = agent.UUID; | 1488 | UUID agentID = agent.UUID; |
1661 | ulong destinyHandle = destiny.RegionHandle; | 1489 | ulong destinyHandle = destiny.RegionHandle; |
@@ -1672,7 +1500,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1672 | 1500 | ||
1673 | 1501 | ||
1674 | if (!ascene.SimulationService.QueryAccess(destiny, agentID, homeURI, false, position, | 1502 | if (!ascene.SimulationService.QueryAccess(destiny, agentID, homeURI, false, position, |
1675 | myversion, out version, out reason)) | 1503 | myversion, agent.Scene.GetFormatsOffered(), out version, out reason)) |
1676 | { | 1504 | { |
1677 | m_bannedRegionCache.Add(destinyHandle, agentID, 30.0, 30.0); | 1505 | m_bannedRegionCache.Add(destinyHandle, agentID, 30.0, 30.0); |
1678 | return false; | 1506 | return false; |
@@ -1735,7 +1563,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1735 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); | 1563 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); |
1736 | string homeURI = scene.GetAgentHomeURI(agentID); | 1564 | string homeURI = scene.GetAgentHomeURI(agentID); |
1737 | if (neighbourRegion != null | 1565 | if (neighbourRegion != null |
1738 | && !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, myversion, out version, out failureReason)) | 1566 | && !scene.SimulationService.QueryAccess( |
1567 | neighbourRegion, agentID, homeURI, false, newpos, myversion, | ||
1568 | new List<UUID>(), out version, out failureReason)) | ||
1739 | { | 1569 | { |
1740 | // remember banned | 1570 | // remember banned |
1741 | m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID); | 1571 | m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID); |
@@ -1747,7 +1577,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1747 | // The destination region just doesn't exist | 1577 | // The destination region just doesn't exist |
1748 | failureReason = "Cannot cross into non-existent region"; | 1578 | failureReason = "Cannot cross into non-existent region"; |
1749 | } | 1579 | } |
1750 | >>>>>>> avn/ubitvar | ||
1751 | 1580 | ||
1752 | if (neighbourRegion == null) | 1581 | if (neighbourRegion == null) |
1753 | m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}", | 1582 | m_log.DebugFormat("{0} GetDestination: region not found. Old region name={1} at <{2},{3}> of size <{4},{5}>. Old pos={6}", |
@@ -1766,8 +1595,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1766 | 1595 | ||
1767 | public bool Cross(ScenePresence agent, bool isFlying) | 1596 | public bool Cross(ScenePresence agent, bool isFlying) |
1768 | { | 1597 | { |
1769 | <<<<<<< HEAD | ||
1770 | ======= | ||
1771 | agent.IsInTransit = true; | 1598 | agent.IsInTransit = true; |
1772 | CrossAsyncDelegate d = CrossAsync; | 1599 | CrossAsyncDelegate d = CrossAsync; |
1773 | d.BeginInvoke(agent, isFlying, CrossCompleted, d); | 1600 | d.BeginInvoke(agent, isFlying, CrossCompleted, d); |
@@ -1793,19 +1620,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1793 | { | 1620 | { |
1794 | uint x; | 1621 | uint x; |
1795 | uint y; | 1622 | uint y; |
1796 | >>>>>>> avn/ubitvar | ||
1797 | Vector3 newpos; | 1623 | Vector3 newpos; |
1798 | string version; | 1624 | string version; |
1799 | string failureReason; | 1625 | string failureReason; |
1800 | 1626 | ||
1801 | <<<<<<< HEAD | ||
1802 | GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, agent.AbsolutePosition, | ||
1803 | out version, out newpos, out failureReason); | ||
1804 | if (neighbourRegion == null) | ||
1805 | { | ||
1806 | agent.ControllingClient.SendAlertMessage(failureReason); | ||
1807 | return false; | ||
1808 | ======= | ||
1809 | Vector3 pos = agent.AbsolutePosition + agent.Velocity; | 1627 | Vector3 pos = agent.AbsolutePosition + agent.Velocity; |
1810 | 1628 | ||
1811 | GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos, | 1629 | GridRegion neighbourRegion = GetDestination(agent.Scene, agent.UUID, pos, |
@@ -1815,23 +1633,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1815 | if (failureReason != String.Empty) | 1633 | if (failureReason != String.Empty) |
1816 | agent.ControllingClient.SendAlertMessage(failureReason); | 1634 | agent.ControllingClient.SendAlertMessage(failureReason); |
1817 | return agent; | 1635 | return agent; |
1818 | >>>>>>> avn/ubitvar | ||
1819 | } | 1636 | } |
1820 | 1637 | ||
1821 | // agent.IsInTransit = true; | 1638 | // agent.IsInTransit = true; |
1822 | 1639 | ||
1823 | <<<<<<< HEAD | ||
1824 | Scene.EventManager.TriggerCrossAgentToNewRegion(agent, isFlying, neighbourRegion); | ||
1825 | |||
1826 | return true; | ||
1827 | ======= | ||
1828 | CrossAgentToNewRegionAsync(agent, newpos, neighbourRegion, isFlying, version); | 1640 | CrossAgentToNewRegionAsync(agent, newpos, neighbourRegion, isFlying, version); |
1829 | agent.IsInTransit = false; | 1641 | agent.IsInTransit = false; |
1830 | return agent; | 1642 | return agent; |
1831 | >>>>>>> avn/ubitvar | ||
1832 | } | 1643 | } |
1833 | 1644 | ||
1834 | |||
1835 | public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY, | 1645 | public delegate void InformClientToInitiateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY, |
1836 | Vector3 position, | 1646 | Vector3 position, |
1837 | Scene initiatingScene); | 1647 | Scene initiatingScene); |
@@ -1958,10 +1768,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1958 | { | 1768 | { |
1959 | AgentData cAgent = new AgentData(); | 1769 | AgentData cAgent = new AgentData(); |
1960 | agent.CopyTo(cAgent); | 1770 | agent.CopyTo(cAgent); |
1961 | <<<<<<< HEAD | ||
1962 | cAgent.Position = pos; | ||
1963 | |||
1964 | ======= | ||
1965 | 1771 | ||
1966 | // agent.Appearance.WearableCacheItems = null; | 1772 | // agent.Appearance.WearableCacheItems = null; |
1967 | 1773 | ||
@@ -1969,7 +1775,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1969 | 1775 | ||
1970 | cAgent.ChildrenCapSeeds = agent.KnownRegions; | 1776 | cAgent.ChildrenCapSeeds = agent.KnownRegions; |
1971 | 1777 | ||
1972 | >>>>>>> avn/ubitvar | ||
1973 | if (isFlying) | 1778 | if (isFlying) |
1974 | cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY; | 1779 | cAgent.ControlFlags |= (uint)AgentManager.ControlFlags.AGENT_CONTROL_FLY; |
1975 | 1780 | ||
@@ -2048,25 +1853,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2048 | capsPath); | 1853 | capsPath); |
2049 | } | 1854 | } |
2050 | 1855 | ||
2051 | <<<<<<< HEAD | ||
2052 | // SUCCESS! | ||
2053 | m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination); | ||
2054 | |||
2055 | // Unlike a teleport, here we do not wait for the destination region to confirm the receipt. | ||
2056 | m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.CleaningUp); | ||
2057 | |||
2058 | agent.MakeChildAgent(); | ||
2059 | |||
2060 | // FIXME: Possibly this should occur lower down after other commands to close other agents, | ||
2061 | // but not sure yet what the side effects would be. | ||
2062 | m_entityTransferStateMachine.ResetFromTransit(agent.UUID); | ||
2063 | |||
2064 | // now we have a child agent in this region. Request all interesting data about other (root) agents | ||
2065 | agent.SendOtherAgentsAvatarDataToClient(); | ||
2066 | agent.SendOtherAgentsAppearanceToClient(); | ||
2067 | |||
2068 | ======= | ||
2069 | >>>>>>> avn/ubitvar | ||
2070 | // Backwards compatibility. Best effort | 1856 | // Backwards compatibility. Best effort |
2071 | if (version == "Unknown" || version == string.Empty) | 1857 | if (version == "Unknown" || version == string.Empty) |
2072 | { | 1858 | { |
@@ -2075,12 +1861,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2075 | CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true); | 1861 | CrossAttachmentsIntoNewRegion(neighbourRegion, agent, true); |
2076 | } | 1862 | } |
2077 | 1863 | ||
2078 | <<<<<<< HEAD | ||
2079 | // Next, let's close the child agent connections that are too far away. | ||
2080 | uint neighbourx; | ||
2081 | uint neighboury; | ||
2082 | Util.RegionHandleToRegionLoc(neighbourRegion.RegionHandle, out neighbourx, out neighboury); | ||
2083 | ======= | ||
2084 | // SUCCESS! | 1864 | // SUCCESS! |
2085 | m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination); | 1865 | m_entityTransferStateMachine.UpdateInTransit(agent.UUID, AgentTransferState.ReceivedAtDestination); |
2086 | 1866 | ||
@@ -2096,7 +1876,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2096 | // FIXME: Possibly this should occur lower down after other commands to close other agents, | 1876 | // FIXME: Possibly this should occur lower down after other commands to close other agents, |
2097 | // but not sure yet what the side effects would be. | 1877 | // but not sure yet what the side effects would be. |
2098 | m_entityTransferStateMachine.ResetFromTransit(agent.UUID); | 1878 | m_entityTransferStateMachine.ResetFromTransit(agent.UUID); |
2099 | >>>>>>> avn/ubitvar | ||
2100 | 1879 | ||
2101 | agent.CloseChildAgents(neighbourRegion.RegionHandle, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY); | 1880 | agent.CloseChildAgents(neighbourRegion.RegionHandle, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY); |
2102 | 1881 | ||
@@ -2177,24 +1956,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2177 | 1956 | ||
2178 | seeds.Add(regionhandler, agent.CapsPath); | 1957 | seeds.Add(regionhandler, agent.CapsPath); |
2179 | 1958 | ||
2180 | <<<<<<< HEAD | ||
2181 | sp.AddNeighbourRegion(region.RegionHandle, agent.CapsPath); | ||
2182 | //foreach (ulong h in agent.ChildrenCapSeeds.Keys) | ||
2183 | // m_log.DebugFormat("[XXX] --> {0}", h); | ||
2184 | //m_log.DebugFormat("[XXX] Adding {0}", region.RegionHandle); | ||
2185 | if (agent.ChildrenCapSeeds.ContainsKey(region.RegionHandle)) | ||
2186 | { | ||
2187 | m_log.WarnFormat( | ||
2188 | "[ENTITY TRANSFER]: Overwriting caps seed {0} with {1} for region {2} (handle {3}) for {4} in {5}", | ||
2189 | agent.ChildrenCapSeeds[region.RegionHandle], agent.CapsPath, | ||
2190 | region.RegionName, region.RegionHandle, sp.Name, Scene.Name); | ||
2191 | } | ||
2192 | 1959 | ||
2193 | agent.ChildrenCapSeeds[region.RegionHandle] = agent.CapsPath; | ||
2194 | ======= | ||
2195 | // agent.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds); | 1960 | // agent.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds); |
2196 | agent.ChildrenCapSeeds = null; | 1961 | agent.ChildrenCapSeeds = null; |
2197 | >>>>>>> avn/ubitvar | ||
2198 | 1962 | ||
2199 | if (sp.Scene.CapsModule != null) | 1963 | if (sp.Scene.CapsModule != null) |
2200 | { | 1964 | { |
@@ -2278,11 +2042,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2278 | 2042 | ||
2279 | if (m_regionInfo != null) | 2043 | if (m_regionInfo != null) |
2280 | { | 2044 | { |
2281 | <<<<<<< HEAD | ||
2282 | neighbours = GetNeighbours(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); | ||
2283 | ======= | ||
2284 | neighbours = GetNeighbors(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); | 2045 | neighbours = GetNeighbors(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY); |
2285 | >>>>>>> avn/ubitvar | ||
2286 | } | 2046 | } |
2287 | else | 2047 | else |
2288 | { | 2048 | { |
@@ -2531,127 +2291,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2531 | #endregion // NotFoundLocationCache class | 2291 | #endregion // NotFoundLocationCache class |
2532 | private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache(); | 2292 | private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache(); |
2533 | 2293 | ||
2534 | <<<<<<< HEAD | ||
2535 | // Computes the difference between two region bases. | ||
2536 | // Returns a vector of world coordinates (meters) from base of first region to the second. | ||
2537 | // The first region is the home region of the passed scene presence. | ||
2538 | Vector3 CalculateOffset(ScenePresence sp, GridRegion neighbour) | ||
2539 | { | ||
2540 | /* | ||
2541 | int rRegionX = (int)sp.Scene.RegionInfo.LegacyRegionLocX; | ||
2542 | int rRegionY = (int)sp.Scene.RegionInfo.LegacyRegionLocY; | ||
2543 | int tRegionX = neighbour.RegionLocX / (int)Constants.RegionSize; | ||
2544 | int tRegionY = neighbour.RegionLocY / (int)Constants.RegionSize; | ||
2545 | int shiftx = (rRegionX - tRegionX) * (int)Constants.RegionSize; | ||
2546 | int shifty = (rRegionY - tRegionY) * (int)Constants.RegionSize; | ||
2547 | return new Vector3(shiftx, shifty, 0f); | ||
2548 | */ | ||
2549 | return new Vector3( sp.Scene.RegionInfo.WorldLocX - neighbour.RegionLocX, | ||
2550 | sp.Scene.RegionInfo.WorldLocY - neighbour.RegionLocY, | ||
2551 | 0f); | ||
2552 | } | ||
2553 | |||
2554 | public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py) | ||
2555 | { | ||
2556 | // Since we don't know how big the regions could be, we have to search a very large area | ||
2557 | // to find possible regions. | ||
2558 | return GetRegionContainingWorldLocation(pGridService, pScopeID, px, py, Constants.MaximumRegionSize); | ||
2559 | } | ||
2560 | |||
2561 | #region NotFoundLocationCache class | ||
2562 | // A collection of not found locations to make future lookups 'not found' lookups quick. | ||
2563 | // A simple expiring cache that keeps not found locations for some number of seconds. | ||
2564 | // A 'not found' location is presumed to be anywhere in the minimum sized region that | ||
2565 | // contains that point. A conservitive estimate. | ||
2566 | private class NotFoundLocationCache | ||
2567 | { | ||
2568 | private struct NotFoundLocation | ||
2569 | { | ||
2570 | public double minX, maxX, minY, maxY; | ||
2571 | public DateTime expireTime; | ||
2572 | } | ||
2573 | private List<NotFoundLocation> m_notFoundLocations = new List<NotFoundLocation>(); | ||
2574 | public NotFoundLocationCache() | ||
2575 | { | ||
2576 | } | ||
2577 | // Add an area to the list of 'not found' places. The area is the snapped region | ||
2578 | // area around the added point. | ||
2579 | public void Add(double pX, double pY) | ||
2580 | { | ||
2581 | lock (m_notFoundLocations) | ||
2582 | { | ||
2583 | if (!LockedContains(pX, pY)) | ||
2584 | { | ||
2585 | NotFoundLocation nfl = new NotFoundLocation(); | ||
2586 | // A not found location is not found for at least a whole region sized area | ||
2587 | nfl.minX = pX - (pX % (double)Constants.RegionSize); | ||
2588 | nfl.minY = pY - (pY % (double)Constants.RegionSize); | ||
2589 | nfl.maxX = nfl.minX + (double)Constants.RegionSize; | ||
2590 | nfl.maxY = nfl.minY + (double)Constants.RegionSize; | ||
2591 | nfl.expireTime = DateTime.Now + TimeSpan.FromSeconds(30); | ||
2592 | m_notFoundLocations.Add(nfl); | ||
2593 | } | ||
2594 | } | ||
2595 | |||
2596 | } | ||
2597 | // Test to see of this point is in any of the 'not found' areas. | ||
2598 | // Return 'true' if the point is found inside the 'not found' areas. | ||
2599 | public bool Contains(double pX, double pY) | ||
2600 | { | ||
2601 | bool ret = false; | ||
2602 | lock (m_notFoundLocations) | ||
2603 | ret = LockedContains(pX, pY); | ||
2604 | return ret; | ||
2605 | } | ||
2606 | private bool LockedContains(double pX, double pY) | ||
2607 | { | ||
2608 | bool ret = false; | ||
2609 | this.DoExpiration(); | ||
2610 | foreach (NotFoundLocation nfl in m_notFoundLocations) | ||
2611 | { | ||
2612 | if (pX >= nfl.minX && pX < nfl.maxX && pY >= nfl.minY && pY < nfl.maxY) | ||
2613 | { | ||
2614 | ret = true; | ||
2615 | break; | ||
2616 | } | ||
2617 | } | ||
2618 | return ret; | ||
2619 | } | ||
2620 | private void DoExpiration() | ||
2621 | { | ||
2622 | List<NotFoundLocation> m_toRemove = null; | ||
2623 | DateTime now = DateTime.Now; | ||
2624 | foreach (NotFoundLocation nfl in m_notFoundLocations) | ||
2625 | { | ||
2626 | if (nfl.expireTime < now) | ||
2627 | { | ||
2628 | if (m_toRemove == null) | ||
2629 | m_toRemove = new List<NotFoundLocation>(); | ||
2630 | m_toRemove.Add(nfl); | ||
2631 | } | ||
2632 | } | ||
2633 | if (m_toRemove != null) | ||
2634 | { | ||
2635 | foreach (NotFoundLocation nfl in m_toRemove) | ||
2636 | m_notFoundLocations.Remove(nfl); | ||
2637 | m_toRemove.Clear(); | ||
2638 | } | ||
2639 | } | ||
2640 | } | ||
2641 | #endregion // NotFoundLocationCache class | ||
2642 | private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache(); | ||
2643 | |||
2644 | // Given a world position (fractional meter coordinate), get the GridRegion info for | ||
2645 | // the region containing that point. | ||
2646 | // Someday this should be a method on GridService. | ||
2647 | // 'pSizeHint' is the size of the source region but since the destination point can be anywhere | ||
2648 | // the size of the target region is unknown thus the search area might have to be very large. | ||
2649 | // Return 'null' if no such region exists. | ||
2650 | public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, | ||
2651 | double px, double py, uint pSizeHint) | ||
2652 | { | ||
2653 | m_log.DebugFormat("{0} GetRegionContainingWorldLocation: query, loc=<{1},{2}>", LogHeader, px, py); | ||
2654 | ======= | ||
2655 | // needed for current OSG or old grid code | 2294 | // needed for current OSG or old grid code |
2656 | 2295 | ||
2657 | public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py) | 2296 | public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py) |
@@ -2671,7 +2310,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2671 | double px, double py, uint pSizeHint) | 2310 | double px, double py, uint pSizeHint) |
2672 | { | 2311 | { |
2673 | m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py); | 2312 | m_log.DebugFormat("{0} GetRegionContainingWorldLocation: call, XY=<{1},{2}>", LogHeader, px, py); |
2674 | >>>>>>> avn/ubitvar | ||
2675 | GridRegion ret = null; | 2313 | GridRegion ret = null; |
2676 | const double fudge = 2.0; | 2314 | const double fudge = 2.0; |
2677 | 2315 | ||
@@ -2765,13 +2403,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2765 | IPEndPoint endPoint, bool newAgent) | 2403 | IPEndPoint endPoint, bool newAgent) |
2766 | { | 2404 | { |
2767 | 2405 | ||
2768 | <<<<<<< HEAD | ||
2769 | Scene scene = sp.Scene; | ||
2770 | |||
2771 | m_log.DebugFormat( | ||
2772 | "[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})", | ||
2773 | sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY); | ||
2774 | ======= | ||
2775 | if (newAgent) | 2406 | if (newAgent) |
2776 | { | 2407 | { |
2777 | Scene scene = sp.Scene; | 2408 | Scene scene = sp.Scene; |
@@ -2779,17 +2410,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2779 | m_log.DebugFormat( | 2410 | m_log.DebugFormat( |
2780 | "[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})", | 2411 | "[ENTITY TRANSFER MODULE]: Informing {0} {1} about neighbour {2} {3} at ({4},{5})", |
2781 | sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY); | 2412 | sp.Name, sp.UUID, reg.RegionName, endPoint, reg.RegionCoordX, reg.RegionCoordY); |
2782 | >>>>>>> avn/ubitvar | ||
2783 | 2413 | ||
2784 | string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath); | 2414 | string capsPath = reg.ServerURI + CapsUtil.GetCapsSeedPath(a.CapsPath); |
2785 | 2415 | ||
2786 | string reason = String.Empty; | 2416 | string reason = String.Empty; |
2787 | 2417 | ||
2788 | <<<<<<< HEAD | 2418 | bool regionAccepted = scene.SimulationService.CreateAgent(reg, reg, a, (uint)TeleportFlags.Default, out reason); |
2789 | bool regionAccepted = scene.SimulationService.CreateAgent(null, reg, a, (uint)TeleportFlags.Default, out reason); | ||
2790 | ======= | ||
2791 | bool regionAccepted = scene.SimulationService.CreateAgent(reg, a, (uint)TeleportFlags.Default, out reason); | ||
2792 | >>>>>>> avn/ubitvar | ||
2793 | 2419 | ||
2794 | if (regionAccepted) | 2420 | if (regionAccepted) |
2795 | { | 2421 | { |
@@ -2848,10 +2474,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2848 | extent.Y = (float)Util.WorldToRegionLoc((uint)megaRegionSize.Y); | 2474 | extent.Y = (float)Util.WorldToRegionLoc((uint)megaRegionSize.Y); |
2849 | } | 2475 | } |
2850 | 2476 | ||
2851 | <<<<<<< HEAD | ||
2852 | ======= | ||
2853 | |||
2854 | >>>>>>> avn/ubitvar | ||
2855 | swCorner.X = Scene.RegionInfo.RegionLocX - 1; | 2477 | swCorner.X = Scene.RegionInfo.RegionLocX - 1; |
2856 | swCorner.Y = Scene.RegionInfo.RegionLocY - 1; | 2478 | swCorner.Y = Scene.RegionInfo.RegionLocY - 1; |
2857 | neCorner.X = Scene.RegionInfo.RegionLocX + extent.X; | 2479 | neCorner.X = Scene.RegionInfo.RegionLocX + extent.X; |
@@ -2865,11 +2487,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2865 | /// <param name="pRegionLocX"></param> | 2487 | /// <param name="pRegionLocX"></param> |
2866 | /// <param name="pRegionLocY"></param> | 2488 | /// <param name="pRegionLocY"></param> |
2867 | /// <returns></returns> | 2489 | /// <returns></returns> |
2868 | <<<<<<< HEAD | ||
2869 | protected List<GridRegion> GetNeighbours(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY) | ||
2870 | ======= | ||
2871 | protected List<GridRegion> GetNeighbors(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY) | 2490 | protected List<GridRegion> GetNeighbors(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY) |
2872 | >>>>>>> avn/ubitvar | ||
2873 | { | 2491 | { |
2874 | Scene pScene = avatar.Scene; | 2492 | Scene pScene = avatar.Scene; |
2875 | RegionInfo m_regionInfo = pScene.RegionInfo; | 2493 | RegionInfo m_regionInfo = pScene.RegionInfo; |
@@ -2880,22 +2498,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2880 | // view to include everything in the megaregion | 2498 | // view to include everything in the megaregion |
2881 | if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) | 2499 | if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) |
2882 | { | 2500 | { |
2883 | <<<<<<< HEAD | ||
2884 | // The area to check is as big as the current region. | ||
2885 | // We presume all adjacent regions are the same size as this region. | ||
2886 | uint dd = Math.Max((uint)avatar.Scene.DefaultDrawDistance, | ||
2887 | Math.Max(Scene.RegionInfo.RegionSizeX, Scene.RegionInfo.RegionSizeY)); | ||
2888 | |||
2889 | uint startX = Util.RegionToWorldLoc(pRegionLocX) - dd + Constants.RegionSize/2; | ||
2890 | uint startY = Util.RegionToWorldLoc(pRegionLocY) - dd + Constants.RegionSize/2; | ||
2891 | |||
2892 | uint endX = Util.RegionToWorldLoc(pRegionLocX) + dd + Constants.RegionSize/2; | ||
2893 | uint endY = Util.RegionToWorldLoc(pRegionLocY) + dd + Constants.RegionSize/2; | ||
2894 | |||
2895 | neighbours | ||
2896 | = avatar.Scene.GridService.GetRegionRange( | ||
2897 | m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY); | ||
2898 | ======= | ||
2899 | uint dd = (uint)avatar.DrawDistance; | 2501 | uint dd = (uint)avatar.DrawDistance; |
2900 | 2502 | ||
2901 | // until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors | 2503 | // until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors |
@@ -2919,8 +2521,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2919 | neighbours | 2521 | neighbours |
2920 | = avatar.Scene.GridService.GetRegionRange( | 2522 | = avatar.Scene.GridService.GetRegionRange( |
2921 | m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY); | 2523 | m_regionInfo.ScopeID, (int)startX, (int)endX, (int)startY, (int)endY); |
2922 | |||
2923 | >>>>>>> avn/ubitvar | ||
2924 | } | 2524 | } |
2925 | else | 2525 | else |
2926 | { | 2526 | { |
@@ -2934,24 +2534,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2934 | (int)Util.RegionToWorldLoc((uint)swCorner.Y), (int)Util.RegionToWorldLoc((uint)neCorner.Y)); | 2534 | (int)Util.RegionToWorldLoc((uint)swCorner.Y), (int)Util.RegionToWorldLoc((uint)neCorner.Y)); |
2935 | } | 2535 | } |
2936 | 2536 | ||
2937 | <<<<<<< HEAD | ||
2938 | // neighbours.ForEach( | ||
2939 | // n => | ||
2940 | // m_log.DebugFormat( | ||
2941 | // "[ENTITY TRANSFER MODULE]: Region flags for {0} as seen by {1} are {2}", | ||
2942 | // n.RegionName, Scene.Name, n.RegionFlags != null ? n.RegionFlags.ToString() : "not present")); | ||
2943 | |||
2944 | // The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1). | ||
2945 | neighbours.RemoveAll( | ||
2946 | r => | ||
2947 | r.RegionID == m_regionInfo.RegionID | ||
2948 | || (r.RegionFlags != null && (r.RegionFlags & OpenSim.Framework.RegionFlags.RegionOnline) == 0)); | ||
2949 | |||
2950 | ======= | ||
2951 | // The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1). | 2537 | // The r.RegionFlags == null check only needs to be made for simulators before 2015-01-14 (pre 0.8.1). |
2952 | neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID ); | 2538 | neighbours.RemoveAll( r => r.RegionID == m_regionInfo.RegionID ); |
2953 | 2539 | ||
2954 | >>>>>>> avn/ubitvar | ||
2955 | return neighbours; | 2540 | return neighbours; |
2956 | } | 2541 | } |
2957 | #endregion | 2542 | #endregion |
@@ -3036,23 +2621,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
3036 | if (scene == null) | 2621 | if (scene == null) |
3037 | return; | 2622 | return; |
3038 | 2623 | ||
3039 | <<<<<<< HEAD | ||
3040 | if (grp.RootPart.DIE_AT_EDGE) | ||
3041 | { | ||
3042 | // We remove the object here | ||
3043 | try | ||
3044 | { | ||
3045 | scene.DeleteSceneObject(grp, false); | ||
3046 | } | ||
3047 | catch (Exception) | ||
3048 | { | ||
3049 | m_log.Warn("[DATABASE]: exception when trying to remove the prim that crossed the border."); | ||
3050 | } | ||
3051 | return; | ||
3052 | } | ||
3053 | |||
3054 | ======= | ||
3055 | >>>>>>> avn/ubitvar | ||
3056 | // Remember the old group position in case the region lookup fails so position can be restored. | 2624 | // Remember the old group position in case the region lookup fails so position can be restored. |
3057 | Vector3 oldGroupPosition = grp.RootPart.GroupPosition; | 2625 | Vector3 oldGroupPosition = grp.RootPart.GroupPosition; |
3058 | 2626 | ||
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 233b251..5ec688c 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs | |||
@@ -434,14 +434,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
434 | // return base.UpdateAgent(reg, finalDestination, agentData, sp); | 434 | // return base.UpdateAgent(reg, finalDestination, agentData, sp); |
435 | //} | 435 | //} |
436 | 436 | ||
437 | <<<<<<< HEAD | ||
438 | public override void TriggerTeleportHome(UUID id, IClientAPI client) | ||
439 | { | ||
440 | TeleportHome(id, client); | ||
441 | } | ||
442 | 437 | ||
443 | ======= | ||
444 | >>>>>>> avn/ubitvar | ||
445 | public override bool TeleportHome(UUID id, IClientAPI client) | 438 | public override bool TeleportHome(UUID id, IClientAPI client) |
446 | { | 439 | { |
447 | m_log.DebugFormat( | 440 | m_log.DebugFormat( |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index dff9126..96f1198 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -207,17 +207,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
207 | { | 207 | { |
208 | byte[] data = null; | 208 | byte[] data = null; |
209 | 209 | ||
210 | <<<<<<< HEAD | ||
211 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); | ||
212 | m_Scene.AssetService.Store(asset); | ||
213 | m_Scene.CreateNewInventoryItem( | ||
214 | remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, | ||
215 | name, description, 0, callbackID, asset.FullID, asset.Type, invType, nextOwnerMask, creationDate); | ||
216 | } | ||
217 | else | ||
218 | ======= | ||
219 | if (invType == (sbyte)InventoryType.Landmark && presence != null) | 210 | if (invType == (sbyte)InventoryType.Landmark && presence != null) |
220 | >>>>>>> avn/ubitvar | ||
221 | { | 211 | { |
222 | string suffix = string.Empty, prefix = string.Empty; | 212 | string suffix = string.Empty, prefix = string.Empty; |
223 | string strdata = GenerateLandmark(presence, out prefix, out suffix); | 213 | string strdata = GenerateLandmark(presence, out prefix, out suffix); |
@@ -229,8 +219,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
229 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); | 219 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); |
230 | m_Scene.AssetService.Store(asset); | 220 | m_Scene.AssetService.Store(asset); |
231 | m_Scene.CreateNewInventoryItem( | 221 | m_Scene.CreateNewInventoryItem( |
232 | remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, | 222 | remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, |
233 | name, description, 0, callbackID, asset, invType, nextOwnerMask, creationDate,transactionID); | 223 | name, description, 0, callbackID, asset.FullID, asset.Type, invType, nextOwnerMask, creationDate); |
234 | } | 224 | } |
235 | else | 225 | else |
236 | { | 226 | { |
@@ -420,26 +410,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
420 | { | 410 | { |
421 | if (objectGroup.RootPart.KeyframeMotion != null) | 411 | if (objectGroup.RootPart.KeyframeMotion != null) |
422 | { | 412 | { |
423 | <<<<<<< HEAD | ||
424 | objectGroup.RootPart.KeyframeMotion.Pause(); | ||
425 | group2Keyframe.Add(objectGroup, objectGroup.RootPart.KeyframeMotion); | ||
426 | objectGroup.RootPart.KeyframeMotion = null; | ||
427 | } | ||
428 | |||
429 | // Vector3 inventoryStoredPosition = new Vector3 | ||
430 | // (((objectGroup.AbsolutePosition.X > (int)Constants.RegionSize) | ||
431 | // ? 250 | ||
432 | // : objectGroup.AbsolutePosition.X) | ||
433 | // , | ||
434 | // (objectGroup.AbsolutePosition.Y > (int)Constants.RegionSize) | ||
435 | // ? 250 | ||
436 | // : objectGroup.AbsolutePosition.Y, | ||
437 | // objectGroup.AbsolutePosition.Z); | ||
438 | // | ||
439 | // originalPositions[objectGroup.UUID] = objectGroup.AbsolutePosition; | ||
440 | // | ||
441 | // objectGroup.AbsolutePosition = inventoryStoredPosition; | ||
442 | ======= | ||
443 | objectGroup.RootPart.KeyframeMotion.Suspend(); | 413 | objectGroup.RootPart.KeyframeMotion.Suspend(); |
444 | } | 414 | } |
445 | objectGroup.RootPart.SetForce(Vector3.Zero); | 415 | objectGroup.RootPart.SetForce(Vector3.Zero); |
@@ -480,7 +450,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
480 | 450 | ||
481 | objectGroup.AbsolutePosition = inventoryStoredPosition; | 451 | objectGroup.AbsolutePosition = inventoryStoredPosition; |
482 | objectGroup.RootPart.RotationOffset = inventoryStoredRotation; | 452 | objectGroup.RootPart.RotationOffset = inventoryStoredRotation; |
483 | >>>>>>> avn/ubitvar | ||
484 | 453 | ||
485 | // Make sure all bits but the ones we want are clear | 454 | // Make sure all bits but the ones we want are clear |
486 | // on take. | 455 | // on take. |
@@ -626,6 +595,8 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
626 | IClientAPI remoteClient) | 595 | IClientAPI remoteClient) |
627 | { | 596 | { |
628 | uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7; | 597 | uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move | PermissionMask.Export) | 7; |
598 | uint allObjectsNextOwnerPerms = 0x7fffffff; | ||
599 | |||
629 | // For the porposes of inventory, an object is modify if the prims | 600 | // For the porposes of inventory, an object is modify if the prims |
630 | // are modify. This allows renaming an object that contains no | 601 | // are modify. This allows renaming an object that contains no |
631 | // mod items. | 602 | // mod items. |
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index a536757..7d0c47f 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -336,8 +336,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
336 | } | 336 | } |
337 | } | 337 | } |
338 | 338 | ||
339 | <<<<<<< HEAD | ||
340 | ======= | ||
341 | /// <summary> | 339 | /// <summary> |
342 | /// | 340 | /// |
343 | /// </summary> | 341 | /// </summary> |
@@ -433,7 +431,7 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
433 | } | 431 | } |
434 | } | 432 | } |
435 | 433 | ||
436 | >>>>>>> avn/ubitvar | 434 | |
437 | #region IUserManagement | 435 | #region IUserManagement |
438 | 436 | ||
439 | public UUID GetUserIdByName(string name) | 437 | public UUID GetUserIdByName(string name) |
diff --git a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs index 235fbbb..c0faad8 100644 --- a/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs +++ b/OpenSim/Region/CoreModules/Scripting/HttpRequest/ScriptsHttpRequests.cs | |||
@@ -358,9 +358,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
358 | m_proxyurl = config.Configs["Startup"].GetString("HttpProxy"); | 358 | m_proxyurl = config.Configs["Startup"].GetString("HttpProxy"); |
359 | m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions"); | 359 | m_proxyexcepts = config.Configs["Startup"].GetString("HttpProxyExceptions"); |
360 | 360 | ||
361 | <<<<<<< HEAD | 361 | |
362 | m_outboundUrlFilter = new OutboundUrlFilter("Script HTTP request module", config); | 362 | m_outboundUrlFilter = new OutboundUrlFilter("Script HTTP request module", config); |
363 | ======= | ||
364 | int maxThreads = 15; | 363 | int maxThreads = 15; |
365 | 364 | ||
366 | IConfig httpConfig = config.Configs["HttpRequestModule"]; | 365 | IConfig httpConfig = config.Configs["HttpRequestModule"]; |
@@ -368,7 +367,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
368 | { | 367 | { |
369 | maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads); | 368 | maxThreads = httpConfig.GetInt("MaxPoolThreads", maxThreads); |
370 | } | 369 | } |
371 | >>>>>>> avn/ubitvar | ||
372 | 370 | ||
373 | m_pendingRequests = new Dictionary<UUID, HttpRequestClass>(); | 371 | m_pendingRequests = new Dictionary<UUID, HttpRequestClass>(); |
374 | 372 | ||
@@ -532,16 +530,12 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
532 | 530 | ||
533 | try | 531 | try |
534 | { | 532 | { |
535 | <<<<<<< HEAD | ||
536 | Request = (HttpWebRequest)WebRequest.Create(Url); | 533 | Request = (HttpWebRequest)WebRequest.Create(Url); |
537 | Request.AllowAutoRedirect = false; | 534 | Request.AllowAutoRedirect = false; |
538 | ======= | ||
539 | Request = (HttpWebRequest) WebRequest.Create(Url); | ||
540 | 535 | ||
541 | //This works around some buggy HTTP Servers like Lighttpd | 536 | //This works around some buggy HTTP Servers like Lighttpd |
542 | Request.ServicePoint.Expect100Continue = false; | 537 | Request.ServicePoint.Expect100Continue = false; |
543 | 538 | ||
544 | >>>>>>> avn/ubitvar | ||
545 | Request.Method = HttpMethod; | 539 | Request.Method = HttpMethod; |
546 | Request.ContentType = HttpMIMEType; | 540 | Request.ContentType = HttpMIMEType; |
547 | 541 | ||
@@ -646,7 +640,8 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
646 | { | 640 | { |
647 | using (Stream responseStream = webRsp.GetResponseStream()) | 641 | using (Stream responseStream = webRsp.GetResponseStream()) |
648 | { | 642 | { |
649 | ResponseBody = responseStream.GetStreamString(); | 643 | using (StreamReader reader = new StreamReader(responseStream)) |
644 | ResponseBody = reader.ReadToEnd(); | ||
650 | } | 645 | } |
651 | } | 646 | } |
652 | catch | 647 | catch |
@@ -676,7 +671,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
676 | resStream.Close(); | 671 | resStream.Close(); |
677 | if (response != null) | 672 | if (response != null) |
678 | response.Close(); | 673 | response.Close(); |
679 | <<<<<<< HEAD | ||
680 | 674 | ||
681 | // We need to resubmit | 675 | // We need to resubmit |
682 | if ( | 676 | if ( |
@@ -724,8 +718,6 @@ namespace OpenSim.Region.CoreModules.Scripting.HttpRequest | |||
724 | { | 718 | { |
725 | _finished = true; | 719 | _finished = true; |
726 | } | 720 | } |
727 | ======= | ||
728 | >>>>>>> avn/ubitvar | ||
729 | } | 721 | } |
730 | 722 | ||
731 | if (ResponseBody == null) | 723 | if (ResponseBody == null) |
diff --git a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs index 1c3a714..93a4f09 100644 --- a/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs +++ b/OpenSim/Region/CoreModules/Scripting/WorldComm/WorldCommModule.cs | |||
@@ -380,28 +380,13 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
380 | 380 | ||
381 | if (sp != null) | 381 | if (sp != null) |
382 | { | 382 | { |
383 | <<<<<<< HEAD | 383 | // Send message to avatar |
384 | // ignore if a child agent this is restricted to inside one | ||
385 | // region | ||
386 | if (sp.IsChildAgent) | ||
387 | return; | ||
388 | |||
389 | // Channel zero only goes to the avatar | ||
390 | // non zero channel messages only go to the attachments of the avatar. | ||
391 | if (channel != 0) | ||
392 | { | ||
393 | List<SceneObjectGroup> attachments = sp.GetAttachments(); | ||
394 | if (attachments.Count == 0) | ||
395 | return; | ||
396 | ======= | ||
397 | // Send message to avatar | ||
398 | if (channel == 0) | 384 | if (channel == 0) |
399 | { | 385 | { |
400 | // Channel 0 goes to viewer ONLY | 386 | // Channel 0 goes to viewer ONLY |
401 | m_scene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, target, false, false); | 387 | m_scene.SimChat(Utils.StringToBytes(msg), ChatTypeEnum.Broadcast, 0, pos, name, id, target, false, false); |
402 | return true; | 388 | return true; |
403 | } | 389 | } |
404 | >>>>>>> avn/ubitvar | ||
405 | 390 | ||
406 | List<SceneObjectGroup> attachments = sp.GetAttachments(); | 391 | List<SceneObjectGroup> attachments = sp.GetAttachments(); |
407 | 392 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs index d786c80..db3f900 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs | |||
@@ -53,11 +53,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
53 | /// </remarks> | 53 | /// </remarks> |
54 | 54 | ||
55 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MapImageServiceModule")] | 55 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MapImageServiceModule")] |
56 | <<<<<<< HEAD | 56 | |
57 | public class MapImageServiceModule : IMapImageUploadModule, ISharedRegionModule | 57 | public class MapImageServiceModule : IMapImageUploadModule, ISharedRegionModule |
58 | ======= | ||
59 | public class MapImageServiceModule : ISharedRegionModule, IMapImageUploadModule | ||
60 | >>>>>>> avn/ubitvar | ||
61 | { | 58 | { |
62 | private static readonly ILog m_log = | 59 | private static readonly ILog m_log = |
63 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 60 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
@@ -97,13 +94,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
97 | if (config == null) | 94 | if (config == null) |
98 | return; | 95 | return; |
99 | 96 | ||
100 | <<<<<<< HEAD | ||
101 | int refreshminutes = Convert.ToInt32(config.GetString("RefreshTime")); | ||
102 | |||
103 | // if refresh is less than zero, disable the module | ||
104 | ======= | ||
105 | int refreshminutes = Convert.ToInt32(config.GetString("RefreshTime", "-1")); | 97 | int refreshminutes = Convert.ToInt32(config.GetString("RefreshTime", "-1")); |
106 | >>>>>>> avn/ubitvar | ||
107 | if (refreshminutes < 0) | 98 | if (refreshminutes < 0) |
108 | { | 99 | { |
109 | m_log.WarnFormat("[MAP IMAGE SERVICE MODULE]: Negative refresh time given in config. Module disabled."); | 100 | m_log.WarnFormat("[MAP IMAGE SERVICE MODULE]: Negative refresh time given in config. Module disabled."); |
@@ -136,19 +127,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
136 | m_refreshTimer.Interval = m_refreshtime; | 127 | m_refreshTimer.Interval = m_refreshtime; |
137 | m_refreshTimer.Elapsed += new ElapsedEventHandler(HandleMaptileRefresh); | 128 | m_refreshTimer.Elapsed += new ElapsedEventHandler(HandleMaptileRefresh); |
138 | 129 | ||
139 | <<<<<<< HEAD | ||
140 | m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}", | ||
141 | ======= | ||
142 | if (m_refreshtime > 0) | ||
143 | { | ||
144 | m_refreshTimer.Enabled = true; | ||
145 | m_refreshTimer.AutoReset = true; | ||
146 | m_refreshTimer.Interval = m_refreshtime; | ||
147 | m_refreshTimer.Elapsed += new ElapsedEventHandler(HandleMaptileRefresh); | ||
148 | } | ||
149 | 130 | ||
150 | m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}", | 131 | m_log.InfoFormat("[MAP IMAGE SERVICE MODULE]: enabled with refresh time {0} min and service object {1}", |
151 | >>>>>>> avn/ubitvar | ||
152 | refreshminutes, service); | 132 | refreshminutes, service); |
153 | } | 133 | } |
154 | else | 134 | else |
@@ -174,10 +154,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
174 | // v2 Map generation on startup is now handled by scene to allow bmp to be shared with | 154 | // v2 Map generation on startup is now handled by scene to allow bmp to be shared with |
175 | // v1 service and not generate map tiles twice as was previous behavior | 155 | // v1 service and not generate map tiles twice as was previous behavior |
176 | //scene.EventManager.OnRegionReadyStatusChange += s => { if (s.Ready) UploadMapTile(s); }; | 156 | //scene.EventManager.OnRegionReadyStatusChange += s => { if (s.Ready) UploadMapTile(s); }; |
177 | <<<<<<< HEAD | ||
178 | 157 | ||
179 | ======= | ||
180 | >>>>>>> avn/ubitvar | ||
181 | scene.RegisterModuleInterface<IMapImageUploadModule>(this); | 158 | scene.RegisterModuleInterface<IMapImageUploadModule>(this); |
182 | } | 159 | } |
183 | 160 | ||
@@ -235,15 +212,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
235 | // If the region/maptile is legacy sized, just upload the one tile like it has always been done | 212 | // If the region/maptile is legacy sized, just upload the one tile like it has always been done |
236 | if (mapTile.Width == Constants.RegionSize && mapTile.Height == Constants.RegionSize) | 213 | if (mapTile.Width == Constants.RegionSize && mapTile.Height == Constants.RegionSize) |
237 | { | 214 | { |
238 | <<<<<<< HEAD | 215 | ConvertAndUploadMaptile(scene, mapTile, |
239 | ConvertAndUploadMaptile(mapTile, | ||
240 | scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY, | 216 | scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY, |
241 | scene.RegionInfo.RegionName); | 217 | scene.RegionInfo.RegionName); |
242 | ======= | ||
243 | ConvertAndUploadMaptile(mapTile, scene, | ||
244 | scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY, | ||
245 | scene.RegionInfo.RegionName); | ||
246 | >>>>>>> avn/ubitvar | ||
247 | } | 218 | } |
248 | else | 219 | else |
249 | { | 220 | { |
@@ -263,17 +234,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
263 | (int)Constants.RegionSize, (int)Constants.RegionSize); | 234 | (int)Constants.RegionSize, (int)Constants.RegionSize); |
264 | using (Bitmap subMapTile = mapTile.Clone(rect, mapTile.PixelFormat)) | 235 | using (Bitmap subMapTile = mapTile.Clone(rect, mapTile.PixelFormat)) |
265 | { | 236 | { |
266 | <<<<<<< HEAD | 237 | ConvertAndUploadMaptile(scene, subMapTile, |
267 | ConvertAndUploadMaptile(subMapTile, | ||
268 | scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize), | 238 | scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize), |
269 | scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize), | 239 | scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize), |
270 | scene.Name); | 240 | scene.Name); |
271 | ======= | ||
272 | ConvertAndUploadMaptile(subMapTile, scene, | ||
273 | scene.RegionInfo.RegionLocX + (xx / Constants.RegionSize), | ||
274 | scene.RegionInfo.RegionLocY + (yy / Constants.RegionSize), | ||
275 | scene.Name); | ||
276 | >>>>>>> avn/ubitvar | ||
277 | } | 241 | } |
278 | } | 242 | } |
279 | } | 243 | } |
@@ -285,11 +249,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
285 | ///</summary> | 249 | ///</summary> |
286 | public void UploadMapTile(IScene scene) | 250 | public void UploadMapTile(IScene scene) |
287 | { | 251 | { |
288 | <<<<<<< HEAD | ||
289 | ======= | ||
290 | m_log.DebugFormat("{0}: upload maptile for {1}", LogHeader, scene.RegionInfo.RegionName); | 252 | m_log.DebugFormat("{0}: upload maptile for {1}", LogHeader, scene.RegionInfo.RegionName); |
291 | 253 | ||
292 | >>>>>>> avn/ubitvar | ||
293 | // Create a JPG map tile and upload it to the AddMapTile API | 254 | // Create a JPG map tile and upload it to the AddMapTile API |
294 | IMapImageGenerator tileGenerator = scene.RequestModuleInterface<IMapImageGenerator>(); | 255 | IMapImageGenerator tileGenerator = scene.RequestModuleInterface<IMapImageGenerator>(); |
295 | if (tileGenerator == null) | 256 | if (tileGenerator == null) |
@@ -300,23 +261,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
300 | 261 | ||
301 | using (Bitmap mapTile = tileGenerator.CreateMapTile()) | 262 | using (Bitmap mapTile = tileGenerator.CreateMapTile()) |
302 | { | 263 | { |
303 | <<<<<<< HEAD | ||
304 | if (mapTile != null) | ||
305 | { | ||
306 | UploadMapTile(scene, mapTile); | ||
307 | } | ||
308 | else | ||
309 | { | ||
310 | m_log.WarnFormat("{0} Tile image generation failed", LogHeader); | ||
311 | } | ||
312 | } | ||
313 | } | ||
314 | |||
315 | private void ConvertAndUploadMaptile(Image tileImage, uint locX, uint locY, string regionName) | ||
316 | { | ||
317 | byte[] jpgData = Utils.EmptyBytes; | ||
318 | |||
319 | ======= | ||
320 | // XXX: The MapImageModule will return a null if the user has chosen not to create map tiles and there | 264 | // XXX: The MapImageModule will return a null if the user has chosen not to create map tiles and there |
321 | // is no static map tile. | 265 | // is no static map tile. |
322 | if (mapTile == null) | 266 | if (mapTile == null) |
@@ -326,11 +270,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
326 | } | 270 | } |
327 | } | 271 | } |
328 | 272 | ||
329 | private void ConvertAndUploadMaptile(Image tileImage, IScene scene, uint locX, uint locY, string regionName) | 273 | private void ConvertAndUploadMaptile(IScene scene, Image tileImage, uint locX, uint locY, string regionName) |
330 | { | 274 | { |
331 | byte[] jpgData = Utils.EmptyBytes; | 275 | byte[] jpgData = Utils.EmptyBytes; |
332 | 276 | ||
333 | >>>>>>> avn/ubitvar | ||
334 | using (MemoryStream stream = new MemoryStream()) | 277 | using (MemoryStream stream = new MemoryStream()) |
335 | { | 278 | { |
336 | tileImage.Save(stream, ImageFormat.Jpeg); | 279 | tileImage.Save(stream, ImageFormat.Jpeg); |
@@ -339,11 +282,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
339 | if (jpgData != Utils.EmptyBytes) | 282 | if (jpgData != Utils.EmptyBytes) |
340 | { | 283 | { |
341 | string reason = string.Empty; | 284 | string reason = string.Empty; |
342 | <<<<<<< HEAD | ||
343 | if (!m_MapService.AddMapTile((int)locX, (int)locY, jpgData, out reason)) | ||
344 | ======= | ||
345 | if (!m_MapService.AddMapTile((int)locX, (int)locY, jpgData, scene.RegionInfo.ScopeID, out reason)) | 285 | if (!m_MapService.AddMapTile((int)locX, (int)locY, jpgData, scene.RegionInfo.ScopeID, out reason)) |
346 | >>>>>>> avn/ubitvar | ||
347 | { | 286 | { |
348 | m_log.DebugFormat("{0} Unable to upload tile image for {1} at {2}-{3}: {4}", LogHeader, | 287 | m_log.DebugFormat("{0} Unable to upload tile image for {1} at {2}-{3}: {4}", LogHeader, |
349 | regionName, locX, locY, reason); | 288 | regionName, locX, locY, reason); |
@@ -351,11 +290,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage | |||
351 | } | 290 | } |
352 | else | 291 | else |
353 | { | 292 | { |
354 | <<<<<<< HEAD | ||
355 | m_log.WarnFormat("{0} Tile image generation failed for region {1}", LogHeader, regionName); | 293 | m_log.WarnFormat("{0} Tile image generation failed for region {1}", LogHeader, regionName); |
356 | ======= | ||
357 | m_log.WarnFormat("{0} Tile image generation failed for region {1}", LogHeader, scene.RegionInfo.RegionName); | ||
358 | >>>>>>> avn/ubitvar | ||
359 | } | 294 | } |
360 | } | 295 | } |
361 | } | 296 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs index 50238a5..9d4c282 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs | |||
@@ -269,11 +269,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
269 | return true; | 269 | return true; |
270 | } | 270 | } |
271 | 271 | ||
272 | <<<<<<< HEAD | 272 | |
273 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, List<UUID> features, out string version, out string reason) | 273 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, List<UUID> features, out string version, out string reason) |
274 | ======= | ||
275 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, out string version, out string reason) | ||
276 | >>>>>>> avn/ubitvar | ||
277 | { | 274 | { |
278 | reason = "Communications failure"; | 275 | reason = "Communications failure"; |
279 | version = ServiceVersion; | 276 | version = ServiceVersion; |
@@ -302,29 +299,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
302 | 299 | ||
303 | } | 300 | } |
304 | 301 | ||
305 | <<<<<<< HEAD | ||
306 | return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, features, out reason); | ||
307 | ======= | ||
308 | |||
309 | // not really need on a grid running var regions sims | ||
310 | |||
311 | uint size = m_scenes[destination.RegionID].RegionInfo.RegionSizeX; | ||
312 | |||
313 | float theirVersionNumber = 0f; | ||
314 | string[] versionComponents = theirversion.Split(new char[] { '/' }); | ||
315 | if (versionComponents.Length >= 2) | ||
316 | float.TryParse(versionComponents[1], out theirVersionNumber); | ||
317 | 302 | ||
318 | // Var regions here, and the requesting simulator is in an older version. | 303 | return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, features, out reason); |
319 | // We will forbide this, because it crashes the viewers | ||
320 | if (theirVersionNumber < 0.3f && size > 256) | ||
321 | { | ||
322 | reason = "Destination is a variable-sized region, and source is an old simulator. Consider upgrading."; | ||
323 | m_log.DebugFormat("[LOCAL SIMULATION CONNECTOR]: Request to access this variable-sized region from {0} simulator was denied", theirVersionNumber); | ||
324 | return false; | ||
325 | } | ||
326 | return m_scenes[destination.RegionID].QueryAccess(agentID, position, out reason); | ||
327 | >>>>>>> avn/ubitvar | ||
328 | } | 304 | } |
329 | 305 | ||
330 | //m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess"); | 306 | //m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess"); |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs index 7044d92..12ffc01 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs | |||
@@ -206,11 +206,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
206 | return m_remoteConnector.UpdateAgent(destination, cAgentData); | 206 | return m_remoteConnector.UpdateAgent(destination, cAgentData); |
207 | } | 207 | } |
208 | 208 | ||
209 | <<<<<<< HEAD | 209 | |
210 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, List<UUID> features, out string version, out string reason) | 210 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, List<UUID> features, out string version, out string reason) |
211 | ======= | ||
212 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, out string version, out string reason) | ||
213 | >>>>>>> avn/ubitvar | ||
214 | { | 211 | { |
215 | reason = "Communications failure"; | 212 | reason = "Communications failure"; |
216 | version = "Unknown"; | 213 | version = "Unknown"; |
@@ -219,22 +216,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
219 | return false; | 216 | return false; |
220 | 217 | ||
221 | // Try local first | 218 | // Try local first |
222 | <<<<<<< HEAD | ||
223 | if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason)) | 219 | if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason)) |
224 | ======= | ||
225 | if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, out version, out reason)) | ||
226 | return true; | ||
227 | >>>>>>> avn/ubitvar | ||
228 | return true; | 220 | return true; |
229 | 221 | ||
230 | // else do the remote thing | 222 | // else do the remote thing |
231 | if (!m_localBackend.IsLocalRegion(destination.RegionID)) | 223 | if (!m_localBackend.IsLocalRegion(destination.RegionID)) |
232 | <<<<<<< HEAD | ||
233 | return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason); | 224 | return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason); |
234 | ======= | ||
235 | return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, out version, out reason); | ||
236 | |||
237 | >>>>>>> avn/ubitvar | ||
238 | 225 | ||
239 | return false; | 226 | return false; |
240 | } | 227 | } |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index f0b0f4a..406f4a8 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs | |||
@@ -162,13 +162,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
162 | 162 | ||
163 | private UUID m_defaultUser; | 163 | private UUID m_defaultUser; |
164 | 164 | ||
165 | <<<<<<< HEAD | ||
166 | private UUID m_defaultUser; | ||
167 | |||
168 | public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string,object>options) | ||
169 | ======= | ||
170 | public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string, object> options) | 165 | public ArchiveReadRequest(Scene scene, string loadPath, Guid requestId, Dictionary<string, object> options) |
171 | >>>>>>> avn/ubitvar | ||
172 | { | 166 | { |
173 | m_rootScene = scene; | 167 | m_rootScene = scene; |
174 | 168 | ||
@@ -177,11 +171,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
177 | m_defaultUser = (UUID)options["default-user"]; | 171 | m_defaultUser = (UUID)options["default-user"]; |
178 | m_log.InfoFormat("Using User {0} as default user", m_defaultUser.ToString()); | 172 | m_log.InfoFormat("Using User {0} as default user", m_defaultUser.ToString()); |
179 | } | 173 | } |
180 | <<<<<<< HEAD | ||
181 | else | ||
182 | ======= | ||
183 | else | 174 | else |
184 | >>>>>>> avn/ubitvar | ||
185 | { | 175 | { |
186 | m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner; | 176 | m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner; |
187 | } | 177 | } |
@@ -200,10 +190,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
200 | } | 190 | } |
201 | 191 | ||
202 | m_errorMessage = String.Empty; | 192 | m_errorMessage = String.Empty; |
203 | <<<<<<< HEAD | ||
204 | ======= | ||
205 | 193 | ||
206 | >>>>>>> avn/ubitvar | ||
207 | m_merge = options.ContainsKey("merge"); | 194 | m_merge = options.ContainsKey("merge"); |
208 | m_forceTerrain = options.ContainsKey("force-terrain"); | 195 | m_forceTerrain = options.ContainsKey("force-terrain"); |
209 | m_forceParcels = options.ContainsKey("force-parcels"); | 196 | m_forceParcels = options.ContainsKey("force-parcels"); |
@@ -212,34 +199,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
212 | m_requestId = requestId; | 199 | m_requestId = requestId; |
213 | m_displacement = options.ContainsKey("displacement") ? (Vector3)options["displacement"] : Vector3.Zero; | 200 | m_displacement = options.ContainsKey("displacement") ? (Vector3)options["displacement"] : Vector3.Zero; |
214 | m_rotation = options.ContainsKey("rotation") ? (float)options["rotation"] : 0f; | 201 | m_rotation = options.ContainsKey("rotation") ? (float)options["rotation"] : 0f; |
215 | <<<<<<< HEAD | ||
216 | m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"] | ||
217 | : new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f); | ||
218 | |||
219 | // Zero can never be a valid user or group id | ||
220 | m_validUserUuids[UUID.Zero] = false; | ||
221 | m_validGroupUuids[UUID.Zero] = false; | ||
222 | ======= | ||
223 | m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"] | 202 | m_rotationCenter = options.ContainsKey("rotation-center") ? (Vector3)options["rotation-center"] |
224 | : new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f); | 203 | : new Vector3(scene.RegionInfo.RegionSizeX / 2f, scene.RegionInfo.RegionSizeY / 2f, 0f); |
225 | 204 | ||
226 | m_requestId = requestId; | ||
227 | |||
228 | // Zero can never be a valid user id (or group) | 205 | // Zero can never be a valid user id (or group) |
229 | m_validUserUuids[UUID.Zero] = false; | 206 | m_validUserUuids[UUID.Zero] = false; |
230 | m_validGroupUuids[UUID.Zero] = false; | 207 | m_validGroupUuids[UUID.Zero] = false; |
231 | 208 | ||
232 | >>>>>>> avn/ubitvar | ||
233 | |||
234 | m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>(); | 209 | m_groupsModule = m_rootScene.RequestModuleInterface<IGroupsModule>(); |
235 | m_assetService = m_rootScene.AssetService; | 210 | m_assetService = m_rootScene.AssetService; |
236 | } | 211 | } |
237 | 212 | ||
238 | <<<<<<< HEAD | ||
239 | public ArchiveReadRequest(Scene scene, Stream loadStream, Guid requestId, Dictionary<string, object>options) | ||
240 | ======= | ||
241 | public ArchiveReadRequest(Scene scene, Stream loadStream, Guid requestId, Dictionary<string, object> options) | 213 | public ArchiveReadRequest(Scene scene, Stream loadStream, Guid requestId, Dictionary<string, object> options) |
242 | >>>>>>> avn/ubitvar | ||
243 | { | 214 | { |
244 | m_rootScene = scene; | 215 | m_rootScene = scene; |
245 | m_loadPath = null; | 216 | m_loadPath = null; |
@@ -249,11 +220,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
249 | m_requestId = requestId; | 220 | m_requestId = requestId; |
250 | 221 | ||
251 | m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner; | 222 | m_defaultUser = scene.RegionInfo.EstateSettings.EstateOwner; |
252 | <<<<<<< HEAD | ||
253 | |||
254 | ======= | ||
255 | 223 | ||
256 | >>>>>>> avn/ubitvar | ||
257 | // Zero can never be a valid user id | 224 | // Zero can never be a valid user id |
258 | m_validUserUuids[UUID.Zero] = false; | 225 | m_validUserUuids[UUID.Zero] = false; |
259 | 226 | ||
@@ -327,24 +294,15 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
327 | if ((successfulAssetRestores + failedAssetRestores) % 250 == 0) | 294 | if ((successfulAssetRestores + failedAssetRestores) % 250 == 0) |
328 | m_log.Debug("[ARCHIVER]: Loaded " + successfulAssetRestores + " assets and failed to load " + failedAssetRestores + " assets..."); | 295 | m_log.Debug("[ARCHIVER]: Loaded " + successfulAssetRestores + " assets and failed to load " + failedAssetRestores + " assets..."); |
329 | } | 296 | } |
330 | <<<<<<< HEAD | ||
331 | else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH) && (!m_merge || m_forceTerrain)) | 297 | else if (filePath.StartsWith(ArchiveConstants.TERRAINS_PATH) && (!m_merge || m_forceTerrain)) |
332 | ======= | ||
333 | else if ((!m_merge || m_forceTerrain) && filePath.StartsWith(ArchiveConstants.TERRAINS_PATH)) | ||
334 | >>>>>>> avn/ubitvar | ||
335 | { | 298 | { |
336 | LoadTerrain(scene, filePath, data); | 299 | LoadTerrain(scene, filePath, data); |
337 | } | 300 | } |
338 | else if (!m_merge && filePath.StartsWith(ArchiveConstants.SETTINGS_PATH)) | 301 | else if (!m_merge && filePath.StartsWith(ArchiveConstants.SETTINGS_PATH)) |
339 | { | 302 | { |
340 | LoadRegionSettings(scene, filePath, data, dearchivedScenes); | 303 | LoadRegionSettings(scene, filePath, data, dearchivedScenes); |
341 | <<<<<<< HEAD | ||
342 | } | 304 | } |
343 | else if (filePath.StartsWith(ArchiveConstants.LANDDATA_PATH) && (!m_merge || m_forceParcels)) | 305 | else if (filePath.StartsWith(ArchiveConstants.LANDDATA_PATH) && (!m_merge || m_forceParcels)) |
344 | ======= | ||
345 | } | ||
346 | else if ((!m_merge || m_forceParcels) && filePath.StartsWith(ArchiveConstants.LANDDATA_PATH)) | ||
347 | >>>>>>> avn/ubitvar | ||
348 | { | 306 | { |
349 | sceneContext.SerialisedParcels.Add(Encoding.UTF8.GetString(data)); | 307 | sceneContext.SerialisedParcels.Add(Encoding.UTF8.GetString(data)); |
350 | } | 308 | } |
@@ -565,10 +523,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
565 | } | 523 | } |
566 | } | 524 | } |
567 | 525 | ||
568 | <<<<<<< HEAD | ||
569 | |||
570 | ======= | ||
571 | >>>>>>> avn/ubitvar | ||
572 | bool isTelehub = (sceneObject.UUID == oldTelehubUUID) && (oldTelehubUUID != UUID.Zero); | 526 | bool isTelehub = (sceneObject.UUID == oldTelehubUUID) && (oldTelehubUUID != UUID.Zero); |
573 | 527 | ||
574 | // For now, give all incoming scene objects new uuids. This will allow scenes to be cloned | 528 | // For now, give all incoming scene objects new uuids. This will allow scenes to be cloned |
@@ -585,10 +539,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
585 | } | 539 | } |
586 | 540 | ||
587 | ModifySceneObject(scene, sceneObject); | 541 | ModifySceneObject(scene, sceneObject); |
588 | <<<<<<< HEAD | ||
589 | ======= | ||
590 | |||
591 | >>>>>>> avn/ubitvar | ||
592 | 542 | ||
593 | if (scene.AddRestoredSceneObject(sceneObject, true, false)) | 543 | if (scene.AddRestoredSceneObject(sceneObject, true, false)) |
594 | { | 544 | { |
@@ -649,8 +599,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
649 | // being no copy/no mod for everyone | 599 | // being no copy/no mod for everyone |
650 | lock (part.TaskInventory) | 600 | lock (part.TaskInventory) |
651 | { | 601 | { |
652 | <<<<<<< HEAD | ||
653 | ======= | ||
654 | // And zap any troublesome sit target information | 602 | // And zap any troublesome sit target information |
655 | part.SitTargetOrientation = new Quaternion(0, 0, 0, 1); | 603 | part.SitTargetOrientation = new Quaternion(0, 0, 0, 1); |
656 | part.SitTargetPosition = new Vector3(0, 0, 0); | 604 | part.SitTargetPosition = new Vector3(0, 0, 0); |
@@ -659,7 +607,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
659 | // Not doing so results in inventory items | 607 | // Not doing so results in inventory items |
660 | // being no copy/no mod for everyone | 608 | // being no copy/no mod for everyone |
661 | part.TaskInventory.LockItemsForRead(true); | 609 | part.TaskInventory.LockItemsForRead(true); |
662 | >>>>>>> avn/ubitvar | 610 | |
663 | TaskInventoryDictionary inv = part.TaskInventory; | 611 | TaskInventoryDictionary inv = part.TaskInventory; |
664 | foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv) | 612 | foreach (KeyValuePair<UUID, TaskInventoryItem> kvp in inv) |
665 | { | 613 | { |
@@ -680,18 +628,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
680 | if (!ResolveGroupUuid(kvp.Value.GroupID)) | 628 | if (!ResolveGroupUuid(kvp.Value.GroupID)) |
681 | kvp.Value.GroupID = UUID.Zero; | 629 | kvp.Value.GroupID = UUID.Zero; |
682 | } | 630 | } |
683 | <<<<<<< HEAD | ||
684 | ======= | ||
685 | part.TaskInventory.LockItemsForRead(false); | 631 | part.TaskInventory.LockItemsForRead(false); |
686 | >>>>>>> avn/ubitvar | 632 | |
687 | } | 633 | } |
688 | } | 634 | } |
689 | } | 635 | } |
690 | 636 | ||
691 | <<<<<<< HEAD | ||
692 | |||
693 | ======= | ||
694 | >>>>>>> avn/ubitvar | ||
695 | /// <summary> | 637 | /// <summary> |
696 | /// Load serialized parcels. | 638 | /// Load serialized parcels. |
697 | /// </summary> | 639 | /// </summary> |
@@ -712,11 +654,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
712 | parcel.AABBMin += parcelDisp; | 654 | parcel.AABBMin += parcelDisp; |
713 | parcel.AABBMax += parcelDisp; | 655 | parcel.AABBMax += parcelDisp; |
714 | } | 656 | } |
715 | <<<<<<< HEAD | 657 | |
716 | |||
717 | ======= | ||
718 | |||
719 | >>>>>>> avn/ubitvar | ||
720 | // Validate User and Group UUID's | 658 | // Validate User and Group UUID's |
721 | 659 | ||
722 | if (!ResolveGroupUuid(parcel.GroupID)) | 660 | if (!ResolveGroupUuid(parcel.GroupID)) |
@@ -731,26 +669,18 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
731 | } | 669 | } |
732 | else | 670 | else |
733 | { | 671 | { |
734 | <<<<<<< HEAD | ||
735 | parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner; | ||
736 | ======= | ||
737 | parcel.OwnerID = m_defaultUser; | 672 | parcel.OwnerID = m_defaultUser; |
738 | parcel.GroupID = UUID.Zero; | 673 | parcel.GroupID = UUID.Zero; |
739 | >>>>>>> avn/ubitvar | ||
740 | parcel.IsGroupOwned = false; | 674 | parcel.IsGroupOwned = false; |
741 | } | 675 | } |
742 | } | 676 | } |
743 | else | 677 | else |
744 | { | 678 | { |
745 | if (!ResolveUserUuid(scene, parcel.OwnerID)) | 679 | if (!ResolveUserUuid(scene, parcel.OwnerID)) |
746 | <<<<<<< HEAD | ||
747 | parcel.OwnerID = m_rootScene.RegionInfo.EstateSettings.EstateOwner; | ||
748 | ======= | ||
749 | parcel.OwnerID = m_defaultUser; | 680 | parcel.OwnerID = m_defaultUser; |
750 | 681 | ||
751 | if (!ResolveGroupUuid(parcel.GroupID)) | 682 | if (!ResolveGroupUuid(parcel.GroupID)) |
752 | parcel.GroupID = UUID.Zero; | 683 | parcel.GroupID = UUID.Zero; |
753 | >>>>>>> avn/ubitvar | ||
754 | } | 684 | } |
755 | 685 | ||
756 | List<LandAccessEntry> accessList = new List<LandAccessEntry>(); | 686 | List<LandAccessEntry> accessList = new List<LandAccessEntry>(); |
@@ -879,10 +809,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
879 | if (data == null) | 809 | if (data == null) |
880 | return false; | 810 | return false; |
881 | } | 811 | } |
882 | <<<<<<< HEAD | ||
883 | 812 | ||
884 | ======= | ||
885 | >>>>>>> avn/ubitvar | ||
886 | //m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType); | 813 | //m_log.DebugFormat("[ARCHIVER]: Importing asset {0}, type {1}", uuid, assetType); |
887 | 814 | ||
888 | AssetBase asset = new AssetBase(new UUID(uuid), String.Empty, assetType, UUID.Zero.ToString()); | 815 | AssetBase asset = new AssetBase(new UUID(uuid), String.Empty, assetType, UUID.Zero.ToString()); |
@@ -1004,11 +931,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
1004 | private bool LoadTerrain(Scene scene, string terrainPath, byte[] data) | 931 | private bool LoadTerrain(Scene scene, string terrainPath, byte[] data) |
1005 | { | 932 | { |
1006 | ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>(); | 933 | ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>(); |
1007 | <<<<<<< HEAD | ||
1008 | |||
1009 | ======= | ||
1010 | |||
1011 | >>>>>>> avn/ubitvar | ||
1012 | using (MemoryStream ms = new MemoryStream(data)) | 934 | using (MemoryStream ms = new MemoryStream(data)) |
1013 | { | 935 | { |
1014 | if (m_displacement != Vector3.Zero || m_rotation != 0f) | 936 | if (m_displacement != Vector3.Zero || m_rotation != 0f) |
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs index 0fb8a32..4178a57 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs | |||
@@ -111,19 +111,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
111 | String defaultUser = ""; | 111 | String defaultUser = ""; |
112 | float rotation = 0f; | 112 | float rotation = 0f; |
113 | Vector3 rotationCenter = new Vector3(Constants.RegionSize / 2f, Constants.RegionSize / 2f, 0); | 113 | Vector3 rotationCenter = new Vector3(Constants.RegionSize / 2f, Constants.RegionSize / 2f, 0); |
114 | <<<<<<< HEAD | 114 | |
115 | |||
116 | OptionSet options = new OptionSet(); | ||
117 | options.Add("m|merge", delegate (string v) { mergeOar = (v != null); }); | ||
118 | options.Add("s|skip-assets", delegate (string v) { skipAssets = (v != null); }); | ||
119 | options.Add("force-terrain", delegate (string v) { forceTerrain = (v != null); }); | ||
120 | options.Add("forceterrain", delegate (string v) { forceTerrain = (v != null); }); // downward compatibility | ||
121 | options.Add("force-parcels", delegate (string v) { forceParcels = (v != null); }); | ||
122 | options.Add("forceparcels", delegate (string v) { forceParcels = (v != null); }); // downward compatibility | ||
123 | options.Add("no-objects", delegate (string v) { noObjects = (v != null); }); | ||
124 | options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; }); | ||
125 | options.Add("displacement=", delegate (string v) { | ||
126 | ======= | ||
127 | 115 | ||
128 | OptionSet options = new OptionSet(); | 116 | OptionSet options = new OptionSet(); |
129 | options.Add("m|merge", delegate(string v) { mergeOar = (v != null); }); | 117 | options.Add("m|merge", delegate(string v) { mergeOar = (v != null); }); |
@@ -136,7 +124,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
136 | options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; }); | 124 | options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; }); |
137 | options.Add("displacement=", delegate(string v) | 125 | options.Add("displacement=", delegate(string v) |
138 | { | 126 | { |
139 | >>>>>>> avn/ubitvar | ||
140 | try | 127 | try |
141 | { | 128 | { |
142 | displacement = v == null ? Vector3.Zero : Vector3.Parse(v); | 129 | displacement = v == null ? Vector3.Zero : Vector3.Parse(v); |
@@ -163,12 +150,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
163 | // Convert to radians for internals | 150 | // Convert to radians for internals |
164 | rotation = Util.Clamp<float>(rotation, -359f, 359f) / 180f * (float)Math.PI; | 151 | rotation = Util.Clamp<float>(rotation, -359f, 359f) / 180f * (float)Math.PI; |
165 | }); | 152 | }); |
166 | <<<<<<< HEAD | ||
167 | options.Add("rotation-center=", delegate (string v) { | ||
168 | ======= | ||
169 | options.Add("rotation-center=", delegate(string v) | 153 | options.Add("rotation-center=", delegate(string v) |
170 | { | 154 | { |
171 | >>>>>>> avn/ubitvar | ||
172 | try | 155 | try |
173 | { | 156 | { |
174 | rotationCenter = v == null ? Vector3.Zero : Vector3.Parse(v); | 157 | rotationCenter = v == null ? Vector3.Zero : Vector3.Parse(v); |
@@ -308,21 +291,12 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
308 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); | 291 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); |
309 | DearchiveRegion(loadPath, Guid.Empty, archiveOptions); | 292 | DearchiveRegion(loadPath, Guid.Empty, archiveOptions); |
310 | } | 293 | } |
311 | <<<<<<< HEAD | ||
312 | |||
313 | public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string,object> options) | ||
314 | { | ||
315 | m_log.InfoFormat( | ||
316 | "[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath); | ||
317 | |||
318 | ======= | ||
319 | 294 | ||
320 | public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string, object> options) | 295 | public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string, object> options) |
321 | { | 296 | { |
322 | m_log.InfoFormat( | 297 | m_log.InfoFormat( |
323 | "[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath); | 298 | "[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath); |
324 | 299 | ||
325 | >>>>>>> avn/ubitvar | ||
326 | new ArchiveReadRequest(Scene, loadPath, requestId, options).DearchiveRegion(); | 300 | new ArchiveReadRequest(Scene, loadPath, requestId, options).DearchiveRegion(); |
327 | } | 301 | } |
328 | 302 | ||
@@ -331,11 +305,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
331 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); | 305 | Dictionary<string, object> archiveOptions = new Dictionary<string, object>(); |
332 | DearchiveRegion(loadStream, Guid.Empty, archiveOptions); | 306 | DearchiveRegion(loadStream, Guid.Empty, archiveOptions); |
333 | } | 307 | } |
334 | <<<<<<< HEAD | ||
335 | |||
336 | ======= | ||
337 | |||
338 | >>>>>>> avn/ubitvar | ||
339 | public void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options) | 308 | public void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options) |
340 | { | 309 | { |
341 | new ArchiveReadRequest(Scene, loadStream, requestId, options).DearchiveRegion(); | 310 | new ArchiveReadRequest(Scene, loadStream, requestId, options).DearchiveRegion(); |
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index e6e6485..3ded00c 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -68,6 +68,8 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
68 | public event ChangeDelegate OnEstateInfoChange; | 68 | public event ChangeDelegate OnEstateInfoChange; |
69 | public event MessageDelegate OnEstateMessage; | 69 | public event MessageDelegate OnEstateMessage; |
70 | 70 | ||
71 | private int m_delayCount = 0; | ||
72 | |||
71 | #region Region Module interface | 73 | #region Region Module interface |
72 | 74 | ||
73 | public string Name { get { return "EstateManagementModule"; } } | 75 | public string Name { get { return "EstateManagementModule"; } } |
@@ -146,6 +148,10 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
146 | flags |= RegionFlags.AllowParcelChanges; | 148 | flags |= RegionFlags.AllowParcelChanges; |
147 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) | 149 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) |
148 | flags |= RegionFlags.BlockParcelSearch; | 150 | flags |= RegionFlags.BlockParcelSearch; |
151 | if (Scene.RegionInfo.RegionSettings.GodBlockSearch) | ||
152 | flags |= (RegionFlags)(1 << 11); | ||
153 | if (Scene.RegionInfo.RegionSettings.Casino) | ||
154 | flags |= (RegionFlags)(1 << 10); | ||
149 | 155 | ||
150 | if (Scene.RegionInfo.RegionSettings.FixedSun) | 156 | if (Scene.RegionInfo.RegionSettings.FixedSun) |
151 | flags |= RegionFlags.SunFixed; | 157 | flags |= RegionFlags.SunFixed; |
@@ -198,6 +204,14 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
198 | change(Scene.RegionInfo.RegionID); | 204 | change(Scene.RegionInfo.RegionID); |
199 | } | 205 | } |
200 | 206 | ||
207 | protected void RaiseRegionInfoChange(object sender, ElapsedEventArgs e) | ||
208 | { | ||
209 | ChangeDelegate change = OnRegionInfoChange; | ||
210 | |||
211 | if (change != null) | ||
212 | change(Scene.RegionInfo.RegionID); | ||
213 | } | ||
214 | |||
201 | public void TriggerRegionInfoChange() | 215 | public void TriggerRegionInfoChange() |
202 | { | 216 | { |
203 | m_regionChangeTimer.Stop(); | 217 | m_regionChangeTimer.Stop(); |
@@ -1491,68 +1505,8 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
1491 | sendRegionHandshake(client); | 1505 | sendRegionHandshake(client); |
1492 | } | 1506 | } |
1493 | 1507 | ||
1494 | <<<<<<< HEAD | ||
1495 | private uint GetEstateFlags() | ||
1496 | ======= | ||
1497 | public uint GetRegionFlags() | ||
1498 | { | ||
1499 | RegionFlags flags = RegionFlags.None; | ||
1500 | |||
1501 | // Fully implemented | ||
1502 | // | ||
1503 | if (Scene.RegionInfo.RegionSettings.AllowDamage) | ||
1504 | flags |= RegionFlags.AllowDamage; | ||
1505 | if (Scene.RegionInfo.RegionSettings.BlockTerraform) | ||
1506 | flags |= RegionFlags.BlockTerraform; | ||
1507 | if (!Scene.RegionInfo.RegionSettings.AllowLandResell) | ||
1508 | flags |= RegionFlags.BlockLandResell; | ||
1509 | if (Scene.RegionInfo.RegionSettings.DisableCollisions) | ||
1510 | flags |= RegionFlags.SkipCollisions; | ||
1511 | if (Scene.RegionInfo.RegionSettings.DisableScripts) | ||
1512 | flags |= RegionFlags.SkipScripts; | ||
1513 | if (Scene.RegionInfo.RegionSettings.DisablePhysics) | ||
1514 | flags |= RegionFlags.SkipPhysics; | ||
1515 | if (Scene.RegionInfo.RegionSettings.BlockFly) | ||
1516 | flags |= RegionFlags.NoFly; | ||
1517 | if (Scene.RegionInfo.RegionSettings.RestrictPushing) | ||
1518 | flags |= RegionFlags.RestrictPushObject; | ||
1519 | if (Scene.RegionInfo.RegionSettings.AllowLandJoinDivide) | ||
1520 | flags |= RegionFlags.AllowParcelChanges; | ||
1521 | if (Scene.RegionInfo.RegionSettings.BlockShowInSearch) | ||
1522 | flags |= RegionFlags.BlockParcelSearch; | ||
1523 | if (Scene.RegionInfo.RegionSettings.GodBlockSearch) | ||
1524 | flags |= (RegionFlags)(1 << 11); | ||
1525 | if (Scene.RegionInfo.RegionSettings.Casino) | ||
1526 | flags |= (RegionFlags)(1 << 10); | ||
1527 | |||
1528 | if (Scene.RegionInfo.RegionSettings.FixedSun) | ||
1529 | flags |= RegionFlags.SunFixed; | ||
1530 | if (Scene.RegionInfo.RegionSettings.Sandbox) | ||
1531 | flags |= RegionFlags.Sandbox; | ||
1532 | if (Scene.RegionInfo.EstateSettings.AllowVoice) | ||
1533 | flags |= RegionFlags.AllowVoice; | ||
1534 | if (Scene.RegionInfo.EstateSettings.AllowLandmark) | ||
1535 | flags |= RegionFlags.AllowLandmark; | ||
1536 | if (Scene.RegionInfo.EstateSettings.AllowSetHome) | ||
1537 | flags |= RegionFlags.AllowSetHome; | ||
1538 | if (Scene.RegionInfo.EstateSettings.BlockDwell) | ||
1539 | flags |= RegionFlags.BlockDwell; | ||
1540 | if (Scene.RegionInfo.EstateSettings.ResetHomeOnTeleport) | ||
1541 | flags |= RegionFlags.ResetHomeOnTeleport; | ||
1542 | |||
1543 | |||
1544 | // TODO: SkipUpdateInterestList | ||
1545 | |||
1546 | // Omitted | ||
1547 | // | ||
1548 | // Omitted: NullLayer (what is that?) | ||
1549 | // Omitted: SkipAgentAction (what does it do?) | ||
1550 | |||
1551 | return (uint)flags; | ||
1552 | } | ||
1553 | 1508 | ||
1554 | public uint GetEstateFlags() | 1509 | public uint GetEstateFlags() |
1555 | >>>>>>> avn/ubitvar | ||
1556 | { | 1510 | { |
1557 | RegionFlags flags = RegionFlags.None; | 1511 | RegionFlags flags = RegionFlags.None; |
1558 | 1512 | ||
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 8bd46f6..749c2cc 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -69,11 +69,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
69 | /// <summary> | 69 | /// <summary> |
70 | /// Minimum land unit size in region co-ordinates. | 70 | /// Minimum land unit size in region co-ordinates. |
71 | /// </summary> | 71 | /// </summary> |
72 | <<<<<<< HEAD | 72 | |
73 | public const int LandUnit = 4; | 73 | public const int LandUnit = 4; |
74 | ======= | ||
75 | public const int landUnit = 4; | ||
76 | >>>>>>> avn/ubitvar | ||
77 | 74 | ||
78 | private static readonly string remoteParcelRequestPath = "0009/"; | 75 | private static readonly string remoteParcelRequestPath = "0009/"; |
79 | 76 | ||
@@ -106,17 +103,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
106 | 103 | ||
107 | // caches ExtendedLandData | 104 | // caches ExtendedLandData |
108 | private Cache parcelInfoCache; | 105 | private Cache parcelInfoCache; |
109 | <<<<<<< HEAD | ||
110 | |||
111 | 106 | ||
112 | /// <summary> | 107 | /// <summary> |
113 | /// Record positions that avatar's are currently being forced to move to due to parcel entry restrictions. | 108 | /// Record positions that avatar's are currently being forced to move to due to parcel entry restrictions. |
114 | /// </summary> | 109 | /// </summary> |
115 | private Dictionary<UUID, Vector3> forcedPosition = new Dictionary<UUID, Vector3>(); | 110 | private Dictionary<UUID, Vector3> forcedPosition = new Dictionary<UUID, Vector3>(); |
116 | ======= | 111 | |
117 | private Dictionary<UUID, Vector3> forcedPosition = | ||
118 | new Dictionary<UUID, Vector3>(); | ||
119 | >>>>>>> avn/ubitvar | ||
120 | 112 | ||
121 | // Enables limiting parcel layer info transmission when doing simple updates | 113 | // Enables limiting parcel layer info transmission when doing simple updates |
122 | private bool shouldLimitParcelLayerInfoToViewDistance { get; set; } | 114 | private bool shouldLimitParcelLayerInfoToViewDistance { get; set; } |
@@ -132,7 +124,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
132 | 124 | ||
133 | public void Initialise(IConfigSource source) | 125 | public void Initialise(IConfigSource source) |
134 | { | 126 | { |
135 | <<<<<<< HEAD | ||
136 | shouldLimitParcelLayerInfoToViewDistance = true; | 127 | shouldLimitParcelLayerInfoToViewDistance = true; |
137 | parcelLayerViewDistance = 128; | 128 | parcelLayerViewDistance = 128; |
138 | IConfig landManagementConfig = source.Configs["LandManagement"]; | 129 | IConfig landManagementConfig = source.Configs["LandManagement"]; |
@@ -140,24 +131,16 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
140 | { | 131 | { |
141 | shouldLimitParcelLayerInfoToViewDistance = landManagementConfig.GetBoolean("LimitParcelLayerUpdateDistance", shouldLimitParcelLayerInfoToViewDistance); | 132 | shouldLimitParcelLayerInfoToViewDistance = landManagementConfig.GetBoolean("LimitParcelLayerUpdateDistance", shouldLimitParcelLayerInfoToViewDistance); |
142 | parcelLayerViewDistance = landManagementConfig.GetInt("ParcelLayerViewDistance", parcelLayerViewDistance); | 133 | parcelLayerViewDistance = landManagementConfig.GetInt("ParcelLayerViewDistance", parcelLayerViewDistance); |
143 | ======= | 134 | DefaultGodParcelGroup = new UUID(landManagementConfig.GetString("DefaultAdministratorGroupUUID", UUID.Zero.ToString())); |
144 | IConfig cnf = source.Configs["LandManagement"]; | 135 | DefaultGodParcelName = landManagementConfig.GetString("DefaultAdministratorParcelName", "Default Parcel"); |
145 | if (cnf != null) | ||
146 | { | ||
147 | DefaultGodParcelGroup = new UUID(cnf.GetString("DefaultAdministratorGroupUUID", UUID.Zero.ToString())); | ||
148 | DefaultGodParcelName = cnf.GetString("DefaultAdministratorParcelName", "Default Parcel"); | ||
149 | >>>>>>> avn/ubitvar | ||
150 | } | 136 | } |
151 | } | 137 | } |
152 | 138 | ||
153 | public void AddRegion(Scene scene) | 139 | public void AddRegion(Scene scene) |
154 | { | 140 | { |
155 | m_scene = scene; | 141 | m_scene = scene; |
156 | <<<<<<< HEAD | ||
157 | m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit]; | 142 | m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit]; |
158 | ======= | 143 | |
159 | m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / landUnit, m_scene.RegionInfo.RegionSizeY / landUnit]; | ||
160 | >>>>>>> avn/ubitvar | ||
161 | landChannel = new LandChannel(scene, this); | 144 | landChannel = new LandChannel(scene, this); |
162 | 145 | ||
163 | parcelInfoCache = new Cache(); | 146 | parcelInfoCache = new Cache(); |
@@ -299,11 +282,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
299 | { | 282 | { |
300 | m_landList.Clear(); | 283 | m_landList.Clear(); |
301 | m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1; | 284 | m_lastLandLocalID = LandChannel.START_LAND_LOCAL_ID - 1; |
302 | <<<<<<< HEAD | 285 | |
303 | m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit]; | 286 | m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / LandUnit, m_scene.RegionInfo.RegionSizeY / LandUnit]; |
304 | ======= | ||
305 | m_landIDList = new int[m_scene.RegionInfo.RegionSizeX / landUnit, m_scene.RegionInfo.RegionSizeY / landUnit]; | ||
306 | >>>>>>> avn/ubitvar | ||
307 | } | 287 | } |
308 | } | 288 | } |
309 | 289 | ||
@@ -313,16 +293,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
313 | /// <returns>The parcel created.</returns> | 293 | /// <returns>The parcel created.</returns> |
314 | protected ILandObject CreateDefaultParcel() | 294 | protected ILandObject CreateDefaultParcel() |
315 | { | 295 | { |
316 | <<<<<<< HEAD | ||
317 | m_log.DebugFormat( | ||
318 | "[LAND MANAGEMENT MODULE]: Creating default parcel for region {0}", m_scene.RegionInfo.RegionName); | ||
319 | |||
320 | ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); | ||
321 | ======= | ||
322 | m_log.DebugFormat("{0} Creating default parcel for region {1}", LogHeader, m_scene.RegionInfo.RegionName); | 296 | m_log.DebugFormat("{0} Creating default parcel for region {1}", LogHeader, m_scene.RegionInfo.RegionName); |
323 | 297 | ||
324 | ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); | 298 | ILandObject fullSimParcel = new LandObject(UUID.Zero, false, m_scene); |
325 | >>>>>>> avn/ubitvar | 299 | |
326 | fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, | 300 | fullSimParcel.SetLandBitmap(fullSimParcel.GetSquareLandBitmap(0, 0, |
327 | (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY)); | 301 | (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY)); |
328 | fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | 302 | fullSimParcel.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; |
@@ -456,15 +430,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
456 | 430 | ||
457 | public void SendLandUpdate(ScenePresence avatar, bool force) | 431 | public void SendLandUpdate(ScenePresence avatar, bool force) |
458 | { | 432 | { |
459 | <<<<<<< HEAD | ||
460 | ILandObject over = GetLandObject((int)Math.Min(((int)m_scene.RegionInfo.RegionSizeX - 1), Math.Max(0, Math.Round(avatar.AbsolutePosition.X))), | ||
461 | (int)Math.Min(((int)m_scene.RegionInfo.RegionSizeY - 1), Math.Max(0, Math.Round(avatar.AbsolutePosition.Y)))); | ||
462 | ======= | ||
463 | if (avatar.IsChildAgent) | 433 | if (avatar.IsChildAgent) |
464 | return; | 434 | return; |
465 | 435 | ||
466 | ILandObject over = GetLandObjectClipedXY(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | 436 | ILandObject over = GetLandObjectClipedXY(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); |
467 | >>>>>>> avn/ubitvar | ||
468 | 437 | ||
469 | if (over != null) | 438 | if (over != null) |
470 | { | 439 | { |
@@ -621,28 +590,17 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
621 | new_land.LandData.LocalID = newLandLocalID; | 590 | new_land.LandData.LocalID = newLandLocalID; |
622 | 591 | ||
623 | bool[,] landBitmap = new_land.GetLandBitmap(); | 592 | bool[,] landBitmap = new_land.GetLandBitmap(); |
624 | <<<<<<< HEAD | ||
625 | // m_log.DebugFormat("{0} AddLandObject. new_land.bitmapSize=({1},{2}). newLocalID={3}", | ||
626 | // LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), newLandLocalID); | ||
627 | |||
628 | ======= | ||
629 | >>>>>>> avn/ubitvar | ||
630 | if (landBitmap.GetLength(0) != m_landIDList.GetLength(0) || landBitmap.GetLength(1) != m_landIDList.GetLength(1)) | 593 | if (landBitmap.GetLength(0) != m_landIDList.GetLength(0) || landBitmap.GetLength(1) != m_landIDList.GetLength(1)) |
631 | { | 594 | { |
632 | // Going to variable sized regions can cause mismatches | 595 | // Going to variable sized regions can cause mismatches |
633 | m_log.ErrorFormat("{0} AddLandObject. Added land bitmap different size than region ID map. bitmapSize=({1},{2}), landIDSize=({3},{4})", | 596 | m_log.ErrorFormat("{0} AddLandObject. Added land bitmap different size than region ID map. bitmapSize=({1},{2}), landIDSize=({3},{4})", |
634 | <<<<<<< HEAD | ||
635 | LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), m_landIDList.GetLength(0), m_landIDList.GetLength(1) ); | ||
636 | ======= | ||
637 | LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), m_landIDList.GetLength(0), m_landIDList.GetLength(1)); | 597 | LogHeader, landBitmap.GetLength(0), landBitmap.GetLength(1), m_landIDList.GetLength(0), m_landIDList.GetLength(1)); |
638 | >>>>>>> avn/ubitvar | ||
639 | } | 598 | } |
640 | else | 599 | else |
641 | { | 600 | { |
642 | // If other land objects still believe that they occupy any parts of the same space, | 601 | // If other land objects still believe that they occupy any parts of the same space, |
643 | // then do not allow the add to proceed. | 602 | // then do not allow the add to proceed. |
644 | for (int x = 0; x < landBitmap.GetLength(0); x++) | 603 | for (int x = 0; x < landBitmap.GetLength(0); x++) |
645 | <<<<<<< HEAD | ||
646 | { | 604 | { |
647 | for (int y = 0; y < landBitmap.GetLength(1); y++) | 605 | for (int y = 0; y < landBitmap.GetLength(1); y++) |
648 | { | 606 | { |
@@ -658,40 +616,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
658 | { | 616 | { |
659 | m_log.ErrorFormat( | 617 | m_log.ErrorFormat( |
660 | "{0}: Cannot add parcel \"{1}\", local ID {2} at tile {3},{4} because this is still occupied by parcel \"{5}\", local ID {6} in {7}", | 618 | "{0}: Cannot add parcel \"{1}\", local ID {2} at tile {3},{4} because this is still occupied by parcel \"{5}\", local ID {6} in {7}", |
661 | LogHeader, new_land.LandData.Name, new_land.LandData.LocalID, x, y, | ||
662 | lastRecordedLo.LandData.Name, lastRecordedLo.LandData.LocalID, m_scene.Name); | ||
663 | |||
664 | return null; | ||
665 | } | ||
666 | } | ||
667 | } | ||
668 | } | ||
669 | } | ||
670 | |||
671 | for (int x = 0; x < landBitmap.GetLength(0); x++) | ||
672 | ======= | ||
673 | >>>>>>> avn/ubitvar | ||
674 | { | ||
675 | for (int y = 0; y < landBitmap.GetLength(1); y++) | ||
676 | { | ||
677 | if (landBitmap[x, y]) | ||
678 | { | ||
679 | <<<<<<< HEAD | ||
680 | // m_log.DebugFormat( | ||
681 | // "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}", | ||
682 | // new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName); | ||
683 | |||
684 | ======= | ||
685 | int lastRecordedLandId = m_landIDList[x, y]; | ||
686 | |||
687 | if (lastRecordedLandId > 0) | ||
688 | { | ||
689 | ILandObject lastRecordedLo = m_landList[lastRecordedLandId]; | ||
690 | |||
691 | if (lastRecordedLo.LandBitmap[x, y]) | ||
692 | { | ||
693 | m_log.ErrorFormat( | ||
694 | "{0}: Cannot add parcel \"{1}\", local ID {2} at tile {3},{4} because this is still occupied by parcel \"{5}\", local ID {6} in {7}", | ||
695 | LogHeader, new_land.LandData.Name, new_land.LandData.LocalID, x, y, | 619 | LogHeader, new_land.LandData.Name, new_land.LandData.LocalID, x, y, |
696 | lastRecordedLo.LandData.Name, lastRecordedLo.LandData.LocalID, m_scene.Name); | 620 | lastRecordedLo.LandData.Name, lastRecordedLo.LandData.LocalID, m_scene.Name); |
697 | 621 | ||
@@ -712,7 +636,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
712 | // "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}", | 636 | // "[LAND MANAGEMENT MODULE]: Registering parcel {0} for land co-ord ({1}, {2}) on {3}", |
713 | // new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName); | 637 | // new_land.LandData.Name, x, y, m_scene.RegionInfo.RegionName); |
714 | 638 | ||
715 | >>>>>>> avn/ubitvar | ||
716 | m_landIDList[x, y] = newLandLocalID; | 639 | m_landIDList[x, y] = newLandLocalID; |
717 | } | 640 | } |
718 | } | 641 | } |
@@ -829,33 +752,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
829 | /// <returns>Land object at the point supplied</returns> | 752 | /// <returns>Land object at the point supplied</returns> |
830 | public ILandObject GetLandObject(float x_float, float y_float) | 753 | public ILandObject GetLandObject(float x_float, float y_float) |
831 | { | 754 | { |
832 | <<<<<<< HEAD | ||
833 | return GetLandObject((int)x_float, (int)y_float, true /* returnNullIfLandObjectNotFound */); | ||
834 | /* | ||
835 | int x; | ||
836 | int y; | ||
837 | |||
838 | if (x_float >= m_scene.RegionInfo.RegionSizeX || x_float < 0 || y_float >= m_scene.RegionInfo.RegionSizeX || y_float < 0) | ||
839 | return null; | ||
840 | |||
841 | try | ||
842 | { | ||
843 | x = Convert.ToInt32(Math.Floor(Convert.ToDouble(x_float) / (float)landUnit)); | ||
844 | y = Convert.ToInt32(Math.Floor(Convert.ToDouble(y_float) / (float)landUnit)); | ||
845 | } | ||
846 | catch (OverflowException) | ||
847 | { | ||
848 | return null; | ||
849 | } | ||
850 | |||
851 | if (x >= (m_scene.RegionInfo.RegionSizeX / landUnit) | ||
852 | || y >= (m_scene.RegionInfo.RegionSizeY / landUnit) | ||
853 | || x < 0 | ||
854 | || y < 0) | ||
855 | { | ||
856 | return null; | ||
857 | } | ||
858 | ======= | ||
859 | return GetLandObject((int)x_float, (int)y_float, true); | 755 | return GetLandObject((int)x_float, (int)y_float, true); |
860 | } | 756 | } |
861 | 757 | ||
@@ -875,45 +771,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
875 | avy = 0; | 771 | avy = 0; |
876 | else if (avy >= m_scene.RegionInfo.RegionSizeY) | 772 | else if (avy >= m_scene.RegionInfo.RegionSizeY) |
877 | avy = (int)Constants.RegionSize - 1; | 773 | avy = (int)Constants.RegionSize - 1; |
878 | >>>>>>> avn/ubitvar | ||
879 | 774 | ||
880 | lock (m_landIDList) | 775 | lock (m_landIDList) |
881 | { | 776 | { |
882 | <<<<<<< HEAD | ||
883 | // Corner case. If an autoreturn happens during sim startup | ||
884 | // we will come here with the list uninitialized | ||
885 | // | ||
886 | // int landId = m_landIDList[x, y]; | ||
887 | |||
888 | // if (landId == 0) | ||
889 | // m_log.DebugFormat( | ||
890 | // "[LAND MANAGEMENT MODULE]: No land object found at ({0}, {1}) on {2}", | ||
891 | // x, y, m_scene.RegionInfo.RegionName); | ||
892 | |||
893 | try | ||
894 | { | ||
895 | if (m_landList.ContainsKey(m_landIDList[x, y])) | ||
896 | return m_landList[m_landIDList[x, y]]; | ||
897 | } | ||
898 | catch (Exception e) | ||
899 | { | ||
900 | m_log.DebugFormat("{0} GetLandObject exception. x={1}, y={2}, m_landIDList.len=({3},{4})", | ||
901 | LogHeader, x, y, m_landIDList.GetLength(0), m_landIDList.GetLength(1)); | ||
902 | } | ||
903 | |||
904 | return null; | ||
905 | ======= | ||
906 | try | 777 | try |
907 | { | 778 | { |
908 | return m_landList[m_landIDList[avx / landUnit, avy / landUnit]]; | 779 | return m_landList[m_landIDList[avx / LandUnit, avy / LandUnit]]; |
909 | } | 780 | } |
910 | catch (IndexOutOfRangeException) | 781 | catch (IndexOutOfRangeException) |
911 | { | 782 | { |
912 | return null; | 783 | return null; |
913 | } | 784 | } |
914 | >>>>>>> avn/ubitvar | ||
915 | } | 785 | } |
916 | */ | ||
917 | } | 786 | } |
918 | 787 | ||
919 | // Public entry. | 788 | // Public entry. |
@@ -923,38 +792,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
923 | return GetLandObject(x, y, false /* returnNullIfLandObjectNotFound */); | 792 | return GetLandObject(x, y, false /* returnNullIfLandObjectNotFound */); |
924 | } | 793 | } |
925 | 794 | ||
926 | <<<<<<< HEAD | ||
927 | /// <summary> | ||
928 | /// Given a region position, return the parcel land object for that location | ||
929 | /// </summary> | ||
930 | /// <returns> | ||
931 | /// The land object. | ||
932 | /// </returns> | ||
933 | /// <param name='x'></param> | ||
934 | /// <param name='y'></param> | ||
935 | /// <param name='returnNullIfLandObjectNotFound'> | ||
936 | /// Return null if the land object requested is not within the region's bounds. | ||
937 | /// </param> | ||
938 | private ILandObject GetLandObject(int x, int y, bool returnNullIfLandObjectOutsideBounds) | ||
939 | { | ||
940 | if (x >= m_scene.RegionInfo.RegionSizeX || y >= m_scene.RegionInfo.RegionSizeY || x < 0 || y < 0) | ||
941 | ======= | ||
942 | public ILandObject GetLandObject(int x, int y, bool returnNullIfLandObjectOutsideBounds) | 795 | public ILandObject GetLandObject(int x, int y, bool returnNullIfLandObjectOutsideBounds) |
943 | { | 796 | { |
944 | if (x >= m_scene.RegionInfo.RegionSizeX || y >= m_scene.RegionInfo.RegionSizeY || x < 0 || y < 0) | 797 | if (x >= m_scene.RegionInfo.RegionSizeX || y >= m_scene.RegionInfo.RegionSizeY || x < 0 || y < 0) |
945 | >>>>>>> avn/ubitvar | ||
946 | { | 798 | { |
947 | // These exceptions here will cause a lot of complaints from the users specifically because | 799 | // These exceptions here will cause a lot of complaints from the users specifically because |
948 | // they happen every time at border crossings | 800 | // they happen every time at border crossings |
949 | if (returnNullIfLandObjectOutsideBounds) | 801 | if (returnNullIfLandObjectOutsideBounds) |
950 | return null; | 802 | return null; |
951 | else | 803 | else |
952 | <<<<<<< HEAD | ||
953 | throw new Exception( | ||
954 | String.Format("{0} GetLandObject for non-existent position. Region={1}, pos=<{2},{3}", | ||
955 | LogHeader, m_scene.RegionInfo.RegionName, x, y) | ||
956 | ); | ||
957 | ======= | ||
958 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); | 804 | throw new Exception("Error: Parcel not found at point " + x + ", " + y); |
959 | } | 805 | } |
960 | 806 | ||
@@ -968,7 +814,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
968 | { | 814 | { |
969 | return null; | 815 | return null; |
970 | } | 816 | } |
971 | >>>>>>> avn/ubitvar | ||
972 | } | 817 | } |
973 | 818 | ||
974 | return m_landList[m_landIDList[x / 4, y / 4]]; | 819 | return m_landList[m_landIDList[x / 4, y / 4]]; |
@@ -987,19 +832,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
987 | return ret; | 832 | return ret; |
988 | } | 833 | } |
989 | 834 | ||
990 | // Create a 'parcel is here' bitmap for the parcel identified by the passed landID | ||
991 | private bool[,] CreateBitmapForID(int landID) | ||
992 | { | ||
993 | bool[,] ret = new bool[m_landIDList.GetLength(0), m_landIDList.GetLength(1)]; | ||
994 | |||
995 | for (int xx = 0; xx < m_landIDList.GetLength(0); xx++) | ||
996 | for (int yy = 0; yy < m_landIDList.GetLength(0); yy++) | ||
997 | if (m_landIDList[xx, yy] == landID) | ||
998 | ret[xx, yy] = true; | ||
999 | |||
1000 | return ret; | ||
1001 | } | ||
1002 | |||
1003 | #endregion | 835 | #endregion |
1004 | 836 | ||
1005 | #region Parcel Modification | 837 | #region Parcel Modification |
@@ -1169,19 +1001,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1169 | 1001 | ||
1170 | //Now add the new land object | 1002 | //Now add the new land object |
1171 | ILandObject result = AddLandObject(newLand); | 1003 | ILandObject result = AddLandObject(newLand); |
1172 | <<<<<<< HEAD | ||
1173 | 1004 | ||
1174 | if (result != null) | ||
1175 | { | ||
1176 | UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData); | ||
1177 | result.SendLandUpdateToAvatarsOverMe(); | ||
1178 | } | ||
1179 | ======= | ||
1180 | UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData); | 1005 | UpdateLandObject(startLandObject.LandData.LocalID, startLandObject.LandData); |
1181 | result.SendLandUpdateToAvatarsOverMe(); | 1006 | result.SendLandUpdateToAvatarsOverMe(); |
1182 | startLandObject.SendLandUpdateToAvatarsOverMe(); | 1007 | startLandObject.SendLandUpdateToAvatarsOverMe(); |
1183 | m_scene.ForEachClient(SendParcelOverlay); | 1008 | m_scene.ForEachClient(SendParcelOverlay); |
1184 | >>>>>>> avn/ubitvar | 1009 | |
1185 | } | 1010 | } |
1186 | 1011 | ||
1187 | /// <summary> | 1012 | /// <summary> |
@@ -1263,15 +1088,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1263 | 1088 | ||
1264 | #region Parcel Updating | 1089 | #region Parcel Updating |
1265 | 1090 | ||
1266 | <<<<<<< HEAD | ||
1267 | // Send parcel layer info for the whole region | ||
1268 | public void SendParcelOverlay(IClientAPI remote_client) | ||
1269 | { | ||
1270 | SendParcelOverlay(remote_client, 0, 0, (int)Constants.MaximumRegionSize); | ||
1271 | } | ||
1272 | ======= | ||
1273 | >>>>>>> avn/ubitvar | ||
1274 | |||
1275 | /// <summary> | 1091 | /// <summary> |
1276 | /// Send the parcel overlay blocks to the client. We send the overlay packets | 1092 | /// Send the parcel overlay blocks to the client. We send the overlay packets |
1277 | /// around a location and limited by the 'parcelLayerViewDistance'. This number | 1093 | /// around a location and limited by the 'parcelLayerViewDistance'. This number |
@@ -1285,7 +1101,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1285 | /// <param name="xPlace">X position in the region to send surrounding parcel layer info</param> | 1101 | /// <param name="xPlace">X position in the region to send surrounding parcel layer info</param> |
1286 | /// <param name="yPlace">y position in the region to send surrounding parcel layer info</param> | 1102 | /// <param name="yPlace">y position in the region to send surrounding parcel layer info</param> |
1287 | /// <param name="layerViewDistance">Distance from x,y position to send parcel layer info</param> | 1103 | /// <param name="layerViewDistance">Distance from x,y position to send parcel layer info</param> |
1288 | private void SendParcelOverlay(IClientAPI remote_client, int xPlace, int yPlace, int layerViewDistance) | 1104 | public void SendParcelOverlay(IClientAPI remote_client) |
1289 | { | 1105 | { |
1290 | if (remote_client.SceneAgent.PresenceType == PresenceType.Npc) | 1106 | if (remote_client.SceneAgent.PresenceType == PresenceType.Npc) |
1291 | return; | 1107 | return; |
@@ -1295,149 +1111,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1295 | byte[] byteArray = new byte[LAND_BLOCKS_PER_PACKET]; | 1111 | byte[] byteArray = new byte[LAND_BLOCKS_PER_PACKET]; |
1296 | int byteArrayCount = 0; | 1112 | int byteArrayCount = 0; |
1297 | int sequenceID = 0; | 1113 | int sequenceID = 0; |
1298 | <<<<<<< HEAD | ||
1299 | |||
1300 | int xLow = 0; | ||
1301 | int xHigh = (int)m_scene.RegionInfo.RegionSizeX; | ||
1302 | int yLow = 0; | ||
1303 | int yHigh = (int)m_scene.RegionInfo.RegionSizeY; | ||
1304 | |||
1305 | if (shouldLimitParcelLayerInfoToViewDistance) | ||
1306 | { | ||
1307 | // Compute view distance around the given point | ||
1308 | int txLow = xPlace - layerViewDistance; | ||
1309 | int txHigh = xPlace + layerViewDistance; | ||
1310 | // If the distance is outside the region area, move the view distance to ba all in the region | ||
1311 | if (txLow < xLow) | ||
1312 | ======= | ||
1313 | 1114 | ||
1314 | // Layer data is in landUnit (4m) chunks | 1115 | // Layer data is in LandUnit (4m) chunks |
1315 | for (int y = 0; y < m_scene.RegionInfo.RegionSizeY; y += landUnit) | 1116 | for (int y = 0; y < m_scene.RegionInfo.RegionSizeY; y += LandUnit) |
1316 | { | 1117 | { |
1317 | for (int x = 0; x < m_scene.RegionInfo.RegionSizeX; x += landUnit) | 1118 | for (int x = 0; x < m_scene.RegionInfo.RegionSizeX; x += LandUnit) |
1318 | >>>>>>> avn/ubitvar | ||
1319 | { | 1119 | { |
1320 | txLow = xLow; | 1120 | byte tempByte = 0; //This represents the byte for the current 4x4 |
1321 | txHigh = Math.Min(yLow + (layerViewDistance * 2), xHigh); | ||
1322 | } | ||
1323 | if (txHigh > xHigh) | ||
1324 | { | ||
1325 | txLow = Math.Max(xLow, xHigh - (layerViewDistance * 2)); | ||
1326 | txHigh = xHigh; | ||
1327 | } | ||
1328 | xLow = txLow; | ||
1329 | xHigh = txHigh; | ||
1330 | 1121 | ||
1331 | <<<<<<< HEAD | ||
1332 | int tyLow = yPlace - layerViewDistance; | ||
1333 | int tyHigh = yPlace + layerViewDistance; | ||
1334 | if (tyLow < yLow) | ||
1335 | { | ||
1336 | tyLow = yLow; | ||
1337 | tyHigh = Math.Min(yLow + (layerViewDistance * 2), yHigh); | ||
1338 | } | ||
1339 | if (tyHigh > yHigh) | ||
1340 | { | ||
1341 | tyLow = Math.Max(yLow, yHigh - (layerViewDistance * 2)); | ||
1342 | tyHigh = yHigh; | ||
1343 | } | ||
1344 | yLow = tyLow; | ||
1345 | yHigh = tyHigh; | ||
1346 | } | ||
1347 | // m_log.DebugFormat("{0} SendParcelOverlay: place=<{1},{2}>, vDist={3}, xLH=<{4},{5}, yLH=<{6},{7}>", | ||
1348 | // LogHeader, xPlace, yPlace, layerViewDistance, xLow, xHigh, yLow, yHigh); | ||
1349 | ======= | ||
1350 | ILandObject currentParcelBlock = GetLandObject(x, y); | 1122 | ILandObject currentParcelBlock = GetLandObject(x, y); |
1351 | >>>>>>> avn/ubitvar | ||
1352 | 1123 | ||
1353 | // Layer data is in landUnit (4m) chunks | 1124 | if (currentParcelBlock != null) |
1354 | for (int y = yLow; y < yHigh / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); y++) | ||
1355 | { | ||
1356 | for (int x = xLow; x < xHigh / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); x++) | ||
1357 | { | ||
1358 | byteArray[byteArrayCount] = BuildLayerByte(GetLandObject(x * LandUnit, y * LandUnit), x, y, remote_client); | ||
1359 | byteArrayCount++; | ||
1360 | if (byteArrayCount >= LAND_BLOCKS_PER_PACKET) | ||
1361 | { | 1125 | { |
1362 | <<<<<<< HEAD | ||
1363 | // m_log.DebugFormat("{0} SendParcelOverlay, sending packet, bytes={1}", LogHeader, byteArray.Length); | ||
1364 | remote_client.SendLandParcelOverlay(byteArray, sequenceID); | ||
1365 | byteArrayCount = 0; | ||
1366 | sequenceID++; | ||
1367 | byteArray = new byte[LAND_BLOCKS_PER_PACKET]; | ||
1368 | } | ||
1369 | |||
1370 | } | ||
1371 | } | ||
1372 | |||
1373 | if (byteArrayCount != 0) | ||
1374 | { | ||
1375 | remote_client.SendLandParcelOverlay(byteArray, sequenceID); | ||
1376 | // m_log.DebugFormat("{0} SendParcelOverlay, complete sending packet, bytes={1}", LogHeader, byteArray.Length); | ||
1377 | } | ||
1378 | } | ||
1379 | |||
1380 | private byte BuildLayerByte(ILandObject currentParcelBlock, int x, int y, IClientAPI remote_client) | ||
1381 | { | ||
1382 | byte tempByte = 0; //This represents the byte for the current 4x4 | ||
1383 | |||
1384 | if (currentParcelBlock != null) | ||
1385 | { | ||
1386 | if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId) | ||
1387 | { | ||
1388 | //Owner Flag | ||
1389 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_REQUESTER); | ||
1390 | } | ||
1391 | else if (currentParcelBlock.LandData.SalePrice > 0 && | ||
1392 | (currentParcelBlock.LandData.AuthBuyerID == UUID.Zero || | ||
1393 | currentParcelBlock.LandData.AuthBuyerID == remote_client.AgentId)) | ||
1394 | { | ||
1395 | //Sale Flag | ||
1396 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_IS_FOR_SALE); | ||
1397 | } | ||
1398 | else if (currentParcelBlock.LandData.OwnerID == UUID.Zero) | ||
1399 | { | ||
1400 | //Public Flag | ||
1401 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_PUBLIC); | ||
1402 | } | ||
1403 | else | ||
1404 | { | ||
1405 | //Other Flag | ||
1406 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_TYPE_OWNED_BY_OTHER); | ||
1407 | } | ||
1408 | |||
1409 | //Now for border control | ||
1410 | |||
1411 | ILandObject westParcel = null; | ||
1412 | ILandObject southParcel = null; | ||
1413 | if (x > 0) | ||
1414 | { | ||
1415 | westParcel = GetLandObject((x - 1) * LandUnit, y * LandUnit); | ||
1416 | } | ||
1417 | if (y > 0) | ||
1418 | { | ||
1419 | southParcel = GetLandObject(x * LandUnit, (y - 1) * LandUnit); | ||
1420 | } | ||
1421 | |||
1422 | if (x == 0) | ||
1423 | { | ||
1424 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_WEST); | ||
1425 | } | ||
1426 | else if (westParcel != null && westParcel != currentParcelBlock) | ||
1427 | { | ||
1428 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_WEST); | ||
1429 | } | ||
1430 | |||
1431 | if (y == 0) | ||
1432 | { | ||
1433 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_SOUTH); | ||
1434 | } | ||
1435 | else if (southParcel != null && southParcel != currentParcelBlock) | ||
1436 | { | ||
1437 | tempByte = Convert.ToByte(tempByte | LandChannel.LAND_FLAG_PROPERTY_BORDER_SOUTH); | ||
1438 | } | ||
1439 | |||
1440 | ======= | ||
1441 | // types | 1126 | // types |
1442 | if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId) | 1127 | if (currentParcelBlock.LandData.OwnerID == remote_client.AgentId) |
1443 | { | 1128 | { |
@@ -1525,10 +1210,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1525 | if (byteArrayCount > 0) | 1210 | if (byteArrayCount > 0) |
1526 | { | 1211 | { |
1527 | remote_client.SendLandParcelOverlay(byteArray, sequenceID); | 1212 | remote_client.SendLandParcelOverlay(byteArray, sequenceID); |
1528 | >>>>>>> avn/ubitvar | ||
1529 | } | 1213 | } |
1530 | |||
1531 | return tempByte; | ||
1532 | } | 1214 | } |
1533 | 1215 | ||
1534 | public void ClientOnParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, | 1216 | public void ClientOnParcelPropertiesRequest(int start_x, int start_y, int end_x, int end_y, int sequence_id, |
@@ -1569,10 +1251,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1569 | temp[i].SendLandProperties(sequence_id, snap_selection, requestResult, remote_client); | 1251 | temp[i].SendLandProperties(sequence_id, snap_selection, requestResult, remote_client); |
1570 | } | 1252 | } |
1571 | 1253 | ||
1572 | <<<<<<< HEAD | ||
1573 | // Also send the layer data around the point of interest | ||
1574 | SendParcelOverlay(remote_client, (start_x + end_x) / 2, (start_y + end_y) / 2, parcelLayerViewDistance); | ||
1575 | ======= | ||
1576 | // SendParcelOverlay(remote_client); | 1254 | // SendParcelOverlay(remote_client); |
1577 | } | 1255 | } |
1578 | 1256 | ||
@@ -1612,7 +1290,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1612 | avatar.currentParcelUUID = parcelID; // force parcel flags review | 1290 | avatar.currentParcelUUID = parcelID; // force parcel flags review |
1613 | }); | 1291 | }); |
1614 | } | 1292 | } |
1615 | >>>>>>> avn/ubitvar | ||
1616 | } | 1293 | } |
1617 | 1294 | ||
1618 | public void ClientOnParcelPropertiesUpdateRequest(LandUpdateArgs args, int localID, IClientAPI remote_client) | 1295 | public void ClientOnParcelPropertiesUpdateRequest(LandUpdateArgs args, int localID, IClientAPI remote_client) |
@@ -1821,35 +1498,17 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1821 | for (int i = 0; i < data.Count; i++) | 1498 | for (int i = 0; i < data.Count; i++) |
1822 | IncomingLandObjectFromStorage(data[i]); | 1499 | IncomingLandObjectFromStorage(data[i]); |
1823 | 1500 | ||
1824 | <<<<<<< HEAD | 1501 | // Layer data is in LandUnit (4m) chunks |
1825 | // Prevent race conditions from any auto-creation of new parcels for varregions whilst we are still loading | ||
1826 | // the existing parcels. | ||
1827 | lock (m_landList) | ||
1828 | { | ||
1829 | for (int i = 0; i < data.Count; i++) | ||
1830 | IncomingLandObjectFromStorage(data[i]); | ||
1831 | |||
1832 | // Layer data is in landUnit (4m) chunks | ||
1833 | for (int y = 0; y < m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); y++) | 1502 | for (int y = 0; y < m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); y++) |
1834 | { | 1503 | { |
1835 | for (int x = 0; x < m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); x++) | 1504 | for (int x = 0; x < m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / LandUnit); x++) |
1836 | ======= | ||
1837 | // Layer data is in landUnit (4m) chunks | ||
1838 | for (int y = 0; y < m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / landUnit); y++) | ||
1839 | { | ||
1840 | for (int x = 0; x < m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize * (Constants.TerrainPatchSize / landUnit); x++) | ||
1841 | >>>>>>> avn/ubitvar | ||
1842 | { | 1505 | { |
1843 | if (m_landIDList[x, y] == 0) | 1506 | if (m_landIDList[x, y] == 0) |
1844 | { | 1507 | { |
1845 | if (m_landList.Count == 1) | 1508 | if (m_landList.Count == 1) |
1846 | { | 1509 | { |
1847 | m_log.DebugFormat( | 1510 | m_log.DebugFormat( |
1848 | <<<<<<< HEAD | ||
1849 | "[{0}]: Auto-extending land parcel as landID at {1},{2} is 0 and only one land parcel is present in {3}", | ||
1850 | ======= | ||
1851 | "[{0}]: Auto-extending land parcel as landID at {1},{2} is 0 and only one land parcel is present in {3}", | 1511 | "[{0}]: Auto-extending land parcel as landID at {1},{2} is 0 and only one land parcel is present in {3}", |
1852 | >>>>>>> avn/ubitvar | ||
1853 | LogHeader, x, y, m_scene.Name); | 1512 | LogHeader, x, y, m_scene.Name); |
1854 | 1513 | ||
1855 | int onlyParcelID = 0; | 1514 | int onlyParcelID = 0; |
@@ -1872,19 +1531,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1872 | else if (m_landList.Count > 1) | 1531 | else if (m_landList.Count > 1) |
1873 | { | 1532 | { |
1874 | m_log.DebugFormat( | 1533 | m_log.DebugFormat( |
1875 | <<<<<<< HEAD | ||
1876 | "{0}: Auto-creating land parcel as landID at {1},{2} is 0 and more than one land parcel is present in {3}", | ||
1877 | LogHeader, x, y, m_scene.Name); | ||
1878 | |||
1879 | // There are several other parcels so we must create a new one for the unassigned space | ||
1880 | ILandObject newLand = new LandObject(UUID.Zero, false, m_scene); | ||
1881 | ======= | ||
1882 | "{0}: Auto-creating land parcel as landID at {1},{2} is 0 and more than one land parcel is present in {3}", | 1534 | "{0}: Auto-creating land parcel as landID at {1},{2} is 0 and more than one land parcel is present in {3}", |
1883 | LogHeader, x, y, m_scene.Name); | 1535 | LogHeader, x, y, m_scene.Name); |
1884 | 1536 | ||
1885 | // There are several other parcels so we must create a new one for the unassigned space | 1537 | // There are several other parcels so we must create a new one for the unassigned space |
1886 | ILandObject newLand = new LandObject(UUID.Zero, false, m_scene); | 1538 | ILandObject newLand = new LandObject(UUID.Zero, false, m_scene); |
1887 | >>>>>>> avn/ubitvar | ||
1888 | // Claim all the unclaimed "0" ids | 1539 | // Claim all the unclaimed "0" ids |
1889 | newLand.SetLandBitmap(CreateBitmapForID(0)); | 1540 | newLand.SetLandBitmap(CreateBitmapForID(0)); |
1890 | newLand.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; | 1541 | newLand.LandData.OwnerID = m_scene.RegionInfo.EstateSettings.EstateOwner; |
@@ -1895,11 +1546,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1895 | { | 1546 | { |
1896 | // We should never reach this point as the separate code path when no land data exists should have fired instead. | 1547 | // We should never reach this point as the separate code path when no land data exists should have fired instead. |
1897 | m_log.WarnFormat( | 1548 | m_log.WarnFormat( |
1898 | <<<<<<< HEAD | ||
1899 | "{0}: Ignoring request to auto-create parcel in {1} as there are no other parcels present", | ||
1900 | ======= | ||
1901 | "{0}: Ignoring request to auto-create parcel in {1} as there are no other parcels present", | 1549 | "{0}: Ignoring request to auto-create parcel in {1} as there are no other parcels present", |
1902 | >>>>>>> avn/ubitvar | ||
1903 | LogHeader, m_scene.Name); | 1550 | LogHeader, m_scene.Name); |
1904 | } | 1551 | } |
1905 | } | 1552 | } |
@@ -1910,13 +1557,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1910 | 1557 | ||
1911 | private void IncomingLandObjectFromStorage(LandData data) | 1558 | private void IncomingLandObjectFromStorage(LandData data) |
1912 | { | 1559 | { |
1913 | <<<<<<< HEAD | ||
1914 | ILandObject new_land = new LandObject(data, m_scene); | ||
1915 | ======= | ||
1916 | |||
1917 | ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene); | 1560 | ILandObject new_land = new LandObject(data.OwnerID, data.IsGroupOwned, m_scene); |
1918 | new_land.LandData = data.Copy(); | 1561 | new_land.LandData = data.Copy(); |
1919 | >>>>>>> avn/ubitvar | 1562 | |
1920 | new_land.SetLandBitmapFromByteArray(); | 1563 | new_land.SetLandBitmapFromByteArray(); |
1921 | AddLandObject(new_land); | 1564 | AddLandObject(new_land); |
1922 | // new_land.SendLandUpdateToAvatarsOverMe(); | 1565 | // new_land.SendLandUpdateToAvatarsOverMe(); |
@@ -2568,17 +2211,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
2568 | 2211 | ||
2569 | private void AppendParcelsSummaryReport(StringBuilder report) | 2212 | private void AppendParcelsSummaryReport(StringBuilder report) |
2570 | { | 2213 | { |
2571 | <<<<<<< HEAD | ||
2572 | report.AppendFormat("Land information for {0}\n", m_scene.Name); | ||
2573 | |||
2574 | ConsoleDisplayTable cdt = new ConsoleDisplayTable(); | ||
2575 | cdt.AddColumn("Parcel Name", ConsoleDisplayUtil.ParcelNameSize); | ||
2576 | cdt.AddColumn("ID", 3); | ||
2577 | cdt.AddColumn("Area", 6); | ||
2578 | cdt.AddColumn("Starts", ConsoleDisplayUtil.VectorSize); | ||
2579 | cdt.AddColumn("Ends", ConsoleDisplayUtil.VectorSize); | ||
2580 | cdt.AddColumn("Owner", ConsoleDisplayUtil.UserNameSize); | ||
2581 | ======= | ||
2582 | report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName); | 2214 | report.AppendFormat("Land information for {0}\n", m_scene.RegionInfo.RegionName); |
2583 | report.AppendFormat( | 2215 | report.AppendFormat( |
2584 | "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", | 2216 | "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", |
@@ -2588,27 +2220,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
2588 | "AABBMin", | 2220 | "AABBMin", |
2589 | "AABBMax", | 2221 | "AABBMax", |
2590 | "Owner"); | 2222 | "Owner"); |
2591 | >>>>>>> avn/ubitvar | ||
2592 | 2223 | ||
2593 | lock (m_landList) | 2224 | lock (m_landList) |
2594 | { | 2225 | { |
2595 | foreach (ILandObject lo in m_landList.Values) | 2226 | foreach (ILandObject lo in m_landList.Values) |
2596 | { | 2227 | { |
2597 | LandData ld = lo.LandData; | 2228 | LandData ld = lo.LandData; |
2598 | <<<<<<< HEAD | ||
2599 | string ownerName; | ||
2600 | if (ld.IsGroupOwned) | ||
2601 | { | ||
2602 | GroupRecord rec = m_groupManager.GetGroupRecord(ld.GroupID); | ||
2603 | ownerName = (rec != null) ? rec.GroupName : "Unknown Group"; | ||
2604 | } | ||
2605 | else | ||
2606 | { | ||
2607 | ownerName = m_userManager.GetUserName(ld.OwnerID); | ||
2608 | } | ||
2609 | cdt.AddRow( | ||
2610 | ld.Name, ld.LocalID, ld.Area, lo.StartPoint, lo.EndPoint, ownerName); | ||
2611 | ======= | ||
2612 | 2229 | ||
2613 | report.AppendFormat( | 2230 | report.AppendFormat( |
2614 | "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", | 2231 | "{0,-20} {1,-10} {2,-9} {3,-18} {4,-18} {5,-20}\n", |
@@ -2636,11 +2253,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
2636 | else | 2253 | else |
2637 | { | 2254 | { |
2638 | ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition); | 2255 | ForceAvatarToPosition(avatar, avatar.lastKnownAllowedPosition); |
2639 | >>>>>>> avn/ubitvar | ||
2640 | } | 2256 | } |
2641 | } | 2257 | } |
2642 | |||
2643 | report.Append(cdt.ToString()); | ||
2644 | } | 2258 | } |
2645 | 2259 | ||
2646 | private void AppendParcelReport(StringBuilder report, ILandObject lo) | 2260 | private void AppendParcelReport(StringBuilder report, ILandObject lo) |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 3b81d6b..040c90b 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -46,20 +46,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
46 | 46 | ||
47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
48 | private static readonly string LogHeader = "[LAND OBJECT]"; | 48 | private static readonly string LogHeader = "[LAND OBJECT]"; |
49 | <<<<<<< HEAD | ||
50 | |||
51 | private readonly int landUnit = 4; | ||
52 | |||
53 | private int m_lastSeqId = 0; | ||
54 | |||
55 | ======= | ||
56 | 49 | ||
57 | private readonly int landUnit = 4; | 50 | private readonly int landUnit = 4; |
58 | 51 | ||
59 | private int m_lastSeqId = 0; | 52 | private int m_lastSeqId = 0; |
60 | private int m_expiryCounter = 0; | 53 | private int m_expiryCounter = 0; |
61 | 54 | ||
62 | >>>>>>> avn/ubitvar | ||
63 | protected Scene m_scene; | 55 | protected Scene m_scene; |
64 | protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>(); | 56 | protected List<SceneObjectGroup> primsOverMe = new List<SceneObjectGroup>(); |
65 | protected Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>(); | 57 | protected Dictionary<uint, UUID> m_listTransactions = new Dictionary<uint, UUID>(); |
@@ -67,16 +59,12 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
67 | protected ExpiringCache<UUID, bool> m_groupMemberCache = new ExpiringCache<UUID, bool>(); | 59 | protected ExpiringCache<UUID, bool> m_groupMemberCache = new ExpiringCache<UUID, bool>(); |
68 | protected TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds | 60 | protected TimeSpan m_groupMemberCacheTimeout = TimeSpan.FromSeconds(30); // cache invalidation after 30 seconds |
69 | 61 | ||
70 | <<<<<<< HEAD | ||
71 | public bool[,] LandBitmap { get; set; } | ||
72 | ======= | ||
73 | private bool[,] m_landBitmap; | 62 | private bool[,] m_landBitmap; |
74 | public bool[,] LandBitmap | 63 | public bool[,] LandBitmap |
75 | { | 64 | { |
76 | get { return m_landBitmap; } | 65 | get { return m_landBitmap; } |
77 | set { m_landBitmap = value; } | 66 | set { m_landBitmap = value; } |
78 | } | 67 | } |
79 | >>>>>>> avn/ubitvar | ||
80 | 68 | ||
81 | #endregion | 69 | #endregion |
82 | 70 | ||
@@ -87,9 +75,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
87 | return free; | 75 | return free; |
88 | } | 76 | } |
89 | 77 | ||
90 | <<<<<<< HEAD | ||
91 | public LandData LandData { get; set; } | ||
92 | ======= | ||
93 | protected LandData m_landData; | 78 | protected LandData m_landData; |
94 | public LandData LandData | 79 | public LandData LandData |
95 | { | 80 | { |
@@ -97,7 +82,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
97 | 82 | ||
98 | set { m_landData = value; } | 83 | set { m_landData = value; } |
99 | } | 84 | } |
100 | >>>>>>> avn/ubitvar | ||
101 | 85 | ||
102 | public IPrimCounts PrimCounts { get; set; } | 86 | public IPrimCounts PrimCounts { get; set; } |
103 | 87 | ||
@@ -225,12 +209,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
225 | else | 209 | else |
226 | { | 210 | { |
227 | // Normal Calculations | 211 | // Normal Calculations |
228 | <<<<<<< HEAD | ||
229 | int parcelMax = (int)(((float)LandData.Area / (m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY)) | ||
230 | * (float)m_scene.RegionInfo.ObjectCapacity | ||
231 | * (float)m_scene.RegionInfo.RegionSettings.ObjectBonus); | ||
232 | // TODO: The calculation of ObjectBonus should be refactored. It does still not work in the same manner as SL! | ||
233 | ======= | ||
234 | int parcelMax = (int)( (long)LandData.Area | 212 | int parcelMax = (int)( (long)LandData.Area |
235 | * (long)m_scene.RegionInfo.ObjectCapacity | 213 | * (long)m_scene.RegionInfo.ObjectCapacity |
236 | * (long)m_scene.RegionInfo.RegionSettings.ObjectBonus | 214 | * (long)m_scene.RegionInfo.RegionSettings.ObjectBonus |
@@ -252,7 +230,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
252 | int parcelMax = (int)((long)LandData.Area | 230 | int parcelMax = (int)((long)LandData.Area |
253 | * (long)m_scene.RegionInfo.ObjectCapacity | 231 | * (long)m_scene.RegionInfo.ObjectCapacity |
254 | / 65536L); | 232 | / 65536L); |
255 | >>>>>>> avn/ubitvar | ||
256 | return parcelMax; | 233 | return parcelMax; |
257 | } | 234 | } |
258 | } | 235 | } |
@@ -266,15 +243,10 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
266 | else | 243 | else |
267 | { | 244 | { |
268 | //Normal Calculations | 245 | //Normal Calculations |
269 | <<<<<<< HEAD | ||
270 | int simMax = (int)(((float)LandData.SimwideArea / (m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY)) | ||
271 | * (float)m_scene.RegionInfo.ObjectCapacity); | ||
272 | ======= | ||
273 | int simMax = (int)( (long)LandData.SimwideArea | 246 | int simMax = (int)( (long)LandData.SimwideArea |
274 | * (long)m_scene.RegionInfo.ObjectCapacity | 247 | * (long)m_scene.RegionInfo.ObjectCapacity |
275 | / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) ); | 248 | / (long)(m_scene.RegionInfo.RegionSizeX * m_scene.RegionInfo.RegionSizeY) ); |
276 | // m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}", LandData.SimwideArea, m_scene.RegionInfo.ObjectCapacity, simMax); | 249 | // m_log.DebugFormat("Simwide Area: {0}, Capacity {1}, SimMax {2}", LandData.SimwideArea, m_scene.RegionInfo.ObjectCapacity, simMax); |
277 | >>>>>>> avn/ubitvar | ||
278 | return simMax; | 250 | return simMax; |
279 | } | 251 | } |
280 | } | 252 | } |
@@ -439,12 +411,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
439 | { | 411 | { |
440 | uint preserve = LandData.Flags & ~allowedDelta; | 412 | uint preserve = LandData.Flags & ~allowedDelta; |
441 | newData.Flags = preserve | (args.ParcelFlags & allowedDelta); | 413 | newData.Flags = preserve | (args.ParcelFlags & allowedDelta); |
442 | <<<<<<< HEAD | ||
443 | |||
444 | m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData); | ||
445 | SendLandUpdateToAvatarsOverMe(snap_selection); | ||
446 | } | ||
447 | ======= | ||
448 | 414 | ||
449 | uint curdelta = LandData.Flags ^ newData.Flags; | 415 | uint curdelta = LandData.Flags ^ newData.Flags; |
450 | curdelta &= (uint)(ParcelFlags.SoundLocal); | 416 | curdelta &= (uint)(ParcelFlags.SoundLocal); |
@@ -456,7 +422,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
456 | return true; | 422 | return true; |
457 | } | 423 | } |
458 | return false; | 424 | return false; |
459 | >>>>>>> avn/ubitvar | ||
460 | } | 425 | } |
461 | 426 | ||
462 | public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) | 427 | public void UpdateLandSold(UUID avatarID, UUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) |
@@ -806,17 +771,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
806 | /// </summary> | 771 | /// </summary> |
807 | private void UpdateAABBAndAreaValues() | 772 | private void UpdateAABBAndAreaValues() |
808 | { | 773 | { |
809 | <<<<<<< HEAD | 774 | |
810 | int min_x = 10000; | ||
811 | int min_y = 10000; | ||
812 | int max_x = 0; | ||
813 | int max_y = 0; | ||
814 | ======= | ||
815 | int min_x = Int32.MaxValue; | 775 | int min_x = Int32.MaxValue; |
816 | int min_y = Int32.MaxValue; | 776 | int min_y = Int32.MaxValue; |
817 | int max_x = Int32.MinValue; | 777 | int max_x = Int32.MinValue; |
818 | int max_y = Int32.MinValue; | 778 | int max_y = Int32.MinValue; |
819 | >>>>>>> avn/ubitvar | ||
820 | int tempArea = 0; | 779 | int tempArea = 0; |
821 | int x, y; | 780 | int x, y; |
822 | for (x = 0; x < LandBitmap.GetLength(0); x++) | 781 | for (x = 0; x < LandBitmap.GetLength(0); x++) |
@@ -825,12 +784,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
825 | { | 784 | { |
826 | if (LandBitmap[x, y] == true) | 785 | if (LandBitmap[x, y] == true) |
827 | { | 786 | { |
828 | <<<<<<< HEAD | ||
829 | if (min_x > x) min_x = x; | ||
830 | if (min_y > y) min_y = y; | ||
831 | if (max_x < x) max_x = x; | ||
832 | if (max_y < y) max_y = y; | ||
833 | ======= | ||
834 | if (min_x > x) | 787 | if (min_x > x) |
835 | min_x = x; | 788 | min_x = x; |
836 | if (min_y > y) | 789 | if (min_y > y) |
@@ -839,7 +792,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
839 | max_x = x; | 792 | max_x = x; |
840 | if (max_y < y) | 793 | if (max_y < y) |
841 | max_y = y; | 794 | max_y = y; |
842 | >>>>>>> avn/ubitvar | ||
843 | tempArea += landUnit * landUnit; //16sqm peice of land | 795 | tempArea += landUnit * landUnit; //16sqm peice of land |
844 | } | 796 | } |
845 | } | 797 | } |
@@ -847,27 +799,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
847 | int tx = min_x * landUnit; | 799 | int tx = min_x * landUnit; |
848 | if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1)) | 800 | if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1)) |
849 | tx = ((int)m_scene.RegionInfo.RegionSizeX - 1); | 801 | tx = ((int)m_scene.RegionInfo.RegionSizeX - 1); |
850 | <<<<<<< HEAD | ||
851 | int ty = min_y * landUnit; | ||
852 | if (ty > ((int)m_scene.RegionInfo.RegionSizeY - 1)) | ||
853 | ty = ((int)m_scene.RegionInfo.RegionSizeY - 1); | ||
854 | |||
855 | LandData.AABBMin = | ||
856 | new Vector3( | ||
857 | (float)(min_x * landUnit), (float)(min_y * landUnit), m_scene != null ? (float)m_scene.Heightmap[tx, ty] : 0); | ||
858 | |||
859 | tx = max_x * landUnit; | ||
860 | if (tx > ((int)m_scene.RegionInfo.RegionSizeX - 1)) | ||
861 | tx = ((int)m_scene.RegionInfo.RegionSizeX - 1); | ||
862 | ty = max_y * landUnit; | ||
863 | if (ty > ((int)m_scene.RegionInfo.RegionSizeY - 1)) | ||
864 | ty = ((int)m_scene.RegionInfo.RegionSizeY - 1); | ||
865 | |||
866 | LandData.AABBMax | ||
867 | = new Vector3( | ||
868 | (float)(max_x * landUnit), (float)(max_y * landUnit), m_scene != null ? (float)m_scene.Heightmap[tx, ty] : 0); | ||
869 | ======= | ||
870 | |||
871 | int htx; | 802 | int htx; |
872 | if (tx >= ((int)m_scene.RegionInfo.RegionSizeX)) | 803 | if (tx >= ((int)m_scene.RegionInfo.RegionSizeX)) |
873 | htx = (int)m_scene.RegionInfo.RegionSizeX - 1; | 804 | htx = (int)m_scene.RegionInfo.RegionSizeX - 1; |
@@ -904,7 +835,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
904 | LandData.AABBMax | 835 | LandData.AABBMax |
905 | = new Vector3( | 836 | = new Vector3( |
906 | (float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0); | 837 | (float)(tx), (float)(ty), m_scene != null ? (float)m_scene.Heightmap[htx, hty] : 0); |
907 | >>>>>>> avn/ubitvar | ||
908 | 838 | ||
909 | LandData.Area = tempArea; | 839 | LandData.Area = tempArea; |
910 | } | 840 | } |
@@ -920,10 +850,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
920 | public void SetLandBitmap(bool[,] bitmap) | 850 | public void SetLandBitmap(bool[,] bitmap) |
921 | { | 851 | { |
922 | LandBitmap = bitmap; | 852 | LandBitmap = bitmap; |
923 | <<<<<<< HEAD | ||
924 | // m_log.DebugFormat("{0} SetLandBitmap. BitmapSize=<{1},{2}>", LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1)); | ||
925 | ======= | ||
926 | >>>>>>> avn/ubitvar | ||
927 | ForceUpdateLandInfo(); | 853 | ForceUpdateLandInfo(); |
928 | } | 854 | } |
929 | 855 | ||
@@ -1024,16 +950,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1024 | private byte[] ConvertLandBitmapToBytes() | 950 | private byte[] ConvertLandBitmapToBytes() |
1025 | { | 951 | { |
1026 | byte[] tempConvertArr = new byte[LandBitmap.GetLength(0) * LandBitmap.GetLength(1) / 8]; | 952 | byte[] tempConvertArr = new byte[LandBitmap.GetLength(0) * LandBitmap.GetLength(1) / 8]; |
1027 | <<<<<<< HEAD | 953 | |
1028 | byte tempByte = 0; | ||
1029 | int byteNum = 0; | ||
1030 | int i = 0; | ||
1031 | ======= | ||
1032 | int tempByte = 0; | 954 | int tempByte = 0; |
1033 | int i, byteNum = 0; | 955 | int i, byteNum = 0; |
1034 | int mask = 1; | 956 | int mask = 1; |
1035 | i = 0; | 957 | i = 0; |
1036 | >>>>>>> avn/ubitvar | ||
1037 | for (int y = 0; y < LandBitmap.GetLength(1); y++) | 958 | for (int y = 0; y < LandBitmap.GetLength(1); y++) |
1038 | { | 959 | { |
1039 | for (int x = 0; x < LandBitmap.GetLength(0); x++) | 960 | for (int x = 0; x < LandBitmap.GetLength(0); x++) |
@@ -1070,7 +991,6 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1070 | // LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1)); | 991 | // LogHeader, LandBitmap.GetLength(0), LandBitmap.GetLength(1)); |
1071 | ======= | 992 | ======= |
1072 | */ | 993 | */ |
1073 | >>>>>>> avn/ubitvar | ||
1074 | return tempConvertArr; | 994 | return tempConvertArr; |
1075 | } | 995 | } |
1076 | 996 | ||
diff --git a/OpenSim/Region/CoreModules/World/LegacyMap/MapImageModule.cs b/OpenSim/Region/CoreModules/World/LegacyMap/MapImageModule.cs index a228e7a..5155804 100644 --- a/OpenSim/Region/CoreModules/World/LegacyMap/MapImageModule.cs +++ b/OpenSim/Region/CoreModules/World/LegacyMap/MapImageModule.cs | |||
@@ -104,7 +104,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap | |||
104 | 104 | ||
105 | terrainRenderer.Initialise(m_scene, m_config); | 105 | terrainRenderer.Initialise(m_scene, m_config); |
106 | 106 | ||
107 | <<<<<<< HEAD | ||
108 | mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height, | 107 | mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height, |
109 | System.Drawing.Imaging.PixelFormat.Format24bppRgb); | 108 | System.Drawing.Imaging.PixelFormat.Format24bppRgb); |
110 | //long t = System.Environment.TickCount; | 109 | //long t = System.Environment.TickCount; |
@@ -113,17 +112,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap | |||
113 | //} | 112 | //} |
114 | //t = System.Environment.TickCount - t; | 113 | //t = System.Environment.TickCount - t; |
115 | //m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t); | 114 | //m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t); |
116 | ======= | ||
117 | mapbmp = new Bitmap((int)m_scene.Heightmap.Width, (int)m_scene.Heightmap.Height, | ||
118 | System.Drawing.Imaging.PixelFormat.Format24bppRgb); | ||
119 | //long t = System.Environment.TickCount; | ||
120 | //for (int i = 0; i < 10; ++i) { | ||
121 | terrainRenderer.TerrainToBitmap(mapbmp); | ||
122 | //} | ||
123 | //t = System.Environment.TickCount - t; | ||
124 | //m_log.InfoFormat("[MAPTILE] generation of 10 maptiles needed {0} ms", t); | ||
125 | >>>>>>> avn/ubitvar | ||
126 | |||
127 | if (drawPrimVolume) | 115 | if (drawPrimVolume) |
128 | { | 116 | { |
129 | DrawObjectVolume(m_scene, mapbmp); | 117 | DrawObjectVolume(m_scene, mapbmp); |
diff --git a/OpenSim/Region/CoreModules/World/LegacyMap/TexturedMapTileRenderer.cs b/OpenSim/Region/CoreModules/World/LegacyMap/TexturedMapTileRenderer.cs index a9cc993..0ec2053 100644 --- a/OpenSim/Region/CoreModules/World/LegacyMap/TexturedMapTileRenderer.cs +++ b/OpenSim/Region/CoreModules/World/LegacyMap/TexturedMapTileRenderer.cs | |||
@@ -270,14 +270,8 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap | |||
270 | 270 | ||
271 | // the heigthfield might have some jumps in values. Rendered land is smooth, though, | 271 | // the heigthfield might have some jumps in values. Rendered land is smooth, though, |
272 | // as a slope is rendered at that place. So average 4 neighbour values to emulate that. | 272 | // as a slope is rendered at that place. So average 4 neighbour values to emulate that. |
273 | <<<<<<< HEAD | ||
274 | private float getHeight(ITerrainChannel hm, int x, int y) { | 273 | private float getHeight(ITerrainChannel hm, int x, int y) { |
275 | if (x < (hm.Width - 1) && y < (hm.Height - 1)) | 274 | if (x < (hm.Width - 1) && y < (hm.Height - 1)) |
276 | ======= | ||
277 | private float getHeight(ITerrainChannel hm, int x, int y) | ||
278 | { | ||
279 | if (x < ((int)Constants.RegionSize - 1) && y < ((int)Constants.RegionSize - 1)) | ||
280 | >>>>>>> avn/ubitvar | ||
281 | return (float)(hm[x, y] * .444 + (hm[x + 1, y] + hm[x, y + 1]) * .222 + hm[x + 1, y +1] * .112); | 275 | return (float)(hm[x, y] * .444 + (hm[x + 1, y] + hm[x, y + 1]) * .222 + hm[x + 1, y +1] * .112); |
282 | else | 276 | else |
283 | return (float)hm[x, y]; | 277 | return (float)hm[x, y]; |
@@ -294,14 +288,6 @@ namespace OpenSim.Region.CoreModules.World.LegacyMap | |||
294 | if (mapbmp.Width != hm.Width || mapbmp.Height != hm.Height) | 288 | if (mapbmp.Width != hm.Width || mapbmp.Height != hm.Height) |
295 | { | 289 | { |
296 | m_log.ErrorFormat("{0} TerrainToBitmap. Passed bitmap wrong dimensions. passed=<{1},{2}>, size=<{3},{4}>", | 290 | m_log.ErrorFormat("{0} TerrainToBitmap. Passed bitmap wrong dimensions. passed=<{1},{2}>, size=<{3},{4}>", |
297 | LogHeader, mapbmp.Width, mapbmp.Height, hm.Width, hm.Height); | ||
298 | } | ||
299 | |||
300 | ITerrainChannel hm = m_scene.Heightmap; | ||
301 | |||
302 | if (mapbmp.Width != hm.Width || mapbmp.Height != hm.Height) | ||
303 | { | ||
304 | m_log.ErrorFormat("{0} TerrainToBitmap. Passed bitmap wrong dimensions. passed=<{1},{2}>, size=<{3},{4}>", | ||
305 | "[TEXTURED MAP TILE RENDERER]", mapbmp.Width, mapbmp.Height, hm.Width, hm.Height); | 291 | "[TEXTURED MAP TILE RENDERER]", mapbmp.Width, mapbmp.Height, hm.Width, hm.Height); |
306 | } | 292 | } |
307 | 293 | ||
diff --git a/OpenSim/Region/CoreModules/World/Terrain/FloodBrushes/NoiseArea.cs b/OpenSim/Region/CoreModules/World/Terrain/FloodBrushes/NoiseArea.cs index 236584a..d634e8b 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/FloodBrushes/NoiseArea.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/FloodBrushes/NoiseArea.cs | |||
@@ -46,10 +46,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain.FloodBrushes | |||
46 | if (fillArea[x, y]) | 46 | if (fillArea[x, y]) |
47 | { | 47 | { |
48 | double noise = TerrainUtil.PerlinNoise2D((double) x / map.Width, (double) y / map.Height, 8, 1.0); | 48 | double noise = TerrainUtil.PerlinNoise2D((double) x / map.Width, (double) y / map.Height, 8, 1.0); |
49 | <<<<<<< HEAD | ||
50 | |||
51 | ======= | ||
52 | >>>>>>> avn/ubitvar | ||
53 | map[x, y] += noise * strength; | 49 | map[x, y] += noise * strength; |
54 | } | 50 | } |
55 | } | 51 | } |
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 925de2a..22723fc 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | |||
@@ -75,15 +75,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
75 | #endregion | 75 | #endregion |
76 | 76 | ||
77 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 77 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
78 | <<<<<<< HEAD | ||
79 | ======= | ||
80 | |||
81 | #pragma warning disable 414 | ||
82 | private static readonly string LogHeader = "[TERRAIN MODULE]"; | ||
83 | #pragma warning restore 414 | ||
84 | |||
85 | private readonly Commander m_commander = new Commander("terrain"); | ||
86 | >>>>>>> avn/ubitvar | ||
87 | 78 | ||
88 | #pragma warning disable 414 | 79 | #pragma warning disable 414 |
89 | private static readonly string LogHeader = "[TERRAIN MODULE]"; | 80 | private static readonly string LogHeader = "[TERRAIN MODULE]"; |
@@ -95,16 +86,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
95 | private readonly Dictionary<string, ITerrainLoader> m_loaders = new Dictionary<string, ITerrainLoader>(); | 86 | private readonly Dictionary<string, ITerrainLoader> m_loaders = new Dictionary<string, ITerrainLoader>(); |
96 | private readonly Dictionary<StandardTerrainEffects, ITerrainPaintableEffect> m_painteffects = | 87 | private readonly Dictionary<StandardTerrainEffects, ITerrainPaintableEffect> m_painteffects = |
97 | new Dictionary<StandardTerrainEffects, ITerrainPaintableEffect>(); | 88 | new Dictionary<StandardTerrainEffects, ITerrainPaintableEffect>(); |
98 | <<<<<<< HEAD | ||
99 | private Dictionary<string, ITerrainEffect> m_plugineffects; | ||
100 | private Dictionary<string, ITerrainModifier> m_modifyOperations = | ||
101 | new Dictionary<string, ITerrainModifier>(); | ||
102 | private ITerrainChannel m_channel; | ||
103 | private ITerrainChannel m_revert; | ||
104 | private Scene m_scene; | ||
105 | private volatile bool m_tainted; | ||
106 | private readonly Stack<LandUndoState> m_undo = new Stack<LandUndoState>(5); | ||
107 | ======= | ||
108 | 89 | ||
109 | private Dictionary<string, ITerrainEffect> m_plugineffects; | 90 | private Dictionary<string, ITerrainEffect> m_plugineffects; |
110 | private ITerrainChannel m_channel; | 91 | private ITerrainChannel m_channel; |
@@ -112,7 +93,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
112 | private Scene m_scene; | 93 | private Scene m_scene; |
113 | private volatile bool m_tainted; | 94 | private volatile bool m_tainted; |
114 | 95 | ||
115 | >>>>>>> avn/ubitvar | ||
116 | private String m_InitialTerrain = "pinhead-island"; | 96 | private String m_InitialTerrain = "pinhead-island"; |
117 | 97 | ||
118 | // If true, send terrain patch updates to clients based on their view distance | 98 | // If true, send terrain patch updates to clients based on their view distance |
@@ -126,19 +106,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
126 | private bool[,] updated; // for each patch, whether it needs to be sent to this client | 106 | private bool[,] updated; // for each patch, whether it needs to be sent to this client |
127 | private int updateCount; // number of patches that need to be sent | 107 | private int updateCount; // number of patches that need to be sent |
128 | public ScenePresence Presence; // a reference to the client to send to | 108 | public ScenePresence Presence; // a reference to the client to send to |
129 | <<<<<<< HEAD | 109 | |
130 | public TerrainData Terrain; // reference to the underlying terrain | ||
131 | ======= | ||
132 | >>>>>>> avn/ubitvar | ||
133 | public PatchUpdates(TerrainData terrData, ScenePresence pPresence) | 110 | public PatchUpdates(TerrainData terrData, ScenePresence pPresence) |
134 | { | 111 | { |
135 | updated = new bool[terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize]; | 112 | updated = new bool[terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize]; |
136 | updateCount = 0; | 113 | updateCount = 0; |
137 | Presence = pPresence; | 114 | Presence = pPresence; |
138 | <<<<<<< HEAD | ||
139 | Terrain = terrData; | ||
140 | ======= | ||
141 | >>>>>>> avn/ubitvar | ||
142 | // Initially, send all patches to the client | 115 | // Initially, send all patches to the client |
143 | SetAll(true); | 116 | SetAll(true); |
144 | } | 117 | } |
@@ -147,26 +120,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
147 | { | 120 | { |
148 | return (updateCount > 0); | 121 | return (updateCount > 0); |
149 | } | 122 | } |
150 | <<<<<<< HEAD | ||
151 | 123 | ||
152 | ======= | ||
153 | >>>>>>> avn/ubitvar | ||
154 | public void SetByXY(int x, int y, bool state) | 124 | public void SetByXY(int x, int y, bool state) |
155 | { | 125 | { |
156 | this.SetByPatch(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, state); | 126 | this.SetByPatch(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, state); |
157 | } | 127 | } |
158 | <<<<<<< HEAD | ||
159 | 128 | ||
160 | ======= | ||
161 | >>>>>>> avn/ubitvar | ||
162 | public bool GetByPatch(int patchX, int patchY) | 129 | public bool GetByPatch(int patchX, int patchY) |
163 | { | 130 | { |
164 | return updated[patchX, patchY]; | 131 | return updated[patchX, patchY]; |
165 | } | 132 | } |
166 | <<<<<<< HEAD | ||
167 | 133 | ||
168 | ======= | ||
169 | >>>>>>> avn/ubitvar | ||
170 | public void SetByPatch(int patchX, int patchY, bool state) | 134 | public void SetByPatch(int patchX, int patchY, bool state) |
171 | { | 135 | { |
172 | bool prevState = updated[patchX, patchY]; | 136 | bool prevState = updated[patchX, patchY]; |
@@ -176,24 +140,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
176 | updateCount--; | 140 | updateCount--; |
177 | updated[patchX, patchY] = state; | 141 | updated[patchX, patchY] = state; |
178 | } | 142 | } |
179 | <<<<<<< HEAD | ||
180 | 143 | ||
181 | public void SetAll(bool state) | 144 | public void SetAll(bool state) |
182 | { | 145 | { |
183 | updateCount = 0; | 146 | updateCount = 0; |
184 | for(int xx = 0; xx < updated.GetLength(0); xx++) | ||
185 | for(int yy = 0; yy < updated.GetLength(1); yy++) | ||
186 | ======= | ||
187 | public void SetAll(bool state) | ||
188 | { | ||
189 | updateCount = 0; | ||
190 | for (int xx = 0; xx < updated.GetLength(0); xx++) | 147 | for (int xx = 0; xx < updated.GetLength(0); xx++) |
191 | for (int yy = 0; yy < updated.GetLength(1); yy++) | 148 | for (int yy = 0; yy < updated.GetLength(1); yy++) |
192 | >>>>>>> avn/ubitvar | ||
193 | updated[xx, yy] = state; | 149 | updated[xx, yy] = state; |
194 | if (state) | 150 | if (state) |
195 | updateCount = updated.GetLength(0) * updated.GetLength(1); | 151 | updateCount = updated.GetLength(0) * updated.GetLength(1); |
196 | } | 152 | } |
153 | |||
197 | // Logically OR's the terrain data's patch taint map into this client's update map. | 154 | // Logically OR's the terrain data's patch taint map into this client's update map. |
198 | public void SetAll(TerrainData terrData) | 155 | public void SetAll(TerrainData terrData) |
199 | { | 156 | { |
@@ -206,15 +163,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
206 | terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize) | 163 | terrData.SizeX / Constants.TerrainPatchSize, terrData.SizeY / Constants.TerrainPatchSize) |
207 | ); | 164 | ); |
208 | } | 165 | } |
209 | <<<<<<< HEAD | 166 | |
210 | for(int xx = 0; xx < terrData.SizeX; xx += Constants.TerrainPatchSize) | ||
211 | { | ||
212 | for(int yy = 0; yy < terrData.SizeY; yy += Constants.TerrainPatchSize) | ||
213 | ======= | ||
214 | for (int xx = 0; xx < terrData.SizeX; xx += Constants.TerrainPatchSize) | 167 | for (int xx = 0; xx < terrData.SizeX; xx += Constants.TerrainPatchSize) |
215 | { | 168 | { |
216 | for (int yy = 0; yy < terrData.SizeY; yy += Constants.TerrainPatchSize) | 169 | for (int yy = 0; yy < terrData.SizeY; yy += Constants.TerrainPatchSize) |
217 | >>>>>>> avn/ubitvar | ||
218 | { | 170 | { |
219 | // Only set tainted. The patch bit may be set if the patch was to be sent later. | 171 | // Only set tainted. The patch bit may be set if the patch was to be sent later. |
220 | if (terrData.IsTaintedAt(xx, yy, false)) | 172 | if (terrData.IsTaintedAt(xx, yy, false)) |
@@ -275,20 +227,13 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
275 | (int)m_scene.RegionInfo.RegionSizeY, | 227 | (int)m_scene.RegionInfo.RegionSizeY, |
276 | (int)m_scene.RegionInfo.RegionSizeZ); | 228 | (int)m_scene.RegionInfo.RegionSizeZ); |
277 | m_scene.Heightmap = m_channel; | 229 | m_scene.Heightmap = m_channel; |
278 | <<<<<<< HEAD | 230 | |
279 | UpdateRevertMap(); | ||
280 | ======= | ||
281 | UpdateBakedMap(); | 231 | UpdateBakedMap(); |
282 | >>>>>>> avn/ubitvar | ||
283 | } | 232 | } |
284 | else | 233 | else |
285 | { | 234 | { |
286 | m_channel = m_scene.Heightmap; | 235 | m_channel = m_scene.Heightmap; |
287 | <<<<<<< HEAD | ||
288 | UpdateRevertMap(); | ||
289 | ======= | ||
290 | UpdateBakedMap(); | 236 | UpdateBakedMap(); |
291 | >>>>>>> avn/ubitvar | ||
292 | } | 237 | } |
293 | 238 | ||
294 | m_scene.RegisterModuleInterface<ITerrainModule>(this); | 239 | m_scene.RegisterModuleInterface<ITerrainModule>(this); |
@@ -296,11 +241,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
296 | m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed; | 241 | m_scene.EventManager.OnClientClosed += EventManager_OnClientClosed; |
297 | m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; | 242 | m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; |
298 | m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick; | 243 | m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick; |
299 | <<<<<<< HEAD | ||
300 | m_scene.EventManager.OnFrame += EventManager_OnFrame; | ||
301 | ======= | ||
302 | m_scene.EventManager.OnTerrainCheckUpdates += EventManager_TerrainCheckUpdates; | 244 | m_scene.EventManager.OnTerrainCheckUpdates += EventManager_TerrainCheckUpdates; |
303 | >>>>>>> avn/ubitvar | ||
304 | } | 245 | } |
305 | 246 | ||
306 | InstallDefaultEffects(); | 247 | InstallDefaultEffects(); |
@@ -339,11 +280,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
339 | // remove the commands | 280 | // remove the commands |
340 | m_scene.UnregisterModuleCommander(m_commander.Name); | 281 | m_scene.UnregisterModuleCommander(m_commander.Name); |
341 | // remove the event-handlers | 282 | // remove the event-handlers |
342 | <<<<<<< HEAD | 283 | |
343 | m_scene.EventManager.OnFrame -= EventManager_OnFrame; | ||
344 | ======= | ||
345 | m_scene.EventManager.OnTerrainCheckUpdates -= EventManager_TerrainCheckUpdates; | 284 | m_scene.EventManager.OnTerrainCheckUpdates -= EventManager_TerrainCheckUpdates; |
346 | >>>>>>> avn/ubitvar | ||
347 | m_scene.EventManager.OnTerrainTick -= EventManager_OnTerrainTick; | 285 | m_scene.EventManager.OnTerrainTick -= EventManager_OnTerrainTick; |
348 | m_scene.EventManager.OnPluginConsole -= EventManager_OnPluginConsole; | 286 | m_scene.EventManager.OnPluginConsole -= EventManager_OnPluginConsole; |
349 | m_scene.EventManager.OnClientClosed -= EventManager_OnClientClosed; | 287 | m_scene.EventManager.OnClientClosed -= EventManager_OnClientClosed; |
@@ -490,11 +428,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
490 | { | 428 | { |
491 | ITerrainChannel channel = loader.Value.LoadStream(stream); | 429 | ITerrainChannel channel = loader.Value.LoadStream(stream); |
492 | m_channel.Merge(channel, displacement, radianRotation, rotationDisplacement); | 430 | m_channel.Merge(channel, displacement, radianRotation, rotationDisplacement); |
493 | <<<<<<< HEAD | ||
494 | UpdateRevertMap(); | ||
495 | ======= | ||
496 | UpdateBakedMap(); | 431 | UpdateBakedMap(); |
497 | >>>>>>> avn/ubitvar | ||
498 | } | 432 | } |
499 | catch(NotImplementedException) | 433 | catch(NotImplementedException) |
500 | { | 434 | { |
@@ -574,27 +508,16 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
574 | 508 | ||
575 | // Someone diddled terrain outside the normal code paths. Set the taintedness for all clients. | 509 | // Someone diddled terrain outside the normal code paths. Set the taintedness for all clients. |
576 | // ITerrainModule.TaintTerrain() | 510 | // ITerrainModule.TaintTerrain() |
577 | <<<<<<< HEAD | ||
578 | public void TaintTerrain() | ||
579 | { | ||
580 | lock(m_perClientPatchUpdates) | ||
581 | { | ||
582 | // Set the flags for all clients so the tainted patches will be sent out | ||
583 | foreach(PatchUpdates pups in m_perClientPatchUpdates.Values) | ||
584 | ======= | ||
585 | public void TaintTerrain () | 511 | public void TaintTerrain () |
586 | { | 512 | { |
587 | lock (m_perClientPatchUpdates) | 513 | lock (m_perClientPatchUpdates) |
588 | { | 514 | { |
589 | // Set the flags for all clients so the tainted patches will be sent out | 515 | // Set the flags for all clients so the tainted patches will be sent out |
590 | foreach (PatchUpdates pups in m_perClientPatchUpdates.Values) | 516 | foreach (PatchUpdates pups in m_perClientPatchUpdates.Values) |
591 | >>>>>>> avn/ubitvar | ||
592 | { | 517 | { |
593 | pups.SetAll(m_scene.Heightmap.GetTerrainData()); | 518 | pups.SetAll(m_scene.Heightmap.GetTerrainData()); |
594 | } | 519 | } |
595 | } | 520 | } |
596 | <<<<<<< HEAD | ||
597 | ======= | ||
598 | } | 521 | } |
599 | 522 | ||
600 | // ITerrainModule.PushTerrain() | 523 | // ITerrainModule.PushTerrain() |
@@ -615,38 +538,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
615 | pups.SetAll(true); | 538 | pups.SetAll(true); |
616 | } | 539 | } |
617 | } | 540 | } |
618 | >>>>>>> avn/ubitvar | ||
619 | } | 541 | } |
620 | 542 | ||
621 | // ITerrainModule.PushTerrain() | ||
622 | public void PushTerrain(IClientAPI pClient) | ||
623 | { | ||
624 | // If view distance based, set the modified patch bits and the frame event will send the updates | ||
625 | if (m_sendTerrainUpdatesByViewDistance) | ||
626 | { | ||
627 | ScenePresence presence = m_scene.GetScenePresence(pClient.AgentId); | ||
628 | if (presence != null) | ||
629 | { | ||
630 | lock(m_perClientPatchUpdates) | ||
631 | { | ||
632 | PatchUpdates pups; | ||
633 | if (!m_perClientPatchUpdates.TryGetValue(pClient.AgentId, out pups)) | ||
634 | { | ||
635 | // There is a ScenePresence without a send patch map. Create one. | ||
636 | pups = new PatchUpdates(m_scene.Heightmap.GetTerrainData(), presence); | ||
637 | m_perClientPatchUpdates.Add(presence.UUID, pups); | ||
638 | } | ||
639 | // By setting all to modified, the next update tick will send the patches | ||
640 | pups.SetAll(true); | ||
641 | } | ||
642 | } | ||
643 | } | ||
644 | else | ||
645 | { | ||
646 | // The traditional way is to call into the protocol stack to send them all. | ||
647 | pClient.SendLayerData(new float[10]); | ||
648 | } | ||
649 | } | ||
650 | #region Plugin Loading Methods | 543 | #region Plugin Loading Methods |
651 | 544 | ||
652 | private void LoadPlugins() | 545 | private void LoadPlugins() |
@@ -750,6 +643,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
750 | m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked); | 643 | m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked); |
751 | 644 | ||
752 | // Terrain Modifier operations | 645 | // Terrain Modifier operations |
646 | /* | ||
753 | m_modifyOperations["min"] = new MinModifier(this); | 647 | m_modifyOperations["min"] = new MinModifier(this); |
754 | m_modifyOperations["max"] = new MaxModifier(this); | 648 | m_modifyOperations["max"] = new MaxModifier(this); |
755 | m_modifyOperations["raise"] = new RaiseModifier(this); | 649 | m_modifyOperations["raise"] = new RaiseModifier(this); |
@@ -757,7 +651,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
757 | m_modifyOperations["fill"] = new FillModifier(this); | 651 | m_modifyOperations["fill"] = new FillModifier(this); |
758 | m_modifyOperations["smooth"] = new SmoothModifier(this); | 652 | m_modifyOperations["smooth"] = new SmoothModifier(this); |
759 | m_modifyOperations["noise"] = new NoiseModifier(this); | 653 | m_modifyOperations["noise"] = new NoiseModifier(this); |
760 | 654 | */ | |
761 | // Filesystem load/save loaders | 655 | // Filesystem load/save loaders |
762 | m_loaders[".r32"] = new RAW32(); | 656 | m_loaders[".r32"] = new RAW32(); |
763 | m_loaders[".f32"] = m_loaders[".r32"]; | 657 | m_loaders[".f32"] = m_loaders[".r32"]; |
@@ -778,24 +672,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
778 | /// </summary> | 672 | /// </summary> |
779 | public void UpdateBakedMap() | 673 | public void UpdateBakedMap() |
780 | { | 674 | { |
781 | <<<<<<< HEAD | ||
782 | /* | ||
783 | int x; | ||
784 | for (x = 0; x < m_channel.Width; x++) | ||
785 | { | ||
786 | int y; | ||
787 | for (y = 0; y < m_channel.Height; y++) | ||
788 | { | ||
789 | m_revert[x, y] = m_channel[x, y]; | ||
790 | } | ||
791 | } | ||
792 | */ | ||
793 | m_revert = m_channel.MakeCopy(); | ||
794 | ======= | ||
795 | m_baked = m_channel.MakeCopy(); | 675 | m_baked = m_channel.MakeCopy(); |
796 | m_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_baked); | 676 | m_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_baked); |
797 | m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked); | 677 | m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_baked); |
798 | >>>>>>> avn/ubitvar | ||
799 | } | 678 | } |
800 | 679 | ||
801 | /// <summary> | 680 | /// <summary> |
@@ -822,13 +701,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
822 | { | 701 | { |
823 | ITerrainChannel channel = loader.Value.LoadFile(filename, offsetX, offsetY, | 702 | ITerrainChannel channel = loader.Value.LoadFile(filename, offsetX, offsetY, |
824 | fileWidth, fileHeight, | 703 | fileWidth, fileHeight, |
825 | <<<<<<< HEAD | ||
826 | (int)m_scene.RegionInfo.RegionSizeX, | ||
827 | (int)m_scene.RegionInfo.RegionSizeY); | ||
828 | ======= | ||
829 | (int) m_scene.RegionInfo.RegionSizeX, | 704 | (int) m_scene.RegionInfo.RegionSizeX, |
830 | (int) m_scene.RegionInfo.RegionSizeY); | 705 | (int) m_scene.RegionInfo.RegionSizeY); |
831 | >>>>>>> avn/ubitvar | ||
832 | m_scene.Heightmap = channel; | 706 | m_scene.Heightmap = channel; |
833 | m_channel = channel; | 707 | m_channel = channel; |
834 | UpdateBakedMap(); | 708 | UpdateBakedMap(); |
@@ -894,27 +768,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
894 | } | 768 | } |
895 | 769 | ||
896 | /// <summary> | 770 | /// <summary> |
897 | <<<<<<< HEAD | ||
898 | /// Called before processing of every simulation frame. | ||
899 | ======= | ||
900 | >>>>>>> avn/ubitvar | ||
901 | /// This is used to check to see of any of the terrain is tainted and, if so, schedule | 771 | /// This is used to check to see of any of the terrain is tainted and, if so, schedule |
902 | /// updates for all the presences. | 772 | /// updates for all the presences. |
903 | /// This also checks to see if there are updates that need to be sent for each presence. | 773 | /// This also checks to see if there are updates that need to be sent for each presence. |
904 | /// This is where the logic is to send terrain updates to clients. | 774 | /// This is where the logic is to send terrain updates to clients. |
905 | /// </summary> | 775 | /// </summary> |
906 | <<<<<<< HEAD | ||
907 | private void EventManager_OnFrame() | ||
908 | { | ||
909 | TerrainData terrData = m_channel.GetTerrainData(); | ||
910 | |||
911 | bool shouldTaint = false; | ||
912 | for(int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize) | ||
913 | { | ||
914 | for(int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize) | ||
915 | { | ||
916 | if (terrData.IsTaintedAt(x, y)) | ||
917 | ======= | ||
918 | private void EventManager_TerrainCheckUpdates() | 776 | private void EventManager_TerrainCheckUpdates() |
919 | { | 777 | { |
920 | // this needs fixing | 778 | // this needs fixing |
@@ -926,7 +784,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
926 | for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize) | 784 | for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize) |
927 | { | 785 | { |
928 | if (terrData.IsTaintedAt(x, y,true)) | 786 | if (terrData.IsTaintedAt(x, y,true)) |
929 | >>>>>>> avn/ubitvar | ||
930 | { | 787 | { |
931 | // Found a patch that was modified. Push this flag into the clients. | 788 | // Found a patch that was modified. Push this flag into the clients. |
932 | SendToClients(terrData, x, y); | 789 | SendToClients(terrData, x, y); |
@@ -944,10 +801,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
944 | m_scene.EventManager.TriggerTerrainTainted(); | 801 | m_scene.EventManager.TriggerTerrainTainted(); |
945 | m_tainted = true; | 802 | m_tainted = true; |
946 | } | 803 | } |
947 | <<<<<<< HEAD | ||
948 | ======= | ||
949 | |||
950 | >>>>>>> avn/ubitvar | ||
951 | } | 804 | } |
952 | 805 | ||
953 | /// <summary> | 806 | /// <summary> |
@@ -1016,14 +869,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1016 | presence.ControllingClient.OnLandUndo -= client_OnLandUndo; | 869 | presence.ControllingClient.OnLandUndo -= client_OnLandUndo; |
1017 | presence.ControllingClient.OnUnackedTerrain -= client_OnUnackedTerrain; | 870 | presence.ControllingClient.OnUnackedTerrain -= client_OnUnackedTerrain; |
1018 | } | 871 | } |
1019 | <<<<<<< HEAD | ||
1020 | |||
1021 | lock(m_perClientPatchUpdates) | ||
1022 | m_perClientPatchUpdates.Remove(client); | ||
1023 | } | ||
1024 | ======= | ||
1025 | >>>>>>> avn/ubitvar | ||
1026 | |||
1027 | lock (m_perClientPatchUpdates) | 872 | lock (m_perClientPatchUpdates) |
1028 | m_perClientPatchUpdates.Remove(client); | 873 | m_perClientPatchUpdates.Remove(client); |
1029 | } | 874 | } |
@@ -1038,21 +883,12 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1038 | TerrainData terrData = m_channel.GetTerrainData(); | 883 | TerrainData terrData = m_channel.GetTerrainData(); |
1039 | 884 | ||
1040 | bool wasLimited = false; | 885 | bool wasLimited = false; |
1041 | <<<<<<< HEAD | ||
1042 | for(int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize) | ||
1043 | { | ||
1044 | for(int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize) | ||
1045 | { | ||
1046 | if (terrData.IsTaintedAt(x, y, false /* clearOnTest */)) | ||
1047 | { | ||
1048 | ======= | ||
1049 | for (int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize) | 886 | for (int x = 0; x < terrData.SizeX; x += Constants.TerrainPatchSize) |
1050 | { | 887 | { |
1051 | for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize) | 888 | for (int y = 0; y < terrData.SizeY; y += Constants.TerrainPatchSize) |
1052 | { | 889 | { |
1053 | if (terrData.IsTaintedAt(x, y, false /* clearOnTest */)) | 890 | if (terrData.IsTaintedAt(x, y, false /* clearOnTest */)) |
1054 | { | 891 | { |
1055 | >>>>>>> avn/ubitvar | ||
1056 | // If we should respect the estate settings then | 892 | // If we should respect the estate settings then |
1057 | // fixup and height deltas that don't respect them. | 893 | // fixup and height deltas that don't respect them. |
1058 | // Note that LimitChannelChanges() modifies the TerrainChannel with the limited height values. | 894 | // Note that LimitChannelChanges() modifies the TerrainChannel with the limited height values. |
@@ -1075,22 +911,13 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1075 | float maxDelta = (float)m_scene.RegionInfo.RegionSettings.TerrainRaiseLimit; | 911 | float maxDelta = (float)m_scene.RegionInfo.RegionSettings.TerrainRaiseLimit; |
1076 | 912 | ||
1077 | // loop through the height map for this patch and compare it against | 913 | // loop through the height map for this patch and compare it against |
1078 | <<<<<<< HEAD | ||
1079 | // the revert map | ||
1080 | for(int x = xStart; x < xStart + Constants.TerrainPatchSize; x++) | ||
1081 | ======= | ||
1082 | // the baked map | 914 | // the baked map |
1083 | for (int x = xStart; x < xStart + Constants.TerrainPatchSize; x++) | 915 | for (int x = xStart; x < xStart + Constants.TerrainPatchSize; x++) |
1084 | >>>>>>> avn/ubitvar | ||
1085 | { | 916 | { |
1086 | for(int y = yStart; y < yStart + Constants.TerrainPatchSize; y++) | 917 | for(int y = yStart; y < yStart + Constants.TerrainPatchSize; y++) |
1087 | { | 918 | { |
1088 | float requestedHeight = terrData[x, y]; | 919 | float requestedHeight = terrData[x, y]; |
1089 | <<<<<<< HEAD | ||
1090 | float bakedHeight = (float)m_revert[x, y]; | ||
1091 | ======= | ||
1092 | float bakedHeight = (float)m_baked[x, y]; | 920 | float bakedHeight = (float)m_baked[x, y]; |
1093 | >>>>>>> avn/ubitvar | ||
1094 | float requestedDelta = requestedHeight - bakedHeight; | 921 | float requestedDelta = requestedHeight - bakedHeight; |
1095 | 922 | ||
1096 | if (requestedDelta > maxDelta) | 923 | if (requestedDelta > maxDelta) |
@@ -1111,19 +938,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1111 | 938 | ||
1112 | private void client_OnLandUndo(IClientAPI client) | 939 | private void client_OnLandUndo(IClientAPI client) |
1113 | { | 940 | { |
1114 | <<<<<<< HEAD | ||
1115 | lock(m_undo) | ||
1116 | { | ||
1117 | if (m_undo.Count > 0) | ||
1118 | { | ||
1119 | LandUndoState goback = m_undo.Pop(); | ||
1120 | if (goback != null) | ||
1121 | goback.PlaybackState(); | ||
1122 | } | ||
1123 | } | ||
1124 | ======= | ||
1125 | |||
1126 | >>>>>>> avn/ubitvar | ||
1127 | } | 941 | } |
1128 | 942 | ||
1129 | /// <summary> | 943 | /// <summary> |
@@ -1133,175 +947,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1133 | /// <param name="x">The patch corner to send</param> | 947 | /// <param name="x">The patch corner to send</param> |
1134 | /// <param name="y">The patch corner to send</param> | 948 | /// <param name="y">The patch corner to send</param> |
1135 | private void SendToClients(TerrainData terrData, int x, int y) | 949 | private void SendToClients(TerrainData terrData, int x, int y) |
1136 | <<<<<<< HEAD | ||
1137 | { | ||
1138 | if (m_sendTerrainUpdatesByViewDistance) | ||
1139 | { | ||
1140 | // Add that this patch needs to be sent to the accounting for each client. | ||
1141 | lock(m_perClientPatchUpdates) | ||
1142 | { | ||
1143 | m_scene.ForEachScenePresence(presence => | ||
1144 | { | ||
1145 | PatchUpdates thisClientUpdates; | ||
1146 | if (!m_perClientPatchUpdates.TryGetValue(presence.UUID, out thisClientUpdates)) | ||
1147 | { | ||
1148 | // There is a ScenePresence without a send patch map. Create one. | ||
1149 | thisClientUpdates = new PatchUpdates(terrData, presence); | ||
1150 | m_perClientPatchUpdates.Add(presence.UUID, thisClientUpdates); | ||
1151 | } | ||
1152 | thisClientUpdates.SetByXY(x, y, true); | ||
1153 | } | ||
1154 | ); | ||
1155 | } | ||
1156 | } | ||
1157 | else | ||
1158 | { | ||
1159 | // Legacy update sending where the update is sent out as soon as noticed | ||
1160 | // We know the actual terrain data that is passed is ignored so this passes a dummy heightmap. | ||
1161 | //float[] heightMap = terrData.GetFloatsSerialized(); | ||
1162 | float[] heightMap = new float[10]; | ||
1163 | m_scene.ForEachClient( | ||
1164 | delegate(IClientAPI controller) | ||
1165 | { | ||
1166 | controller.SendLayerData(x / Constants.TerrainPatchSize, | ||
1167 | y / Constants.TerrainPatchSize, | ||
1168 | heightMap); | ||
1169 | } | ||
1170 | ); | ||
1171 | } | ||
1172 | } | ||
1173 | |||
1174 | private class PatchesToSend : IComparable<PatchesToSend> | ||
1175 | { | ||
1176 | public int PatchX; | ||
1177 | public int PatchY; | ||
1178 | public float Dist; | ||
1179 | |||
1180 | public PatchesToSend(int pX, int pY, float pDist) | ||
1181 | { | ||
1182 | PatchX = pX; | ||
1183 | PatchY = pY; | ||
1184 | Dist = pDist; | ||
1185 | } | ||
1186 | |||
1187 | public int CompareTo(PatchesToSend other) | ||
1188 | { | ||
1189 | return Dist.CompareTo(other.Dist); | ||
1190 | } | ||
1191 | } | ||
1192 | |||
1193 | // Called each frame time to see if there are any patches to send to any of the | ||
1194 | // ScenePresences. | ||
1195 | // We know this is only called if we are doing view distance patch sending so some | ||
1196 | // tests are not made. | ||
1197 | // Loop through all the per-client info and send any patches necessary. | ||
1198 | private void CheckSendingPatchesToClients() | ||
1199 | { | ||
1200 | lock(m_perClientPatchUpdates) | ||
1201 | { | ||
1202 | foreach(PatchUpdates pups in m_perClientPatchUpdates.Values) | ||
1203 | { | ||
1204 | if (pups.HasUpdates()) | ||
1205 | { | ||
1206 | // There is something that could be sent to this client. | ||
1207 | List<PatchesToSend> toSend = GetModifiedPatchesInViewDistance(pups); | ||
1208 | if (toSend.Count > 0) | ||
1209 | { | ||
1210 | // m_log.DebugFormat("{0} CheckSendingPatchesToClient: sending {1} patches to {2} in region {3}", | ||
1211 | // LogHeader, toSend.Count, pups.Presence.Name, m_scene.RegionInfo.RegionName); | ||
1212 | // Sort the patches to send by the distance from the presence | ||
1213 | toSend.Sort(); | ||
1214 | /* old way that sent individual patches | ||
1215 | foreach (PatchesToSend pts in toSend) | ||
1216 | { | ||
1217 | pups.Presence.ControllingClient.SendLayerData(pts.PatchX, pts.PatchY, null); | ||
1218 | // presence.ControllingClient.SendLayerData(xs.ToArray(), ys.ToArray(), null, TerrainPatch.LayerType.Land); | ||
1219 | } | ||
1220 | */ | ||
1221 | |||
1222 | // new way that sends all patches to the protocol so they can be sent in one block | ||
1223 | int[] xPieces = new int[toSend.Count]; | ||
1224 | int[] yPieces = new int[toSend.Count]; | ||
1225 | float[] patchPieces = new float[toSend.Count * 2]; | ||
1226 | int pieceIndex = 0; | ||
1227 | foreach(PatchesToSend pts in toSend) | ||
1228 | { | ||
1229 | patchPieces[pieceIndex++] = pts.PatchX; | ||
1230 | patchPieces[pieceIndex++] = pts.PatchY; | ||
1231 | } | ||
1232 | pups.Presence.ControllingClient.SendLayerData(-toSend.Count, 0, patchPieces); | ||
1233 | } | ||
1234 | } | ||
1235 | } | ||
1236 | } | ||
1237 | } | ||
1238 | |||
1239 | // Compute a list of modified patches that are within our view distance. | ||
1240 | private List<PatchesToSend> GetModifiedPatchesInViewDistance(PatchUpdates pups) | ||
1241 | { | ||
1242 | List<PatchesToSend> ret = new List<PatchesToSend>(); | ||
1243 | |||
1244 | ScenePresence presence = pups.Presence; | ||
1245 | if (presence == null) | ||
1246 | return ret; | ||
1247 | |||
1248 | Vector3 presencePos = presence.AbsolutePosition; | ||
1249 | |||
1250 | // Before this distance check, the whole region just showed up. Adding the distance | ||
1251 | // check causes different things to happen for the current and adjacent regions. | ||
1252 | // So, to keep legacy views, if the region is legacy sized, don't do distance check. | ||
1253 | bool isLegacySizedRegion = pups.Terrain.SizeX == Constants.RegionSize && pups.Terrain.SizeY == Constants.RegionSize; | ||
1254 | bool shouldCheckViewDistance = m_sendTerrainUpdatesByViewDistance && !isLegacySizedRegion; | ||
1255 | |||
1256 | int startX = 0; | ||
1257 | int endX = (int)m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize; | ||
1258 | int startY = 0; | ||
1259 | int endY = (int)m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize; | ||
1260 | |||
1261 | // The following only reduces the size of area scanned for updates. Only significant for very large varregions. | ||
1262 | if (shouldCheckViewDistance) | ||
1263 | { | ||
1264 | // Compute the area of patches within our draw distance | ||
1265 | startX = (((int)(presencePos.X - presence.DrawDistance)) / Constants.TerrainPatchSize) - 2; | ||
1266 | startX = Math.Max(startX, 0); | ||
1267 | startX = Math.Min(startX, (int)m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize); | ||
1268 | startY = (((int)(presencePos.Y - presence.DrawDistance)) / Constants.TerrainPatchSize) - 2; | ||
1269 | startY = Math.Max(startY, 0); | ||
1270 | startY = Math.Min(startY, (int)m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize); | ||
1271 | endX = (((int)(presencePos.X + presence.DrawDistance)) / Constants.TerrainPatchSize) + 2; | ||
1272 | endX = Math.Max(endX, 0); | ||
1273 | endX = Math.Min(endX, (int)m_scene.RegionInfo.RegionSizeX / Constants.TerrainPatchSize); | ||
1274 | endY = (((int)(presencePos.Y + presence.DrawDistance)) / Constants.TerrainPatchSize) + 2; | ||
1275 | endY = Math.Max(endY, 0); | ||
1276 | endY = Math.Min(endY, (int)m_scene.RegionInfo.RegionSizeY / Constants.TerrainPatchSize); | ||
1277 | } | ||
1278 | |||
1279 | // m_log.DebugFormat("{0} GetModifiedPatchesInViewDistance. rName={1}, ddist={2}, apos={3}, cpos={4}, isChild={5}, start=<{6},{7}>, end=<{8},{9}>", | ||
1280 | // LogHeader, m_scene.RegionInfo.RegionName, | ||
1281 | // presence.DrawDistance, presencePos, presence.CameraPosition, | ||
1282 | // isLegacySizeChildRegion, | ||
1283 | // startX, startY, endX, endY); | ||
1284 | for(int x = startX; x < endX; x++) | ||
1285 | { | ||
1286 | for(int y = startY; y < endY; y++) | ||
1287 | { | ||
1288 | //Need to make sure we don't send the same ones over and over | ||
1289 | Vector3 patchPos = new Vector3(x * Constants.TerrainPatchSize, y * Constants.TerrainPatchSize, presencePos.Z); | ||
1290 | if (pups.GetByPatch(x, y)) | ||
1291 | { | ||
1292 | //Check which has less distance, camera or avatar position, both have to be done. | ||
1293 | //Its not a radius, its a diameter and we add 50 so that it doesn't look like it cuts off | ||
1294 | if (!shouldCheckViewDistance | ||
1295 | || Util.DistanceLessThan(presencePos, patchPos, presence.DrawDistance + 50) | ||
1296 | || Util.DistanceLessThan(presence.CameraPosition, patchPos, presence.DrawDistance + 50)) | ||
1297 | { | ||
1298 | //They can see it, send it to them | ||
1299 | pups.SetByPatch(x, y, false); | ||
1300 | float dist = Vector3.DistanceSquared(presencePos, patchPos); | ||
1301 | ret.Add(new PatchesToSend(x, y, dist)); | ||
1302 | } | ||
1303 | } | ||
1304 | ======= | ||
1305 | { | 950 | { |
1306 | // Add that this patch needs to be sent to the accounting for each client. | 951 | // Add that this patch needs to be sent to the accounting for each client. |
1307 | lock (m_perClientPatchUpdates) | 952 | lock (m_perClientPatchUpdates) |
@@ -1475,7 +1120,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1475 | } | 1120 | } |
1476 | } | 1121 | } |
1477 | } | 1122 | } |
1478 | >>>>>>> avn/ubitvar | ||
1479 | } | 1123 | } |
1480 | } | 1124 | } |
1481 | return ret; | 1125 | return ret; |
@@ -1499,24 +1143,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1499 | int zx = (int)(west + 0.5); | 1143 | int zx = (int)(west + 0.5); |
1500 | int zy = (int)(north + 0.5); | 1144 | int zy = (int)(north + 0.5); |
1501 | 1145 | ||
1502 | <<<<<<< HEAD | ||
1503 | int dx; | ||
1504 | for(dx=-n; dx<=n; dx++) | ||
1505 | { | ||
1506 | int dy; | ||
1507 | for(dy=-n; dy<=n; dy++) | ||
1508 | { | ||
1509 | int x = zx + dx; | ||
1510 | int y = zy + dy; | ||
1511 | if (x >= 0 && y >= 0 && x < m_channel.Width && y < m_channel.Height) | ||
1512 | { | ||
1513 | if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0))) | ||
1514 | { | ||
1515 | allowMask[x, y] = true; | ||
1516 | allowed = true; | ||
1517 | } | ||
1518 | ======= | ||
1519 | |||
1520 | int startX = zx - n; | 1146 | int startX = zx - n; |
1521 | if (startX < 0) | 1147 | if (startX < 0) |
1522 | startX = 0; | 1148 | startX = 0; |
@@ -1542,25 +1168,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1542 | { | 1168 | { |
1543 | allowMask[x, y] = true; | 1169 | allowMask[x, y] = true; |
1544 | allowed = true; | 1170 | allowed = true; |
1545 | >>>>>>> avn/ubitvar | ||
1546 | } | 1171 | } |
1547 | } | 1172 | } |
1548 | } | 1173 | } |
1549 | if (allowed) | 1174 | if (allowed) |
1550 | { | 1175 | { |
1551 | StoreUndoState(); | 1176 | StoreUndoState(); |
1552 | <<<<<<< HEAD | ||
1553 | m_painteffects[(StandardTerrainEffects)action].PaintEffect( | ||
1554 | m_channel, allowMask, west, south, height, size, seconds); | ||
1555 | |||
1556 | //revert changes outside estate limits | ||
1557 | ======= | ||
1558 | m_painteffects[(StandardTerrainEffects) action].PaintEffect( | 1177 | m_painteffects[(StandardTerrainEffects) action].PaintEffect( |
1559 | m_channel, allowMask, west, south, height, size, seconds, | 1178 | m_channel, allowMask, west, south, height, size, seconds, |
1560 | startX, endX, startY, endY); | 1179 | startX, endX, startY, endY); |
1561 | 1180 | ||
1562 | //block changes outside estate limits | 1181 | //block changes outside estate limits |
1563 | >>>>>>> avn/ubitvar | ||
1564 | if (!god) | 1182 | if (!god) |
1565 | EnforceEstateLimits(); | 1183 | EnforceEstateLimits(); |
1566 | } | 1184 | } |
@@ -1577,22 +1195,42 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1577 | bool[,] fillArea = new bool[m_channel.Width, m_channel.Height]; | 1195 | bool[,] fillArea = new bool[m_channel.Width, m_channel.Height]; |
1578 | fillArea.Initialize(); | 1196 | fillArea.Initialize(); |
1579 | 1197 | ||
1580 | int x; | 1198 | int startX = (int)west; |
1581 | for(x = 0; x < m_channel.Width; x++) | 1199 | int startY = (int)south; |
1200 | int endX = (int)east; | ||
1201 | int endY = (int)north; | ||
1202 | |||
1203 | if (startX < 0) | ||
1204 | startX = 0; | ||
1205 | else if (startX >= m_channel.Width) | ||
1206 | startX = m_channel.Width - 1; | ||
1207 | |||
1208 | if (endX < 0) | ||
1209 | endX = 0; | ||
1210 | else if (endX >= m_channel.Width) | ||
1211 | endX = m_channel.Width - 1; | ||
1212 | |||
1213 | if (startY < 0) | ||
1214 | startY = 0; | ||
1215 | else if (startY >= m_channel.Height) | ||
1216 | startY = m_channel.Height - 1; | ||
1217 | |||
1218 | if (endY < 0) | ||
1219 | endY = 0; | ||
1220 | else if (endY >= m_channel.Height) | ||
1221 | endY = m_channel.Height - 1; | ||
1222 | |||
1223 | |||
1224 | int x, y; | ||
1225 | |||
1226 | for (x = startX; x <= endX; x++) | ||
1582 | { | 1227 | { |
1583 | int y; | 1228 | for (y = startY; y <= endY; y++) |
1584 | for(y = 0; y < m_channel.Height; y++) | ||
1585 | { | 1229 | { |
1586 | if (x < east && x > west) | 1230 | if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0))) |
1587 | { | 1231 | { |
1588 | if (y < north && y > south) | 1232 | fillArea[x, y] = true; |
1589 | { | 1233 | allowed = true; |
1590 | if (m_scene.Permissions.CanTerraformLand(agentId, new Vector3(x, y, 0))) | ||
1591 | { | ||
1592 | fillArea[x, y] = true; | ||
1593 | allowed = true; | ||
1594 | } | ||
1595 | } | ||
1596 | } | 1234 | } |
1597 | } | 1235 | } |
1598 | } | 1236 | } |
@@ -1600,15 +1238,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1600 | if (allowed) | 1238 | if (allowed) |
1601 | { | 1239 | { |
1602 | StoreUndoState(); | 1240 | StoreUndoState(); |
1603 | <<<<<<< HEAD | 1241 | m_floodeffects[(StandardTerrainEffects)action].FloodEffect(m_channel, fillArea, size, |
1604 | m_floodeffects[(StandardTerrainEffects)action].FloodEffect(m_channel, fillArea, size); | 1242 | startX, endX, startY, endY); |
1605 | |||
1606 | //revert changes outside estate limits | ||
1607 | ======= | ||
1608 | m_floodeffects[(StandardTerrainEffects) action].FloodEffect(m_channel, fillArea, size); | ||
1609 | 1243 | ||
1610 | //block changes outside estate limits | 1244 | //block changes outside estate limits |
1611 | >>>>>>> avn/ubitvar | ||
1612 | if (!god) | 1245 | if (!god) |
1613 | EnforceEstateLimits(); | 1246 | EnforceEstateLimits(); |
1614 | } | 1247 | } |
@@ -1641,52 +1274,22 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1641 | 1274 | ||
1642 | private void StoreUndoState() | 1275 | private void StoreUndoState() |
1643 | { | 1276 | { |
1644 | <<<<<<< HEAD | ||
1645 | lock(m_undo) | ||
1646 | { | ||
1647 | if (m_undo.Count > 0) | ||
1648 | { | ||
1649 | LandUndoState last = m_undo.Peek(); | ||
1650 | if (last != null) | ||
1651 | { | ||
1652 | if (last.Compare(m_channel)) | ||
1653 | return; | ||
1654 | } | ||
1655 | } | ||
1656 | |||
1657 | LandUndoState nUndo = new LandUndoState(this, m_channel); | ||
1658 | m_undo.Push(nUndo); | ||
1659 | } | ||
1660 | ======= | ||
1661 | >>>>>>> avn/ubitvar | ||
1662 | } | 1277 | } |
1663 | 1278 | ||
1664 | #region Console Commands | 1279 | #region Console Commands |
1665 | 1280 | ||
1666 | private void InterfaceLoadFile(Object[] args) | 1281 | private void InterfaceLoadFile(Object[] args) |
1667 | { | 1282 | { |
1668 | <<<<<<< HEAD | ||
1669 | LoadFromFile((string)args[0]); | ||
1670 | ======= | ||
1671 | LoadFromFile((string) args[0]); | 1283 | LoadFromFile((string) args[0]); |
1672 | >>>>>>> avn/ubitvar | ||
1673 | } | 1284 | } |
1674 | 1285 | ||
1675 | private void InterfaceLoadTileFile(Object[] args) | 1286 | private void InterfaceLoadTileFile(Object[] args) |
1676 | { | 1287 | { |
1677 | <<<<<<< HEAD | ||
1678 | LoadFromFile((string)args[0], | ||
1679 | (int)args[1], | ||
1680 | (int)args[2], | ||
1681 | (int)args[3], | ||
1682 | (int)args[4]); | ||
1683 | ======= | ||
1684 | LoadFromFile((string) args[0], | 1288 | LoadFromFile((string) args[0], |
1685 | (int) args[1], | 1289 | (int) args[1], |
1686 | (int) args[2], | 1290 | (int) args[2], |
1687 | (int) args[3], | 1291 | (int) args[3], |
1688 | (int) args[4]); | 1292 | (int) args[4]); |
1689 | >>>>>>> avn/ubitvar | ||
1690 | } | 1293 | } |
1691 | 1294 | ||
1692 | private void InterfaceSaveFile(Object[] args) | 1295 | private void InterfaceSaveFile(Object[] args) |
@@ -1711,15 +1314,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1711 | private void InterfaceRevertTerrain(Object[] args) | 1314 | private void InterfaceRevertTerrain(Object[] args) |
1712 | { | 1315 | { |
1713 | int x, y; | 1316 | int x, y; |
1714 | <<<<<<< HEAD | ||
1715 | for(x = 0; x < m_channel.Width; x++) | ||
1716 | for(y = 0; y < m_channel.Height; y++) | ||
1717 | m_channel[x, y] = m_revert[x, y]; | ||
1718 | ======= | ||
1719 | for (x = 0; x < m_channel.Width; x++) | 1317 | for (x = 0; x < m_channel.Width; x++) |
1720 | for (y = 0; y < m_channel.Height; y++) | 1318 | for (y = 0; y < m_channel.Height; y++) |
1721 | m_channel[x, y] = m_baked[x, y]; | 1319 | m_channel[x, y] = m_baked[x, y]; |
1722 | >>>>>>> avn/ubitvar | ||
1723 | 1320 | ||
1724 | } | 1321 | } |
1725 | 1322 | ||
@@ -1729,15 +1326,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1729 | 1326 | ||
1730 | if (direction.ToLower().StartsWith("y")) | 1327 | if (direction.ToLower().StartsWith("y")) |
1731 | { | 1328 | { |
1732 | <<<<<<< HEAD | ||
1733 | for(int x = 0; x < m_channel.Width; x++) | ||
1734 | { | ||
1735 | for(int y = 0; y < m_channel.Height / 2; y++) | ||
1736 | ======= | ||
1737 | for (int x = 0; x < m_channel.Width; x++) | 1329 | for (int x = 0; x < m_channel.Width; x++) |
1738 | { | 1330 | { |
1739 | for (int y = 0; y < m_channel.Height / 2; y++) | 1331 | for (int y = 0; y < m_channel.Height / 2; y++) |
1740 | >>>>>>> avn/ubitvar | ||
1741 | { | 1332 | { |
1742 | double height = m_channel[x, y]; | 1333 | double height = m_channel[x, y]; |
1743 | double flippedHeight = m_channel[x, (int)m_channel.Height - 1 - y]; | 1334 | double flippedHeight = m_channel[x, (int)m_channel.Height - 1 - y]; |
@@ -1749,15 +1340,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1749 | } | 1340 | } |
1750 | else if (direction.ToLower().StartsWith("x")) | 1341 | else if (direction.ToLower().StartsWith("x")) |
1751 | { | 1342 | { |
1752 | <<<<<<< HEAD | ||
1753 | for(int y = 0; y < m_channel.Height; y++) | ||
1754 | { | ||
1755 | for(int x = 0; x < m_channel.Width / 2; x++) | ||
1756 | ======= | ||
1757 | for (int y = 0; y < m_channel.Height; y++) | 1343 | for (int y = 0; y < m_channel.Height; y++) |
1758 | { | 1344 | { |
1759 | for (int x = 0; x < m_channel.Width / 2; x++) | 1345 | for (int x = 0; x < m_channel.Width / 2; x++) |
1760 | >>>>>>> avn/ubitvar | ||
1761 | { | 1346 | { |
1762 | double height = m_channel[x, y]; | 1347 | double height = m_channel[x, y]; |
1763 | double flippedHeight = m_channel[(int)m_channel.Width - 1 - x, y]; | 1348 | double flippedHeight = m_channel[(int)m_channel.Width - 1 - x, y]; |
@@ -1837,47 +1422,29 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1837 | double val = (double)args[0]; | 1422 | double val = (double)args[0]; |
1838 | 1423 | ||
1839 | int x, y; | 1424 | int x, y; |
1840 | <<<<<<< HEAD | ||
1841 | for(x = 0; x < m_channel.Width; x++) | ||
1842 | for(y = 0; y < m_channel.Height; y++) | ||
1843 | m_channel[x, y] += (double)args[0]; | ||
1844 | ======= | ||
1845 | for (x = 0; x < m_channel.Width; x++) | 1425 | for (x = 0; x < m_channel.Width; x++) |
1846 | for (y = 0; y < m_channel.Height; y++) | 1426 | for (y = 0; y < m_channel.Height; y++) |
1847 | m_channel[x, y] += val; | 1427 | m_channel[x, y] += val; |
1848 | >>>>>>> avn/ubitvar | ||
1849 | } | 1428 | } |
1850 | 1429 | ||
1851 | private void InterfaceMultiplyTerrain(Object[] args) | 1430 | private void InterfaceMultiplyTerrain(Object[] args) |
1852 | { | 1431 | { |
1853 | int x, y; | 1432 | int x, y; |
1854 | <<<<<<< HEAD | ||
1855 | for(x = 0; x < m_channel.Width; x++) | ||
1856 | for(y = 0; y < m_channel.Height; y++) | ||
1857 | m_channel[x, y] *= (double)args[0]; | ||
1858 | ======= | ||
1859 | double val = (double)args[0]; | 1433 | double val = (double)args[0]; |
1860 | 1434 | ||
1861 | for (x = 0; x < m_channel.Width; x++) | 1435 | for (x = 0; x < m_channel.Width; x++) |
1862 | for (y = 0; y < m_channel.Height; y++) | 1436 | for (y = 0; y < m_channel.Height; y++) |
1863 | m_channel[x, y] *= val; | 1437 | m_channel[x, y] *= val; |
1864 | >>>>>>> avn/ubitvar | ||
1865 | } | 1438 | } |
1866 | 1439 | ||
1867 | private void InterfaceLowerTerrain(Object[] args) | 1440 | private void InterfaceLowerTerrain(Object[] args) |
1868 | { | 1441 | { |
1869 | int x, y; | 1442 | int x, y; |
1870 | <<<<<<< HEAD | ||
1871 | for(x = 0; x < m_channel.Width; x++) | ||
1872 | for(y = 0; y < m_channel.Height; y++) | ||
1873 | m_channel[x, y] -= (double)args[0]; | ||
1874 | ======= | ||
1875 | double val = (double)args[0]; | 1443 | double val = (double)args[0]; |
1876 | 1444 | ||
1877 | for (x = 0; x < m_channel.Width; x++) | 1445 | for (x = 0; x < m_channel.Width; x++) |
1878 | for (y = 0; y < m_channel.Height; y++) | 1446 | for (y = 0; y < m_channel.Height; y++) |
1879 | m_channel[x, y] -= val; | 1447 | m_channel[x, y] -= val; |
1880 | >>>>>>> avn/ubitvar | ||
1881 | } | 1448 | } |
1882 | 1449 | ||
1883 | public void InterfaceFillTerrain(Object[] args) | 1450 | public void InterfaceFillTerrain(Object[] args) |
@@ -1885,26 +1452,16 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1885 | int x, y; | 1452 | int x, y; |
1886 | double val = (double)args[0]; | 1453 | double val = (double)args[0]; |
1887 | 1454 | ||
1888 | <<<<<<< HEAD | ||
1889 | for(x = 0; x < m_channel.Width; x++) | ||
1890 | for(y = 0; y < m_channel.Height; y++) | ||
1891 | m_channel[x, y] = (double)args[0]; | ||
1892 | ======= | ||
1893 | for (x = 0; x < m_channel.Width; x++) | 1455 | for (x = 0; x < m_channel.Width; x++) |
1894 | for (y = 0; y < m_channel.Height; y++) | 1456 | for (y = 0; y < m_channel.Height; y++) |
1895 | m_channel[x, y] = val; | 1457 | m_channel[x, y] = val; |
1896 | >>>>>>> avn/ubitvar | ||
1897 | } | 1458 | } |
1898 | 1459 | ||
1899 | private void InterfaceMinTerrain(Object[] args) | 1460 | private void InterfaceMinTerrain(Object[] args) |
1900 | { | 1461 | { |
1901 | int x, y; | 1462 | int x, y; |
1902 | <<<<<<< HEAD | ||
1903 | for(x = 0; x < m_channel.Width; x++) | ||
1904 | ======= | ||
1905 | double val = (double)args[0]; | 1463 | double val = (double)args[0]; |
1906 | for (x = 0; x < m_channel.Width; x++) | 1464 | for (x = 0; x < m_channel.Width; x++) |
1907 | >>>>>>> avn/ubitvar | ||
1908 | { | 1465 | { |
1909 | for(y = 0; y < m_channel.Height; y++) | 1466 | for(y = 0; y < m_channel.Height; y++) |
1910 | { | 1467 | { |
@@ -1916,19 +1473,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1916 | private void InterfaceMaxTerrain(Object[] args) | 1473 | private void InterfaceMaxTerrain(Object[] args) |
1917 | { | 1474 | { |
1918 | int x, y; | 1475 | int x, y; |
1919 | <<<<<<< HEAD | ||
1920 | for(x = 0; x < m_channel.Width; x++) | ||
1921 | ======= | ||
1922 | double val = (double)args[0]; | 1476 | double val = (double)args[0]; |
1923 | for (x = 0; x < m_channel.Width; x++) | 1477 | for (x = 0; x < m_channel.Width; x++) |
1924 | >>>>>>> avn/ubitvar | ||
1925 | { | 1478 | { |
1926 | for(y = 0; y < m_channel.Height; y++) | 1479 | for(y = 0; y < m_channel.Height; y++) |
1927 | { | 1480 | { |
1928 | m_channel[x, y] = Math.Min(val, m_channel[x, y]); | 1481 | m_channel[x, y] = Math.Min(val, m_channel[x, y]); |
1929 | } | 1482 | } |
1930 | } | 1483 | } |
1931 | <<<<<<< HEAD | ||
1932 | } | 1484 | } |
1933 | 1485 | ||
1934 | private void InterfaceShow(Object[] args) | 1486 | private void InterfaceShow(Object[] args) |
@@ -1944,8 +1496,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1944 | double height = m_channel[(int)point.X, (int)point.Y]; | 1496 | double height = m_channel[(int)point.X, (int)point.Y]; |
1945 | 1497 | ||
1946 | Console.WriteLine("Terrain height at {0} is {1}", point, height); | 1498 | Console.WriteLine("Terrain height at {0} is {1}", point, height); |
1947 | ======= | ||
1948 | >>>>>>> avn/ubitvar | ||
1949 | } | 1499 | } |
1950 | 1500 | ||
1951 | private void InterfaceShowDebugStats(Object[] args) | 1501 | private void InterfaceShowDebugStats(Object[] args) |
@@ -2157,6 +1707,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
2157 | 1707 | ||
2158 | public void ModifyCommand(string module, string[] cmd) | 1708 | public void ModifyCommand(string module, string[] cmd) |
2159 | { | 1709 | { |
1710 | /* | ||
2160 | string result; | 1711 | string result; |
2161 | Scene scene = SceneManager.Instance.CurrentScene; | 1712 | Scene scene = SceneManager.Instance.CurrentScene; |
2162 | if ((scene != null) && (scene != m_scene)) | 1713 | if ((scene != null) && (scene != m_scene)) |
@@ -2196,6 +1747,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
2196 | { | 1747 | { |
2197 | MainConsole.Instance.Output(result); | 1748 | MainConsole.Instance.Output(result); |
2198 | } | 1749 | } |
1750 | */ | ||
2199 | } | 1751 | } |
2200 | 1752 | ||
2201 | #endregion | 1753 | #endregion |
diff --git a/OpenSim/Region/CoreModules/World/Terrain/Tests/TerrainTest.cs b/OpenSim/Region/CoreModules/World/Terrain/Tests/TerrainTest.cs index 40db370..b209b33 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/Tests/TerrainTest.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/Tests/TerrainTest.cs | |||
@@ -60,12 +60,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain.Tests | |||
60 | TerrainChannel map = new TerrainChannel((int)Constants.RegionSize, (int)Constants.RegionSize); | 60 | TerrainChannel map = new TerrainChannel((int)Constants.RegionSize, (int)Constants.RegionSize); |
61 | ITerrainPaintableEffect effect = new RaiseSphere(); | 61 | ITerrainPaintableEffect effect = new RaiseSphere(); |
62 | 62 | ||
63 | <<<<<<< HEAD | ||
64 | effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0); | ||
65 | ======= | ||
66 | effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0, | 63 | effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0, |
67 | 0, midRegion - 1,0, (int)Constants.RegionSize -1); | 64 | 0, midRegion - 1,0, (int)Constants.RegionSize -1); |
68 | >>>>>>> avn/ubitvar | ||
69 | Assert.That(map[127, midRegion] > 0.0, "Raise brush should raising value at this point (127,128)."); | 65 | Assert.That(map[127, midRegion] > 0.0, "Raise brush should raising value at this point (127,128)."); |
70 | Assert.That(map[125, midRegion] > 0.0, "Raise brush should raising value at this point (124,128)."); | 66 | Assert.That(map[125, midRegion] > 0.0, "Raise brush should raising value at this point (124,128)."); |
71 | Assert.That(map[120, midRegion] == 0.0, "Raise brush should not change value at this point (120,128)."); | 67 | Assert.That(map[120, midRegion] == 0.0, "Raise brush should not change value at this point (120,128)."); |
@@ -84,12 +80,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain.Tests | |||
84 | } | 80 | } |
85 | effect = new LowerSphere(); | 81 | effect = new LowerSphere(); |
86 | 82 | ||
87 | <<<<<<< HEAD | ||
88 | effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0); | ||
89 | ======= | ||
90 | effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0, | 83 | effect.PaintEffect(map, allowMask, midRegion, midRegion, -1.0, 2, 6.0, |
91 | 0, (int)Constants.RegionSize -1,0, (int)Constants.RegionSize -1); | 84 | 0, (int)Constants.RegionSize -1,0, (int)Constants.RegionSize -1); |
92 | >>>>>>> avn/ubitvar | ||
93 | Assert.That(map[127, midRegion] >= 0.0, "Lower should not lowering value below 0.0 at this point (127,128)."); | 85 | Assert.That(map[127, midRegion] >= 0.0, "Lower should not lowering value below 0.0 at this point (127,128)."); |
94 | Assert.That(map[127, midRegion] == 0.0, "Lower brush should lowering value to 0.0 at this point (127,128)."); | 86 | Assert.That(map[127, midRegion] == 0.0, "Lower brush should lowering value to 0.0 at this point (127,128)."); |
95 | Assert.That(map[125, midRegion] < 1.0, "Lower brush should lowering value at this point (124,128)."); | 87 | Assert.That(map[125, midRegion] < 1.0, "Lower brush should lowering value at this point (124,128)."); |
diff --git a/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs b/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs index 77c10b8..4719ba3 100644 --- a/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs +++ b/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs | |||
@@ -79,13 +79,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
79 | /// <remarks>Based on the algorithm described at http://opensimulator.org/wiki/Terrain_Splatting | 79 | /// <remarks>Based on the algorithm described at http://opensimulator.org/wiki/Terrain_Splatting |
80 | /// Note we create a 256x256 dimension texture even if the actual terrain is larger. | 80 | /// Note we create a 256x256 dimension texture even if the actual terrain is larger. |
81 | /// </remarks> | 81 | /// </remarks> |
82 | <<<<<<< HEAD | 82 | |
83 | public static Bitmap Splat(ITerrainChannel terrain, | 83 | public static Bitmap Splat(ITerrainChannel terrain, |
84 | UUID[] textureIDs, float[] startHeights, float[] heightRanges, | 84 | UUID[] textureIDs, float[] startHeights, float[] heightRanges, |
85 | Vector3d regionPosition, IAssetService assetService, bool textureTerrain) | 85 | Vector3d regionPosition, IAssetService assetService, bool textureTerrain) |
86 | ======= | ||
87 | public static Bitmap Splat(ITerrainChannel terrain, UUID[] textureIDs, float[] startHeights, float[] heightRanges, Vector3d regionPosition, IAssetService assetService, bool textureTerrain) | ||
88 | >>>>>>> avn/ubitvar | ||
89 | { | 86 | { |
90 | Debug.Assert(textureIDs.Length == 4); | 87 | Debug.Assert(textureIDs.Length == 4); |
91 | Debug.Assert(startHeights.Length == 4); | 88 | Debug.Assert(startHeights.Length == 4); |
@@ -133,8 +130,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
133 | asset = assetService.Get(textureIDs[i].ToString()); | 130 | asset = assetService.Get(textureIDs[i].ToString()); |
134 | if (asset != null) | 131 | if (asset != null) |
135 | { | 132 | { |
136 | // m_log.DebugFormat( | 133 | // m_log.DebugFormat( |
137 | // "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID); | 134 | // "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID); |
138 | 135 | ||
139 | try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); } | 136 | try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); } |
140 | catch (Exception ex) | 137 | catch (Exception ex) |
@@ -144,7 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
144 | } | 141 | } |
145 | 142 | ||
146 | if (detailTexture[i] != null) | 143 | if (detailTexture[i] != null) |
147 | { | 144 | { |
148 | // Make sure this texture is the correct size, otherwise resize | 145 | // Make sure this texture is the correct size, otherwise resize |
149 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) | 146 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) |
150 | { | 147 | { |
@@ -199,74 +196,12 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
199 | using (SolidBrush brush = new SolidBrush(DEFAULT_TERRAIN_COLOR[i])) | 196 | using (SolidBrush brush = new SolidBrush(DEFAULT_TERRAIN_COLOR[i])) |
200 | gfx.FillRectangle(brush, 0, 0, 256, 256); | 197 | gfx.FillRectangle(brush, 0, 0, 256, 256); |
201 | } | 198 | } |
202 | else | ||
203 | { | ||
204 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) | ||
205 | { | ||
206 | detailTexture[i] = ResizeBitmap(detailTexture[i], 256, 256); | ||
207 | } | ||
208 | } | ||
209 | } | 199 | } |
210 | <<<<<<< HEAD | ||
211 | else | 200 | else |
212 | ======= | ||
213 | |||
214 | #region Layer Map | ||
215 | |||
216 | float[,] layermap = new float[256 , 256]; | ||
217 | |||
218 | int xFactor = terrain.Width / 256; | ||
219 | int yFactor = terrain.Height / 256; | ||
220 | |||
221 | for (int y = 0; y < 256; y++) | ||
222 | >>>>>>> avn/ubitvar | ||
223 | { | 201 | { |
224 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) | 202 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) |
225 | { | 203 | { |
226 | <<<<<<< HEAD | ||
227 | detailTexture[i] = ResizeBitmap(detailTexture[i], 256, 256); | 204 | detailTexture[i] = ResizeBitmap(detailTexture[i], 256, 256); |
228 | ======= | ||
229 | float height = (float)terrain[x * xFactor, y * yFactor]; | ||
230 | |||
231 | float pctX = (float)x / 255f; | ||
232 | float pctY = (float)y / 255f; | ||
233 | |||
234 | // Use bilinear interpolation between the four corners of start height and | ||
235 | // height range to select the current values at this position | ||
236 | float startHeight = ImageUtils.Bilinear( | ||
237 | startHeights[0], | ||
238 | startHeights[2], | ||
239 | startHeights[1], | ||
240 | startHeights[3], | ||
241 | pctX, pctY); | ||
242 | startHeight = Utils.Clamp(startHeight, 0f, 255f); | ||
243 | |||
244 | float heightRange = ImageUtils.Bilinear( | ||
245 | heightRanges[0], | ||
246 | heightRanges[2], | ||
247 | heightRanges[1], | ||
248 | heightRanges[3], | ||
249 | pctX, pctY); | ||
250 | heightRange = Utils.Clamp(heightRange, 0f, 255f); | ||
251 | |||
252 | // Generate two frequencies of perlin noise based on our global position | ||
253 | // The magic values were taken from http://opensimulator.org/wiki/Terrain_Splatting | ||
254 | Vector3 vec = new Vector3 | ||
255 | ( | ||
256 | ((float)regionPosition.X + (x * xFactor)) * 0.20319f, | ||
257 | ((float)regionPosition.Y + (y * yFactor)) * 0.20319f, | ||
258 | height * 0.25f | ||
259 | ); | ||
260 | |||
261 | float lowFreq = Perlin.noise2(vec.X * 0.222222f, vec.Y * 0.222222f) * 6.5f; | ||
262 | float highFreq = Perlin.turbulence2(vec.X, vec.Y, 2f) * 2.25f; | ||
263 | float noise = (lowFreq + highFreq) * 2f; | ||
264 | |||
265 | // Combine the current height, generated noise, start height, and height range parameters, then scale all of it | ||
266 | float layer = ((height + noise - startHeight) / heightRange) * 4f; | ||
267 | if (Single.IsNaN(layer)) layer = 0f; | ||
268 | layermap[x,y] = Utils.Clamp(layer, 0f, 3f); | ||
269 | >>>>>>> avn/ubitvar | ||
270 | } | 205 | } |
271 | } | 206 | } |
272 | } | 207 | } |
@@ -286,7 +221,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
286 | { | 221 | { |
287 | for (int x = 0; x < 256; x++) | 222 | for (int x = 0; x < 256; x++) |
288 | { | 223 | { |
289 | <<<<<<< HEAD | ||
290 | float height = (float)terrain[x * xFactor, y * yFactor]; | 224 | float height = (float)terrain[x * xFactor, y * yFactor]; |
291 | 225 | ||
292 | float pctX = (float)x / 255f; | 226 | float pctX = (float)x / 255f; |
@@ -328,58 +262,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
328 | if (Single.IsNaN(layer)) | 262 | if (Single.IsNaN(layer)) |
329 | layer = 0f; | 263 | layer = 0f; |
330 | layermap[x, y] = Utils.Clamp(layer, 0f, 3f); | 264 | layermap[x, y] = Utils.Clamp(layer, 0f, 3f); |
331 | ======= | ||
332 | // Get handles to all of the texture data arrays | ||
333 | BitmapData[] datas = new BitmapData[] | ||
334 | { | ||
335 | detailTexture[0].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[0].PixelFormat), | ||
336 | detailTexture[1].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[1].PixelFormat), | ||
337 | detailTexture[2].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[2].PixelFormat), | ||
338 | detailTexture[3].LockBits(new Rectangle(0, 0, 256, 256), ImageLockMode.ReadOnly, detailTexture[3].PixelFormat) | ||
339 | }; | ||
340 | |||
341 | int[] comps = new int[] | ||
342 | { | ||
343 | (datas[0].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3, | ||
344 | (datas[1].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3, | ||
345 | (datas[2].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3, | ||
346 | (datas[3].PixelFormat == PixelFormat.Format32bppArgb) ? 4 : 3 | ||
347 | }; | ||
348 | |||
349 | for (int y = 0; y < 256; y++) | ||
350 | { | ||
351 | for (int x = 0; x < 256; x++) | ||
352 | { | ||
353 | float layer = layermap[x, y]; | ||
354 | |||
355 | // Select two textures | ||
356 | int l0 = (int)Math.Floor(layer); | ||
357 | int l1 = Math.Min(l0 + 1, 3); | ||
358 | |||
359 | byte* ptrA = (byte*)datas[l0].Scan0 + y * datas[l0].Stride + x * comps[l0]; | ||
360 | byte* ptrB = (byte*)datas[l1].Scan0 + y * datas[l1].Stride + x * comps[l1]; | ||
361 | byte* ptrO = (byte*)outputData.Scan0 + y * outputData.Stride + x * 3; | ||
362 | |||
363 | float aB = *(ptrA + 0); | ||
364 | float aG = *(ptrA + 1); | ||
365 | float aR = *(ptrA + 2); | ||
366 | |||
367 | float bB = *(ptrB + 0); | ||
368 | float bG = *(ptrB + 1); | ||
369 | float bR = *(ptrB + 2); | ||
370 | |||
371 | float layerDiff = layer - l0; | ||
372 | |||
373 | // Interpolate between the two selected textures | ||
374 | *(ptrO + 0) = (byte)Math.Floor(aB + layerDiff * (bB - aB)); | ||
375 | *(ptrO + 1) = (byte)Math.Floor(aG + layerDiff * (bG - aG)); | ||
376 | *(ptrO + 2) = (byte)Math.Floor(aR + layerDiff * (bR - aR)); | ||
377 | } | ||
378 | } | ||
379 | |||
380 | for (int i = 0; i < 4; i++) | ||
381 | detailTexture[i].UnlockBits(datas[i]); | ||
382 | >>>>>>> avn/ubitvar | ||
383 | } | 265 | } |
384 | } | 266 | } |
385 | 267 | ||
@@ -471,10 +353,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
471 | b.Dispose(); | 353 | b.Dispose(); |
472 | return result; | 354 | return result; |
473 | } | 355 | } |
474 | <<<<<<< HEAD | ||
475 | |||
476 | ======= | ||
477 | >>>>>>> avn/ubitvar | ||
478 | public static Bitmap SplatSimple(float[] heightmap) | 356 | public static Bitmap SplatSimple(float[] heightmap) |
479 | { | 357 | { |
480 | const float BASE_HSV_H = 93f / 360f; | 358 | const float BASE_HSV_H = 93f / 360f; |
diff --git a/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs b/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs index d8420d9..8e843ee 100644 --- a/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs +++ b/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs | |||
@@ -156,13 +156,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
156 | 156 | ||
157 | public Bitmap CreateMapTile() | 157 | public Bitmap CreateMapTile() |
158 | { | 158 | { |
159 | <<<<<<< HEAD | ||
160 | // Vector3 camPos = new Vector3(127.5f, 127.5f, 221.7025033688163f); | ||
161 | // Camera above the middle of the region | ||
162 | Vector3 camPos = new Vector3( | ||
163 | m_scene.RegionInfo.RegionSizeX/2 - 0.5f, | ||
164 | m_scene.RegionInfo.RegionSizeY/2 - 0.5f, | ||
165 | ======= | ||
166 | /* this must be on all map, not just its image | 159 | /* this must be on all map, not just its image |
167 | if ((DateTime.Now - lastImageTime).TotalSeconds < 3600) | 160 | if ((DateTime.Now - lastImageTime).TotalSeconds < 3600) |
168 | { | 161 | { |
@@ -179,16 +172,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
179 | Vector3 camPos = new Vector3( | 172 | Vector3 camPos = new Vector3( |
180 | m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, | 173 | m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, |
181 | m_scene.RegionInfo.RegionSizeY / 2 - 0.5f, | 174 | m_scene.RegionInfo.RegionSizeY / 2 - 0.5f, |
182 | >>>>>>> avn/ubitvar | ||
183 | 221.7025033688163f); | 175 | 221.7025033688163f); |
184 | // Viewport viewing down onto the region | 176 | // Viewport viewing down onto the region |
185 | Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f, | 177 | Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f, |
186 | (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY, | 178 | (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY, |
187 | <<<<<<< HEAD | ||
188 | (float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY ); | ||
189 | // Fill the viewport and return the image | ||
190 | return CreateMapTile(viewport, false); | ||
191 | ======= | ||
192 | (float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY); | 179 | (float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY); |
193 | 180 | ||
194 | Bitmap tile = CreateMapTile(viewport, false); | 181 | Bitmap tile = CreateMapTile(viewport, false); |
@@ -199,7 +186,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
199 | lastImageTime = DateTime.Now; | 186 | lastImageTime = DateTime.Now; |
200 | return (Bitmap)lastImage.Clone(); | 187 | return (Bitmap)lastImage.Clone(); |
201 | */ | 188 | */ |
202 | >>>>>>> avn/ubitvar | ||
203 | } | 189 | } |
204 | 190 | ||
205 | public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures) | 191 | public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures) |
@@ -315,15 +301,9 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
315 | float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; | 301 | float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; |
316 | 302 | ||
317 | renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f); | 303 | renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f); |
318 | <<<<<<< HEAD | ||
319 | renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX/2 - 0.5f, | ||
320 | waterHeight, | ||
321 | m_scene.RegionInfo.RegionSizeY/2 - 0.5f ); | ||
322 | ======= | ||
323 | renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, | 304 | renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, |
324 | waterHeight, | 305 | waterHeight, |
325 | m_scene.RegionInfo.RegionSizeY / 2 - 0.5f); | 306 | m_scene.RegionInfo.RegionSizeY / 2 - 0.5f); |
326 | >>>>>>> avn/ubitvar | ||
327 | 307 | ||
328 | warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR)); | 308 | warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR)); |
329 | waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif | 309 | waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif |
@@ -352,11 +332,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
352 | warp_Vector pos = ConvertVector(x, y, (float)terrain[(int)x, (int)y]); | 332 | warp_Vector pos = ConvertVector(x, y, (float)terrain[(int)x, (int)y]); |
353 | obj.addVertex(new warp_Vertex(pos, | 333 | obj.addVertex(new warp_Vertex(pos, |
354 | x / (float)m_scene.RegionInfo.RegionSizeX, | 334 | x / (float)m_scene.RegionInfo.RegionSizeX, |
355 | <<<<<<< HEAD | ||
356 | (((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY) ); | ||
357 | ======= | ||
358 | (((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY)); | 335 | (((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY)); |
359 | >>>>>>> avn/ubitvar | ||
360 | } | 336 | } |
361 | } | 337 | } |
362 | 338 | ||
@@ -424,12 +400,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
424 | warp_Texture texture; | 400 | warp_Texture texture; |
425 | using ( | 401 | using ( |
426 | Bitmap image | 402 | Bitmap image |
427 | <<<<<<< HEAD | ||
428 | = TerrainSplat.Splat(terrain, textureIDs, startHeights, heightRanges, | ||
429 | ======= | ||
430 | = TerrainSplat.Splat( | 403 | = TerrainSplat.Splat( |
431 | terrain, textureIDs, startHeights, heightRanges, | 404 | terrain, textureIDs, startHeights, heightRanges, |
432 | >>>>>>> avn/ubitvar | ||
433 | new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain)) | 405 | new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain)) |
434 | { | 406 | { |
435 | texture = new warp_Texture(image); | 407 | texture = new warp_Texture(image); |
@@ -711,12 +683,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
711 | return new warp_Vector(x, z, y); | 683 | return new warp_Vector(x, z, y); |
712 | } | 684 | } |
713 | 685 | ||
714 | // Note: axis change. | ||
715 | private static warp_Vector ConvertVector(float x, float y, float z) | ||
716 | { | ||
717 | return new warp_Vector(x, z, y); | ||
718 | } | ||
719 | |||
720 | private static warp_Vector ConvertVector(Vector3 vector) | 686 | private static warp_Vector ConvertVector(Vector3 vector) |
721 | { | 687 | { |
722 | return new warp_Vector(vector.X, vector.Z, vector.Y); | 688 | return new warp_Vector(vector.X, vector.Z, vector.Y); |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs index 553d057..e08bdc0 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/MapSearchModule.cs | |||
@@ -141,12 +141,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
141 | 141 | ||
142 | private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags) | 142 | private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags) |
143 | { | 143 | { |
144 | <<<<<<< HEAD | ||
145 | List<MapBlockData> blocks = new List<MapBlockData>(); | ||
146 | if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4)) | ||
147 | ======= | ||
148 | Util.FireAndForget(x => | 144 | Util.FireAndForget(x => |
149 | >>>>>>> avn/ubitvar | ||
150 | { | 145 | { |
151 | List<MapBlockData> blocks = new List<MapBlockData>(); | 146 | List<MapBlockData> blocks = new List<MapBlockData>(); |
152 | if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4)) | 147 | if (mapName.Length < 3 || (mapName.EndsWith("#") && mapName.Length < 4)) |
@@ -232,74 +227,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
232 | // they have different values depending on different viewers, apparently | 227 | // they have different values depending on different viewers, apparently |
233 | remoteClient.SendMapBlock(blocks, flags); | 228 | remoteClient.SendMapBlock(blocks, flags); |
234 | 229 | ||
235 | <<<<<<< HEAD | ||
236 | List<GridRegion> regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20); | ||
237 | |||
238 | string mapNameOrig = mapName; | ||
239 | if (regionInfos.Count == 0) | ||
240 | { | ||
241 | // Hack to get around the fact that ll V3 now drops the port from the | ||
242 | // map name. See https://jira.secondlife.com/browse/VWR-28570 | ||
243 | // | ||
244 | // Caller, use this magic form instead: | ||
245 | // secondlife://http|!!mygrid.com|8002|Region+Name/128/128 | ||
246 | // or url encode if possible. | ||
247 | // the hacks we do with this viewer... | ||
248 | // | ||
249 | if (mapName.Contains("|")) | ||
250 | mapName = mapName.Replace('|', ':'); | ||
251 | if (mapName.Contains("+")) | ||
252 | mapName = mapName.Replace('+', ' '); | ||
253 | if (mapName.Contains("!")) | ||
254 | mapName = mapName.Replace('!', '/'); | ||
255 | |||
256 | if (mapName != mapNameOrig) | ||
257 | regionInfos = m_scene.GridService.GetRegionsByName(m_scene.RegionInfo.ScopeID, mapName, 20); | ||
258 | } | ||
259 | |||
260 | m_log.DebugFormat("[MAPSEARCHMODULE]: search {0} returned {1} regions. Flags={2}", mapName, regionInfos.Count, flags); | ||
261 | |||
262 | if (regionInfos.Count > 0) | ||
263 | { | ||
264 | foreach (GridRegion info in regionInfos) | ||
265 | { | ||
266 | if ((flags & 2) == 2) // V2 sends this | ||
267 | { | ||
268 | List<MapBlockData> datas = WorldMap.Map2BlockFromGridRegion(info, flags); | ||
269 | // ugh! V2-3 is very sensitive about the result being | ||
270 | // exactly the same as the requested name | ||
271 | if (regionInfos.Count == 1 && (mapName != mapNameOrig)) | ||
272 | datas.ForEach(d => d.Name = mapNameOrig); | ||
273 | |||
274 | blocks.AddRange(datas); | ||
275 | } | ||
276 | else | ||
277 | { | ||
278 | MapBlockData data = WorldMap.MapBlockFromGridRegion(info, flags); | ||
279 | blocks.Add(data); | ||
280 | } | ||
281 | } | ||
282 | } | ||
283 | |||
284 | // final block, closing the search result | ||
285 | AddFinalBlock(blocks); | ||
286 | |||
287 | // flags are agent flags sent from the viewer. | ||
288 | // they have different values depending on different viewers, apparently | ||
289 | remoteClient.SendMapBlock(blocks, flags); | ||
290 | |||
291 | // send extra user messages for V3 | ||
292 | // because the UI is very confusing | ||
293 | // while we don't fix the hard-coded urls | ||
294 | if (flags == 2) | ||
295 | { | ||
296 | if (regionInfos.Count == 0) | ||
297 | remoteClient.SendAlertMessage("No regions found with that name."); | ||
298 | // this seems unnecessary because found regions will show up in the search results | ||
299 | //else if (regionInfos.Count == 1) | ||
300 | // remoteClient.SendAlertMessage("Region found!"); | ||
301 | } | ||
302 | ======= | ||
303 | // send extra user messages for V3 | 230 | // send extra user messages for V3 |
304 | // because the UI is very confusing | 231 | // because the UI is very confusing |
305 | // while we don't fix the hard-coded urls | 232 | // while we don't fix the hard-coded urls |
@@ -311,7 +238,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
311 | // remoteClient.SendAgentAlertMessage("Region found!", false); | 238 | // remoteClient.SendAgentAlertMessage("Region found!", false); |
312 | } | 239 | } |
313 | }); | 240 | }); |
314 | >>>>>>> avn/ubitvar | ||
315 | } | 241 | } |
316 | 242 | ||
317 | private void AddFinalBlock(List<MapBlockData> blocks) | 243 | private void AddFinalBlock(List<MapBlockData> blocks) |
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs index 2fbd017..b6d96ac 100644 --- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs +++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs | |||
@@ -68,12 +68,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
68 | private static readonly UUID STOP_UUID = UUID.Random(); | 68 | private static readonly UUID STOP_UUID = UUID.Random(); |
69 | private static readonly string m_mapLayerPath = "0001/"; | 69 | private static readonly string m_mapLayerPath = "0001/"; |
70 | 70 | ||
71 | <<<<<<< HEAD | ||
72 | private IMapImageGenerator m_mapImageGenerator; | ||
73 | private IMapImageUploadModule m_mapImageServiceModule; | ||
74 | |||
75 | private OpenSim.Framework.BlockingQueue<MapRequestState> requests = new OpenSim.Framework.BlockingQueue<MapRequestState>(); | ||
76 | ======= | ||
77 | private ManualResetEvent queueEvent = new ManualResetEvent(false); | 71 | private ManualResetEvent queueEvent = new ManualResetEvent(false); |
78 | private Queue<MapRequestState> requests = new Queue<MapRequestState>(); | 72 | private Queue<MapRequestState> requests = new Queue<MapRequestState>(); |
79 | 73 | ||
@@ -82,7 +76,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
82 | 76 | ||
83 | private IMapImageGenerator m_mapImageGenerator; | 77 | private IMapImageGenerator m_mapImageGenerator; |
84 | private IMapImageUploadModule m_mapImageServiceModule; | 78 | private IMapImageUploadModule m_mapImageServiceModule; |
85 | >>>>>>> avn/ubitvar | ||
86 | 79 | ||
87 | protected Scene m_scene; | 80 | protected Scene m_scene; |
88 | private List<MapBlockData> cachedMapBlocks = new List<MapBlockData>(); | 81 | private List<MapBlockData> cachedMapBlocks = new List<MapBlockData>(); |
@@ -154,14 +147,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
154 | if (!m_Enabled) | 147 | if (!m_Enabled) |
155 | return; | 148 | return; |
156 | 149 | ||
157 | <<<<<<< HEAD | ||
158 | m_ServiceThrottle = scene.RequestModuleInterface<IServiceThrottleModule>(); | ||
159 | ======= | ||
160 | m_mapImageGenerator = m_scene.RequestModuleInterface<IMapImageGenerator>(); | ||
161 | m_mapImageServiceModule = m_scene.RequestModuleInterface<IMapImageUploadModule>(); | ||
162 | } | ||
163 | >>>>>>> avn/ubitvar | ||
164 | |||
165 | m_mapImageGenerator = m_scene.RequestModuleInterface<IMapImageGenerator>(); | 150 | m_mapImageGenerator = m_scene.RequestModuleInterface<IMapImageGenerator>(); |
166 | m_mapImageServiceModule = m_scene.RequestModuleInterface<IMapImageUploadModule>(); | 151 | m_mapImageServiceModule = m_scene.RequestModuleInterface<IMapImageUploadModule>(); |
167 | } | 152 | } |
@@ -275,56 +260,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
275 | // 6/8/2011 -- I'm adding an explicit 2048 check, so that we never forget that there is | 260 | // 6/8/2011 -- I'm adding an explicit 2048 check, so that we never forget that there is |
276 | // a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks. | 261 | // a hack here, and so that regions below 4096 don't get spammed with unnecessary map blocks. |
277 | 262 | ||
278 | <<<<<<< HEAD | ||
279 | if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048) | ||
280 | { | ||
281 | ScenePresence avatarPresence = null; | ||
282 | |||
283 | m_scene.TryGetScenePresence(agentID, out avatarPresence); | ||
284 | |||
285 | if (avatarPresence != null) | ||
286 | { | ||
287 | bool lookup = false; | ||
288 | |||
289 | lock (cachedMapBlocks) | ||
290 | { | ||
291 | if (cachedMapBlocks.Count > 0 && ((cachedTime + 1800) > Util.UnixTimeSinceEpoch())) | ||
292 | { | ||
293 | List<MapBlockData> mapBlocks; | ||
294 | |||
295 | mapBlocks = cachedMapBlocks; | ||
296 | avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0); | ||
297 | } | ||
298 | else | ||
299 | { | ||
300 | lookup = true; | ||
301 | } | ||
302 | } | ||
303 | if (lookup) | ||
304 | { | ||
305 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); ; | ||
306 | |||
307 | // Get regions that are within 8 regions of here | ||
308 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | ||
309 | (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX - 8), | ||
310 | (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocX + 8), | ||
311 | (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY - 8), | ||
312 | (int)Util.RegionToWorldLoc(m_scene.RegionInfo.RegionLocY + 8) ); | ||
313 | foreach (GridRegion r in regions) | ||
314 | { | ||
315 | MapBlockData block = MapBlockFromGridRegion(r, 0); | ||
316 | mapBlocks.Add(block); | ||
317 | } | ||
318 | avatarPresence.ControllingClient.SendMapBlock(mapBlocks, 0); | ||
319 | |||
320 | lock (cachedMapBlocks) | ||
321 | cachedMapBlocks = mapBlocks; | ||
322 | |||
323 | cachedTime = Util.UnixTimeSinceEpoch(); | ||
324 | } | ||
325 | } | ||
326 | } | ||
327 | ======= | ||
328 | //if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048) | 263 | //if (m_scene.RegionInfo.RegionLocX >= 2048 || m_scene.RegionInfo.RegionLocY >= 2048) |
329 | //{ | 264 | //{ |
330 | // ScenePresence avatarPresence = null; | 265 | // ScenePresence avatarPresence = null; |
@@ -373,7 +308,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
373 | // } | 308 | // } |
374 | // } | 309 | // } |
375 | //} | 310 | //} |
376 | >>>>>>> avn/ubitvar | ||
377 | 311 | ||
378 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); | 312 | LLSDMapLayerResponse mapResponse = new LLSDMapLayerResponse(); |
379 | mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse()); | 313 | mapResponse.LayerData.Array.Add(GetOSDMapLayerResponse()); |
@@ -459,7 +393,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
459 | ThreadPriority.BelowNormal, | 393 | ThreadPriority.BelowNormal, |
460 | true, | 394 | true, |
461 | true); | 395 | true); |
462 | Watchdog.StartThread( | 396 | WorkManager.StartThread( |
463 | MapBlockSendThread, | 397 | MapBlockSendThread, |
464 | string.Format("MapBlockSendThread ({0})", m_scene.RegionInfo.RegionName), | 398 | string.Format("MapBlockSendThread ({0})", m_scene.RegionInfo.RegionName), |
465 | ThreadPriority.BelowNormal, | 399 | ThreadPriority.BelowNormal, |
@@ -516,12 +450,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
516 | uint xstart = 0; | 450 | uint xstart = 0; |
517 | uint ystart = 0; | 451 | uint ystart = 0; |
518 | Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart); | 452 | Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart); |
519 | <<<<<<< HEAD | ||
520 | if (itemtype == (int)GridItemType.AgentLocations) | ||
521 | ======= | ||
522 | 453 | ||
523 | if (itemtype == 6) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots) | 454 | if (itemtype == (int)GridItemType.AgentLocations) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots) |
524 | >>>>>>> avn/ubitvar | ||
525 | { | 455 | { |
526 | if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle) | 456 | if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle) |
527 | { | 457 | { |
@@ -531,22 +461,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
531 | mapItemReply mapitem = new mapItemReply(); | 461 | mapItemReply mapitem = new mapItemReply(); |
532 | if (m_scene.GetRootAgentCount() <= 1) | 462 | if (m_scene.GetRootAgentCount() <= 1) |
533 | { | 463 | { |
534 | <<<<<<< HEAD | ||
535 | mapitem = new mapItemReply( | 464 | mapitem = new mapItemReply( |
536 | xstart + 1, | 465 | xstart + 1, |
537 | ystart + 1, | 466 | ystart + 1, |
538 | UUID.Zero, | 467 | UUID.Zero, |
539 | Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()), | 468 | Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()), |
540 | 0, 0); | 469 | 0, 0); |
541 | ======= | ||
542 | mapitem = new mapItemReply(); | ||
543 | mapitem.x = xstart + 1; | ||
544 | mapitem.y = ystart + 1; | ||
545 | mapitem.id = UUID.Zero; | ||
546 | mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()); | ||
547 | mapitem.Extra = 0; | ||
548 | mapitem.Extra2 = 0; | ||
549 | >>>>>>> avn/ubitvar | ||
550 | mapitems.Add(mapitem); | 470 | mapitems.Add(mapitem); |
551 | } | 471 | } |
552 | else | 472 | else |
@@ -556,22 +476,12 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
556 | // Don't send a green dot for yourself | 476 | // Don't send a green dot for yourself |
557 | if (sp.UUID != remoteClient.AgentId) | 477 | if (sp.UUID != remoteClient.AgentId) |
558 | { | 478 | { |
559 | <<<<<<< HEAD | ||
560 | mapitem = new mapItemReply( | 479 | mapitem = new mapItemReply( |
561 | xstart + (uint)sp.AbsolutePosition.X, | 480 | xstart + (uint)sp.AbsolutePosition.X, |
562 | ystart + (uint)sp.AbsolutePosition.Y, | 481 | ystart + (uint)sp.AbsolutePosition.Y, |
563 | UUID.Zero, | 482 | UUID.Zero, |
564 | Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()), | 483 | Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()), |
565 | 1, 0); | 484 | 1, 0); |
566 | ======= | ||
567 | mapitem = new mapItemReply(); | ||
568 | mapitem.x = xstart + (uint)sp.AbsolutePosition.X; | ||
569 | mapitem.y = ystart + (uint)sp.AbsolutePosition.Y; | ||
570 | mapitem.id = UUID.Zero; | ||
571 | mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()); | ||
572 | mapitem.Extra = 1; | ||
573 | mapitem.Extra2 = 0; | ||
574 | >>>>>>> avn/ubitvar | ||
575 | mapitems.Add(mapitem); | 485 | mapitems.Add(mapitem); |
576 | } | 486 | } |
577 | }); | 487 | }); |
@@ -615,8 +525,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
615 | Vector3 max = parcel.AABBMax; | 525 | Vector3 max = parcel.AABBMax; |
616 | float x = (min.X+max.X)/2; | 526 | float x = (min.X+max.X)/2; |
617 | float y = (min.Y+max.Y)/2; | 527 | float y = (min.Y+max.Y)/2; |
618 | |||
619 | <<<<<<< HEAD | ||
620 | mapitem = new mapItemReply( | 528 | mapitem = new mapItemReply( |
621 | xstart + (uint)x, | 529 | xstart + (uint)x, |
622 | ystart + (uint)y, | 530 | ystart + (uint)y, |
@@ -625,16 +533,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
625 | parcel.Area, | 533 | parcel.Area, |
626 | parcel.SalePrice | 534 | parcel.SalePrice |
627 | ); | 535 | ); |
628 | ======= | ||
629 | mapitem = new mapItemReply(); | ||
630 | mapitem.x = xstart + (uint)x; | ||
631 | mapitem.y = ystart +(uint)y; | ||
632 | // mapitem.z = (uint)m_scene.GetGroundHeight(x,y); | ||
633 | mapitem.id = parcel.GlobalID; | ||
634 | mapitem.name = parcel.Name; | ||
635 | mapitem.Extra = parcel.Area; | ||
636 | mapitem.Extra2 = parcel.SalePrice; | ||
637 | >>>>>>> avn/ubitvar | ||
638 | mapitems.Add(mapitem); | 536 | mapitems.Add(mapitem); |
639 | } | 537 | } |
640 | } | 538 | } |
@@ -659,7 +557,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
659 | SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject); | 557 | SceneObjectGroup sog = m_scene.GetSceneObjectGroup(m_scene.RegionInfo.RegionSettings.TelehubObject); |
660 | if (sog != null) | 558 | if (sog != null) |
661 | { | 559 | { |
662 | <<<<<<< HEAD | ||
663 | mapitem = new mapItemReply( | 560 | mapitem = new mapItemReply( |
664 | xstart + (uint)sog.AbsolutePosition.X, | 561 | xstart + (uint)sog.AbsolutePosition.X, |
665 | ystart + (uint)sog.AbsolutePosition.Y, | 562 | ystart + (uint)sog.AbsolutePosition.Y, |
@@ -668,15 +565,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
668 | 0, // color (not used) | 565 | 0, // color (not used) |
669 | 0 // 0 = telehub / 1 = infohub | 566 | 0 // 0 = telehub / 1 = infohub |
670 | ); | 567 | ); |
671 | ======= | ||
672 | mapitem = new mapItemReply(); | ||
673 | mapitem.x = xstart + (uint)sog.AbsolutePosition.X; | ||
674 | mapitem.y = ystart + (uint)sog.AbsolutePosition.Y; | ||
675 | mapitem.id = UUID.Zero; | ||
676 | mapitem.name = sog.Name; | ||
677 | mapitem.Extra = 0; // color (not used) | ||
678 | mapitem.Extra2 = 0; // 0 = telehub / 1 = infohub | ||
679 | >>>>>>> avn/ubitvar | ||
680 | mapitems.Add(mapitem); | 568 | mapitems.Add(mapitem); |
681 | 569 | ||
682 | remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags); | 570 | remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags); |
@@ -763,126 +651,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
763 | { | 651 | { |
764 | lock (requests) | 652 | lock (requests) |
765 | { | 653 | { |
766 | <<<<<<< HEAD | ||
767 | if (st.agentID != UUID.Zero) | ||
768 | { | ||
769 | bool dorequest = true; | ||
770 | lock (m_rootAgents) | ||
771 | { | ||
772 | if (!m_rootAgents.Contains(st.agentID)) | ||
773 | dorequest = false; | ||
774 | } | ||
775 | |||
776 | if (dorequest && !m_blacklistedregions.ContainsKey(st.regionhandle)) | ||
777 | { | ||
778 | if (nAsyncRequests >= MAX_ASYNC_REQUESTS) // hit the break | ||
779 | { | ||
780 | // AH!!! Recursive ! | ||
781 | // Put this request back in the queue and return | ||
782 | EnqueueMapItemRequest(st); | ||
783 | return; | ||
784 | } | ||
785 | |||
786 | RequestMapItemsDelegate d = RequestMapItemsAsync; | ||
787 | d.BeginInvoke(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle, RequestMapItemsCompleted, null); | ||
788 | //OSDMap response = RequestMapItemsAsync(st.agentID, st.flags, st.EstateID, st.godlike, st.itemtype, st.regionhandle); | ||
789 | //RequestMapItemsCompleted(response); | ||
790 | Interlocked.Increment(ref nAsyncRequests); | ||
791 | } | ||
792 | } | ||
793 | }); | ||
794 | } | ||
795 | |||
796 | /// <summary> | ||
797 | /// Sends the mapitem response to the IClientAPI | ||
798 | /// </summary> | ||
799 | /// <param name="response">The OSDMap Response for the mapitem</param> | ||
800 | private void RequestMapItemsCompleted(IAsyncResult iar) | ||
801 | { | ||
802 | AsyncResult result = (AsyncResult)iar; | ||
803 | RequestMapItemsDelegate icon = (RequestMapItemsDelegate)result.AsyncDelegate; | ||
804 | |||
805 | OSDMap response = (OSDMap)icon.EndInvoke(iar); | ||
806 | |||
807 | Interlocked.Decrement(ref nAsyncRequests); | ||
808 | |||
809 | if (!response.ContainsKey("requestID")) | ||
810 | return; | ||
811 | |||
812 | UUID requestID = response["requestID"].AsUUID(); | ||
813 | |||
814 | if (requestID != UUID.Zero) | ||
815 | { | ||
816 | MapRequestState mrs = new MapRequestState(); | ||
817 | mrs.agentID = UUID.Zero; | ||
818 | lock (m_openRequests) | ||
819 | { | ||
820 | if (m_openRequests.ContainsKey(requestID)) | ||
821 | { | ||
822 | mrs = m_openRequests[requestID]; | ||
823 | m_openRequests.Remove(requestID); | ||
824 | } | ||
825 | } | ||
826 | |||
827 | if (mrs.agentID != UUID.Zero) | ||
828 | { | ||
829 | ScenePresence av = null; | ||
830 | m_scene.TryGetScenePresence(mrs.agentID, out av); | ||
831 | if (av != null) | ||
832 | { | ||
833 | if (response.ContainsKey(mrs.itemtype.ToString())) | ||
834 | { | ||
835 | List<mapItemReply> returnitems = new List<mapItemReply>(); | ||
836 | OSDArray itemarray = (OSDArray)response[mrs.itemtype.ToString()]; | ||
837 | for (int i = 0; i < itemarray.Count; i++) | ||
838 | { | ||
839 | OSDMap mapitem = (OSDMap)itemarray[i]; | ||
840 | mapItemReply mi = new mapItemReply(); | ||
841 | mi.FromOSD(mapitem); | ||
842 | returnitems.Add(mi); | ||
843 | } | ||
844 | av.ControllingClient.SendMapItemReply(returnitems.ToArray(), mrs.itemtype, mrs.flags); | ||
845 | } | ||
846 | |||
847 | // Service 7 (MAP_ITEM_LAND_FOR_SALE) | ||
848 | uint itemtype = (uint)GridItemType.LandForSale; | ||
849 | |||
850 | if (response.ContainsKey(itemtype.ToString())) | ||
851 | { | ||
852 | List<mapItemReply> returnitems = new List<mapItemReply>(); | ||
853 | OSDArray itemarray = (OSDArray)response[itemtype.ToString()]; | ||
854 | for (int i = 0; i < itemarray.Count; i++) | ||
855 | { | ||
856 | OSDMap mapitem = (OSDMap)itemarray[i]; | ||
857 | mapItemReply mi = new mapItemReply(); | ||
858 | mi.FromOSD(mapitem); | ||
859 | returnitems.Add(mi); | ||
860 | } | ||
861 | av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags); | ||
862 | } | ||
863 | |||
864 | // Service 1 (MAP_ITEM_TELEHUB) | ||
865 | itemtype = (uint)GridItemType.Telehub; | ||
866 | |||
867 | if (response.ContainsKey(itemtype.ToString())) | ||
868 | { | ||
869 | List<mapItemReply> returnitems = new List<mapItemReply>(); | ||
870 | OSDArray itemarray = (OSDArray)response[itemtype.ToString()]; | ||
871 | for (int i = 0; i < itemarray.Count; i++) | ||
872 | { | ||
873 | OSDMap mapitem = (OSDMap)itemarray[i]; | ||
874 | mapItemReply mi = new mapItemReply(); | ||
875 | mi.FromOSD(mapitem); | ||
876 | returnitems.Add(mi); | ||
877 | } | ||
878 | av.ControllingClient.SendMapItemReply(returnitems.ToArray(), itemtype, mrs.flags); | ||
879 | } | ||
880 | } | ||
881 | } | ||
882 | ======= | ||
883 | queueEvent.Set(); | 654 | queueEvent.Set(); |
884 | requests.Enqueue(state); | 655 | requests.Enqueue(state); |
885 | >>>>>>> avn/ubitvar | 656 | |
886 | } | 657 | } |
887 | } | 658 | } |
888 | 659 | ||
@@ -1228,11 +999,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1228 | /// <param name="maxY"></param> | 999 | /// <param name="maxY"></param> |
1229 | public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) | 1000 | public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) |
1230 | { | 1001 | { |
1231 | <<<<<<< HEAD | ||
1232 | ======= | ||
1233 | m_log.DebugFormat("[WoldMapModule] RequestMapBlocks {0}={1}={2}={3} {4}", minX, minY, maxX, maxY, flag); | 1002 | m_log.DebugFormat("[WoldMapModule] RequestMapBlocks {0}={1}={2}={3} {4}", minX, minY, maxX, maxY, flag); |
1234 | /* this flag does not seem to mean what his says | 1003 | /* this flag does not seem to mean what his says |
1235 | >>>>>>> avn/ubitvar | ||
1236 | if ((flag & 0x10000) != 0) // user clicked on qthe map a tile that isn't visible | 1004 | if ((flag & 0x10000) != 0) // user clicked on qthe map a tile that isn't visible |
1237 | { | 1005 | { |
1238 | List<MapBlockData> response = new List<MapBlockData>(); | 1006 | List<MapBlockData> response = new List<MapBlockData>(); |
@@ -1241,34 +1009,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1241 | // on an unloaded square. | 1009 | // on an unloaded square. |
1242 | // But make sure: Look whether the one we requested is in there | 1010 | // But make sure: Look whether the one we requested is in there |
1243 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | 1011 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, |
1244 | <<<<<<< HEAD | ||
1245 | (int)Util.RegionToWorldLoc((uint)minX), (int)Util.RegionToWorldLoc((uint)maxX), | ||
1246 | (int)Util.RegionToWorldLoc((uint)minY), (int)Util.RegionToWorldLoc((uint)maxY) ); | ||
1247 | |||
1248 | m_log.DebugFormat("[WORLD MAP MODULE] RequestMapBlocks min=<{0},{1}>, max=<{2},{3}>, flag={4}, cntFound={5}", | ||
1249 | minX, minY, maxX, maxY, flag.ToString("X"), regions.Count); | ||
1250 | ======= | ||
1251 | (int)Util.RegionToWorldLoc((uint)minX), | 1012 | (int)Util.RegionToWorldLoc((uint)minX), |
1252 | (int)Util.RegionToWorldLoc((uint)maxX), | 1013 | (int)Util.RegionToWorldLoc((uint)maxX), |
1253 | (int)Util.RegionToWorldLoc((uint)minY), | 1014 | (int)Util.RegionToWorldLoc((uint)minY), |
1254 | (int)Util.RegionToWorldLoc((uint)maxY) ); | 1015 | (int)Util.RegionToWorldLoc((uint)maxY) ); |
1255 | 1016 | ||
1256 | >>>>>>> avn/ubitvar | ||
1257 | if (regions != null) | 1017 | if (regions != null) |
1258 | { | 1018 | { |
1259 | foreach (GridRegion r in regions) | 1019 | foreach (GridRegion r in regions) |
1260 | { | 1020 | { |
1261 | <<<<<<< HEAD | ||
1262 | if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX) | ||
1263 | && r.RegionLocY == Util.RegionToWorldLoc((uint)minY) ) | ||
1264 | { | ||
1265 | // found it => add it to response | ||
1266 | // Version 2 viewers can handle the larger regions | ||
1267 | if ((flag & 2) == 2) | ||
1268 | response.AddRange(Map2BlockFromGridRegion(r, flag)); | ||
1269 | else | ||
1270 | response.Add(MapBlockFromGridRegion(r, flag)); | ||
1271 | ======= | ||
1272 | if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX) && | 1021 | if (r.RegionLocX == Util.RegionToWorldLoc((uint)minX) && |
1273 | r.RegionLocY == Util.RegionToWorldLoc((uint)minY)) | 1022 | r.RegionLocY == Util.RegionToWorldLoc((uint)minY)) |
1274 | { | 1023 | { |
@@ -1281,7 +1030,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1281 | MapBlockFromGridRegion(block, r, flag); | 1030 | MapBlockFromGridRegion(block, r, flag); |
1282 | response.Add(block); | 1031 | response.Add(block); |
1283 | } | 1032 | } |
1284 | >>>>>>> avn/ubitvar | ||
1285 | break; | 1033 | break; |
1286 | } | 1034 | } |
1287 | } | 1035 | } |
@@ -1373,19 +1121,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1373 | List<MapBlockData> allBlocks = new List<MapBlockData>(); | 1121 | List<MapBlockData> allBlocks = new List<MapBlockData>(); |
1374 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); | 1122 | List<MapBlockData> mapBlocks = new List<MapBlockData>(); |
1375 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, | 1123 | List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, |
1376 | <<<<<<< HEAD | ||
1377 | (int)Util.RegionToWorldLoc((uint)(minX - 4)), (int)Util.RegionToWorldLoc((uint)(maxX + 4)), | ||
1378 | (int)Util.RegionToWorldLoc((uint)(minY - 4)), (int)Util.RegionToWorldLoc((uint)(maxY + 4)) ); | ||
1379 | //m_log.DebugFormat("{0} GetAndSendBlocks. min=<{1},{2}>, max=<{3},{4}>, cntFound={5}", | ||
1380 | // LogHeader, minX, minY, maxX, maxY, regions.Count); | ||
1381 | foreach (GridRegion r in regions) | ||
1382 | { | ||
1383 | // Version 2 viewers can handle the larger regions | ||
1384 | if ((flag & 2) == 2) | ||
1385 | mapBlocks.AddRange(Map2BlockFromGridRegion(r, flag)); | ||
1386 | else | ||
1387 | mapBlocks.Add(MapBlockFromGridRegion(r, flag)); | ||
1388 | ======= | ||
1389 | minX * (int)Constants.RegionSize, | 1124 | minX * (int)Constants.RegionSize, |
1390 | maxX * (int)Constants.RegionSize, | 1125 | maxX * (int)Constants.RegionSize, |
1391 | minY * (int)Constants.RegionSize, | 1126 | minY * (int)Constants.RegionSize, |
@@ -1407,7 +1142,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1407 | mapBlocks.Add(block); | 1142 | mapBlocks.Add(block); |
1408 | remoteClient.SendMapBlock(mapBlocks, flag & 0xffff); | 1143 | remoteClient.SendMapBlock(mapBlocks, flag & 0xffff); |
1409 | return allBlocks; | 1144 | return allBlocks; |
1410 | >>>>>>> avn/ubitvar | ||
1411 | } | 1145 | } |
1412 | 1146 | ||
1413 | foreach (GridRegion r in regions) | 1147 | foreach (GridRegion r in regions) |
@@ -1438,15 +1172,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1438 | return allBlocks; | 1172 | return allBlocks; |
1439 | } | 1173 | } |
1440 | 1174 | ||
1441 | <<<<<<< HEAD | ||
1442 | // Fill a passed MapBlockData from a GridRegion | ||
1443 | public MapBlockData MapBlockFromGridRegion(GridRegion r, uint flag) | ||
1444 | ======= | ||
1445 | public void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag) | 1175 | public void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag) |
1446 | >>>>>>> avn/ubitvar | ||
1447 | { | 1176 | { |
1448 | MapBlockData block = new MapBlockData(); | ||
1449 | |||
1450 | block.Access = r.Access; | 1177 | block.Access = r.Access; |
1451 | switch (flag & 0xffff) | 1178 | switch (flag & 0xffff) |
1452 | { | 1179 | { |
@@ -1461,14 +1188,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1461 | break; | 1188 | break; |
1462 | } | 1189 | } |
1463 | block.Name = r.RegionName; | 1190 | block.Name = r.RegionName; |
1464 | <<<<<<< HEAD | ||
1465 | block.X = (ushort)Util.WorldToRegionLoc((uint)r.RegionLocX); | ||
1466 | block.Y = (ushort)Util.WorldToRegionLoc((uint)r.RegionLocY); | ||
1467 | block.SizeX = (ushort) r.RegionSizeX; | ||
1468 | block.SizeY = (ushort) r.RegionSizeY; | ||
1469 | |||
1470 | return block; | ||
1471 | ======= | ||
1472 | block.X = (ushort)(r.RegionLocX / Constants.RegionSize); | 1191 | block.X = (ushort)(r.RegionLocX / Constants.RegionSize); |
1473 | block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); | 1192 | block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); |
1474 | block.SizeX = (ushort)r.RegionSizeX; | 1193 | block.SizeX = (ushort)r.RegionSizeX; |
@@ -1508,45 +1227,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1508 | blocks.Add(block); | 1227 | blocks.Add(block); |
1509 | } | 1228 | } |
1510 | return blocks; | 1229 | return blocks; |
1511 | >>>>>>> avn/ubitvar | ||
1512 | } | 1230 | } |
1513 | 1231 | ||
1514 | public List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag) | ||
1515 | { | ||
1516 | List<MapBlockData> blocks = new List<MapBlockData>(); | ||
1517 | MapBlockData block = new MapBlockData(); | ||
1518 | if (r == null) | ||
1519 | { | ||
1520 | block.Access = (byte)SimAccess.Down; | ||
1521 | block.MapImageId = UUID.Zero; | ||
1522 | blocks.Add(block); | ||
1523 | } | ||
1524 | else | ||
1525 | { | ||
1526 | block.Access = r.Access; | ||
1527 | switch (flag & 0xffff) | ||
1528 | { | ||
1529 | case 0: | ||
1530 | block.MapImageId = r.TerrainImage; | ||
1531 | break; | ||
1532 | case 2: | ||
1533 | block.MapImageId = r.ParcelImage; | ||
1534 | break; | ||
1535 | default: | ||
1536 | block.MapImageId = UUID.Zero; | ||
1537 | break; | ||
1538 | } | ||
1539 | block.Name = r.RegionName; | ||
1540 | block.X = (ushort)(r.RegionLocX / Constants.RegionSize); | ||
1541 | block.Y = (ushort)(r.RegionLocY / Constants.RegionSize); | ||
1542 | block.SizeX = (ushort)r.RegionSizeX; | ||
1543 | block.SizeY = (ushort)r.RegionSizeY; | ||
1544 | blocks.Add(block); | ||
1545 | } | ||
1546 | return blocks; | ||
1547 | } | ||
1548 | |||
1549 | |||
1550 | public Hashtable OnHTTPThrottled(Hashtable keysvals) | 1232 | public Hashtable OnHTTPThrottled(Hashtable keysvals) |
1551 | { | 1233 | { |
1552 | Hashtable reply = new Hashtable(); | 1234 | Hashtable reply = new Hashtable(); |
@@ -1681,7 +1363,8 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1681 | 1363 | ||
1682 | foreach (GridRegion r in regions) | 1364 | foreach (GridRegion r in regions) |
1683 | { | 1365 | { |
1684 | MapBlockData mapBlock = MapBlockFromGridRegion(r, 0); | 1366 | MapBlockData mapBlock = new MapBlockData(); |
1367 | MapBlockFromGridRegion(mapBlock, r , 0); | ||
1685 | AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); | 1368 | AssetBase texAsset = m_scene.AssetService.Get(mapBlock.MapImageId.ToString()); |
1686 | 1369 | ||
1687 | if (texAsset != null) | 1370 | if (texAsset != null) |
@@ -1752,13 +1435,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1752 | uint xstart = 0; | 1435 | uint xstart = 0; |
1753 | uint ystart = 0; | 1436 | uint ystart = 0; |
1754 | 1437 | ||
1755 | <<<<<<< HEAD | ||
1756 | Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle,out xstart,out ystart); | ||
1757 | // m_log.DebugFormat("{0} HandleRemoteMapItemRequest. loc=<{1},{2}>", | ||
1758 | // LogHeader, Util.WorldToRegionLoc(xstart), Util.WorldToRegionLoc(ystart)); | ||
1759 | ======= | ||
1760 | Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart); | 1438 | Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart); |
1761 | >>>>>>> avn/ubitvar | ||
1762 | 1439 | ||
1763 | // Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots) | 1440 | // Service 6 (MAP_ITEM_AGENTS_LOCATION; green dots) |
1764 | 1441 | ||
@@ -1878,7 +1555,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1878 | return; | 1555 | return; |
1879 | 1556 | ||
1880 | m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.Name); | 1557 | m_log.DebugFormat("[WORLD MAP]: Generating map image for {0}", m_scene.Name); |
1881 | <<<<<<< HEAD | ||
1882 | 1558 | ||
1883 | using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile()) | 1559 | using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile()) |
1884 | { | 1560 | { |
@@ -1894,23 +1570,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
1894 | { | 1570 | { |
1895 | byte[] data; | 1571 | byte[] data; |
1896 | 1572 | ||
1897 | ======= | ||
1898 | |||
1899 | using (Bitmap mapbmp = m_mapImageGenerator.CreateMapTile()) | ||
1900 | { | ||
1901 | // V1 (This Module) | ||
1902 | GenerateMaptile(mapbmp); | ||
1903 | |||
1904 | // v2/3 (MapImageServiceModule) | ||
1905 | m_mapImageServiceModule.UploadMapTile(m_scene, mapbmp); | ||
1906 | } | ||
1907 | } | ||
1908 | |||
1909 | private void GenerateMaptile(Bitmap mapbmp) | ||
1910 | { | ||
1911 | byte[] data; | ||
1912 | |||
1913 | >>>>>>> avn/ubitvar | ||
1914 | try | 1573 | try |
1915 | { | 1574 | { |
1916 | data = OpenJPEG.EncodeFromImage(mapbmp, true); | 1575 | data = OpenJPEG.EncodeFromImage(mapbmp, true); |
@@ -2027,11 +1686,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
2027 | int regionSizeX = (int)m_scene.RegionInfo.RegionSizeX; | 1686 | int regionSizeX = (int)m_scene.RegionInfo.RegionSizeX; |
2028 | int regionSizeY = (int)m_scene.RegionInfo.RegionSizeY; | 1687 | int regionSizeY = (int)m_scene.RegionInfo.RegionSizeY; |
2029 | 1688 | ||
2030 | <<<<<<< HEAD | ||
2031 | int landTileSize = LandManagementModule.LandUnit; | 1689 | int landTileSize = LandManagementModule.LandUnit; |
2032 | ======= | ||
2033 | int landTileSize = LandManagementModule.landUnit; | ||
2034 | >>>>>>> avn/ubitvar | ||
2035 | int regionLandTilesX = regionSizeX / landTileSize; | 1690 | int regionLandTilesX = regionSizeX / landTileSize; |
2036 | int regionLandTilesY = regionSizeY / landTileSize; | 1691 | int regionLandTilesY = regionSizeY / landTileSize; |
2037 | 1692 | ||
@@ -2054,10 +1709,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
2054 | { | 1709 | { |
2055 | using (SolidBrush transparent = new SolidBrush(background)) | 1710 | using (SolidBrush transparent = new SolidBrush(background)) |
2056 | g.FillRectangle(transparent, 0, 0, regionSizeX, regionSizeY); | 1711 | g.FillRectangle(transparent, 0, 0, regionSizeX, regionSizeY); |
2057 | <<<<<<< HEAD | ||
2058 | ======= | ||
2059 | |||
2060 | >>>>>>> avn/ubitvar | ||
2061 | 1712 | ||
2062 | foreach (ILandObject land in parcels) | 1713 | foreach (ILandObject land in parcels) |
2063 | { | 1714 | { |
@@ -2080,17 +1731,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
2080 | 1731 | ||
2081 | using (SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9))) | 1732 | using (SolidBrush yellow = new SolidBrush(Color.FromArgb(255, 249, 223, 9))) |
2082 | { | 1733 | { |
2083 | <<<<<<< HEAD | ||
2084 | for (int x = 0 ; x < regionLandTilesX ; x++) | ||
2085 | { | ||
2086 | for (int y = 0 ; y < regionLandTilesY ; y++) | ||
2087 | { | ||
2088 | if (saleBitmap[x, y]) | ||
2089 | g.FillRectangle( | ||
2090 | yellow, x * landTileSize, | ||
2091 | regionSizeX - landTileSize - (y * landTileSize), | ||
2092 | landTileSize, | ||
2093 | ======= | ||
2094 | for (int x = 0; x < regionLandTilesX ; x++) | 1734 | for (int x = 0; x < regionLandTilesX ; x++) |
2095 | { | 1735 | { |
2096 | for (int y = 0; y < regionLandTilesY ; y++) | 1736 | for (int y = 0; y < regionLandTilesY ; y++) |
@@ -2101,7 +1741,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap | |||
2101 | x * landTileSize, | 1741 | x * landTileSize, |
2102 | regionSizeX - landTileSize - (y * landTileSize), | 1742 | regionSizeX - landTileSize - (y * landTileSize), |
2103 | landTileSize, | 1743 | landTileSize, |
2104 | >>>>>>> avn/ubitvar | ||
2105 | landTileSize); | 1744 | landTileSize); |
2106 | } | 1745 | } |
2107 | } | 1746 | } |
diff --git a/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs b/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs index 7472050..0f39273 100644 --- a/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs +++ b/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs | |||
@@ -402,7 +402,6 @@ namespace OpenSim.Region.DataSnapshot | |||
402 | string url = services[i].Trim(); | 402 | string url = services[i].Trim(); |
403 | using (RestClient cli = new RestClient(url)) | 403 | using (RestClient cli = new RestClient(url)) |
404 | { | 404 | { |
405 | <<<<<<< HEAD | ||
406 | cli.AddQueryParameter("service", serviceName); | 405 | cli.AddQueryParameter("service", serviceName); |
407 | cli.AddQueryParameter("host", m_hostname); | 406 | cli.AddQueryParameter("host", m_hostname); |
408 | cli.AddQueryParameter("port", m_listener_port); | 407 | cli.AddQueryParameter("port", m_listener_port); |
@@ -436,30 +435,7 @@ namespace OpenSim.Region.DataSnapshot | |||
436 | // string responseStr = Util.UTF8.GetString(response); | 435 | // string responseStr = Util.UTF8.GetString(response); |
437 | m_log.Info("[DATASNAPSHOT]: data service " + url + " notified. Secret: " + m_Secret); | 436 | m_log.Info("[DATASNAPSHOT]: data service " + url + " notified. Secret: " + m_Secret); |
438 | } | 437 | } |
439 | ======= | ||
440 | m_log.Warn("[DATASNAPSHOT]: Ignoring unknown exception " + e.ToString()); | ||
441 | } | ||
442 | |||
443 | byte[] response = new byte[1024]; | ||
444 | // int n = 0; | ||
445 | try | ||
446 | { | ||
447 | // n = reply.Read(response, 0, 1024); | ||
448 | reply.Read(response, 0, 1024); | ||
449 | } | ||
450 | catch (Exception e) | ||
451 | { | ||
452 | m_log.WarnFormat("[DATASNAPSHOT]: Unable to decode reply from data service. Ignoring. {0}", e.StackTrace); | ||
453 | } | ||
454 | // This is not quite working, so... | ||
455 | // string responseStr = Util.UTF8.GetString(response); | ||
456 | m_log.Info("[DATASNAPSHOT]: data service " + url + " notified. Secret: " + m_Secret); | ||
457 | |||
458 | if(reply != null) | ||
459 | reply.Close(); | ||
460 | >>>>>>> avn/ubitvar | ||
461 | } | 438 | } |
462 | |||
463 | } | 439 | } |
464 | #endregion | 440 | #endregion |
465 | 441 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs b/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs index 570d31c..4d8409be 100644 --- a/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IBakedTextureModule.cs | |||
@@ -35,7 +35,9 @@ namespace OpenSim.Services.Interfaces | |||
35 | public interface IBakedTextureModule | 35 | public interface IBakedTextureModule |
36 | { | 36 | { |
37 | WearableCacheItem[] Get(UUID id); | 37 | WearableCacheItem[] Get(UUID id); |
38 | |||
38 | void Store(UUID id); | 39 | void Store(UUID id); |
40 | void Store(UUID id, WearableCacheItem[] WearableCache); | ||
39 | void UpdateMeshAvatar(UUID id); | 41 | void UpdateMeshAvatar(UUID id); |
40 | } | 42 | } |
41 | } | 43 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs b/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs index 50448b4..80f8244 100644 --- a/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs | |||
@@ -93,15 +93,9 @@ namespace OpenSim.Region.Framework.Interfaces | |||
93 | 93 | ||
94 | void EnableChildAgent(ScenePresence agent, GridRegion region); | 94 | void EnableChildAgent(ScenePresence agent, GridRegion region); |
95 | 95 | ||
96 | <<<<<<< HEAD | ||
97 | GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, out string version, | ||
98 | out Vector3 newpos, out string reason); | ||
99 | |||
100 | ======= | ||
101 | GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, out string version, out Vector3 newpos); | 96 | GridRegion GetDestination(Scene scene, UUID agentID, Vector3 pos, out string version, out Vector3 newpos); |
102 | GridRegion GetObjectDestination(SceneObjectGroup grp, Vector3 targetPosition, out Vector3 newpos); | 97 | GridRegion GetObjectDestination(SceneObjectGroup grp, Vector3 targetPosition, out Vector3 newpos); |
103 | bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason); | 98 | bool checkAgentAccessToRegion(ScenePresence agent, GridRegion destiny, Vector3 position, out string version, out string reason); |
104 | >>>>>>> avn/ubitvar | ||
105 | void Cross(SceneObjectGroup sog, Vector3 position, bool silent); | 99 | void Cross(SceneObjectGroup sog, Vector3 position, bool silent); |
106 | bool CrossPrimGroupIntoNewRegion(GridRegion destination, Vector3 newPosition, SceneObjectGroup grp, bool silent); | 100 | bool CrossPrimGroupIntoNewRegion(GridRegion destination, Vector3 newPosition, SceneObjectGroup grp, bool silent); |
107 | 101 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IHttpRequests.cs b/OpenSim/Region/Framework/Interfaces/IHttpRequests.cs index 2f9b222..efc9ddc 100644 --- a/OpenSim/Region/Framework/Interfaces/IHttpRequests.cs +++ b/OpenSim/Region/Framework/Interfaces/IHttpRequests.cs | |||
@@ -58,8 +58,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
58 | public interface IHttpRequestModule | 58 | public interface IHttpRequestModule |
59 | { | 59 | { |
60 | UUID MakeHttpRequest(string url, string parameters, string body); | 60 | UUID MakeHttpRequest(string url, string parameters, string body); |
61 | <<<<<<< HEAD | ||
62 | |||
63 | /// <summary> | 61 | /// <summary> |
64 | /// Starts the http request. | 62 | /// Starts the http request. |
65 | /// </summary> | 63 | /// </summary> |
@@ -86,12 +84,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
86 | /// Stop and remove all http requests for the given script. | 84 | /// Stop and remove all http requests for the given script. |
87 | /// </summary> | 85 | /// </summary> |
88 | /// <param name='id'></param> | 86 | /// <param name='id'></param> |
89 | void StopHttpRequestsForScript(UUID id); | ||
90 | |||
91 | ======= | ||
92 | UUID StartHttpRequest(uint localID, UUID itemID, string url, List<string> parameters, Dictionary<string, string> headers, string body); | ||
93 | void StopHttpRequest(uint m_localID, UUID m_itemID); | 87 | void StopHttpRequest(uint m_localID, UUID m_itemID); |
94 | >>>>>>> avn/ubitvar | ||
95 | IServiceRequest GetNextCompletedRequest(); | 88 | IServiceRequest GetNextCompletedRequest(); |
96 | void RemoveCompletedRequest(UUID id); | 89 | void RemoveCompletedRequest(UUID id); |
97 | } | 90 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/IMapImageUploadModule.cs b/OpenSim/Region/Framework/Interfaces/IMapImageUploadModule.cs index eb79711..5151567 100644 --- a/OpenSim/Region/Framework/Interfaces/IMapImageUploadModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IMapImageUploadModule.cs | |||
@@ -25,24 +25,14 @@ | |||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | <<<<<<< HEAD | ||
29 | using System.Drawing; | ||
30 | using OpenSim.Framework; | ||
31 | ======= | ||
32 | using OpenMetaverse; | 28 | using OpenMetaverse; |
33 | using OpenSim.Framework; | 29 | using OpenSim.Framework; |
34 | using System.Drawing; | 30 | using System.Drawing; |
35 | >>>>>>> avn/ubitvar | ||
36 | 31 | ||
37 | namespace OpenSim.Region.Framework.Interfaces | 32 | namespace OpenSim.Region.Framework.Interfaces |
38 | { | 33 | { |
39 | public interface IMapImageUploadModule | 34 | public interface IMapImageUploadModule |
40 | { | 35 | { |
41 | <<<<<<< HEAD | ||
42 | void UploadMapTile(IScene scene, Bitmap mapTile); | ||
43 | } | ||
44 | } | ||
45 | ======= | ||
46 | /// <summary> | 36 | /// <summary> |
47 | /// Upload a new maptile | 37 | /// Upload a new maptile |
48 | /// </summary> | 38 | /// </summary> |
@@ -50,4 +40,3 @@ namespace OpenSim.Region.Framework.Interfaces | |||
50 | void UploadMapTile(IScene scene, Bitmap mapTile); | 40 | void UploadMapTile(IScene scene, Bitmap mapTile); |
51 | } | 41 | } |
52 | } | 42 | } |
53 | >>>>>>> avn/ubitvar | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs index 445342d..99bc87d 100644 --- a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs | |||
@@ -127,12 +127,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
127 | /// <param name="requestId">If supplied, this request Id is later returned in the saved event</param> | 127 | /// <param name="requestId">If supplied, this request Id is later returned in the saved event</param> |
128 | /// <param name="options"> | 128 | /// <param name="options"> |
129 | /// Dictionary of options. | 129 | /// Dictionary of options. |
130 | <<<<<<< HEAD | ||
131 | /// </param> | 130 | /// </param> |
132 | void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string,object> options); | 131 | void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string,object> options); |
133 | ======= | ||
134 | /// </param> | ||
135 | void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options); | ||
136 | >>>>>>> avn/ubitvar | ||
137 | } | 132 | } |
138 | } | 133 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs b/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs index ff18519..472e5a5d 100644 --- a/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs +++ b/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs | |||
@@ -28,11 +28,8 @@ using System.IO; | |||
28 | 28 | ||
29 | using OpenSim.Framework; | 29 | using OpenSim.Framework; |
30 | 30 | ||
31 | <<<<<<< HEAD | ||
32 | ======= | ||
33 | using System.IO; | 31 | using System.IO; |
34 | using OpenSim.Framework; | 32 | using OpenSim.Framework; |
35 | >>>>>>> avn/ubitvar | ||
36 | using OpenMetaverse; | 33 | using OpenMetaverse; |
37 | 34 | ||
38 | namespace OpenSim.Region.Framework.Interfaces | 35 | namespace OpenSim.Region.Framework.Interfaces |
@@ -56,12 +53,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
56 | void PushTerrain(IClientAPI pClient); | 53 | void PushTerrain(IClientAPI pClient); |
57 | 54 | ||
58 | /// <summary> | 55 | /// <summary> |
59 | /// When a client initially connects, all the terrain must be pushed to the viewer. | ||
60 | /// This call causes all the terrain patches to be sent to the client. | ||
61 | /// </summary> | ||
62 | void PushTerrain(IClientAPI pClient); | ||
63 | |||
64 | /// <summary> | ||
65 | /// Load a terrain from a stream. | 56 | /// Load a terrain from a stream. |
66 | /// </summary> | 57 | /// </summary> |
67 | /// <param name="filename"> | 58 | /// <param name="filename"> |
@@ -69,7 +60,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
69 | /// </param> | 60 | /// </param> |
70 | /// <param name="stream"></param> | 61 | /// <param name="stream"></param> |
71 | void LoadFromStream(string filename, Stream stream); | 62 | void LoadFromStream(string filename, Stream stream); |
72 | void LoadFromStream(string filename, Vector3 displacement, float radianRotation, Vector2 rotationDisplacement, Stream stream); | ||
73 | void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap); | 63 | void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap); |
74 | void LoadFromStream(string filename, Vector3 displacement, | 64 | void LoadFromStream(string filename, Vector3 displacement, |
75 | float radianRotation, Vector2 rotationDisplacement, Stream stream); | 65 | float radianRotation, Vector2 rotationDisplacement, Stream stream); |
diff --git a/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs b/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs index 08dc3e3..e9cf4ad 100644 --- a/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IWorldMapModule.cs | |||
@@ -37,10 +37,6 @@ namespace OpenSim.Region.Framework.Interfaces | |||
37 | /// </summary> | 37 | /// </summary> |
38 | void GenerateMaptile(); | 38 | void GenerateMaptile(); |
39 | List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag); | 39 | List<MapBlockData> Map2BlockFromGridRegion(GridRegion r, uint flag); |
40 | <<<<<<< HEAD | ||
41 | MapBlockData MapBlockFromGridRegion(GridRegion r, uint flag); | ||
42 | ======= | ||
43 | void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag); | 40 | void MapBlockFromGridRegion(MapBlockData block, GridRegion r, uint flag); |
44 | >>>>>>> avn/ubitvar | ||
45 | } | 41 | } |
46 | } | 42 | } |
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs index 2b95a4c..c00190a 100644 --- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs +++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | |||
@@ -351,26 +351,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
351 | m_group = grp; | 351 | m_group = grp; |
352 | m_scene = grp.Scene; | 352 | m_scene = grp.Scene; |
353 | 353 | ||
354 | <<<<<<< HEAD | 354 | |
355 | Vector3 grppos = grp.AbsolutePosition; | ||
356 | Vector3 offset = grppos - m_serializedPosition; | ||
357 | // avoid doing it more than once | ||
358 | // current this will happen dragging a prim to other region | ||
359 | m_serializedPosition = grppos; | ||
360 | |||
361 | m_basePosition += offset; | ||
362 | m_nextPosition += offset; | ||
363 | |||
364 | m_currentFrame.StartPosition += offset; | ||
365 | m_currentFrame.Position += offset; | ||
366 | |||
367 | for (int i = 0; i < m_frames.Count; i++) | ||
368 | { | ||
369 | Keyframe k = m_frames[i]; | ||
370 | k.StartPosition += offset; | ||
371 | k.Position += offset; | ||
372 | m_frames[i]=k; | ||
373 | ======= | ||
374 | lock (m_frames) | 355 | lock (m_frames) |
375 | { | 356 | { |
376 | Vector3 grppos = grp.AbsolutePosition; | 357 | Vector3 grppos = grp.AbsolutePosition; |
@@ -390,7 +371,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
390 | k.Position += offset; | 371 | k.Position += offset; |
391 | m_frames[i] = k; | 372 | m_frames[i] = k; |
392 | } | 373 | } |
393 | >>>>>>> avn/ubitvar | ||
394 | } | 374 | } |
395 | 375 | ||
396 | if (m_running) | 376 | if (m_running) |
@@ -708,29 +688,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
708 | 688 | ||
709 | if (m_frames.Count == 0) | 689 | if (m_frames.Count == 0) |
710 | { | 690 | { |
711 | <<<<<<< HEAD | ||
712 | if (!m_running) return; | ||
713 | |||
714 | GetNextList(); | ||
715 | |||
716 | if (m_frames.Count == 0) | ||
717 | { | ||
718 | Stop(); | ||
719 | // Scene scene = m_group.Scene; | ||
720 | // | ||
721 | // IScriptModule[] scriptModules = scene.RequestModuleInterfaces<IScriptModule>(); | ||
722 | // foreach (IScriptModule m in scriptModules) | ||
723 | // { | ||
724 | // if (m == null) | ||
725 | // continue; | ||
726 | // m.PostObjectEvent(m_group.RootPart.UUID, "moving_end", new object[0]); | ||
727 | // } | ||
728 | |||
729 | m_group.Scene.EventManager.TriggerMovingEndEvent(m_group.RootPart.LocalId); | ||
730 | |||
731 | return; | ||
732 | } | ||
733 | ======= | ||
734 | lock (m_frames) | 691 | lock (m_frames) |
735 | { | 692 | { |
736 | GetNextList(); | 693 | GetNextList(); |
@@ -738,17 +695,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
738 | if (m_frames.Count == 0) | 695 | if (m_frames.Count == 0) |
739 | { | 696 | { |
740 | Done(); | 697 | Done(); |
741 | Scene scene = m_group.Scene; | 698 | m_group.Scene.EventManager.TriggerMovingEndEvent(m_group.RootPart.LocalId); |
742 | |||
743 | IScriptModule[] scriptModules = scene.RequestModuleInterfaces<IScriptModule>(); | ||
744 | foreach (IScriptModule m in scriptModules) | ||
745 | { | ||
746 | if (m == null) | ||
747 | continue; | ||
748 | m.PostObjectEvent(m_group.RootPart.UUID, "moving_end", new object[0]); | ||
749 | } | ||
750 | >>>>>>> avn/ubitvar | ||
751 | |||
752 | return; | 699 | return; |
753 | } | 700 | } |
754 | 701 | ||
@@ -792,21 +739,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
792 | float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal; | 739 | float completed = ((float)m_currentFrame.TimeTotal - (float)m_currentFrame.TimeMS) / (float)m_currentFrame.TimeTotal; |
793 | bool lastStep = m_currentFrame.TimeMS <= tickDuration; | 740 | bool lastStep = m_currentFrame.TimeMS <= tickDuration; |
794 | 741 | ||
795 | Vector3 positionThisStep = m_currentFrame.StartPosition + (m_currentFrame.Position.Value - m_currentFrame.StartPosition) * completed; | 742 | Vector3 v = (Vector3)m_currentFrame.Position - m_group.AbsolutePosition; |
796 | Vector3 motionThisStep = positionThisStep - m_group.AbsolutePosition; | 743 | Vector3 motionThisFrame = v / (float)remainingSteps; |
744 | v = v * 1000 / m_currentFrame.TimeMS; | ||
797 | 745 | ||
798 | <<<<<<< HEAD | ||
799 | float mag = Vector3.Mag(motionThisStep); | ||
800 | |||
801 | if ((mag >= 0.02f) || lastStep) | ||
802 | { | ||
803 | m_nextPosition = m_group.AbsolutePosition + motionThisStep; | ||
804 | m_group.AbsolutePosition = m_nextPosition; | ||
805 | ======= | ||
806 | m_nextPosition = m_group.AbsolutePosition + motionThisFrame; | 746 | m_nextPosition = m_group.AbsolutePosition + motionThisFrame; |
807 | 747 | ||
808 | if (Vector3.Mag(motionThisFrame) >= 0.05f) | 748 | if (Vector3.Mag(motionThisFrame) >= 0.05f) |
809 | >>>>>>> avn/ubitvar | ||
810 | update = true; | 749 | update = true; |
811 | 750 | ||
812 | //int totalSteps = m_currentFrame.TimeTotal / (int)tickDuration; | 751 | //int totalSteps = m_currentFrame.TimeTotal / (int)tickDuration; |
@@ -819,45 +758,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
819 | 758 | ||
820 | Quaternion step = Quaternion.Slerp(m_currentFrame.StartRotation, (Quaternion)m_currentFrame.Rotation, completed); | 759 | Quaternion step = Quaternion.Slerp(m_currentFrame.StartRotation, (Quaternion)m_currentFrame.Rotation, completed); |
821 | step.Normalize(); | 760 | step.Normalize(); |
822 | <<<<<<< HEAD | ||
823 | /* use simpler change detection | ||
824 | * float angle = 0; | ||
825 | |||
826 | float aa = current.X * current.X + current.Y * current.Y + current.Z * current.Z + current.W * current.W; | ||
827 | float bb = step.X * step.X + step.Y * step.Y + step.Z * step.Z + step.W * step.W; | ||
828 | float aa_bb = aa * bb; | ||
829 | |||
830 | if (aa_bb == 0) | ||
831 | { | ||
832 | angle = 0; | ||
833 | } | ||
834 | else | ||
835 | { | ||
836 | float ab = current.X * step.X + | ||
837 | current.Y * step.Y + | ||
838 | current.Z * step.Z + | ||
839 | current.W * step.W; | ||
840 | float q = (ab * ab) / aa_bb; | ||
841 | |||
842 | if (q > 1.0f) | ||
843 | { | ||
844 | angle = 0; | ||
845 | } | ||
846 | else | ||
847 | { | ||
848 | angle = (float)Math.Acos(2 * q - 1); | ||
849 | } | ||
850 | } | ||
851 | |||
852 | if (angle > 0.01f) | ||
853 | */ | ||
854 | if(Math.Abs(step.X - current.X) > 0.001f | ||
855 | || Math.Abs(step.Y - current.Y) > 0.001f | ||
856 | || Math.Abs(step.Z - current.Z) > 0.001f | ||
857 | || lastStep) | ||
858 | // assuming w is a dependente var | ||
859 | |||
860 | ======= | ||
861 | /* use simpler change detection | 761 | /* use simpler change detection |
862 | * float angle = 0; | 762 | * float angle = 0; |
863 | 763 | ||
@@ -893,9 +793,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
893 | || Math.Abs(step.Y - current.Y) > 0.001f | 793 | || Math.Abs(step.Y - current.Y) > 0.001f |
894 | || Math.Abs(step.Z - current.Z) > 0.001f) | 794 | || Math.Abs(step.Z - current.Z) > 0.001f) |
895 | // assuming w is a dependente var | 795 | // assuming w is a dependente var |
896 | >>>>>>> avn/ubitvar | ||
897 | { | 796 | { |
898 | // m_group.UpdateGroupRotationR(step); | 797 | // m_group.UpdateGroupRotationR(step); |
899 | m_group.RootPart.RotationOffset = step; | 798 | m_group.RootPart.RotationOffset = step; |
900 | 799 | ||
901 | //m_group.RootPart.UpdateAngularVelocity(m_currentFrame.AngularVelocity / 2); | 800 | //m_group.RootPart.UpdateAngularVelocity(m_currentFrame.AngularVelocity / 2); |
@@ -922,22 +821,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
922 | 821 | ||
923 | SceneObjectGroup tmp = m_group; | 822 | SceneObjectGroup tmp = m_group; |
924 | m_group = null; | 823 | m_group = null; |
925 | if (!m_selected && tmp != null) | 824 | |
926 | m_serializedPosition = tmp.AbsolutePosition; | ||
927 | <<<<<<< HEAD | ||
928 | ======= | ||
929 | fmt.Serialize(ms, this); | ||
930 | m_group = tmp; | ||
931 | if (!timerWasStopped && m_running && !m_waitingCrossing) | ||
932 | StartTimer(); | ||
933 | >>>>>>> avn/ubitvar | ||
934 | |||
935 | using (MemoryStream ms = new MemoryStream()) | 825 | using (MemoryStream ms = new MemoryStream()) |
936 | { | 826 | { |
937 | BinaryFormatter fmt = new BinaryFormatter(); | 827 | BinaryFormatter fmt = new BinaryFormatter(); |
828 | if (!m_selected && tmp != null) | ||
829 | m_serializedPosition = tmp.AbsolutePosition; | ||
938 | fmt.Serialize(ms, this); | 830 | fmt.Serialize(ms, this); |
939 | m_group = tmp; | 831 | m_group = tmp; |
940 | if (m_running && !m_waitingCrossing) | 832 | if (!timerWasStopped && m_running && !m_waitingCrossing) |
941 | StartTimer(); | 833 | StartTimer(); |
942 | 834 | ||
943 | return ms.ToArray(); | 835 | return ms.ToArray(); |
diff --git a/OpenSim/Region/Framework/Scenes/SOPVehicle.cs b/OpenSim/Region/Framework/Scenes/SOPVehicle.cs index 9cb901a..b617f52 100644 --- a/OpenSim/Region/Framework/Scenes/SOPVehicle.cs +++ b/OpenSim/Region/Framework/Scenes/SOPVehicle.cs | |||
@@ -487,7 +487,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
487 | 487 | ||
488 | 488 | ||
489 | 489 | ||
490 | XmlTextReader reader; | 490 | XmlReader reader; |
491 | 491 | ||
492 | private int XRint() | 492 | private int XRint() |
493 | { | 493 | { |
@@ -524,7 +524,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
524 | 524 | ||
525 | public static bool EReadProcessors( | 525 | public static bool EReadProcessors( |
526 | Dictionary<string, Action> processors, | 526 | Dictionary<string, Action> processors, |
527 | XmlTextReader xtr) | 527 | XmlReader xtr) |
528 | { | 528 | { |
529 | bool errors = false; | 529 | bool errors = false; |
530 | 530 | ||
@@ -564,14 +564,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
564 | 564 | ||
565 | public string ToXml2() | 565 | public string ToXml2() |
566 | { | 566 | { |
567 | MemoryStream ms = new MemoryStream(512); | 567 | using (StringWriter sw = new StringWriter()) |
568 | UTF8Encoding enc = new UTF8Encoding(); | 568 | { |
569 | XmlTextWriter xwriter = new XmlTextWriter(ms, enc); | 569 | using (XmlTextWriter xwriter = new XmlTextWriter(sw)) |
570 | ToXml2(xwriter); | 570 | { |
571 | xwriter.Flush(); | 571 | ToXml2(xwriter); |
572 | string s = ms.GetStreamString(); | 572 | } |
573 | xwriter.Close(); | 573 | |
574 | return s; | 574 | return sw.ToString(); |
575 | } | ||
575 | } | 576 | } |
576 | 577 | ||
577 | public static SOPVehicle FromXml2(string text) | 578 | public static SOPVehicle FromXml2(string text) |
@@ -598,7 +599,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
598 | return v; | 599 | return v; |
599 | } | 600 | } |
600 | 601 | ||
601 | public static SOPVehicle FromXml2(XmlTextReader reader) | 602 | public static SOPVehicle FromXml2(XmlReader reader) |
602 | { | 603 | { |
603 | SOPVehicle vehicle = new SOPVehicle(); | 604 | SOPVehicle vehicle = new SOPVehicle(); |
604 | 605 | ||
@@ -611,7 +612,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
611 | return vehicle; | 612 | return vehicle; |
612 | } | 613 | } |
613 | 614 | ||
614 | private void FromXml2(XmlTextReader _reader, out bool errors) | 615 | private void FromXml2(XmlReader _reader, out bool errors) |
615 | { | 616 | { |
616 | errors = false; | 617 | errors = false; |
617 | reader = _reader; | 618 | reader = _reader; |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index e289666..edb881f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -881,14 +881,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
881 | return; | 881 | return; |
882 | } | 882 | } |
883 | 883 | ||
884 | <<<<<<< HEAD | ||
885 | if (newName == String.Empty) | 884 | if (newName == String.Empty) |
886 | newName = item.Name; | 885 | newName = item.Name; |
887 | ======= | ||
888 | if (newName == null) newName = item.Name; | ||
889 | 886 | ||
890 | AssetBase asset = AssetService.Get(item.AssetID.ToString()); | 887 | AssetBase asset = AssetService.Get(item.AssetID.ToString()); |
891 | >>>>>>> avn/ubitvar | 888 | |
889 | if (asset != null) | ||
890 | { | ||
891 | if (newName != String.Empty) | ||
892 | { | ||
893 | asset.Name = newName; | ||
894 | } | ||
895 | else | ||
896 | { | ||
897 | newName = item.Name; | ||
898 | } | ||
899 | |||
892 | 900 | ||
893 | if (remoteClient.AgentId == oldAgentID | 901 | if (remoteClient.AgentId == oldAgentID |
894 | || (LibraryService != null | 902 | || (LibraryService != null |
@@ -916,6 +924,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
916 | } | 924 | } |
917 | } | 925 | } |
918 | } | 926 | } |
927 | else | ||
928 | { | ||
929 | m_log.ErrorFormat( | ||
930 | "[AGENT INVENTORY]: Could not copy item {0} since asset {1} could not be found", | ||
931 | item.Name, item.AssetID); | ||
932 | } | ||
933 | } | ||
919 | 934 | ||
920 | /// <summary> | 935 | /// <summary> |
921 | /// Create a new asset data structure. | 936 | /// Create a new asset data structure. |
@@ -982,31 +997,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
982 | public void CreateNewInventoryItem( | 997 | public void CreateNewInventoryItem( |
983 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, | 998 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, |
984 | string name, string description, uint flags, uint callbackID, | 999 | string name, string description, uint flags, uint callbackID, |
985 | <<<<<<< HEAD | ||
986 | UUID assetID, sbyte assetType, sbyte invType, uint nextOwnerMask, int creationDate) | 1000 | UUID assetID, sbyte assetType, sbyte invType, uint nextOwnerMask, int creationDate) |
987 | { | 1001 | { |
988 | CreateNewInventoryItem( | 1002 | CreateNewInventoryItem( |
989 | remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, assetID, assetType, invType, | 1003 | remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, assetID, assetType, invType, |
990 | (uint)PermissionMask.All | (uint)PermissionMask.Export, (uint)PermissionMask.All | (uint)PermissionMask.Export, 0, nextOwnerMask, 0, | 1004 | (uint)PermissionMask.All | (uint)PermissionMask.Export, (uint)PermissionMask.All | (uint)PermissionMask.Export, 0, nextOwnerMask, 0, |
991 | creationDate, true); | 1005 | creationDate, true); |
992 | ======= | ||
993 | AssetBase asset, sbyte invType, uint nextOwnerMask, int creationDate, UUID transationID) | ||
994 | { | ||
995 | CreateNewInventoryItem( | ||
996 | remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, asset, invType, | ||
997 | (uint)PermissionMask.All | (uint)PermissionMask.Export, (uint)PermissionMask.All | (uint)PermissionMask.Export, 0, nextOwnerMask, 0, creationDate, transationID); | ||
998 | } | ||
999 | |||
1000 | |||
1001 | private void CreateNewInventoryItem( | ||
1002 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, | ||
1003 | string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType, | ||
1004 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate) | ||
1005 | { | ||
1006 | CreateNewInventoryItem(remoteClient, creatorID, creatorData, folderID, | ||
1007 | name, description, flags, callbackID, asset, invType, | ||
1008 | baseMask, currentMask, everyoneMask, nextOwnerMask, groupMask, creationDate, UUID.Zero); | ||
1009 | >>>>>>> avn/ubitvar | ||
1010 | } | 1006 | } |
1011 | 1007 | ||
1012 | /// <summary> | 1008 | /// <summary> |
@@ -1030,14 +1026,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1030 | /// <param name="creationDate">Unix timestamp at which this item was created.</param> | 1026 | /// <param name="creationDate">Unix timestamp at which this item was created.</param> |
1031 | private void CreateNewInventoryItem( | 1027 | private void CreateNewInventoryItem( |
1032 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, | 1028 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, |
1033 | <<<<<<< HEAD | ||
1034 | string name, string description, uint flags, uint callbackID, UUID assetID, sbyte assetType, sbyte invType, | 1029 | string name, string description, uint flags, uint callbackID, UUID assetID, sbyte assetType, sbyte invType, |
1035 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate, | 1030 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate, |
1036 | bool assetUpload) | 1031 | bool assetUpload) |
1037 | ======= | ||
1038 | string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType, | ||
1039 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate,UUID transationID) | ||
1040 | >>>>>>> avn/ubitvar | ||
1041 | { | 1032 | { |
1042 | InventoryItemBase item = new InventoryItemBase(); | 1033 | InventoryItemBase item = new InventoryItemBase(); |
1043 | item.Owner = remoteClient.AgentId; | 1034 | item.Owner = remoteClient.AgentId; |
@@ -1058,17 +1049,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1058 | item.BasePermissions = baseMask; | 1049 | item.BasePermissions = baseMask; |
1059 | item.CreationDate = creationDate; | 1050 | item.CreationDate = creationDate; |
1060 | 1051 | ||
1061 | <<<<<<< HEAD | ||
1062 | if (AddInventoryItem(item, assetUpload)) | ||
1063 | ======= | ||
1064 | // special AnimationSet case | 1052 | // special AnimationSet case |
1065 | if (item.InvType == (int)CustomInventoryType.AnimationSet) | 1053 | if (item.InvType == (int)CustomInventoryType.AnimationSet) |
1066 | AnimationSet.enforceItemPermitions(item,true); | 1054 | AnimationSet.enforceItemPermitions(item,true); |
1067 | 1055 | ||
1068 | if (AddInventoryItem(item)) | 1056 | if (AddInventoryItem(item)) |
1069 | >>>>>>> avn/ubitvar | ||
1070 | { | 1057 | { |
1071 | remoteClient.SendInventoryItemCreateUpdate(item, transationID, callbackID); | 1058 | remoteClient.SendInventoryItemCreateUpdate(item, callbackID); |
1072 | } | 1059 | } |
1073 | else | 1060 | else |
1074 | { | 1061 | { |
@@ -1284,7 +1271,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1284 | agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); | 1271 | agentItem.BasePermissions = taskItem.BasePermissions & (taskItem.NextPermissions | (uint)PermissionMask.Move); |
1285 | if (taskItem.InvType == (int)InventoryType.Object) | 1272 | if (taskItem.InvType == (int)InventoryType.Object) |
1286 | { | 1273 | { |
1287 | <<<<<<< HEAD | ||
1288 | // Bake the new base permissions from folded permissions | 1274 | // Bake the new base permissions from folded permissions |
1289 | // The folded perms are in the lowest 3 bits of the current perms | 1275 | // The folded perms are in the lowest 3 bits of the current perms |
1290 | // We use base permissions here to avoid baking the "Locked" status | 1276 | // We use base permissions here to avoid baking the "Locked" status |
@@ -1296,13 +1282,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1296 | agentItem.BasePermissions = perms | (uint)PermissionMask.Move; | 1282 | agentItem.BasePermissions = perms | (uint)PermissionMask.Move; |
1297 | // Newly given items cannot be "locked" on rez. Make sure by | 1283 | // Newly given items cannot be "locked" on rez. Make sure by |
1298 | // setting current equal to base. | 1284 | // setting current equal to base. |
1299 | ======= | ||
1300 | uint perms = taskItem.BasePermissions & taskItem.NextPermissions; | ||
1301 | PermissionsUtil.ApplyFoldedPermissions(taskItem.CurrentPermissions, ref perms); | ||
1302 | // agentItem.BasePermissions = perms | (uint)PermissionMask.Move; | ||
1303 | // agentItem.CurrentPermissions = agentItem.BasePermissions; | ||
1304 | agentItem.BasePermissions = perms | (uint)PermissionMask.Move; | ||
1305 | >>>>>>> avn/ubitvar | ||
1306 | } | 1285 | } |
1307 | 1286 | ||
1308 | agentItem.CurrentPermissions = agentItem.BasePermissions; | 1287 | agentItem.CurrentPermissions = agentItem.BasePermissions; |
@@ -1577,12 +1556,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1577 | 1556 | ||
1578 | public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items) | 1557 | public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items) |
1579 | { | 1558 | { |
1580 | <<<<<<< HEAD | 1559 | |
1581 | ScenePresence avatar; | 1560 | ScenePresence avatar; |
1582 | IClientAPI remoteClient = null; | 1561 | IClientAPI remoteClient = null; |
1583 | if (TryGetScenePresence(destID, out avatar)) | 1562 | if (TryGetScenePresence(destID, out avatar)) |
1584 | remoteClient = avatar.ControllingClient; | 1563 | remoteClient = avatar.ControllingClient; |
1585 | ======= | 1564 | // ???? |
1586 | SceneObjectPart destPart = GetSceneObjectPart(destID); | 1565 | SceneObjectPart destPart = GetSceneObjectPart(destID); |
1587 | if (destPart != null) // Move into a prim | 1566 | if (destPart != null) // Move into a prim |
1588 | { | 1567 | { |
@@ -1590,7 +1569,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1590 | MoveTaskInventoryItem(destID, host, itemID); | 1569 | MoveTaskInventoryItem(destID, host, itemID); |
1591 | return destID; // Prim folder ID == prim ID | 1570 | return destID; // Prim folder ID == prim ID |
1592 | } | 1571 | } |
1593 | >>>>>>> avn/ubitvar | 1572 | // /???? |
1594 | 1573 | ||
1595 | InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID); | 1574 | InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID); |
1596 | 1575 | ||
@@ -2156,14 +2135,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
2156 | List<uint> deleteIDs = new List<uint>(); | 2135 | List<uint> deleteIDs = new List<uint>(); |
2157 | List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>(); | 2136 | List<SceneObjectGroup> deleteGroups = new List<SceneObjectGroup>(); |
2158 | List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>(); | 2137 | List<SceneObjectGroup> takeGroups = new List<SceneObjectGroup>(); |
2138 | |||
2139 | // Start with true for both, then remove the flags if objects | ||
2140 | // that we can't derez are part of the selection | ||
2141 | bool permissionToTake = true; | ||
2142 | bool permissionToTakeCopy = true; | ||
2143 | bool permissionToDelete = true; | ||
2159 | 2144 | ||
2160 | foreach (uint localID in localIDs) | 2145 | foreach (uint localID in localIDs) |
2161 | { | 2146 | { |
2162 | // Start with true for both, then remove the flags if objects | 2147 | |
2163 | // that we can't derez are part of the selection | ||
2164 | bool permissionToTake = true; | ||
2165 | bool permissionToTakeCopy = true; | ||
2166 | bool permissionToDelete = true; | ||
2167 | 2148 | ||
2168 | // Invalid id | 2149 | // Invalid id |
2169 | SceneObjectPart part = GetSceneObjectPart(localID); | 2150 | SceneObjectPart part = GetSceneObjectPart(localID); |
@@ -2287,27 +2268,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
2287 | } | 2268 | } |
2288 | } | 2269 | } |
2289 | 2270 | ||
2290 | <<<<<<< HEAD | 2271 | SendKillObject(deleteIDs); |
2291 | // OK, we're done with permissions. Let's check if any part of the code prevents the objects from being deleted | ||
2292 | bool canDelete = EventManager.TriggerDeRezRequested(remoteClient, deleteGroups, action); | ||
2293 | |||
2294 | if (permissionToTake && (action != DeRezAction.Delete || this.m_useTrashOnDelete)) | ||
2295 | ======= | ||
2296 | SendKillObject(deleteIDs); | ||
2297 | 2272 | ||
2298 | if (deleteGroups.Count > 0) | 2273 | if (deleteGroups.Count > 0) |
2299 | >>>>>>> avn/ubitvar | ||
2300 | { | 2274 | { |
2301 | foreach (SceneObjectGroup g in deleteGroups) | 2275 | foreach (SceneObjectGroup g in deleteGroups) |
2302 | deleteIDs.Remove(g.LocalId); | 2276 | deleteIDs.Remove(g.LocalId); |
2303 | 2277 | ||
2304 | m_asyncSceneObjectDeleter.DeleteToInventory( | 2278 | m_asyncSceneObjectDeleter.DeleteToInventory( |
2305 | action, destinationID, deleteGroups, remoteClient, | 2279 | action, destinationID, deleteGroups, remoteClient, |
2306 | <<<<<<< HEAD | ||
2307 | permissionToDelete && canDelete); | ||
2308 | } | ||
2309 | else if (permissionToDelete && canDelete) | ||
2310 | ======= | ||
2311 | true); | 2280 | true); |
2312 | } | 2281 | } |
2313 | if (takeGroups.Count > 0) | 2282 | if (takeGroups.Count > 0) |
@@ -2317,7 +2286,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2317 | false); | 2286 | false); |
2318 | } | 2287 | } |
2319 | if (deleteIDs.Count > 0) | 2288 | if (deleteIDs.Count > 0) |
2320 | >>>>>>> avn/ubitvar | ||
2321 | { | 2289 | { |
2322 | foreach (SceneObjectGroup g in deleteGroups) | 2290 | foreach (SceneObjectGroup g in deleteGroups) |
2323 | DeleteSceneObject(g, true); | 2291 | DeleteSceneObject(g, true); |
@@ -2361,7 +2329,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2361 | item.AssetType = asset.Type; | 2329 | item.AssetType = asset.Type; |
2362 | item.InvType = (int)InventoryType.Object; | 2330 | item.InvType = (int)InventoryType.Object; |
2363 | 2331 | ||
2364 | InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.Object); | 2332 | InventoryFolderBase folder = InventoryService.GetFolderForType(remoteClient.AgentId, FolderType.Object); |
2365 | if (folder != null) | 2333 | if (folder != null) |
2366 | item.Folder = folder.ID; | 2334 | item.Folder = folder.ID; |
2367 | else // oopsies | 2335 | else // oopsies |
@@ -2435,34 +2403,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2435 | 2403 | ||
2436 | string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(assetData)); | 2404 | string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(assetData)); |
2437 | 2405 | ||
2438 | <<<<<<< HEAD | ||
2439 | try | 2406 | try |
2440 | ======= | ||
2441 | if (e == null || attachment) // Single | ||
2442 | { | ||
2443 | SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(xmlData); | ||
2444 | /* | ||
2445 | if (!attachment) | ||
2446 | { | ||
2447 | g.RootPart.AttachPoint = g.RootPart.Shape.State; | ||
2448 | g.RootPart.AttachedPos = g.AbsolutePosition; | ||
2449 | g.RootPart.AttachRotation = g.GroupRotation; | ||
2450 | if (g.RootPart.Shape.PCode != (byte)PCode.NewTree && | ||
2451 | g.RootPart.Shape.PCode != (byte)PCode.Tree) | ||
2452 | g.RootPart.Shape.State = 0; | ||
2453 | } | ||
2454 | */ | ||
2455 | objlist.Add(g); | ||
2456 | veclist.Add(new Vector3(0, 0, 0)); | ||
2457 | bbox = g.GetAxisAlignedBoundingBox(out offsetHeight); | ||
2458 | return true; | ||
2459 | } | ||
2460 | else | ||
2461 | >>>>>>> avn/ubitvar | ||
2462 | { | 2407 | { |
2463 | using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null)) | 2408 | using (XmlTextReader wrappedReader = new XmlTextReader(xmlData, XmlNodeType.Element, null)) |
2464 | { | 2409 | { |
2465 | <<<<<<< HEAD | ||
2466 | using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment })) | 2410 | using (XmlReader reader = XmlReader.Create(wrappedReader, new XmlReaderSettings() { IgnoreWhitespace = true, ConformanceLevel = ConformanceLevel.Fragment })) |
2467 | { | 2411 | { |
2468 | reader.Read(); | 2412 | reader.Read(); |
@@ -2481,7 +2425,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2481 | Util.LogFailedXML("[AGENT INVENTORY]:", xmlData); | 2425 | Util.LogFailedXML("[AGENT INVENTORY]:", xmlData); |
2482 | g = null; | 2426 | g = null; |
2483 | } | 2427 | } |
2484 | 2428 | ||
2485 | if (g != null) | 2429 | if (g != null) |
2486 | { | 2430 | { |
2487 | objlist.Add(g); | 2431 | objlist.Add(g); |
@@ -2492,7 +2436,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2492 | return true; | 2436 | return true; |
2493 | } | 2437 | } |
2494 | else | 2438 | else |
2495 | { | 2439 | { |
2496 | XmlDocument doc = new XmlDocument(); | 2440 | XmlDocument doc = new XmlDocument(); |
2497 | doc.LoadXml(xmlData); | 2441 | doc.LoadXml(xmlData); |
2498 | XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject"); | 2442 | XmlElement e = (XmlElement)doc.SelectSingleNode("/CoalescedObject"); |
@@ -2526,28 +2470,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2526 | return false; | 2470 | return false; |
2527 | } | 2471 | } |
2528 | } | 2472 | } |
2529 | ======= | ||
2530 | SceneObjectGroup g = SceneObjectSerializer.FromOriginalXmlFormat(n.OuterXml); | ||
2531 | /* | ||
2532 | g.RootPart.AttachPoint = g.RootPart.Shape.State; | ||
2533 | g.RootPart.AttachedPos = g.AbsolutePosition; | ||
2534 | g.RootPart.AttachRotation = g.GroupRotation; | ||
2535 | if (g.RootPart.Shape.PCode != (byte)PCode.NewTree && | ||
2536 | g.RootPart.Shape.PCode != (byte)PCode.Tree) | ||
2537 | g.RootPart.Shape.State = 0; | ||
2538 | */ | ||
2539 | objlist.Add(g); | ||
2540 | |||
2541 | XmlElement el = (XmlElement)n; | ||
2542 | string rawX = el.GetAttribute("offsetx"); | ||
2543 | string rawY = el.GetAttribute("offsety"); | ||
2544 | string rawZ = el.GetAttribute("offsetz"); | ||
2545 | |||
2546 | float x = Convert.ToSingle(rawX); | ||
2547 | float y = Convert.ToSingle(rawY); | ||
2548 | float z = Convert.ToSingle(rawZ); | ||
2549 | veclist.Add(new Vector3(x, y, z)); | ||
2550 | >>>>>>> avn/ubitvar | ||
2551 | } | 2473 | } |
2552 | } | 2474 | } |
2553 | catch (Exception e) | 2475 | catch (Exception e) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 3d9c028..20767e5 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -551,7 +551,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
551 | 551 | ||
552 | void SendInventoryAsync(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder) | 552 | void SendInventoryAsync(IClientAPI remoteClient, UUID folderID, UUID ownerID, bool fetchFolders, bool fetchItems, int sortOrder) |
553 | { | 553 | { |
554 | <<<<<<< HEAD | ||
555 | try | 554 | try |
556 | { | 555 | { |
557 | SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems); | 556 | SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems); |
@@ -562,10 +561,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
562 | string.Format( | 561 | string.Format( |
563 | "[AGENT INVENTORY]: Error in SendInventoryAsync() for {0} with folder ID {1}. Exception ", e)); | 562 | "[AGENT INVENTORY]: Error in SendInventoryAsync() for {0} with folder ID {1}. Exception ", e)); |
564 | } | 563 | } |
565 | ======= | ||
566 | Thread.Sleep(20); | 564 | Thread.Sleep(20); |
567 | SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems); | ||
568 | >>>>>>> avn/ubitvar | ||
569 | } | 565 | } |
570 | 566 | ||
571 | void SendInventoryComplete(IAsyncResult iar) | 567 | void SendInventoryComplete(IAsyncResult iar) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index deb8d39..c1da7fa 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -61,8 +61,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
61 | { | 61 | { |
62 | private const long DEFAULT_MIN_TIME_FOR_PERSISTENCE = 60L; | 62 | private const long DEFAULT_MIN_TIME_FOR_PERSISTENCE = 60L; |
63 | private const long DEFAULT_MAX_TIME_FOR_PERSISTENCE = 600L; | 63 | private const long DEFAULT_MAX_TIME_FOR_PERSISTENCE = 600L; |
64 | 64 | ||
65 | public const int m_defaultNumberFramesStored = 10; | ||
66 | 65 | ||
67 | public delegate void SynchronizeSceneHandler(Scene scene); | 66 | public delegate void SynchronizeSceneHandler(Scene scene); |
68 | 67 | ||
@@ -105,15 +104,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
105 | /// <summary> | 104 | /// <summary> |
106 | /// If false then physical objects are disabled, though collisions will continue as normal. | 105 | /// If false then physical objects are disabled, though collisions will continue as normal. |
107 | /// </summary> | 106 | /// </summary> |
108 | <<<<<<< HEAD | 107 | |
109 | public bool PhysicsEnabled | ||
110 | { | ||
111 | get | ||
112 | ======= | ||
113 | public bool PhysicsEnabled | 108 | public bool PhysicsEnabled |
114 | { | 109 | { |
115 | get | 110 | get |
116 | >>>>>>> avn/ubitvar | ||
117 | { | 111 | { |
118 | return m_physicsEnabled; | 112 | return m_physicsEnabled; |
119 | } | 113 | } |
@@ -222,7 +216,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
222 | /// <summary> | 216 | /// <summary> |
223 | /// Maximum value of the size of a physical prim in each axis | 217 | /// Maximum value of the size of a physical prim in each axis |
224 | /// </summary> | 218 | /// </summary> |
225 | public float m_maxPhys = 64; | 219 | public float m_maxPhys = 10; |
226 | 220 | ||
227 | /// <summary> | 221 | /// <summary> |
228 | /// Max prims an object will hold | 222 | /// Max prims an object will hold |
@@ -234,16 +228,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
234 | public bool m_allowScriptCrossings = true; | 228 | public bool m_allowScriptCrossings = true; |
235 | 229 | ||
236 | /// <summary> | 230 | /// <summary> |
237 | <<<<<<< HEAD | 231 | |
238 | /// Can avatars cross from and to this region? | 232 | /// Can avatars cross from and to this region? |
239 | /// </summary> | 233 | /// </summary> |
240 | public bool AllowAvatarCrossing { get; set; } | 234 | public bool AllowAvatarCrossing { get; set; } |
241 | ======= | 235 | |
242 | /// Max prims an Physical object will hold | 236 | /// Max prims an Physical object will hold |
243 | /// </summary> | 237 | /// </summary> |
244 | /// | 238 | /// |
245 | public int m_linksetPhysCapacity = 0; | 239 | public int m_linksetPhysCapacity = 0; |
246 | >>>>>>> avn/ubitvar | ||
247 | 240 | ||
248 | public bool m_useFlySlow; | 241 | public bool m_useFlySlow; |
249 | public bool m_useTrashOnDelete = true; | 242 | public bool m_useTrashOnDelete = true; |
@@ -278,7 +271,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
278 | /// </summary> | 271 | /// </summary> |
279 | public int ChildTerseUpdatePeriod { get; set; } | 272 | public int ChildTerseUpdatePeriod { get; set; } |
280 | 273 | ||
281 | protected float m_defaultDrawDistance = 255.0f; | 274 | protected float m_defaultDrawDistance = 255f; |
282 | public float DefaultDrawDistance | 275 | public float DefaultDrawDistance |
283 | { | 276 | { |
284 | // get { return m_defaultDrawDistance; } | 277 | // get { return m_defaultDrawDistance; } |
@@ -361,17 +354,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
361 | private Dictionary<string, string> m_extraSettings; | 354 | private Dictionary<string, string> m_extraSettings; |
362 | 355 | ||
363 | /// <summary> | 356 | /// <summary> |
364 | /// If true then the next time the scene loop is activated, updates will be performed by firing of a timer | ||
365 | /// rather than on a single thread that sleeps. | ||
366 | /// </summary> | ||
367 | public bool UpdateOnTimer { get; set; } | ||
368 | |||
369 | /// <summary> | ||
370 | /// Only used if we are updating scene on a timer rather than sleeping a thread. | ||
371 | /// </summary> | ||
372 | private Timer m_sceneUpdateTimer; | ||
373 | |||
374 | /// <summary> | ||
375 | /// Current scene frame number | 357 | /// Current scene frame number |
376 | /// </summary> | 358 | /// </summary> |
377 | public uint Frame | 359 | public uint Frame |
@@ -386,23 +368,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
386 | public uint MaintenanceRun { get; private set; } | 368 | public uint MaintenanceRun { get; private set; } |
387 | 369 | ||
388 | /// <summary> | 370 | /// <summary> |
389 | /// The minimum length of time in milliseconds that will be taken for a scene frame. If the frame takes less time then we | 371 | /// The minimum length of time in seconds that will be taken for a scene frame. If the frame takes less time then we |
390 | /// will sleep for the remaining period. | 372 | /// will sleep for the remaining period. |
391 | /// </summary> | 373 | /// </summary> |
392 | /// <remarks> | 374 | /// <remarks> |
393 | /// One can tweak this number to experiment. One current effect of reducing it is to make avatar animations | 375 | /// One can tweak this number to experiment. One current effect of reducing it is to make avatar animations |
394 | /// occur too quickly (viewer 1) or with even more slide (viewer 2). | 376 | /// occur too quickly (viewer 1) or with even more slide (viewer 2). |
395 | /// </remarks> | 377 | /// </remarks> |
396 | public int MinFrameTicks | 378 | public float MinFrameTime { get; private set; } |
397 | { | ||
398 | get { return m_minFrameTicks; } | ||
399 | private set | ||
400 | { | ||
401 | m_minFrameTicks = value; | ||
402 | MinFrameSeconds = (float)m_minFrameTicks / 1000; | ||
403 | } | ||
404 | } | ||
405 | private int m_minFrameTicks; | ||
406 | 379 | ||
407 | /// <summary> | 380 | /// <summary> |
408 | /// The minimum length of time in seconds that will be taken for a scene frame. | 381 | /// The minimum length of time in seconds that will be taken for a scene frame. |
@@ -410,17 +383,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
410 | /// <remarks> | 383 | /// <remarks> |
411 | /// Always derived from MinFrameTicks. | 384 | /// Always derived from MinFrameTicks. |
412 | /// </remarks> | 385 | /// </remarks> |
413 | public float MinFrameSeconds { get; private set; } | 386 | public float MinMaintenanceTime { get; private set; } |
414 | |||
415 | /// <summary> | ||
416 | /// The minimum length of time in milliseconds that will be taken for a scene frame. If the frame takes less time then we | ||
417 | /// will sleep for the remaining period. | ||
418 | /// </summary> | ||
419 | /// <remarks> | ||
420 | /// One can tweak this number to experiment. One current effect of reducing it is to make avatar animations | ||
421 | /// occur too quickly (viewer 1) or with even more slide (viewer 2). | ||
422 | /// </remarks> | ||
423 | public int MinMaintenanceTicks { get; set; } | ||
424 | 387 | ||
425 | private int m_update_physics = 1; | 388 | private int m_update_physics = 1; |
426 | private int m_update_entitymovement = 1; | 389 | private int m_update_entitymovement = 1; |
@@ -428,13 +391,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
428 | private int m_update_presences = 1; // Update scene presence movements | 391 | private int m_update_presences = 1; // Update scene presence movements |
429 | private int m_update_events = 1; | 392 | private int m_update_events = 1; |
430 | private int m_update_backup = 200; | 393 | private int m_update_backup = 200; |
431 | <<<<<<< HEAD | 394 | |
432 | private int m_update_terrain = 50; | ||
433 | // private int m_update_land = 1; | ||
434 | ======= | ||
435 | private int m_update_terrain = 1000; | 395 | private int m_update_terrain = 1000; |
436 | private int m_update_land = 10; | 396 | private int m_update_land = 10; |
437 | >>>>>>> avn/ubitvar | 397 | |
438 | private int m_update_coarse_locations = 50; | 398 | private int m_update_coarse_locations = 50; |
439 | private int m_update_temp_cleaning = 180; | 399 | private int m_update_temp_cleaning = 180; |
440 | 400 | ||
@@ -559,13 +519,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
559 | } | 519 | } |
560 | private volatile bool m_active; | 520 | private volatile bool m_active; |
561 | 521 | ||
562 | <<<<<<< HEAD | ||
563 | /// <summary> | 522 | /// <summary> |
564 | /// If true then updates are running. This may be true for a short period after a scene is de-activated. | 523 | /// If true then updates are running. This may be true for a short period after a scene is de-activated. |
565 | /// </summary> | 524 | /// </summary> |
566 | public bool IsRunning { get { return m_isRunning; } } | 525 | public bool IsRunning { get { return m_isRunning; } } |
567 | private volatile bool m_isRunning; | 526 | private volatile bool m_isRunning; |
568 | ======= | 527 | |
569 | // private int m_lastUpdate; | 528 | // private int m_lastUpdate; |
570 | private bool m_firstHeartbeat = true; | 529 | private bool m_firstHeartbeat = true; |
571 | 530 | ||
@@ -574,7 +533,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
574 | private double m_reprioritizationInterval = 5000.0; | 533 | private double m_reprioritizationInterval = 5000.0; |
575 | private double m_rootReprioritizationDistance = 10.0; | 534 | private double m_rootReprioritizationDistance = 10.0; |
576 | private double m_childReprioritizationDistance = 20.0; | 535 | private double m_childReprioritizationDistance = 20.0; |
577 | >>>>>>> avn/ubitvar | 536 | |
578 | 537 | ||
579 | private Timer m_mapGenerationTimer = new Timer(); | 538 | private Timer m_mapGenerationTimer = new Timer(); |
580 | private bool m_generateMaptiles; | 539 | private bool m_generateMaptiles; |
@@ -913,8 +872,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
913 | : this(regInfo, physicsScene) | 872 | : this(regInfo, physicsScene) |
914 | { | 873 | { |
915 | m_config = config; | 874 | m_config = config; |
916 | MinFrameTicks = 89; | 875 | MinFrameTime = 0.089f; |
917 | MinMaintenanceTicks = 1000; | 876 | MinMaintenanceTime = 1; |
918 | SeeIntoRegion = true; | 877 | SeeIntoRegion = true; |
919 | 878 | ||
920 | Random random = new Random(); | 879 | Random random = new Random(); |
@@ -924,12 +883,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
924 | m_sceneGridService = sceneGridService; | 883 | m_sceneGridService = sceneGridService; |
925 | m_SimulationDataService = simDataService; | 884 | m_SimulationDataService = simDataService; |
926 | m_EstateDataService = estateDataService; | 885 | m_EstateDataService = estateDataService; |
927 | <<<<<<< HEAD | 886 | |
928 | ======= | ||
929 | m_regionHandle = RegionInfo.RegionHandle; | ||
930 | m_lastIncoming = 0; | 887 | m_lastIncoming = 0; |
931 | m_lastOutgoing = 0; | 888 | m_lastOutgoing = 0; |
932 | >>>>>>> avn/ubitvar | ||
933 | 889 | ||
934 | m_asyncSceneObjectDeleter = new AsyncSceneObjectGroupDeleter(this); | 890 | m_asyncSceneObjectDeleter = new AsyncSceneObjectGroupDeleter(this); |
935 | m_asyncSceneObjectDeleter.Enabled = true; | 891 | m_asyncSceneObjectDeleter.Enabled = true; |
@@ -988,8 +944,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
988 | EventManager.OnLandObjectRemoved += | 944 | EventManager.OnLandObjectRemoved += |
989 | new EventManager.LandObjectRemoved(simDataService.RemoveLandObject); | 945 | new EventManager.LandObjectRemoved(simDataService.RemoveLandObject); |
990 | 946 | ||
991 | <<<<<<< HEAD | ||
992 | ======= | ||
993 | m_sceneGraph = new SceneGraph(this); | 947 | m_sceneGraph = new SceneGraph(this); |
994 | m_sceneGraph.PhysicsScene = physicsScene; | 948 | m_sceneGraph.PhysicsScene = physicsScene; |
995 | 949 | ||
@@ -1006,7 +960,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1006 | RestartNow(); | 960 | RestartNow(); |
1007 | }; | 961 | }; |
1008 | 962 | ||
1009 | >>>>>>> avn/ubitvar | ||
1010 | RegisterDefaultSceneEvents(); | 963 | RegisterDefaultSceneEvents(); |
1011 | 964 | ||
1012 | // XXX: Don't set the public property since we don't want to activate here. This needs to be handled | 965 | // XXX: Don't set the public property since we don't want to activate here. This needs to be handled |
@@ -1167,8 +1120,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1167 | } | 1120 | } |
1168 | } | 1121 | } |
1169 | 1122 | ||
1170 | if (startupConfig.Contains("MinFrameTime")) | 1123 | MinFrameTime = startupConfig.GetFloat( "MinFrameTime", MinFrameTime); |
1171 | MinFrameTicks = (int)(startupConfig.GetFloat("MinFrameTime") * 1000); | ||
1172 | 1124 | ||
1173 | m_update_backup = startupConfig.GetInt("UpdateStorageEveryNFrames", m_update_backup); | 1125 | m_update_backup = startupConfig.GetInt("UpdateStorageEveryNFrames", m_update_backup); |
1174 | m_update_coarse_locations = startupConfig.GetInt("UpdateCoarseLocationsEveryNFrames", m_update_coarse_locations); | 1126 | m_update_coarse_locations = startupConfig.GetInt("UpdateCoarseLocationsEveryNFrames", m_update_coarse_locations); |
@@ -1246,43 +1198,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
1246 | 1198 | ||
1247 | #endregion Interest Management | 1199 | #endregion Interest Management |
1248 | 1200 | ||
1249 | // The timer used by the Stopwatch class depends on the system hardware and operating system; inform | ||
1250 | // if the timer is based on a high-resolution performance counter or based on the system timer; | ||
1251 | // the performance counter will provide a more precise time than the system timer | ||
1252 | if (Stopwatch.IsHighResolution) | ||
1253 | m_log.InfoFormat("[SCENE]: Using high-resolution performance counter for statistics."); | ||
1254 | else | ||
1255 | m_log.InfoFormat("[SCENE]: Using system timer for statistics."); | ||
1256 | |||
1257 | // Acquire the statistics section of the OpenSim.ini file located | ||
1258 | // in the bin directory | ||
1259 | IConfig statisticsConfig = m_config.Configs["Statistics"]; | ||
1260 | 1201 | ||
1261 | // Confirm that the statistics section existed in the configuration | 1202 | StatsReporter = new SimStatsReporter(this); |
1262 | // file | ||
1263 | if (statisticsConfig != null) | ||
1264 | { | ||
1265 | // Create the StatsReporter using the number of frames to store | ||
1266 | // for the frame time statistics, or 10 frames if the config | ||
1267 | // file doesn't contain a value | ||
1268 | StatsReporter = new SimStatsReporter(this, | ||
1269 | statisticsConfig.GetInt("NumberOfFrames", | ||
1270 | m_defaultNumberFramesStored)); | ||
1271 | } | ||
1272 | else | ||
1273 | { | ||
1274 | // Create a StatsReporter with the current scene and a default | ||
1275 | // 10 frames stored for the frame time statistics | ||
1276 | StatsReporter = new SimStatsReporter(this); | ||
1277 | } | ||
1278 | 1203 | ||
1279 | StatsReporter.OnSendStatsResult += SendSimStatsPackets; | 1204 | StatsReporter.OnSendStatsResult += SendSimStatsPackets; |
1280 | StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats; | 1205 | StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats; |
1281 | 1206 | ||
1282 | <<<<<<< HEAD | ||
1283 | ======= | ||
1284 | MainConsole.Instance.Commands.AddCommand("scene", false, "gc collect", "gc collect", "gc collect", "Cause the garbage collector to make a single pass", HandleGcCollect); | 1207 | MainConsole.Instance.Commands.AddCommand("scene", false, "gc collect", "gc collect", "gc collect", "Cause the garbage collector to make a single pass", HandleGcCollect); |
1285 | >>>>>>> avn/ubitvar | ||
1286 | } | 1208 | } |
1287 | 1209 | ||
1288 | public Scene(RegionInfo regInfo, PhysicsScene physicsScene) | 1210 | public Scene(RegionInfo regInfo, PhysicsScene physicsScene) |
@@ -1314,7 +1236,28 @@ namespace OpenSim.Region.Framework.Scenes | |||
1314 | PeriodicBackup = true; | 1236 | PeriodicBackup = true; |
1315 | UseBackup = true; | 1237 | UseBackup = true; |
1316 | 1238 | ||
1317 | <<<<<<< HEAD | 1239 | |
1240 | |||
1241 | |||
1242 | |||
1243 | |||
1244 | |||
1245 | |||
1246 | |||
1247 | |||
1248 | |||
1249 | |||
1250 | |||
1251 | |||
1252 | |||
1253 | |||
1254 | |||
1255 | |||
1256 | |||
1257 | |||
1258 | |||
1259 | |||
1260 | |||
1318 | IsReprioritizationEnabled = true; | 1261 | IsReprioritizationEnabled = true; |
1319 | UpdatePrioritizationScheme = UpdatePrioritizationSchemes.Time; | 1262 | UpdatePrioritizationScheme = UpdatePrioritizationSchemes.Time; |
1320 | ReprioritizationInterval = 5000; | 1263 | ReprioritizationInterval = 5000; |
@@ -1325,8 +1268,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1325 | RootReprioritizationDistance = 10.0; | 1268 | RootReprioritizationDistance = 10.0; |
1326 | ChildReprioritizationDistance = 20.0; | 1269 | ChildReprioritizationDistance = 20.0; |
1327 | 1270 | ||
1328 | ======= | ||
1329 | >>>>>>> avn/ubitvar | ||
1330 | m_eventManager = new EventManager(); | 1271 | m_eventManager = new EventManager(); |
1331 | 1272 | ||
1332 | m_permissions = new ScenePermissions(this); | 1273 | m_permissions = new ScenePermissions(this); |
@@ -1376,24 +1317,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1376 | { | 1317 | { |
1377 | if (RegionInfo.RegionHandle != otherRegion.RegionHandle) | 1318 | if (RegionInfo.RegionHandle != otherRegion.RegionHandle) |
1378 | { | 1319 | { |
1379 | <<<<<<< HEAD | 1320 | |
1380 | //// If these are cast to INT because long + negative values + abs returns invalid data | ||
1381 | //int resultX = Math.Abs((int)xcell - (int)RegionInfo.RegionLocX); | ||
1382 | //int resultY = Math.Abs((int)ycell - (int)RegionInfo.RegionLocY); | ||
1383 | //if (resultX <= 1 && resultY <= 1) | ||
1384 | float dist = (float)Math.Max(DefaultDrawDistance, | ||
1385 | (float)Math.Max(RegionInfo.RegionSizeX, RegionInfo.RegionSizeY)); | ||
1386 | uint newRegionX, newRegionY, thisRegionX, thisRegionY; | ||
1387 | Util.RegionHandleToRegionLoc(otherRegion.RegionHandle, out newRegionX, out newRegionY); | ||
1388 | Util.RegionHandleToRegionLoc(RegionInfo.RegionHandle, out thisRegionX, out thisRegionY); | ||
1389 | |||
1390 | //m_log.InfoFormat("[SCENE]: (on region {0}): Region {1} up in coords {2}-{3}", | ||
1391 | // RegionInfo.RegionName, otherRegion.RegionName, newRegionX, newRegionY); | ||
1392 | |||
1393 | if (!Util.IsOutsideView(dist, thisRegionX, newRegionX, thisRegionY, newRegionY)) | ||
1394 | ======= | ||
1395 | if (isNeighborRegion(otherRegion)) | 1321 | if (isNeighborRegion(otherRegion)) |
1396 | >>>>>>> avn/ubitvar | ||
1397 | { | 1322 | { |
1398 | // Let the grid service module know, so this can be cached | 1323 | // Let the grid service module know, so this can be cached |
1399 | m_eventManager.TriggerOnRegionUp(otherRegion); | 1324 | m_eventManager.TriggerOnRegionUp(otherRegion); |
@@ -1693,45 +1618,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1693 | 1618 | ||
1694 | Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true; | 1619 | Watchdog.GetCurrentThreadInfo().AlarmIfTimeout = true; |
1695 | m_lastFrameTick = Util.EnvironmentTickCount(); | 1620 | m_lastFrameTick = Util.EnvironmentTickCount(); |
1696 | 1621 | Update(-1); | |
1697 | if (UpdateOnTimer) | 1622 | } |
1698 | { | ||
1699 | m_sceneUpdateTimer = new Timer(MinFrameTicks); | ||
1700 | m_sceneUpdateTimer.AutoReset = true; | ||
1701 | m_sceneUpdateTimer.Elapsed += Update; | ||
1702 | m_sceneUpdateTimer.Start(); | ||
1703 | } | ||
1704 | else | ||
1705 | { | ||
1706 | Thread.CurrentThread.Priority = ThreadPriority.Highest; | ||
1707 | Update(-1); | ||
1708 | Watchdog.RemoveThread(); | ||
1709 | m_isRunning = false; | ||
1710 | } | ||
1711 | } | ||
1712 | |||
1713 | private volatile bool m_isTimerUpdateRunning; | ||
1714 | |||
1715 | private void Update(object sender, ElapsedEventArgs e) | ||
1716 | { | ||
1717 | if (m_isTimerUpdateRunning) | ||
1718 | return; | ||
1719 | |||
1720 | m_isTimerUpdateRunning = true; | ||
1721 | |||
1722 | // If the last frame did not complete on time, then immediately start the next update on the same thread | ||
1723 | // and ignore further timed updates until we have a frame that had spare time. | ||
1724 | while (!Update(1) && Active) { } | ||
1725 | |||
1726 | if (!Active || m_shuttingDown) | ||
1727 | { | ||
1728 | m_sceneUpdateTimer.Stop(); | ||
1729 | m_sceneUpdateTimer = null; | ||
1730 | m_isRunning = false; | ||
1731 | } | ||
1732 | |||
1733 | m_isTimerUpdateRunning = false; | ||
1734 | } | ||
1735 | 1623 | ||
1736 | private void Maintenance() | 1624 | private void Maintenance() |
1737 | { | 1625 | { |
@@ -1800,24 +1688,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
1800 | previousMaintenanceTick = m_lastMaintenanceTick; | 1688 | previousMaintenanceTick = m_lastMaintenanceTick; |
1801 | m_lastMaintenanceTick = Util.EnvironmentTickCount(); | 1689 | m_lastMaintenanceTick = Util.EnvironmentTickCount(); |
1802 | runtc = Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, runtc); | 1690 | runtc = Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, runtc); |
1803 | runtc = MinMaintenanceTicks - runtc; | 1691 | runtc = (int)(MinMaintenanceTime * 1000) - runtc; |
1804 | 1692 | ||
1805 | if (runtc > 0) | 1693 | if (runtc > 0) |
1806 | m_maintenanceWaitEvent.WaitOne(runtc); | 1694 | m_maintenanceWaitEvent.WaitOne(runtc); |
1807 | 1695 | ||
1808 | // Optionally warn if a frame takes double the amount of time that it should. | 1696 | // Optionally warn if a frame takes double the amount of time that it should. |
1809 | if (DebugUpdates | 1697 | if (DebugUpdates |
1810 | && Util.EnvironmentTickCountSubtract( | 1698 | && Util.EnvironmentTickCountSubtract( |
1811 | m_lastMaintenanceTick, previousMaintenanceTick) > MinMaintenanceTicks * 2) | 1699 | m_lastMaintenanceTick, previousMaintenanceTick) > (int)(MinMaintenanceTime * 1000 * 2)) |
1812 | m_log.WarnFormat( | 1700 | m_log.WarnFormat( |
1813 | "[SCENE]: Maintenance took {0} ms (desired max {1} ms) in {2}", | 1701 | "[SCENE]: Maintenance took {0} ms (desired max {1} ms) in {2}", |
1814 | Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, previousMaintenanceTick), | 1702 | Util.EnvironmentTickCountSubtract(m_lastMaintenanceTick, previousMaintenanceTick), |
1815 | MinMaintenanceTicks, | 1703 | MinMaintenanceTime * 1000, |
1816 | RegionInfo.RegionName); | 1704 | RegionInfo.RegionName); |
1817 | } | 1705 | } |
1818 | } | 1706 | } |
1819 | 1707 | ||
1820 | public override bool Update(int frames) | 1708 | public override void Update(int frames) |
1821 | { | 1709 | { |
1822 | long? endFrame = null; | 1710 | long? endFrame = null; |
1823 | 1711 | ||
@@ -1825,30 +1713,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1825 | endFrame = Frame + frames; | 1713 | endFrame = Frame + frames; |
1826 | 1714 | ||
1827 | float physicsFPS = 0f; | 1715 | float physicsFPS = 0f; |
1828 | <<<<<<< HEAD | 1716 | |
1829 | int previousFrameTick, tmpMS; | ||
1830 | |||
1831 | // These variables will be used to save the precise frame time using the | ||
1832 | // Stopwatch class of Microsoft SDK; the times are recorded at the start | ||
1833 | // and end of a particular section of code, and then used to calculate | ||
1834 | // the frame times, which are the sums of the sections for each given name | ||
1835 | double preciseTotalFrameTime = 0.0; | ||
1836 | double preciseSimFrameTime = 0.0; | ||
1837 | double precisePhysicsFrameTime = 0.0; | ||
1838 | Stopwatch totalFrameStopwatch = new Stopwatch(); | ||
1839 | Stopwatch simFrameStopwatch = new Stopwatch(); | ||
1840 | Stopwatch physicsFrameStopwatch = new Stopwatch(); | ||
1841 | |||
1842 | // Begin the stopwatch to keep track of the time that the frame | ||
1843 | // started running to determine how long the frame took to complete | ||
1844 | totalFrameStopwatch.Start(); | ||
1845 | ======= | ||
1846 | int tmpMS; | 1717 | int tmpMS; |
1847 | int previousFrameTick; | 1718 | int previousFrameTick; |
1848 | int maintc; | 1719 | int maintc; |
1849 | int sleepMS; | 1720 | int sleepMS; |
1850 | int framestart; | 1721 | int framestart; |
1851 | >>>>>>> avn/ubitvar | ||
1852 | 1722 | ||
1853 | while (!m_shuttingDown && ((endFrame == null && Active) || Frame < endFrame)) | 1723 | while (!m_shuttingDown && ((endFrame == null && Active) || Frame < endFrame)) |
1854 | { | 1724 | { |
@@ -1857,11 +1727,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1857 | 1727 | ||
1858 | // m_log.DebugFormat("[SCENE]: Processing frame {0} in {1}", Frame, RegionInfo.RegionName); | 1728 | // m_log.DebugFormat("[SCENE]: Processing frame {0} in {1}", Frame, RegionInfo.RegionName); |
1859 | 1729 | ||
1860 | <<<<<<< HEAD | ||
1861 | agentMS = eventMS = backupMS = terrainMS = landMS = spareMS = 0; | ||
1862 | ======= | ||
1863 | agentMS = tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0; | 1730 | agentMS = tempOnRezMS = eventMS = backupMS = terrainMS = landMS = 0; |
1864 | >>>>>>> avn/ubitvar | ||
1865 | 1731 | ||
1866 | try | 1732 | try |
1867 | { | 1733 | { |
@@ -1877,93 +1743,42 @@ namespace OpenSim.Region.Framework.Scenes | |||
1877 | 1743 | ||
1878 | if (Frame % m_update_terrain == 0) | 1744 | if (Frame % m_update_terrain == 0) |
1879 | { | 1745 | { |
1880 | <<<<<<< HEAD | ||
1881 | // At several points inside the code there was a need to | ||
1882 | // create a more precise measurement of time elapsed. | ||
1883 | // This led to the addition of variables that have a | ||
1884 | // similar function and thus remain tightly connected to | ||
1885 | // their original counterparts. However, the original | ||
1886 | // code is not receiving comments from our group because | ||
1887 | // we don't feel right modifying the code to that degree | ||
1888 | // at this point in time, the precise values all begin | ||
1889 | // with the keyword precise | ||
1890 | tmpMS = Util.EnvironmentTickCount(); | ||
1891 | simFrameStopwatch.Start(); | ||
1892 | UpdateTerrain(); | ||
1893 | |||
1894 | // Get the simulation frame time that the avatar force | ||
1895 | // input took | ||
1896 | simFrameStopwatch.Stop(); | ||
1897 | preciseSimFrameTime = | ||
1898 | simFrameStopwatch.Elapsed.TotalMilliseconds; | ||
1899 | terrainMS = Util.EnvironmentTickCountSubtract(tmpMS); | ||
1900 | } | ||
1901 | |||
1902 | // At several points inside the code there was a need to | ||
1903 | // create a more precise measurement of time elapsed. This | ||
1904 | // led to the addition of variables that have a similar | ||
1905 | // function and thus remain tightly connected to their | ||
1906 | // original counterparts. However, the original code is | ||
1907 | // not receiving comments from our group because we don't | ||
1908 | // feel right modifying the code to that degree at this | ||
1909 | // point in time, the precise values all begin with the | ||
1910 | // keyword precise | ||
1911 | ======= | ||
1912 | UpdateTerrain(); | 1746 | UpdateTerrain(); |
1913 | } | 1747 | } |
1914 | 1748 | ||
1915 | terrainMS = Util.EnvironmentTickCountSubtract(tmpMS); | 1749 | terrainMS = Util.EnvironmentTickCountSubtract(tmpMS); |
1916 | >>>>>>> avn/ubitvar | ||
1917 | |||
1918 | tmpMS = Util.EnvironmentTickCount(); | 1750 | tmpMS = Util.EnvironmentTickCount(); |
1919 | 1751 | ||
1920 | // Begin the stopwatch to track the time to prepare physics | ||
1921 | physicsFrameStopwatch.Start(); | ||
1922 | if (PhysicsEnabled && Frame % m_update_physics == 0) | 1752 | if (PhysicsEnabled && Frame % m_update_physics == 0) |
1923 | m_sceneGraph.UpdatePreparePhysics(); | 1753 | m_sceneGraph.UpdatePreparePhysics(); |
1924 | 1754 | ||
1925 | // Get the time it took to prepare the physics, this | ||
1926 | // would report the most precise time that physics was | ||
1927 | // running on the machine and should the physics not be | ||
1928 | // enabled will report the time it took to check if physics | ||
1929 | // was enabled | ||
1930 | physicsFrameStopwatch.Stop(); | ||
1931 | precisePhysicsFrameTime = physicsFrameStopwatch.Elapsed.TotalMilliseconds; | ||
1932 | physicsMS2 = Util.EnvironmentTickCountSubtract(tmpMS); | 1755 | physicsMS2 = Util.EnvironmentTickCountSubtract(tmpMS); |
1933 | 1756 | ||
1934 | // Apply any pending avatar force input to the avatar's velocity | 1757 | // Apply any pending avatar force input to the avatar's velocity |
1935 | tmpMS = Util.EnvironmentTickCount(); | 1758 | tmpMS = Util.EnvironmentTickCount(); |
1936 | simFrameStopwatch.Restart(); | ||
1937 | if (Frame % m_update_entitymovement == 0) | 1759 | if (Frame % m_update_entitymovement == 0) |
1938 | m_sceneGraph.UpdateScenePresenceMovement(); | 1760 | m_sceneGraph.UpdateScenePresenceMovement(); |
1939 | 1761 | ||
1940 | // Get the simulation frame time that the avatar force input | 1762 | // Get the simulation frame time that the avatar force input |
1941 | // took | 1763 | // took |
1942 | simFrameStopwatch.Stop(); | ||
1943 | preciseSimFrameTime += | ||
1944 | simFrameStopwatch.Elapsed.TotalMilliseconds; | ||
1945 | agentMS = Util.EnvironmentTickCountSubtract(tmpMS); | 1764 | agentMS = Util.EnvironmentTickCountSubtract(tmpMS); |
1946 | 1765 | ||
1947 | // Perform the main physics update. This will do the actual work of moving objects and avatars according to their | 1766 | // Perform the main physics update. This will do the actual work of moving objects and avatars according to their |
1948 | // velocity | 1767 | // velocity |
1949 | tmpMS = Util.EnvironmentTickCount(); | 1768 | tmpMS = Util.EnvironmentTickCount(); |
1950 | physicsFrameStopwatch.Restart(); | ||
1951 | if (Frame % m_update_physics == 0) | 1769 | if (Frame % m_update_physics == 0) |
1952 | { | 1770 | { |
1953 | if (PhysicsEnabled) | 1771 | if (PhysicsEnabled) |
1954 | physicsFPS = m_sceneGraph.UpdatePhysics(MinFrameSeconds); | 1772 | physicsFPS = m_sceneGraph.UpdatePhysics(MinFrameTime); |
1955 | 1773 | ||
1956 | if (SynchronizeScene != null) | 1774 | if (SynchronizeScene != null) |
1957 | SynchronizeScene(this); | 1775 | SynchronizeScene(this); |
1958 | } | 1776 | } |
1959 | 1777 | ||
1960 | // Add the main physics update time to the prepare physics time | 1778 | // Add the main physics update time to the prepare physics time |
1961 | physicsFrameStopwatch.Stop(); | ||
1962 | precisePhysicsFrameTime += physicsFrameStopwatch.Elapsed.TotalMilliseconds; | ||
1963 | physicsMS = Util.EnvironmentTickCountSubtract(tmpMS); | 1779 | physicsMS = Util.EnvironmentTickCountSubtract(tmpMS); |
1964 | 1780 | ||
1965 | // Start the stopwatch for the remainder of the simulation | 1781 | // Start the stopwatch for the remainder of the simulation |
1966 | simFrameStopwatch.Restart(); | ||
1967 | tmpMS = Util.EnvironmentTickCount(); | 1782 | tmpMS = Util.EnvironmentTickCount(); |
1968 | 1783 | ||
1969 | // Check if any objects have reached their targets | 1784 | // Check if any objects have reached their targets |
@@ -1980,10 +1795,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1980 | m_sceneGraph.UpdatePresences(); | 1795 | m_sceneGraph.UpdatePresences(); |
1981 | 1796 | ||
1982 | agentMS += Util.EnvironmentTickCountSubtract(tmpMS); | 1797 | agentMS += Util.EnvironmentTickCountSubtract(tmpMS); |
1983 | 1798 | ||
1984 | <<<<<<< HEAD | ||
1985 | ======= | ||
1986 | |||
1987 | // Delete temp-on-rez stuff | 1799 | // Delete temp-on-rez stuff |
1988 | if (Frame % m_update_temp_cleaning == 0 && !m_cleaningTemps) | 1800 | if (Frame % m_update_temp_cleaning == 0 && !m_cleaningTemps) |
1989 | { | 1801 | { |
@@ -1993,7 +1805,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1993 | tempOnRezMS = Util.EnvironmentTickCountSubtract(tmpMS); | 1805 | tempOnRezMS = Util.EnvironmentTickCountSubtract(tmpMS); |
1994 | } | 1806 | } |
1995 | 1807 | ||
1996 | >>>>>>> avn/ubitvar | ||
1997 | if (Frame % m_update_events == 0) | 1808 | if (Frame % m_update_events == 0) |
1998 | { | 1809 | { |
1999 | tmpMS = Util.EnvironmentTickCount(); | 1810 | tmpMS = Util.EnvironmentTickCount(); |
@@ -2062,42 +1873,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2062 | } | 1873 | } |
2063 | 1874 | ||
2064 | EventManager.TriggerRegionHeartbeatEnd(this); | 1875 | EventManager.TriggerRegionHeartbeatEnd(this); |
2065 | otherMS = eventMS + backupMS + terrainMS + landMS; | ||
2066 | |||
2067 | // Get the elapsed time for the simulation frame | ||
2068 | simFrameStopwatch.Stop(); | ||
2069 | preciseSimFrameTime += | ||
2070 | simFrameStopwatch.Elapsed.TotalMilliseconds; | ||
2071 | |||
2072 | <<<<<<< HEAD | ||
2073 | if (!UpdateOnTimer) | ||
2074 | { | ||
2075 | Watchdog.UpdateThread(); | ||
2076 | |||
2077 | spareMS = MinFrameTicks - Util.EnvironmentTickCountSubtract(m_lastFrameTick); | ||
2078 | |||
2079 | if (spareMS > 0) | ||
2080 | m_updateWaitEvent.WaitOne(spareMS); | ||
2081 | else | ||
2082 | spareMS = 0; | ||
2083 | } | ||
2084 | else | ||
2085 | { | ||
2086 | spareMS = Math.Max(0, MinFrameTicks - physicsMS2 - agentMS - physicsMS - otherMS); | ||
2087 | } | ||
2088 | 1876 | ||
2089 | // Get the total frame time | 1877 | Watchdog.UpdateThread(); |
2090 | totalFrameStopwatch.Stop(); | ||
2091 | preciseTotalFrameTime = | ||
2092 | totalFrameStopwatch.Elapsed.TotalMilliseconds; | ||
2093 | |||
2094 | // Restart the stopwatch for the total time of the next frame | ||
2095 | totalFrameStopwatch.Restart(); | ||
2096 | 1878 | ||
2097 | previousFrameTick = m_lastFrameTick; | ||
2098 | frameMS = Util.EnvironmentTickCountSubtract(m_lastFrameTick); | ||
2099 | m_lastFrameTick = Util.EnvironmentTickCount(); | ||
2100 | ======= | ||
2101 | otherMS = tempOnRezMS + eventMS + backupMS + terrainMS + landMS; | 1879 | otherMS = tempOnRezMS + eventMS + backupMS + terrainMS + landMS; |
2102 | 1880 | ||
2103 | StatsReporter.AddPhysicsFPS(physicsFPS); | 1881 | StatsReporter.AddPhysicsFPS(physicsFPS); |
@@ -2125,46 +1903,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
2125 | frameMS = Util.EnvironmentTickCountSubtract(framestart); | 1903 | frameMS = Util.EnvironmentTickCountSubtract(framestart); |
2126 | StatsReporter.addSleepMS(sleepMS); | 1904 | StatsReporter.addSleepMS(sleepMS); |
2127 | StatsReporter.addFrameMS(frameMS); | 1905 | StatsReporter.addFrameMS(frameMS); |
2128 | >>>>>>> avn/ubitvar | ||
2129 | 1906 | ||
2130 | // if (Frame%m_update_avatars == 0) | 1907 | // if (Frame%m_update_avatars == 0) |
2131 | // UpdateInWorldTime(); | 1908 | // UpdateInWorldTime(); |
2132 | 1909 | ||
2133 | <<<<<<< HEAD | 1910 | // Optionally warn if a frame takes double the amount of time that it should. |
2134 | StatsReporter.addFrameMS(frameMS); | ||
2135 | StatsReporter.addAgentMS(agentMS); | ||
2136 | StatsReporter.addPhysicsMS(physicsMS + physicsMS2); | ||
2137 | StatsReporter.addOtherMS(otherMS); | ||
2138 | StatsReporter.AddSpareMS(spareMS); | ||
2139 | StatsReporter.addScriptLines(m_sceneGraph.GetScriptLPS()); | ||
2140 | StatsReporter.AddScriptMS((int) GetAndResetScriptExecutionTime()); | ||
2141 | ======= | ||
2142 | >>>>>>> avn/ubitvar | ||
2143 | |||
2144 | // Send the correct time values to the stats reporter for the | ||
2145 | // frame times | ||
2146 | StatsReporter.addFrameTimeMilliseconds(preciseTotalFrameTime, | ||
2147 | preciseSimFrameTime, precisePhysicsFrameTime, 0.0); | ||
2148 | |||
2149 | // Send the correct number of frames that the physics library | ||
2150 | // has processed to the stats reporter | ||
2151 | StatsReporter.addPhysicsFrame(1); | ||
2152 | |||
2153 | // Optionally warn if a frame takes double the amount of time that it should. | ||
2154 | if (DebugUpdates | 1911 | if (DebugUpdates |
2155 | && Util.EnvironmentTickCountSubtract( | 1912 | && Util.EnvironmentTickCountSubtract( |
2156 | m_lastFrameTick, previousFrameTick) > MinFrameTicks * 2) | 1913 | m_lastFrameTick, previousFrameTick) > (int)(MinFrameTime * 1000 * 2)) |
1914 | |||
2157 | m_log.WarnFormat( | 1915 | m_log.WarnFormat( |
2158 | "[SCENE]: Frame took {0} ms (desired max {1} ms) in {2}", | 1916 | "[SCENE]: Frame took {0} ms (desired max {1} ms) in {2}", |
2159 | Util.EnvironmentTickCountSubtract(m_lastFrameTick, previousFrameTick), | 1917 | Util.EnvironmentTickCountSubtract(m_lastFrameTick, previousFrameTick), |
2160 | MinFrameTicks, | 1918 | MinFrameTime * 1000, |
1919 | |||
2161 | RegionInfo.RegionName); | 1920 | RegionInfo.RegionName); |
2162 | } | 1921 | } |
2163 | |||
2164 | // Finished updating scene frame, so stop the total frame's Stopwatch | ||
2165 | totalFrameStopwatch.Stop(); | ||
2166 | |||
2167 | return spareMS >= 0; | ||
2168 | } | 1922 | } |
2169 | 1923 | ||
2170 | /// <summary> | 1924 | /// <summary> |
@@ -2629,13 +2383,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2629 | 2383 | ||
2630 | if (ei.HitTF) | 2384 | if (ei.HitTF) |
2631 | { | 2385 | { |
2632 | <<<<<<< HEAD | ||
2633 | pos = ei.ipoint; | ||
2634 | } | ||
2635 | ======= | ||
2636 | pos = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); | 2386 | pos = new Vector3(ei.ipoint.X, ei.ipoint.Y, ei.ipoint.Z); |
2637 | } | 2387 | } |
2638 | >>>>>>> avn/ubitvar | ||
2639 | else | 2388 | else |
2640 | { | 2389 | { |
2641 | // fall back to our stupid functionality | 2390 | // fall back to our stupid functionality |
@@ -3013,8 +2762,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3013 | m_log.Warn("[SCENE]: exception when trying to remove the prim that crossed the border."); | 2762 | m_log.Warn("[SCENE]: exception when trying to remove the prim that crossed the border."); |
3014 | } | 2763 | } |
3015 | return; | 2764 | return; |
3016 | <<<<<<< HEAD | ||
3017 | ======= | ||
3018 | } | 2765 | } |
3019 | 2766 | ||
3020 | if (grp.RootPart.RETURN_AT_EDGE) | 2767 | if (grp.RootPart.RETURN_AT_EDGE) |
@@ -3056,70 +2803,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
3056 | // Regular region. Just check for region size | 2803 | // Regular region. Just check for region size |
3057 | if (xx < RegionInfo.RegionSizeX && yy < RegionInfo.RegionSizeY ) | 2804 | if (xx < RegionInfo.RegionSizeX && yy < RegionInfo.RegionSizeY ) |
3058 | ret = true; | 2805 | ret = true; |
3059 | >>>>>>> avn/ubitvar | ||
3060 | } | ||
3061 | |||
3062 | if (grp.RootPart.RETURN_AT_EDGE) | ||
3063 | { | ||
3064 | <<<<<<< HEAD | ||
3065 | // We remove the object here | ||
3066 | try | ||
3067 | { | ||
3068 | List<SceneObjectGroup> objects = new List<SceneObjectGroup>(); | ||
3069 | objects.Add(grp); | ||
3070 | SceneObjectGroup[] objectsArray = objects.ToArray(); | ||
3071 | returnObjects(objectsArray, UUID.Zero); | ||
3072 | } | ||
3073 | catch (Exception) | ||
3074 | { | ||
3075 | m_log.Warn("[SCENE]: exception when trying to return the prim that crossed the border."); | ||
3076 | } | ||
3077 | return; | ||
3078 | } | ||
3079 | |||
3080 | if (EntityTransferModule != null) | ||
3081 | EntityTransferModule.Cross(grp, attemptedPosition, silent); | ||
3082 | } | ||
3083 | |||
3084 | // Simple test to see if a position is in the current region. | ||
3085 | // This test is mostly used to see if a region crossing is necessary. | ||
3086 | // Assuming the position is relative to the region so anything outside its bounds. | ||
3087 | // Return 'true' if position inside region. | ||
3088 | public bool PositionIsInCurrentRegion(Vector3 pos) | ||
3089 | { | ||
3090 | bool ret = false; | ||
3091 | int xx = (int)Math.Floor(pos.X); | ||
3092 | int yy = (int)Math.Floor(pos.Y); | ||
3093 | if (xx < 0 || yy < 0) | ||
3094 | return false; | ||
3095 | |||
3096 | IRegionCombinerModule regionCombinerModule = RequestModuleInterface<IRegionCombinerModule>(); | ||
3097 | if (regionCombinerModule == null) | ||
3098 | { | ||
3099 | // Regular region. Just check for region size | ||
3100 | if (xx < RegionInfo.RegionSizeX && yy < RegionInfo.RegionSizeY) | ||
3101 | ret = true; | ||
3102 | } | ||
3103 | else | ||
3104 | { | ||
3105 | // We're in a mega-region so see if we are still in that larger region | ||
3106 | ret = regionCombinerModule.PositionIsInMegaregion(this.RegionInfo.RegionID, xx, yy); | ||
3107 | } | ||
3108 | |||
3109 | return ret; | ||
3110 | |||
3111 | } | ||
3112 | |||
3113 | ======= | ||
3114 | // We're in a mega-region so see if we are still in that larger region | ||
3115 | ret = regionCombinerModule.PositionIsInMegaregion(this.RegionInfo.RegionID, xx, yy); | ||
3116 | } | 2806 | } |
3117 | 2807 | ||
3118 | return ret; | 2808 | return ret; |
3119 | |||
3120 | } | 2809 | } |
3121 | 2810 | ||
3122 | >>>>>>> avn/ubitvar | ||
3123 | /// <summary> | 2811 | /// <summary> |
3124 | /// Called when objects or attachments cross the border, or teleport, between regions. | 2812 | /// Called when objects or attachments cross the border, or teleport, between regions. |
3125 | /// </summary> | 2813 | /// </summary> |
@@ -3141,10 +2829,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3141 | return false; | 2829 | return false; |
3142 | } | 2830 | } |
3143 | 2831 | ||
3144 | <<<<<<< HEAD | ||
3145 | if (!EntityTransferModule.HandleIncomingSceneObject(newObject, newPosition)) | ||
3146 | return false; | ||
3147 | ======= | ||
3148 | // If the user is banned, we won't let any of their objects | 2832 | // If the user is banned, we won't let any of their objects |
3149 | // enter. Period. | 2833 | // enter. Period. |
3150 | // | 2834 | // |
@@ -3189,7 +2873,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3189 | //if (newObject.RootPart.KeyframeMotion != null) | 2873 | //if (newObject.RootPart.KeyframeMotion != null) |
3190 | // newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject); | 2874 | // newObject.RootPart.KeyframeMotion.UpdateSceneObject(newObject); |
3191 | } | 2875 | } |
3192 | >>>>>>> avn/ubitvar | ||
3193 | 2876 | ||
3194 | // Do this as late as possible so that listeners have full access to the incoming object | 2877 | // Do this as late as possible so that listeners have full access to the incoming object |
3195 | EventManager.TriggerOnIncomingSceneObject(newObject); | 2878 | EventManager.TriggerOnIncomingSceneObject(newObject); |
@@ -3286,8 +2969,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3286 | return true; | 2969 | return true; |
3287 | } | 2970 | } |
3288 | 2971 | ||
3289 | <<<<<<< HEAD | ||
3290 | ======= | ||
3291 | private int GetStateSource(SceneObjectGroup sog) | 2972 | private int GetStateSource(SceneObjectGroup sog) |
3292 | { | 2973 | { |
3293 | ScenePresence sp = GetScenePresence(sog.OwnerID); | 2974 | ScenePresence sp = GetScenePresence(sog.OwnerID); |
@@ -3316,7 +2997,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3316 | return uac.UserFlags; | 2997 | return uac.UserFlags; |
3317 | //} | 2998 | //} |
3318 | } | 2999 | } |
3319 | >>>>>>> avn/ubitvar | 3000 | |
3320 | #endregion | 3001 | #endregion |
3321 | 3002 | ||
3322 | #region Add/Remove Avatar Methods | 3003 | #region Add/Remove Avatar Methods |
@@ -3352,15 +3033,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
3352 | vialogin | 3033 | vialogin |
3353 | = (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0 | 3034 | = (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0 |
3354 | || (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0; | 3035 | || (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0; |
3355 | <<<<<<< HEAD | ||
3356 | |||
3357 | // CheckHeartbeat(); | ||
3358 | |||
3359 | ======= | ||
3360 | 3036 | ||
3361 | CheckHeartbeat(); | 3037 | CheckHeartbeat(); |
3362 | 3038 | ||
3363 | >>>>>>> avn/ubitvar | 3039 | |
3364 | sp = GetScenePresence(client.AgentId); | 3040 | sp = GetScenePresence(client.AgentId); |
3365 | 3041 | ||
3366 | // XXX: Not sure how good it is to add a new client if a scene presence already exists. Possibly this | 3042 | // XXX: Not sure how good it is to add a new client if a scene presence already exists. Possibly this |
@@ -3370,29 +3046,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3370 | if (sp == null) | 3046 | if (sp == null) |
3371 | { | 3047 | { |
3372 | m_log.DebugFormat( | 3048 | m_log.DebugFormat( |
3373 | <<<<<<< HEAD | ||
3374 | "[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}", | ||
3375 | client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos); | ||
3376 | |||
3377 | sp = m_sceneGraph.CreateAndAddChildScenePresence(client, aCircuit.Appearance, type); | ||
3378 | |||
3379 | // We must set this here so that TriggerOnNewClient and TriggerOnClientLogin can determine whether the | ||
3380 | // client is for a root or child agent. | ||
3381 | // We must also set this before adding the client to the client manager so that an exception later on | ||
3382 | // does not leave a client manager entry without the scene agent set, which will cause other code | ||
3383 | // to fail since any entry in the client manager should have a ScenePresence | ||
3384 | // | ||
3385 | // XXX: This may be better set for a new client before that client is added to the client manager. | ||
3386 | // But need to know what happens in the case where a ScenePresence is already present (and if this | ||
3387 | // actually occurs). | ||
3388 | client.SceneAgent = sp; | ||
3389 | |||
3390 | m_clientManager.Add(client); | ||
3391 | SubscribeToClientEvents(client); | ||
3392 | m_eventManager.TriggerOnNewPresence(sp); | ||
3393 | |||
3394 | sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags; | ||
3395 | ======= | ||
3396 | "[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}, tpflags: {4}", | 3049 | "[SCENE]: Adding new child scene presence {0} {1} to scene {2} at pos {3}, tpflags: {4}", |
3397 | client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos, | 3050 | client.Name, client.AgentId, RegionInfo.RegionName, client.StartPos, |
3398 | ((TPFlags)aCircuit.teleportFlags).ToString()); | 3051 | ((TPFlags)aCircuit.teleportFlags).ToString()); |
@@ -3414,8 +3067,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3414 | m_log.DebugFormat("[SCENE]: COF for {0} is {1}", client.AgentId, sp.COF); | 3067 | m_log.DebugFormat("[SCENE]: COF for {0} is {1}", client.AgentId, sp.COF); |
3415 | */ | 3068 | */ |
3416 | m_eventManager.TriggerOnNewPresence(sp); | 3069 | m_eventManager.TriggerOnNewPresence(sp); |
3417 | |||
3418 | >>>>>>> avn/ubitvar | ||
3419 | } | 3070 | } |
3420 | else | 3071 | else |
3421 | { | 3072 | { |
@@ -3424,7 +3075,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3424 | // XXX: This may be better set for a new client before that client is added to the client manager. | 3075 | // XXX: This may be better set for a new client before that client is added to the client manager. |
3425 | // But need to know what happens in the case where a ScenePresence is already present (and if this | 3076 | // But need to know what happens in the case where a ScenePresence is already present (and if this |
3426 | // actually occurs). | 3077 | // actually occurs). |
3427 | client.SceneAgent = sp; | 3078 | |
3428 | 3079 | ||
3429 | m_log.WarnFormat( | 3080 | m_log.WarnFormat( |
3430 | "[SCENE]: Already found {0} scene presence for {1} in {2} when asked to add new scene presence", | 3081 | "[SCENE]: Already found {0} scene presence for {1} in {2} when asked to add new scene presence", |
@@ -3432,6 +3083,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3432 | 3083 | ||
3433 | reallyNew = false; | 3084 | reallyNew = false; |
3434 | } | 3085 | } |
3086 | client.SceneAgent = sp; | ||
3435 | 3087 | ||
3436 | // This is currently also being done earlier in NewUserConnection for real users to see if this | 3088 | // This is currently also being done earlier in NewUserConnection for real users to see if this |
3437 | // resolves problems where HG agents are occasionally seen by others as "Unknown user" in chat and other | 3089 | // resolves problems where HG agents are occasionally seen by others as "Unknown user" in chat and other |
@@ -3454,15 +3106,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3454 | return sp; | 3106 | return sp; |
3455 | } | 3107 | } |
3456 | 3108 | ||
3457 | public string GetAgentHomeURI(UUID agentID) | ||
3458 | { | ||
3459 | AgentCircuitData circuit = AuthenticateHandler.GetAgentCircuitData(agentID); | ||
3460 | if (circuit != null && circuit.ServiceURLs != null && circuit.ServiceURLs.ContainsKey("HomeURI")) | ||
3461 | return circuit.ServiceURLs["HomeURI"].ToString(); | ||
3462 | else | ||
3463 | return null; | ||
3464 | } | ||
3465 | |||
3466 | /// <summary> | 3109 | /// <summary> |
3467 | /// Returns the Home URI of the agent, or null if unknown. | 3110 | /// Returns the Home URI of the agent, or null if unknown. |
3468 | /// </summary> | 3111 | /// </summary> |
@@ -3899,16 +3542,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
3899 | if (target != null && target2 != null) | 3542 | if (target != null && target2 != null) |
3900 | { | 3543 | { |
3901 | Vector3 direction = Vector3.Normalize(RayEnd - RayStart); | 3544 | Vector3 direction = Vector3.Normalize(RayEnd - RayStart); |
3902 | Vector3 AXOrigin = RayStart; | 3545 | |
3903 | Vector3 AXdirection = direction; | ||
3904 | |||
3905 | pos = target2.AbsolutePosition; | 3546 | pos = target2.AbsolutePosition; |
3906 | //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString()); | 3547 | //m_log.Info("[OBJECT_REZ]: TargetPos: " + pos.ToString() + ", RayStart: " + RayStart.ToString() + ", RayEnd: " + RayEnd.ToString() + ", Volume: " + Util.GetDistanceTo(RayStart,RayEnd).ToString() + ", mag1: " + Util.GetMagnitude(RayStart).ToString() + ", mag2: " + Util.GetMagnitude(RayEnd).ToString()); |
3907 | 3548 | ||
3908 | // TODO: Raytrace better here | 3549 | // TODO: Raytrace better here |
3909 | 3550 | ||
3910 | //EntityIntersection ei = m_sceneGraph.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection)); | 3551 | //EntityIntersection ei = m_sceneGraph.GetClosestIntersectingPrim(new Ray(AXOrigin, AXdirection)); |
3911 | Ray NewRay = new Ray(AXOrigin, AXdirection); | 3552 | Ray NewRay = new Ray(RayStart,direction); |
3912 | 3553 | ||
3913 | // Ray Trace against target here | 3554 | // Ray Trace against target here |
3914 | EntityIntersection ei = target2.TestIntersectionOBB(NewRay, Quaternion.Identity, frontFacesOnly, CopyCenters); | 3555 | EntityIntersection ei = target2.TestIntersectionOBB(NewRay, Quaternion.Identity, frontFacesOnly, CopyCenters); |
@@ -4010,13 +3651,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4010 | } | 3651 | } |
4011 | 3652 | ||
4012 | // TODO: Can we now remove this lock? | 3653 | // TODO: Can we now remove this lock? |
4013 | <<<<<<< HEAD | ||
4014 | lock (acd) | ||
4015 | { | ||
4016 | ======= | ||
4017 | lock (m_removeClientPrivLock) | 3654 | lock (m_removeClientPrivLock) |
4018 | { | 3655 | { |
4019 | >>>>>>> avn/ubitvar | ||
4020 | bool isChildAgent = false; | 3656 | bool isChildAgent = false; |
4021 | 3657 | ||
4022 | ScenePresence avatar = GetScenePresence(agentID); | 3658 | ScenePresence avatar = GetScenePresence(agentID); |
@@ -4060,13 +3696,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4060 | // TODO: We shouldn't use closeChildAgents here - it's being used by the NPC module to stop | 3696 | // TODO: We shouldn't use closeChildAgents here - it's being used by the NPC module to stop |
4061 | // unnecessary operations. This should go away once NPCs have no accompanying IClientAPI | 3697 | // unnecessary operations. This should go away once NPCs have no accompanying IClientAPI |
4062 | if (closeChildAgents && CapsModule != null) | 3698 | if (closeChildAgents && CapsModule != null) |
4063 | <<<<<<< HEAD | ||
4064 | CapsModule.RemoveCaps(agentID); | ||
4065 | |||
4066 | ======= | ||
4067 | CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode); | 3699 | CapsModule.RemoveCaps(agentID, avatar.ControllingClient.CircuitCode); |
4068 | 3700 | ||
4069 | >>>>>>> avn/ubitvar | ||
4070 | if (closeChildAgents && !isChildAgent) | 3701 | if (closeChildAgents && !isChildAgent) |
4071 | { | 3702 | { |
4072 | List<ulong> regions = avatar.KnownRegionHandles; | 3703 | List<ulong> regions = avatar.KnownRegionHandles; |
@@ -4079,12 +3710,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
4079 | m_eventManager.TriggerClientClosed(agentID, this); | 3710 | m_eventManager.TriggerClientClosed(agentID, this); |
4080 | // m_log.Debug("[Scene]TriggerClientClosed done"); | 3711 | // m_log.Debug("[Scene]TriggerClientClosed done"); |
4081 | m_eventManager.TriggerOnRemovePresence(agentID); | 3712 | m_eventManager.TriggerOnRemovePresence(agentID); |
4082 | <<<<<<< HEAD | ||
4083 | |||
4084 | ======= | ||
4085 | // m_log.Debug("[Scene]TriggerOnRemovePresence done"); | 3713 | // m_log.Debug("[Scene]TriggerOnRemovePresence done"); |
4086 | 3714 | ||
4087 | >>>>>>> avn/ubitvar | ||
4088 | if (!isChildAgent) | 3715 | if (!isChildAgent) |
4089 | { | 3716 | { |
4090 | if (AttachmentsModule != null) | 3717 | if (AttachmentsModule != null) |
@@ -4228,14 +3855,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
4228 | /// or other applications where a full grid/Hypergrid presence may not be required.</param> | 3855 | /// or other applications where a full grid/Hypergrid presence may not be required.</param> |
4229 | /// <returns>True if the region accepts this agent. False if it does not. False will | 3856 | /// <returns>True if the region accepts this agent. False if it does not. False will |
4230 | /// also return a reason.</returns> | 3857 | /// also return a reason.</returns> |
4231 | <<<<<<< HEAD | ||
4232 | public bool NewUserConnection(AgentCircuitData acd, uint teleportFlags, GridRegion source, out string reason, bool requirePresenceLookup) | ||
4233 | ======= | ||
4234 | /// | 3858 | /// |
4235 | private object m_newUserConnLock = new object(); | 3859 | private object m_newUserConnLock = new object(); |
4236 | 3860 | ||
4237 | public bool NewUserConnection(AgentCircuitData acd, uint teleportFlags, out string reason, bool requirePresenceLookup) | 3861 | public bool NewUserConnection(AgentCircuitData acd, uint teleportFlags, GridRegion source, out string reason, bool requirePresenceLookup) |
4238 | >>>>>>> avn/ubitvar | ||
4239 | { | 3862 | { |
4240 | bool vialogin = ((teleportFlags & (uint)TPFlags.ViaLogin) != 0 || | 3863 | bool vialogin = ((teleportFlags & (uint)TPFlags.ViaLogin) != 0 || |
4241 | (teleportFlags & (uint)TPFlags.ViaHGLogin) != 0); | 3864 | (teleportFlags & (uint)TPFlags.ViaHGLogin) != 0); |
@@ -4507,13 +4130,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4507 | { | 4130 | { |
4508 | m_log.DebugFormat( | 4131 | m_log.DebugFormat( |
4509 | "[SCENE]: Adjusting known seeds for existing agent {0} in {1}", | 4132 | "[SCENE]: Adjusting known seeds for existing agent {0} in {1}", |
4510 | <<<<<<< HEAD | ||
4511 | acd.AgentID, RegionInfo.RegionName); | ||
4512 | |||
4513 | sp.AdjustKnownSeeds(); | ||
4514 | ======= | ||
4515 | acd.AgentID, RegionInfo.RegionName); | 4133 | acd.AgentID, RegionInfo.RegionName); |
4516 | >>>>>>> avn/ubitvar | ||
4517 | 4134 | ||
4518 | if (CapsModule != null) | 4135 | if (CapsModule != null) |
4519 | { | 4136 | { |
@@ -4646,21 +4263,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
4646 | { | 4263 | { |
4647 | if (posX < 0) | 4264 | if (posX < 0) |
4648 | posX = 0; | 4265 | posX = 0; |
4649 | <<<<<<< HEAD | 4266 | |
4650 | else if (posX >= (float)RegionInfo.RegionSizeX) | ||
4651 | posX = (float)RegionInfo.RegionSizeX - 0.001f; | ||
4652 | if (posY < 0) | ||
4653 | posY = 0; | ||
4654 | else if (posY >= (float)RegionInfo.RegionSizeY) | ||
4655 | posY = (float)RegionInfo.RegionSizeY - 0.001f; | ||
4656 | ======= | ||
4657 | else if (posX >= RegionInfo.RegionSizeX) | 4267 | else if (posX >= RegionInfo.RegionSizeX) |
4658 | posX = RegionInfo.RegionSizeX - 0.5f; | 4268 | posX = RegionInfo.RegionSizeX - 0.5f; |
4659 | if (posY < 0) | 4269 | if (posY < 0) |
4660 | posY = 0; | 4270 | posY = 0; |
4661 | else if (posY >= RegionInfo.RegionSizeY) | 4271 | else if (posY >= RegionInfo.RegionSizeY) |
4662 | posY = RegionInfo.RegionSizeY - 0.5f; | 4272 | posY = RegionInfo.RegionSizeY - 0.5f; |
4663 | >>>>>>> avn/ubitvar | ||
4664 | 4273 | ||
4665 | reason = String.Empty; | 4274 | reason = String.Empty; |
4666 | if (Permissions.IsGod(agentID)) | 4275 | if (Permissions.IsGod(agentID)) |
@@ -5249,15 +4858,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
5249 | sp.LifecycleState = ScenePresenceState.Removing; | 4858 | sp.LifecycleState = ScenePresenceState.Removing; |
5250 | } | 4859 | } |
5251 | 4860 | ||
5252 | <<<<<<< HEAD | ||
5253 | sp.ControllingClient.Close(force); | ||
5254 | ======= | ||
5255 | if (sp != null) | 4861 | if (sp != null) |
5256 | { | 4862 | { |
5257 | sp.ControllingClient.Close(force, force); | 4863 | sp.ControllingClient.Close(force, force); |
5258 | return true; | 4864 | return true; |
5259 | } | 4865 | } |
5260 | >>>>>>> avn/ubitvar | ||
5261 | 4866 | ||
5262 | return true; | 4867 | return true; |
5263 | } | 4868 | } |
@@ -5862,9 +5467,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
5862 | // 5 = We have seen a new user enter within the past 4 minutes | 5467 | // 5 = We have seen a new user enter within the past 4 minutes |
5863 | // which can be seen as positive confirmation of sim health | 5468 | // which can be seen as positive confirmation of sim health |
5864 | // | 5469 | // |
5865 | <<<<<<< HEAD | ||
5866 | int health = 1; // Start at 1, means we're up | 5470 | int health = 1; // Start at 1, means we're up |
5867 | ======= | ||
5868 | 5471 | ||
5869 | flags = 0; | 5472 | flags = 0; |
5870 | message = String.Empty; | 5473 | message = String.Empty; |
@@ -5879,9 +5482,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
5879 | return 0; | 5482 | return 0; |
5880 | } | 5483 | } |
5881 | 5484 | ||
5882 | int health=1; // Start at 1, means we're up | ||
5883 | >>>>>>> avn/ubitvar | ||
5884 | |||
5885 | if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) < 1000) | 5485 | if ((Util.EnvironmentTickCountSubtract(m_lastFrameTick)) < 1000) |
5886 | { | 5486 | { |
5887 | health+=1; | 5487 | health+=1; |
@@ -6176,13 +5776,7 @@ Environment.Exit(1); | |||
6176 | //Go to the edge, this happens in teleporting to a region with no available parcels | 5776 | //Go to the edge, this happens in teleporting to a region with no available parcels |
6177 | Vector3 nearestRegionEdgePoint = GetNearestRegionEdgePosition(avatar); | 5777 | Vector3 nearestRegionEdgePoint = GetNearestRegionEdgePosition(avatar); |
6178 | 5778 | ||
6179 | <<<<<<< HEAD | ||
6180 | //m_log.Debug("They are really in a place they don't belong, sending them to: " + nearestRegionEdgePoint.ToString()); | ||
6181 | |||
6182 | ======= | ||
6183 | //Debug.WriteLine("They are really in a place they don't belong, sending them to: " + nearestRegionEdgePoint.ToString()); | 5779 | //Debug.WriteLine("They are really in a place they don't belong, sending them to: " + nearestRegionEdgePoint.ToString()); |
6184 | |||
6185 | >>>>>>> avn/ubitvar | ||
6186 | return nearestRegionEdgePoint; | 5780 | return nearestRegionEdgePoint; |
6187 | } | 5781 | } |
6188 | 5782 | ||
@@ -6513,11 +6107,7 @@ Environment.Exit(1); | |||
6513 | /// <param name='position'></param> | 6107 | /// <param name='position'></param> |
6514 | /// <param name='reason'></param> | 6108 | /// <param name='reason'></param> |
6515 | /// <returns></returns> | 6109 | /// <returns></returns> |
6516 | <<<<<<< HEAD | ||
6517 | public bool QueryAccess(UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, List<UUID> features, out string reason) | 6110 | public bool QueryAccess(UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, List<UUID> features, out string reason) |
6518 | ======= | ||
6519 | public bool QueryAccess(UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string reason) | ||
6520 | >>>>>>> avn/ubitvar | ||
6521 | { | 6111 | { |
6522 | reason = string.Empty; | 6112 | reason = string.Empty; |
6523 | 6113 | ||
@@ -6527,14 +6117,8 @@ Environment.Exit(1); | |||
6527 | return true; | 6117 | return true; |
6528 | } | 6118 | } |
6529 | 6119 | ||
6530 | <<<<<<< HEAD | ||
6531 | if (!AllowAvatarCrossing && !viaTeleport) | 6120 | if (!AllowAvatarCrossing && !viaTeleport) |
6532 | return false; | 6121 | return false; |
6533 | ======= | ||
6534 | |||
6535 | // if (!AllowAvatarCrossing && !viaTeleport) | ||
6536 | // return false; | ||
6537 | >>>>>>> avn/ubitvar | ||
6538 | 6122 | ||
6539 | // FIXME: Root agent count is currently known to be inaccurate. This forces a recount before we check. | 6123 | // FIXME: Root agent count is currently known to be inaccurate. This forces a recount before we check. |
6540 | // However, the long term fix is to make sure root agent count is always accurate. | 6124 | // However, the long term fix is to make sure root agent count is always accurate. |
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index c4671f0..f420f69 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs | |||
@@ -1,4 +1,3 @@ | |||
1 | <<<<<<< HEAD | ||
2 | /* | 1 | /* |
3 | * Copyright (c) Contributors, http://opensimulator.org/ | 2 | * Copyright (c) Contributors, http://opensimulator.org/ |
4 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
@@ -201,7 +200,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
201 | /// If -1 then updates until shutdown. | 200 | /// If -1 then updates until shutdown. |
202 | /// </param> | 201 | /// </param> |
203 | /// <returns>true if update completed within minimum frame time, false otherwise.</returns> | 202 | /// <returns>true if update completed within minimum frame time, false otherwise.</returns> |
204 | public abstract bool Update(int frames); | 203 | public abstract void Update(int frames); |
205 | 204 | ||
206 | #endregion | 205 | #endregion |
207 | 206 | ||
@@ -635,603 +634,3 @@ namespace OpenSim.Region.Framework.Scenes | |||
635 | public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep); | 634 | public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep); |
636 | } | 635 | } |
637 | } | 636 | } |
638 | ======= | ||
639 | /* | ||
640 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
641 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
642 | * | ||
643 | * Redistribution and use in source and binary forms, with or without | ||
644 | * modification, are permitted provided that the following conditions are met: | ||
645 | * * Redistributions of source code must retain the above copyright | ||
646 | * notice, this list of conditions and the following disclaimer. | ||
647 | * * Redistributions in binary form must reproduce the above copyright | ||
648 | * notice, this list of conditions and the following disclaimer in the | ||
649 | * documentation and/or other materials provided with the distribution. | ||
650 | * * Neither the name of the OpenSimulator Project nor the | ||
651 | * names of its contributors may be used to endorse or promote products | ||
652 | * derived from this software without specific prior written permission. | ||
653 | * | ||
654 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
655 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
656 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
657 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
658 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
659 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
660 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
661 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
662 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
663 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
664 | */ | ||
665 | |||
666 | using System; | ||
667 | using System.Collections.Generic; | ||
668 | using System.Reflection; | ||
669 | using System.Threading; | ||
670 | using OpenMetaverse; | ||
671 | using log4net; | ||
672 | using Nini.Config; | ||
673 | using OpenSim.Framework; | ||
674 | using OpenSim.Framework.Console; | ||
675 | |||
676 | using OpenSim.Region.Framework.Interfaces; | ||
677 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
678 | |||
679 | namespace OpenSim.Region.Framework.Scenes | ||
680 | { | ||
681 | public abstract class SceneBase : IScene | ||
682 | { | ||
683 | protected static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
684 | protected static readonly string LogHeader = "[SCENE]"; | ||
685 | |||
686 | #region Events | ||
687 | |||
688 | public event restart OnRestart; | ||
689 | |||
690 | #endregion | ||
691 | |||
692 | #region Fields | ||
693 | |||
694 | public string Name { get { return RegionInfo.RegionName; } } | ||
695 | |||
696 | public IConfigSource Config | ||
697 | { | ||
698 | get { return GetConfig(); } | ||
699 | } | ||
700 | |||
701 | protected virtual IConfigSource GetConfig() | ||
702 | { | ||
703 | return null; | ||
704 | } | ||
705 | |||
706 | /// <value> | ||
707 | /// All the region modules attached to this scene. | ||
708 | /// </value> | ||
709 | public Dictionary<string, IRegionModuleBase> RegionModules | ||
710 | { | ||
711 | get { return m_regionModules; } | ||
712 | } | ||
713 | private Dictionary<string, IRegionModuleBase> m_regionModules = new Dictionary<string, IRegionModuleBase>(); | ||
714 | |||
715 | /// <value> | ||
716 | /// The module interfaces available from this scene. | ||
717 | /// </value> | ||
718 | protected Dictionary<Type, List<object>> ModuleInterfaces = new Dictionary<Type, List<object>>(); | ||
719 | |||
720 | protected Dictionary<string, object> ModuleAPIMethods = new Dictionary<string, object>(); | ||
721 | |||
722 | /// <value> | ||
723 | /// The module commanders available from this scene | ||
724 | /// </value> | ||
725 | protected Dictionary<string, ICommander> m_moduleCommanders = new Dictionary<string, ICommander>(); | ||
726 | |||
727 | /// <value> | ||
728 | /// Registered classes that are capable of creating entities. | ||
729 | /// </value> | ||
730 | protected Dictionary<PCode, IEntityCreator> m_entityCreators = new Dictionary<PCode, IEntityCreator>(); | ||
731 | |||
732 | /// <summary> | ||
733 | /// The last allocated local prim id. When a new local id is requested, the next number in the sequence is | ||
734 | /// dispensed. | ||
735 | /// </summary> | ||
736 | protected uint m_lastAllocatedLocalId = 720000; | ||
737 | |||
738 | private readonly Mutex _primAllocateMutex = new Mutex(false); | ||
739 | |||
740 | protected readonly ClientManager m_clientManager = new ClientManager(); | ||
741 | |||
742 | public bool LoginsEnabled | ||
743 | { | ||
744 | get | ||
745 | { | ||
746 | return m_loginsEnabled; | ||
747 | } | ||
748 | |||
749 | set | ||
750 | { | ||
751 | if (m_loginsEnabled != value) | ||
752 | { | ||
753 | m_loginsEnabled = value; | ||
754 | EventManager.TriggerRegionLoginsStatusChange(this); | ||
755 | } | ||
756 | } | ||
757 | } | ||
758 | private bool m_loginsEnabled; | ||
759 | |||
760 | public bool Ready | ||
761 | { | ||
762 | get | ||
763 | { | ||
764 | return m_ready; | ||
765 | } | ||
766 | |||
767 | set | ||
768 | { | ||
769 | if (m_ready != value) | ||
770 | { | ||
771 | m_ready = value; | ||
772 | EventManager.TriggerRegionReadyStatusChange(this); | ||
773 | } | ||
774 | } | ||
775 | } | ||
776 | private bool m_ready; | ||
777 | |||
778 | public float TimeDilation | ||
779 | { | ||
780 | get { return 1.0f; } | ||
781 | } | ||
782 | |||
783 | protected ulong m_regionHandle; | ||
784 | protected string m_regionName; | ||
785 | |||
786 | public ITerrainChannel Heightmap; | ||
787 | |||
788 | /// <value> | ||
789 | /// Allows retrieval of land information for this scene. | ||
790 | /// </value> | ||
791 | public ILandChannel LandChannel; | ||
792 | |||
793 | /// <value> | ||
794 | /// Manage events that occur in this scene (avatar movement, script rez, etc.). Commonly used by region modules | ||
795 | /// to subscribe to scene events. | ||
796 | /// </value> | ||
797 | public EventManager EventManager | ||
798 | { | ||
799 | get { return m_eventManager; } | ||
800 | } | ||
801 | protected EventManager m_eventManager; | ||
802 | |||
803 | protected ScenePermissions m_permissions; | ||
804 | public ScenePermissions Permissions | ||
805 | { | ||
806 | get { return m_permissions; } | ||
807 | } | ||
808 | |||
809 | protected string m_datastore; | ||
810 | |||
811 | /* Used by the loadbalancer plugin on GForge */ | ||
812 | protected RegionStatus m_regStatus; | ||
813 | public RegionStatus RegionStatus | ||
814 | { | ||
815 | get { return m_regStatus; } | ||
816 | set { m_regStatus = value; } | ||
817 | } | ||
818 | |||
819 | #endregion | ||
820 | |||
821 | public SceneBase(RegionInfo regInfo) | ||
822 | { | ||
823 | RegionInfo = regInfo; | ||
824 | } | ||
825 | |||
826 | #region Update Methods | ||
827 | |||
828 | /// <summary> | ||
829 | /// Called to update the scene loop by a number of frames and until shutdown. | ||
830 | /// </summary> | ||
831 | /// <param name="frames"> | ||
832 | /// Number of frames to update. Exits on shutdown even if there are frames remaining. | ||
833 | /// If -1 then updates until shutdown. | ||
834 | /// </param> | ||
835 | public abstract void Update(int frames); | ||
836 | |||
837 | #endregion | ||
838 | |||
839 | #region Terrain Methods | ||
840 | |||
841 | /// <summary> | ||
842 | /// Loads the World heightmap | ||
843 | /// </summary> | ||
844 | public abstract void LoadWorldMap(); | ||
845 | |||
846 | /// <summary> | ||
847 | /// Send the region heightmap to the client | ||
848 | /// </summary> | ||
849 | /// <param name="RemoteClient">Client to send to</param> | ||
850 | public virtual void SendLayerData(IClientAPI RemoteClient) | ||
851 | { | ||
852 | // RemoteClient.SendLayerData(Heightmap.GetFloatsSerialised()); | ||
853 | ITerrainModule terrModule = RequestModuleInterface<ITerrainModule>(); | ||
854 | if (terrModule != null) | ||
855 | { | ||
856 | terrModule.PushTerrain(RemoteClient); | ||
857 | } | ||
858 | } | ||
859 | |||
860 | #endregion | ||
861 | |||
862 | #region Add/Remove Agent/Avatar | ||
863 | |||
864 | public abstract ISceneAgent AddNewAgent(IClientAPI client, PresenceType type); | ||
865 | |||
866 | public abstract bool CloseAgent(UUID agentID, bool force); | ||
867 | |||
868 | public bool TryGetScenePresence(UUID agentID, out object scenePresence) | ||
869 | { | ||
870 | scenePresence = null; | ||
871 | ScenePresence sp = null; | ||
872 | if (TryGetScenePresence(agentID, out sp)) | ||
873 | { | ||
874 | scenePresence = sp; | ||
875 | return true; | ||
876 | } | ||
877 | |||
878 | return false; | ||
879 | } | ||
880 | |||
881 | /// <summary> | ||
882 | /// Try to get a scene presence from the scene | ||
883 | /// </summary> | ||
884 | /// <param name="agentID"></param> | ||
885 | /// <param name="scenePresence">null if there is no scene presence with the given agent id</param> | ||
886 | /// <returns>true if there was a scene presence with the given id, false otherwise.</returns> | ||
887 | public abstract bool TryGetScenePresence(UUID agentID, out ScenePresence scenePresence); | ||
888 | |||
889 | #endregion | ||
890 | |||
891 | /// <summary> | ||
892 | /// | ||
893 | /// </summary> | ||
894 | /// <returns></returns> | ||
895 | public virtual RegionInfo RegionInfo { get; private set; } | ||
896 | |||
897 | #region admin stuff | ||
898 | |||
899 | public abstract void OtherRegionUp(GridRegion otherRegion); | ||
900 | |||
901 | public virtual string GetSimulatorVersion() | ||
902 | { | ||
903 | return "OpenSimulator Server"; | ||
904 | } | ||
905 | |||
906 | #endregion | ||
907 | |||
908 | #region Shutdown | ||
909 | |||
910 | /// <summary> | ||
911 | /// Tidy before shutdown | ||
912 | /// </summary> | ||
913 | public virtual void Close() | ||
914 | { | ||
915 | try | ||
916 | { | ||
917 | EventManager.TriggerShutdown(); | ||
918 | } | ||
919 | catch (Exception e) | ||
920 | { | ||
921 | m_log.Error(string.Format("[SCENE]: SceneBase.cs: Close() - Failed with exception ", e)); | ||
922 | } | ||
923 | } | ||
924 | |||
925 | #endregion | ||
926 | |||
927 | /// <summary> | ||
928 | /// Returns a new unallocated local ID | ||
929 | /// </summary> | ||
930 | /// <returns>A brand new local ID</returns> | ||
931 | public uint AllocateLocalId() | ||
932 | { | ||
933 | uint myID; | ||
934 | |||
935 | _primAllocateMutex.WaitOne(); | ||
936 | myID = ++m_lastAllocatedLocalId; | ||
937 | _primAllocateMutex.ReleaseMutex(); | ||
938 | |||
939 | return myID; | ||
940 | } | ||
941 | |||
942 | public uint AllocatePresenceLocalId() | ||
943 | { | ||
944 | uint myID; | ||
945 | |||
946 | _primAllocateMutex.WaitOne(); | ||
947 | myID = ++m_lastAllocatedLocalId; | ||
948 | ++m_lastAllocatedLocalId; | ||
949 | _primAllocateMutex.ReleaseMutex(); | ||
950 | |||
951 | return myID; | ||
952 | } | ||
953 | |||
954 | #region Module Methods | ||
955 | |||
956 | /// <summary> | ||
957 | /// Add a region-module to this scene. TODO: This will replace AddModule in the future. | ||
958 | /// </summary> | ||
959 | /// <param name="name"></param> | ||
960 | /// <param name="module"></param> | ||
961 | public void AddRegionModule(string name, IRegionModuleBase module) | ||
962 | { | ||
963 | if (!RegionModules.ContainsKey(name)) | ||
964 | { | ||
965 | RegionModules.Add(name, module); | ||
966 | } | ||
967 | } | ||
968 | |||
969 | public void RemoveRegionModule(string name) | ||
970 | { | ||
971 | RegionModules.Remove(name); | ||
972 | } | ||
973 | |||
974 | /// <summary> | ||
975 | /// Register a module commander. | ||
976 | /// </summary> | ||
977 | /// <param name="commander"></param> | ||
978 | public void RegisterModuleCommander(ICommander commander) | ||
979 | { | ||
980 | lock (m_moduleCommanders) | ||
981 | { | ||
982 | m_moduleCommanders.Add(commander.Name, commander); | ||
983 | } | ||
984 | } | ||
985 | |||
986 | /// <summary> | ||
987 | /// Unregister a module commander and all its commands | ||
988 | /// </summary> | ||
989 | /// <param name="name"></param> | ||
990 | public void UnregisterModuleCommander(string name) | ||
991 | { | ||
992 | lock (m_moduleCommanders) | ||
993 | { | ||
994 | ICommander commander; | ||
995 | if (m_moduleCommanders.TryGetValue(name, out commander)) | ||
996 | m_moduleCommanders.Remove(name); | ||
997 | } | ||
998 | } | ||
999 | |||
1000 | /// <summary> | ||
1001 | /// Get a module commander | ||
1002 | /// </summary> | ||
1003 | /// <param name="name"></param> | ||
1004 | /// <returns>The module commander, null if no module commander with that name was found</returns> | ||
1005 | public ICommander GetCommander(string name) | ||
1006 | { | ||
1007 | lock (m_moduleCommanders) | ||
1008 | { | ||
1009 | if (m_moduleCommanders.ContainsKey(name)) | ||
1010 | return m_moduleCommanders[name]; | ||
1011 | } | ||
1012 | |||
1013 | return null; | ||
1014 | } | ||
1015 | |||
1016 | public Dictionary<string, ICommander> GetCommanders() | ||
1017 | { | ||
1018 | return m_moduleCommanders; | ||
1019 | } | ||
1020 | |||
1021 | /// <summary> | ||
1022 | /// Register an interface to a region module. This allows module methods to be called directly as | ||
1023 | /// well as via events. If there is already a module registered for this interface, it is not replaced | ||
1024 | /// (is this the best behaviour?) | ||
1025 | /// </summary> | ||
1026 | /// <param name="mod"></param> | ||
1027 | public void RegisterModuleInterface<M>(M mod) | ||
1028 | { | ||
1029 | // m_log.DebugFormat("[SCENE BASE]: Registering interface {0}", typeof(M)); | ||
1030 | |||
1031 | List<Object> l = null; | ||
1032 | if (!ModuleInterfaces.TryGetValue(typeof(M), out l)) | ||
1033 | { | ||
1034 | l = new List<Object>(); | ||
1035 | ModuleInterfaces.Add(typeof(M), l); | ||
1036 | } | ||
1037 | |||
1038 | if (l.Count > 0) | ||
1039 | return; | ||
1040 | |||
1041 | l.Add(mod); | ||
1042 | |||
1043 | if (mod is IEntityCreator) | ||
1044 | { | ||
1045 | IEntityCreator entityCreator = (IEntityCreator)mod; | ||
1046 | foreach (PCode pcode in entityCreator.CreationCapabilities) | ||
1047 | { | ||
1048 | m_entityCreators[pcode] = entityCreator; | ||
1049 | } | ||
1050 | } | ||
1051 | } | ||
1052 | |||
1053 | public void UnregisterModuleInterface<M>(M mod) | ||
1054 | { | ||
1055 | List<Object> l; | ||
1056 | if (ModuleInterfaces.TryGetValue(typeof(M), out l)) | ||
1057 | { | ||
1058 | if (l.Remove(mod)) | ||
1059 | { | ||
1060 | if (mod is IEntityCreator) | ||
1061 | { | ||
1062 | IEntityCreator entityCreator = (IEntityCreator)mod; | ||
1063 | foreach (PCode pcode in entityCreator.CreationCapabilities) | ||
1064 | { | ||
1065 | m_entityCreators[pcode] = null; | ||
1066 | } | ||
1067 | } | ||
1068 | } | ||
1069 | } | ||
1070 | } | ||
1071 | |||
1072 | public void StackModuleInterface<M>(M mod) | ||
1073 | { | ||
1074 | List<Object> l; | ||
1075 | if (ModuleInterfaces.ContainsKey(typeof(M))) | ||
1076 | l = ModuleInterfaces[typeof(M)]; | ||
1077 | else | ||
1078 | l = new List<Object>(); | ||
1079 | |||
1080 | if (l.Contains(mod)) | ||
1081 | return; | ||
1082 | |||
1083 | l.Add(mod); | ||
1084 | |||
1085 | if (mod is IEntityCreator) | ||
1086 | { | ||
1087 | IEntityCreator entityCreator = (IEntityCreator)mod; | ||
1088 | foreach (PCode pcode in entityCreator.CreationCapabilities) | ||
1089 | { | ||
1090 | m_entityCreators[pcode] = entityCreator; | ||
1091 | } | ||
1092 | } | ||
1093 | |||
1094 | ModuleInterfaces[typeof(M)] = l; | ||
1095 | } | ||
1096 | |||
1097 | /// <summary> | ||
1098 | /// For the given interface, retrieve the region module which implements it. | ||
1099 | /// </summary> | ||
1100 | /// <returns>null if there is no registered module implementing that interface</returns> | ||
1101 | public T RequestModuleInterface<T>() | ||
1102 | { | ||
1103 | if (ModuleInterfaces.ContainsKey(typeof(T)) && | ||
1104 | (ModuleInterfaces[typeof(T)].Count > 0)) | ||
1105 | return (T)ModuleInterfaces[typeof(T)][0]; | ||
1106 | else | ||
1107 | return default(T); | ||
1108 | } | ||
1109 | |||
1110 | /// <summary> | ||
1111 | /// For the given interface, retrieve an array of region modules that implement it. | ||
1112 | /// </summary> | ||
1113 | /// <returns>an empty array if there are no registered modules implementing that interface</returns> | ||
1114 | public T[] RequestModuleInterfaces<T>() | ||
1115 | { | ||
1116 | if (ModuleInterfaces.ContainsKey(typeof(T))) | ||
1117 | { | ||
1118 | List<T> ret = new List<T>(); | ||
1119 | |||
1120 | foreach (Object o in ModuleInterfaces[typeof(T)]) | ||
1121 | ret.Add((T)o); | ||
1122 | return ret.ToArray(); | ||
1123 | } | ||
1124 | else | ||
1125 | { | ||
1126 | return new T[] {}; | ||
1127 | } | ||
1128 | } | ||
1129 | |||
1130 | #endregion | ||
1131 | |||
1132 | /// <summary> | ||
1133 | /// Call this from a region module to add a command to the OpenSim console. | ||
1134 | /// </summary> | ||
1135 | /// <param name="mod"></param> | ||
1136 | /// <param name="command"></param> | ||
1137 | /// <param name="shorthelp"></param> | ||
1138 | /// <param name="longhelp"></param> | ||
1139 | /// <param name="callback"></param> | ||
1140 | public void AddCommand(IRegionModuleBase module, string command, string shorthelp, string longhelp, CommandDelegate callback) | ||
1141 | { | ||
1142 | AddCommand(module, command, shorthelp, longhelp, string.Empty, callback); | ||
1143 | } | ||
1144 | |||
1145 | /// <summary> | ||
1146 | /// Call this from a region module to add a command to the OpenSim console. | ||
1147 | /// </summary> | ||
1148 | /// <param name="mod"> | ||
1149 | /// The use of IRegionModuleBase is a cheap trick to get a different method signature, | ||
1150 | /// though all new modules should be using interfaces descended from IRegionModuleBase anyway. | ||
1151 | /// </param> | ||
1152 | /// <param name="category"> | ||
1153 | /// Category of the command. This is the section under which it will appear when the user asks for help | ||
1154 | /// </param> | ||
1155 | /// <param name="command"></param> | ||
1156 | /// <param name="shorthelp"></param> | ||
1157 | /// <param name="longhelp"></param> | ||
1158 | /// <param name="callback"></param> | ||
1159 | public void AddCommand( | ||
1160 | string category, IRegionModuleBase module, string command, string shorthelp, string longhelp, CommandDelegate callback) | ||
1161 | { | ||
1162 | AddCommand(category, module, command, shorthelp, longhelp, string.Empty, callback); | ||
1163 | } | ||
1164 | |||
1165 | /// <summary> | ||
1166 | /// Call this from a region module to add a command to the OpenSim console. | ||
1167 | /// </summary> | ||
1168 | /// <param name="mod"></param> | ||
1169 | /// <param name="command"></param> | ||
1170 | /// <param name="shorthelp"></param> | ||
1171 | /// <param name="longhelp"></param> | ||
1172 | /// <param name="descriptivehelp"></param> | ||
1173 | /// <param name="callback"></param> | ||
1174 | public void AddCommand(IRegionModuleBase module, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback) | ||
1175 | { | ||
1176 | string moduleName = ""; | ||
1177 | |||
1178 | if (module != null) | ||
1179 | moduleName = module.Name; | ||
1180 | |||
1181 | AddCommand(moduleName, module, command, shorthelp, longhelp, descriptivehelp, callback); | ||
1182 | } | ||
1183 | |||
1184 | /// <summary> | ||
1185 | /// Call this from a region module to add a command to the OpenSim console. | ||
1186 | /// </summary> | ||
1187 | /// <param name="category"> | ||
1188 | /// Category of the command. This is the section under which it will appear when the user asks for help | ||
1189 | /// </param> | ||
1190 | /// <param name="mod"></param> | ||
1191 | /// <param name="command"></param> | ||
1192 | /// <param name="shorthelp"></param> | ||
1193 | /// <param name="longhelp"></param> | ||
1194 | /// <param name="descriptivehelp"></param> | ||
1195 | /// <param name="callback"></param> | ||
1196 | public void AddCommand( | ||
1197 | string category, IRegionModuleBase module, string command, | ||
1198 | string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback) | ||
1199 | { | ||
1200 | if (MainConsole.Instance == null) | ||
1201 | return; | ||
1202 | |||
1203 | bool shared = false; | ||
1204 | |||
1205 | if (module != null) | ||
1206 | shared = module is ISharedRegionModule; | ||
1207 | |||
1208 | MainConsole.Instance.Commands.AddCommand( | ||
1209 | category, shared, command, shorthelp, longhelp, descriptivehelp, callback); | ||
1210 | } | ||
1211 | |||
1212 | public virtual ISceneObject DeserializeObject(string representation) | ||
1213 | { | ||
1214 | return null; | ||
1215 | } | ||
1216 | |||
1217 | public virtual bool AllowScriptCrossings | ||
1218 | { | ||
1219 | get { return false; } | ||
1220 | } | ||
1221 | |||
1222 | public virtual void Start() | ||
1223 | { | ||
1224 | } | ||
1225 | |||
1226 | public void Restart() | ||
1227 | { | ||
1228 | // This has to be here to fire the event | ||
1229 | restart handlerPhysicsCrash = OnRestart; | ||
1230 | if (handlerPhysicsCrash != null) | ||
1231 | handlerPhysicsCrash(RegionInfo); | ||
1232 | } | ||
1233 | |||
1234 | public abstract bool CheckClient(UUID agentID, System.Net.IPEndPoint ep); | ||
1235 | } | ||
1236 | } | ||
1237 | >>>>>>> avn/ubitvar | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 3f6a7f8..c9c88d3 100755 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1928,7 +1928,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1928 | SceneObjectGroupsByLocalPartID[part.LocalId] = parentGroup; | 1928 | SceneObjectGroupsByLocalPartID[part.LocalId] = parentGroup; |
1929 | } | 1929 | } |
1930 | */ | 1930 | */ |
1931 | parentGroup.AdjustChildPrimPermissions(); | 1931 | parentGroup.AdjustChildPrimPermissions(false); |
1932 | parentGroup.HasGroupChanged = true; | 1932 | parentGroup.HasGroupChanged = true; |
1933 | parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true); | 1933 | parentGroup.ProcessBackup(m_parentScene.SimulationDataService, true); |
1934 | parentGroup.ScheduleGroupForFullUpdate(); | 1934 | parentGroup.ScheduleGroupForFullUpdate(); |
@@ -2066,7 +2066,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2066 | // return unless the root is deleted. This will remove them | 2066 | // return unless the root is deleted. This will remove them |
2067 | // from the database. They will be rewritten immediately, | 2067 | // from the database. They will be rewritten immediately, |
2068 | // minus the rows for the unlinked child prims. | 2068 | // minus the rows for the unlinked child prims. |
2069 | g.AdjustChildPrimPermissions(); | 2069 | g.AdjustChildPrimPermissions(false); |
2070 | m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID); | 2070 | m_parentScene.SimulationDataService.RemoveObject(g.UUID, m_parentScene.RegionInfo.RegionID); |
2071 | g.TriggerScriptChangedEvent(Changed.LINK); | 2071 | g.TriggerScriptChangedEvent(Changed.LINK); |
2072 | g.HasGroupChanged = true; // Persist | 2072 | g.HasGroupChanged = true; // Persist |
@@ -2154,13 +2154,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2154 | if (m_parentScene.Permissions.CanDuplicateObject( | 2154 | if (m_parentScene.Permissions.CanDuplicateObject( |
2155 | original.PrimCount, original.UUID, AgentID, original.AbsolutePosition)) | 2155 | original.PrimCount, original.UUID, AgentID, original.AbsolutePosition)) |
2156 | { | 2156 | { |
2157 | <<<<<<< HEAD | ||
2158 | m_log.WarnFormat( | ||
2159 | "[SCENEGRAPH]: Attempt to duplicate nonexistent prim id {0} by {1}", originalPrimID, AgentID); | ||
2160 | ======= | ||
2161 | SceneObjectGroup copy = original.Copy(true); | 2157 | SceneObjectGroup copy = original.Copy(true); |
2162 | copy.AbsolutePosition = copy.AbsolutePosition + offset; | 2158 | copy.AbsolutePosition = copy.AbsolutePosition + offset; |
2163 | >>>>>>> avn/ubitvar | ||
2164 | 2159 | ||
2165 | if (original.OwnerID != AgentID) | 2160 | if (original.OwnerID != AgentID) |
2166 | { | 2161 | { |
@@ -2197,63 +2192,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
2197 | 2192 | ||
2198 | // PROBABLE END OF FIXME | 2193 | // PROBABLE END OF FIXME |
2199 | 2194 | ||
2200 | <<<<<<< HEAD | ||
2201 | // FIXME: This section needs to be refactored so that it just calls AddSceneObject() | ||
2202 | Entities.Add(copy); | ||
2203 | |||
2204 | lock (SceneObjectGroupsByFullID) | ||
2205 | SceneObjectGroupsByFullID[copy.UUID] = copy; | ||
2206 | |||
2207 | SceneObjectPart[] children = copy.Parts; | ||
2208 | |||
2209 | lock (SceneObjectGroupsByFullPartID) | ||
2210 | { | ||
2211 | SceneObjectGroupsByFullPartID[copy.UUID] = copy; | ||
2212 | foreach (SceneObjectPart part in children) | ||
2213 | SceneObjectGroupsByFullPartID[part.UUID] = copy; | ||
2214 | } | ||
2215 | |||
2216 | lock (SceneObjectGroupsByLocalPartID) | ||
2217 | { | ||
2218 | SceneObjectGroupsByLocalPartID[copy.LocalId] = copy; | ||
2219 | foreach (SceneObjectPart part in children) | ||
2220 | SceneObjectGroupsByLocalPartID[part.LocalId] = copy; | ||
2221 | } | ||
2222 | // PROBABLE END OF FIXME | ||
2223 | |||
2224 | // Since we copy from a source group that is in selected | ||
2225 | // state, but the copy is shown deselected in the viewer, | ||
2226 | // We need to clear the selection flag here, else that | ||
2227 | // prim never gets persisted at all. The client doesn't | ||
2228 | // think it's selected, so it will never send a deselect... | ||
2229 | copy.IsSelected = false; | ||
2230 | |||
2231 | m_numTotalPrim += copy.Parts.Length; | ||
2232 | |||
2233 | // Go through all parts (primitives and meshes) of this Scene Object | ||
2234 | foreach (SceneObjectPart part in copy.Parts) | ||
2235 | { | ||
2236 | // Keep track of the total number of meshes or geometric primitives now in the scene; | ||
2237 | // determine which object this is based on its primitive type: sculpted (sculpt) prim refers to | ||
2238 | // a mesh and all other prims (i.e. box, sphere, etc) are geometric primitives | ||
2239 | if (part.GetPrimType() == PrimType.SCULPT) | ||
2240 | m_numMesh++; | ||
2241 | else | ||
2242 | m_numPrim++; | ||
2243 | } | ||
2244 | |||
2245 | if (rot != Quaternion.Identity) | ||
2246 | { | ||
2247 | copy.UpdateGroupRotationR(rot); | ||
2248 | } | ||
2249 | ======= | ||
2250 | // Since we copy from a source group that is in selected | 2195 | // Since we copy from a source group that is in selected |
2251 | // state, but the copy is shown deselected in the viewer, | 2196 | // state, but the copy is shown deselected in the viewer, |
2252 | // We need to clear the selection flag here, else that | 2197 | // We need to clear the selection flag here, else that |
2253 | // prim never gets persisted at all. The client doesn't | 2198 | // prim never gets persisted at all. The client doesn't |
2254 | // think it's selected, so it will never send a deselect... | 2199 | // think it's selected, so it will never send a deselect... |
2255 | copy.IsSelected = false; | 2200 | copy.IsSelected = false; |
2256 | >>>>>>> avn/ubitvar | ||
2257 | 2201 | ||
2258 | m_numPrim += copy.Parts.Length; | 2202 | m_numPrim += copy.Parts.Length; |
2259 | 2203 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs index 79de6c0..98617d1 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs | |||
@@ -266,15 +266,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
266 | for (int i = 0; i < parts.Length; i++) | 266 | for (int i = 0; i < parts.Length; i++) |
267 | { | 267 | { |
268 | SceneObjectPart part = parts[i]; | 268 | SceneObjectPart part = parts[i]; |
269 | <<<<<<< HEAD | 269 | |
270 | // m_log.DebugFormat("[SCENE OBJECT GROUP INVENTORY]: Effective perms of {0} are {1}", part.Name, (OpenMetaverse.PermissionMask)part.OwnerMask); | ||
271 | ownerMask &= part.OwnerMask; | ||
272 | ======= | ||
273 | if (useBase) | 270 | if (useBase) |
274 | ownerMask &= part.BaseMask; | 271 | ownerMask &= part.BaseMask; |
275 | else | 272 | else |
276 | ownerMask &= part.OwnerMask; | 273 | ownerMask &= part.OwnerMask; |
277 | >>>>>>> avn/ubitvar | 274 | |
278 | perms &= part.Inventory.MaskEffectivePermissions(); | 275 | perms &= part.Inventory.MaskEffectivePermissions(); |
279 | } | 276 | } |
280 | 277 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index a703377..5e1801a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | |||
@@ -122,17 +122,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
122 | /// since the group's last persistent backup | 122 | /// since the group's last persistent backup |
123 | /// </summary> | 123 | /// </summary> |
124 | private bool m_hasGroupChanged = false; | 124 | private bool m_hasGroupChanged = false; |
125 | <<<<<<< HEAD | ||
126 | private long timeFirstChanged; | ||
127 | private long timeLastChanged; | ||
128 | ======= | ||
129 | private long timeFirstChanged = 0; | 125 | private long timeFirstChanged = 0; |
130 | private long timeLastChanged = 0; | 126 | private long timeLastChanged = 0; |
131 | private long m_maxPersistTime = 0; | 127 | private long m_maxPersistTime = 0; |
132 | private long m_minPersistTime = 0; | 128 | private long m_minPersistTime = 0; |
133 | // private Random m_rand; | 129 | // private Random m_rand; |
134 | private List<ScenePresence> m_linkedAvatars = new List<ScenePresence>(); | 130 | private List<ScenePresence> m_linkedAvatars = new List<ScenePresence>(); |
135 | >>>>>>> avn/ubitvar | ||
136 | 131 | ||
137 | /// <summary> | 132 | /// <summary> |
138 | /// This indicates whether the object has changed such that it needs to be repersisted to permenant storage | 133 | /// This indicates whether the object has changed such that it needs to be repersisted to permenant storage |
@@ -205,7 +200,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
205 | /// the prims in the database still use the old SceneGroupID. That's a problem if the group | 200 | /// the prims in the database still use the old SceneGroupID. That's a problem if the group |
206 | /// is deleted, because we delete groups by searching for prims by their SceneGroupID. | 201 | /// is deleted, because we delete groups by searching for prims by their SceneGroupID. |
207 | /// </summary> | 202 | /// </summary> |
208 | <<<<<<< HEAD | ||
209 | public bool GroupContainsForeignPrims | 203 | public bool GroupContainsForeignPrims |
210 | { | 204 | { |
211 | private set | 205 | private set |
@@ -218,9 +212,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
218 | get { return m_groupContainsForeignPrims; } | 212 | get { return m_groupContainsForeignPrims; } |
219 | } | 213 | } |
220 | 214 | ||
221 | ======= | ||
222 | public bool HasGroupChangedDueToDelink { get; set; } | 215 | public bool HasGroupChangedDueToDelink { get; set; } |
223 | >>>>>>> avn/ubitvar | ||
224 | 216 | ||
225 | private bool isTimeToPersist() | 217 | private bool isTimeToPersist() |
226 | { | 218 | { |
@@ -350,7 +342,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
350 | get { return RootPart.VolumeDetectActive; } | 342 | get { return RootPart.VolumeDetectActive; } |
351 | } | 343 | } |
352 | 344 | ||
353 | <<<<<<< HEAD | ||
354 | private Vector3 lastPhysGroupPos; | 345 | private Vector3 lastPhysGroupPos; |
355 | private Quaternion lastPhysGroupRot; | 346 | private Quaternion lastPhysGroupRot; |
356 | 347 | ||
@@ -358,9 +349,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
358 | /// Is this entity set to be saved in persistent storage? | 349 | /// Is this entity set to be saved in persistent storage? |
359 | /// </summary> | 350 | /// </summary> |
360 | public bool Backup { get; private set; } | 351 | public bool Backup { get; private set; } |
361 | ======= | 352 | |
362 | private bool m_isBackedUp; | 353 | private bool m_isBackedUp; |
363 | >>>>>>> avn/ubitvar | ||
364 | 354 | ||
365 | public bool IsBackedUp | 355 | public bool IsBackedUp |
366 | { | 356 | { |
@@ -570,146 +560,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
570 | && !Scene.LoadingPrims | 560 | && !Scene.LoadingPrims |
571 | ) | 561 | ) |
572 | { | 562 | { |
573 | <<<<<<< HEAD | ||
574 | if ( | ||
575 | !Scene.PositionIsInCurrentRegion(val) | ||
576 | && !IsAttachmentCheckFull() | ||
577 | && (!Scene.LoadingPrims) | ||
578 | ) | ||
579 | { | ||
580 | IEntityTransferModule entityTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>(); | ||
581 | string version = String.Empty; | ||
582 | Vector3 newpos = Vector3.Zero; | ||
583 | string failureReason = String.Empty; | ||
584 | OpenSim.Services.Interfaces.GridRegion destination = null; | ||
585 | |||
586 | if (m_rootPart.KeyframeMotion != null) | ||
587 | m_rootPart.KeyframeMotion.StartCrossingCheck(); | ||
588 | |||
589 | bool canCross = true; | ||
590 | foreach (ScenePresence av in GetSittingAvatars()) | ||
591 | { | ||
592 | // We need to cross these agents. First, let's find | ||
593 | // out if any of them can't cross for some reason. | ||
594 | // We have to deny the crossing entirely if any | ||
595 | // of them are banned. Alternatively, we could | ||
596 | // unsit banned agents.... | ||
597 | |||
598 | |||
599 | // We set the avatar position as being the object | ||
600 | // position to get the region to send to | ||
601 | if ((destination = entityTransfer.GetDestination(m_scene, av.UUID, val, out version, out newpos, out failureReason)) == null) | ||
602 | { | ||
603 | canCross = false; | ||
604 | break; | ||
605 | } | ||
606 | |||
607 | m_log.DebugFormat("[SCENE OBJECT]: Avatar {0} needs to be crossed to {1}", av.Name, destination.RegionName); | ||
608 | } | ||
609 | |||
610 | if (canCross) | ||
611 | { | ||
612 | // We unparent the SP quietly so that it won't | ||
613 | // be made to stand up | ||
614 | |||
615 | List<avtocrossInfo> avsToCross = new List<avtocrossInfo>(); | ||
616 | |||
617 | foreach (ScenePresence av in GetSittingAvatars()) | ||
618 | { | ||
619 | avtocrossInfo avinfo = new avtocrossInfo(); | ||
620 | SceneObjectPart parentPart = m_scene.GetSceneObjectPart(av.ParentID); | ||
621 | if (parentPart != null) | ||
622 | av.ParentUUID = parentPart.UUID; | ||
623 | |||
624 | avinfo.av = av; | ||
625 | avinfo.ParentID = av.ParentID; | ||
626 | avsToCross.Add(avinfo); | ||
627 | |||
628 | av.PrevSitOffset = av.OffsetPosition; | ||
629 | av.ParentID = 0; | ||
630 | } | ||
631 | |||
632 | m_scene.CrossPrimGroupIntoNewRegion(val, this, true); | ||
633 | |||
634 | // Normalize | ||
635 | if (val.X >= m_scene.RegionInfo.RegionSizeX) | ||
636 | val.X -= m_scene.RegionInfo.RegionSizeX; | ||
637 | if (val.Y >= m_scene.RegionInfo.RegionSizeY) | ||
638 | val.Y -= m_scene.RegionInfo.RegionSizeY; | ||
639 | if (val.X < 0) | ||
640 | val.X += m_scene.RegionInfo.RegionSizeX; | ||
641 | if (val.Y < 0) | ||
642 | val.Y += m_scene.RegionInfo.RegionSizeY; | ||
643 | |||
644 | // If it's deleted, crossing was successful | ||
645 | if (IsDeleted) | ||
646 | { | ||
647 | foreach (avtocrossInfo avinfo in avsToCross) | ||
648 | { | ||
649 | ScenePresence av = avinfo.av; | ||
650 | if (!av.IsInTransit) // just in case... | ||
651 | { | ||
652 | m_log.DebugFormat("[SCENE OBJECT]: Crossing avatar {0} to {1}", av.Name, val); | ||
653 | |||
654 | av.IsInTransit = true; | ||
655 | |||
656 | // A temporary measure to allow regression tests to work. | ||
657 | // Quite possibly, all BeginInvoke() calls should be replaced by Util.FireAndForget | ||
658 | // or similar since BeginInvoke() always uses the system threadpool to launch | ||
659 | // threads rather than any replace threadpool that we might be using. | ||
660 | if (Util.FireAndForgetMethod == FireAndForgetMethod.RegressionTest) | ||
661 | { | ||
662 | entityTransfer.CrossAgentToNewRegionAsync(av, val, destination, av.Flying, version); | ||
663 | CrossAgentToNewRegionCompleted(av); | ||
664 | } | ||
665 | else | ||
666 | { | ||
667 | CrossAgentToNewRegionDelegate d = entityTransfer.CrossAgentToNewRegionAsync; | ||
668 | d.BeginInvoke( | ||
669 | av, val, destination, av.Flying, version, | ||
670 | ar => CrossAgentToNewRegionCompleted(d.EndInvoke(ar)), null); | ||
671 | } | ||
672 | } | ||
673 | else | ||
674 | { | ||
675 | m_log.DebugFormat("[SCENE OBJECT]: Not crossing avatar {0} to {1} because it's already in transit", av.Name, val); | ||
676 | } | ||
677 | } | ||
678 | |||
679 | return; | ||
680 | } | ||
681 | else // cross failed, put avas back ?? | ||
682 | { | ||
683 | foreach (avtocrossInfo avinfo in avsToCross) | ||
684 | { | ||
685 | ScenePresence av = avinfo.av; | ||
686 | av.ParentUUID = UUID.Zero; | ||
687 | av.ParentID = avinfo.ParentID; | ||
688 | } | ||
689 | } | ||
690 | } | ||
691 | else | ||
692 | { | ||
693 | if (m_rootPart.KeyframeMotion != null) | ||
694 | m_rootPart.KeyframeMotion.CrossingFailure(); | ||
695 | |||
696 | if (RootPart.PhysActor != null) | ||
697 | { | ||
698 | RootPart.PhysActor.CrossingFailure(); | ||
699 | } | ||
700 | } | ||
701 | |||
702 | Vector3 oldp = AbsolutePosition; | ||
703 | val.X = Util.Clamp<float>(oldp.X, 0.5f, (float)m_scene.RegionInfo.RegionSizeX - 0.5f); | ||
704 | val.Y = Util.Clamp<float>(oldp.Y, 0.5f, (float)m_scene.RegionInfo.RegionSizeY - 0.5f); | ||
705 | val.Z = Util.Clamp<float>(oldp.Z, 0.5f, Constants.RegionHeight); | ||
706 | ======= | ||
707 | if (!inTransit) | 563 | if (!inTransit) |
708 | { | 564 | { |
709 | inTransit = true; | 565 | inTransit = true; |
710 | SOGCrossDelegate d = CrossAsync; | 566 | SOGCrossDelegate d = CrossAsync; |
711 | d.BeginInvoke(this, val, CrossAsyncCompleted, d); | 567 | d.BeginInvoke(this, val, CrossAsyncCompleted, d); |
712 | >>>>>>> avn/ubitvar | ||
713 | } | 568 | } |
714 | return; | 569 | return; |
715 | } | 570 | } |
@@ -1200,7 +1055,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1200 | /// No avatar should appear more than once in this list. | 1055 | /// No avatar should appear more than once in this list. |
1201 | /// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart. | 1056 | /// Do not manipulate this list directly - use the Add/Remove sitting avatar methods on SceneObjectPart. |
1202 | /// </remarks> | 1057 | /// </remarks> |
1203 | protected internal List<ScenePresence> m_sittingAvatars = new List<ScenePresence>(); | 1058 | protected internal List<UUID> m_sittingAvatars = new List<UUID>(); |
1204 | 1059 | ||
1205 | #endregion | 1060 | #endregion |
1206 | 1061 | ||
@@ -1311,14 +1166,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1311 | /// </summary> | 1166 | /// </summary> |
1312 | public virtual void AttachToBackup() | 1167 | public virtual void AttachToBackup() |
1313 | { | 1168 | { |
1314 | <<<<<<< HEAD | ||
1315 | if (CanBeBackedUp) | ||
1316 | ======= | ||
1317 | if (IsAttachment) return; | 1169 | if (IsAttachment) return; |
1318 | m_scene.SceneGraph.FireAttachToBackup(this); | 1170 | m_scene.SceneGraph.FireAttachToBackup(this); |
1319 | 1171 | ||
1320 | if (InSceneBackup) | 1172 | // if (InSceneBackup) |
1321 | >>>>>>> avn/ubitvar | ||
1322 | { | 1173 | { |
1323 | // m_log.DebugFormat( | 1174 | // m_log.DebugFormat( |
1324 | // "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID); | 1175 | // "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID); |
@@ -1431,21 +1282,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
1431 | /// <returns></returns> | 1282 | /// <returns></returns> |
1432 | public void GetAxisAlignedBoundingBoxRaw(out float minX, out float maxX, out float minY, out float maxY, out float minZ, out float maxZ) | 1283 | public void GetAxisAlignedBoundingBoxRaw(out float minX, out float maxX, out float minY, out float maxY, out float minZ, out float maxZ) |
1433 | { | 1284 | { |
1434 | <<<<<<< HEAD | ||
1435 | maxX = -256f; | ||
1436 | maxY = -256f; | ||
1437 | maxZ = -256f; | ||
1438 | minX = 10000f; | ||
1439 | minY = 10000f; | ||
1440 | minZ = 10000f; | ||
1441 | ======= | ||
1442 | maxX = float.MinValue; | 1285 | maxX = float.MinValue; |
1443 | maxY = float.MinValue; | 1286 | maxY = float.MinValue; |
1444 | maxZ = float.MinValue; | 1287 | maxZ = float.MinValue; |
1445 | minX = float.MaxValue; | 1288 | minX = float.MaxValue; |
1446 | minY = float.MaxValue; | 1289 | minY = float.MaxValue; |
1447 | minZ = float.MaxValue; | 1290 | minZ = float.MaxValue; |
1448 | >>>>>>> avn/ubitvar | ||
1449 | 1291 | ||
1450 | SceneObjectPart[] parts = m_parts.GetArray(); | 1292 | SceneObjectPart[] parts = m_parts.GetArray(); |
1451 | foreach (SceneObjectPart part in parts) | 1293 | foreach (SceneObjectPart part in parts) |
@@ -1843,17 +1685,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1843 | } | 1685 | } |
1844 | } | 1686 | } |
1845 | 1687 | ||
1846 | <<<<<<< HEAD | ||
1847 | |||
1848 | /// <summary> | ||
1849 | /// | ||
1850 | /// </summary> | ||
1851 | /// <param name="part"></param> | ||
1852 | private void SetPartAsNonRoot(SceneObjectPart part) | ||
1853 | { | ||
1854 | part.ParentID = m_rootPart.LocalId; | ||
1855 | part.ClearUndoState(); | ||
1856 | ======= | ||
1857 | /// <summary> | 1688 | /// <summary> |
1858 | /// Add the avatar to this linkset (avatar is sat). | 1689 | /// Add the avatar to this linkset (avatar is sat). |
1859 | /// </summary> | 1690 | /// </summary> |
@@ -1893,7 +1724,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1893 | public List<ScenePresence> GetLinkedAvatars() | 1724 | public List<ScenePresence> GetLinkedAvatars() |
1894 | { | 1725 | { |
1895 | return m_linkedAvatars; | 1726 | return m_linkedAvatars; |
1896 | >>>>>>> avn/ubitvar | ||
1897 | } | 1727 | } |
1898 | 1728 | ||
1899 | /// <summary> | 1729 | /// <summary> |
@@ -2197,14 +2027,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2197 | 2027 | ||
2198 | if (Scene != null) | 2028 | if (Scene != null) |
2199 | { | 2029 | { |
2200 | <<<<<<< HEAD | ||
2201 | if (!sp.IsChildAgent && sp.ParentID == part.LocalId) | ||
2202 | sp.StandUp(); | ||
2203 | |||
2204 | if (!silent) | ||
2205 | ======= | ||
2206 | Scene.ForEachRootScenePresence(delegate(ScenePresence avatar) | 2030 | Scene.ForEachRootScenePresence(delegate(ScenePresence avatar) |
2207 | >>>>>>> avn/ubitvar | ||
2208 | { | 2031 | { |
2209 | if (avatar.ParentID == LocalId) | 2032 | if (avatar.ParentID == LocalId) |
2210 | avatar.StandUp(); | 2033 | avatar.StandUp(); |
@@ -2504,16 +2327,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2504 | /// <returns></returns> | 2327 | /// <returns></returns> |
2505 | public SceneObjectGroup Copy(bool userExposed) | 2328 | public SceneObjectGroup Copy(bool userExposed) |
2506 | { | 2329 | { |
2507 | <<<<<<< HEAD | ||
2508 | // FIXME: This is dangerous since it's easy to forget to reset some references when necessary and end up | ||
2509 | // with bugs that only occur in some circumstances (e.g. crossing between regions on the same simulator | ||
2510 | // but not between regions on different simulators). Really, all copying should be done explicitly. | ||
2511 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); | ||
2512 | |||
2513 | dupe.Backup = false; | ||
2514 | dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>(); | ||
2515 | dupe.m_sittingAvatars = new List<ScenePresence>(); | ||
2516 | ======= | ||
2517 | m_dupeInProgress = true; | 2330 | m_dupeInProgress = true; |
2518 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); | 2331 | SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone(); |
2519 | dupe.m_isBackedUp = false; | 2332 | dupe.m_isBackedUp = false; |
@@ -2525,7 +2338,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2525 | dupe.m_linkedAvatars = new List<ScenePresence>(); | 2338 | dupe.m_linkedAvatars = new List<ScenePresence>(); |
2526 | dupe.m_sittingAvatars = new List<UUID>(); | 2339 | dupe.m_sittingAvatars = new List<UUID>(); |
2527 | 2340 | ||
2528 | >>>>>>> avn/ubitvar | ||
2529 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); | 2341 | dupe.CopyRootPart(m_rootPart, OwnerID, GroupID, userExposed); |
2530 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; | 2342 | dupe.m_rootPart.LinkNum = m_rootPart.LinkNum; |
2531 | 2343 | ||
@@ -2700,12 +2512,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
2700 | return RootPart.Torque; | 2512 | return RootPart.Torque; |
2701 | } | 2513 | } |
2702 | 2514 | ||
2703 | <<<<<<< HEAD | ||
2704 | public void MoveToTarget(Vector3 target, float tau) | ||
2705 | ======= | ||
2706 | // This is used by both Double-Click Auto-Pilot and llMoveToTarget() in an attached object | 2515 | // This is used by both Double-Click Auto-Pilot and llMoveToTarget() in an attached object |
2707 | public void moveToTarget(Vector3 target, float tau) | 2516 | public void MoveToTarget(Vector3 target, float tau) |
2708 | >>>>>>> avn/ubitvar | ||
2709 | { | 2517 | { |
2710 | if (IsAttachment) | 2518 | if (IsAttachment) |
2711 | { | 2519 | { |
@@ -2732,21 +2540,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2732 | if (IsAttachment) | 2540 | if (IsAttachment) |
2733 | { | 2541 | { |
2734 | ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); | 2542 | ScenePresence avatar = m_scene.GetScenePresence(AttachedAvatar); |
2735 | <<<<<<< HEAD | ||
2736 | |||
2737 | if (avatar != null) | ||
2738 | avatar.ResetMoveToTarget(); | ||
2739 | } | ||
2740 | else | ||
2741 | { | ||
2742 | PhysicsActor pa = RootPart.PhysActor; | ||
2743 | 2543 | ||
2744 | if (pa != null && pa.PIDActive) | ||
2745 | { | ||
2746 | pa.PIDActive = false; | ||
2747 | |||
2748 | ScheduleGroupForTerseUpdate(); | ||
2749 | ======= | ||
2750 | if (avatar != null) | 2544 | if (avatar != null) |
2751 | { | 2545 | { |
2752 | avatar.ResetMoveToTarget(); | 2546 | avatar.ResetMoveToTarget(); |
@@ -2786,7 +2580,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2786 | rootpart.PhysActor.APIDDamping = damping; | 2580 | rootpart.PhysActor.APIDDamping = damping; |
2787 | rootpart.PhysActor.APIDActive = true; | 2581 | rootpart.PhysActor.APIDActive = true; |
2788 | } | 2582 | } |
2789 | >>>>>>> avn/ubitvar | ||
2790 | } | 2583 | } |
2791 | } | 2584 | } |
2792 | } | 2585 | } |
@@ -3484,18 +3277,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3484 | 3277 | ||
3485 | linkPart.Rezzed = RootPart.Rezzed; | 3278 | linkPart.Rezzed = RootPart.Rezzed; |
3486 | 3279 | ||
3487 | <<<<<<< HEAD | ||
3488 | // We must persist the delinked group to the database immediately, for safety. The problem | ||
3489 | // is that although in memory the new group has a new SceneGroupID, in the database it | ||
3490 | // still has the parent group's SceneGroupID (until the next backup). This means that if the | ||
3491 | // parent group is deleted then the delinked group will also be deleted from the database. | ||
3492 | // This problem will disappear if the region remains alive long enough for another backup, | ||
3493 | // since at that time the delinked group's new SceneGroupID will be written to the database. | ||
3494 | // But if the region crashes before that then the prims will be permanently gone, and this must | ||
3495 | // not happen. (We can't use a just-in-time trick like GroupContainsForeignPrims in this case | ||
3496 | // because the delinked group doesn't know when the source group is deleted.) | ||
3497 | m_scene.ForceSceneObjectBackup(objectGroup); | ||
3498 | ======= | ||
3499 | // When we delete a group, we currently have to force persist to the database if the object id has changed | 3280 | // When we delete a group, we currently have to force persist to the database if the object id has changed |
3500 | // (since delete works by deleting all rows which have a given object id) | 3281 | // (since delete works by deleting all rows which have a given object id) |
3501 | 3282 | ||
@@ -3507,7 +3288,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3507 | m_rootPart.PhysActor.Building = false; | 3288 | m_rootPart.PhysActor.Building = false; |
3508 | 3289 | ||
3509 | objectGroup.HasGroupChangedDueToDelink = true; | 3290 | objectGroup.HasGroupChangedDueToDelink = true; |
3510 | >>>>>>> avn/ubitvar | ||
3511 | 3291 | ||
3512 | if (sendEvents) | 3292 | if (sendEvents) |
3513 | linkPart.TriggerScriptChangedEvent(Changed.LINK); | 3293 | linkPart.TriggerScriptChangedEvent(Changed.LINK); |
@@ -3521,13 +3301,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3521 | /// <param name="objectGroup"></param> | 3301 | /// <param name="objectGroup"></param> |
3522 | public virtual void DetachFromBackup() | 3302 | public virtual void DetachFromBackup() |
3523 | { | 3303 | { |
3524 | <<<<<<< HEAD | ||
3525 | if (Backup && Scene != null) | ||
3526 | ======= | ||
3527 | if (m_scene != null) | 3304 | if (m_scene != null) |
3528 | m_scene.SceneGraph.FireDetachFromBackup(this); | 3305 | m_scene.SceneGraph.FireDetachFromBackup(this); |
3529 | if (m_isBackedUp && Scene != null) | 3306 | if (m_isBackedUp && Scene != null) |
3530 | >>>>>>> avn/ubitvar | ||
3531 | m_scene.EventManager.OnBackup -= ProcessBackup; | 3307 | m_scene.EventManager.OnBackup -= ProcessBackup; |
3532 | 3308 | ||
3533 | Backup = false; | 3309 | Backup = false; |
@@ -3973,9 +3749,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
3973 | { | 3749 | { |
3974 | RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF); | 3750 | RootPart.UpdatePermissions(AgentID, field, localID, mask, addRemTF); |
3975 | 3751 | ||
3976 | <<<<<<< HEAD | ||
3977 | AdjustChildPrimPermissions(Scene.Permissions.IsGod(AgentID)); | ||
3978 | ======= | ||
3979 | bool god = Scene.Permissions.IsGod(AgentID); | 3752 | bool god = Scene.Permissions.IsGod(AgentID); |
3980 | 3753 | ||
3981 | if (field == 1 && god) | 3754 | if (field == 1 && god) |
@@ -3986,8 +3759,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3986 | }); | 3759 | }); |
3987 | } | 3760 | } |
3988 | 3761 | ||
3989 | AdjustChildPrimPermissions(); | 3762 | AdjustChildPrimPermissions(false); |
3990 | >>>>>>> avn/ubitvar | ||
3991 | 3763 | ||
3992 | if (field == 1 && god) // Base mask was set. Update all child part inventories | 3764 | if (field == 1 && god) // Base mask was set. Update all child part inventories |
3993 | { | 3765 | { |
@@ -5037,10 +4809,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
5037 | /// down after it move one place down the list. | 4809 | /// down after it move one place down the list. |
5038 | /// </remarks> | 4810 | /// </remarks> |
5039 | /// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns> | 4811 | /// <returns>A list of the sitting avatars. Returns an empty list if there are no sitting avatars.</returns> |
5040 | public List<ScenePresence> GetSittingAvatars() | 4812 | public List<UUID> GetSittingAvatars() |
5041 | { | 4813 | { |
5042 | lock (m_sittingAvatars) | 4814 | lock (m_sittingAvatars) |
5043 | return new List<ScenePresence>(m_sittingAvatars); | 4815 | return new List<UUID>(m_sittingAvatars); |
5044 | } | 4816 | } |
5045 | 4817 | ||
5046 | /// <summary> | 4818 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 1cfa8ed..c300b96 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1046,39 +1046,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
1046 | } | 1046 | } |
1047 | set | 1047 | set |
1048 | { | 1048 | { |
1049 | <<<<<<< HEAD | ||
1050 | if (Util.IsNanOrInfinity(value)) | 1049 | if (Util.IsNanOrInfinity(value)) |
1051 | m_angularVelocity = Vector3.Zero; | 1050 | m_angularVelocity = Vector3.Zero; |
1052 | else | 1051 | else |
1053 | m_angularVelocity = value; | 1052 | m_angularVelocity = value; |
1054 | 1053 | ||
1055 | PhysicsActor actor = PhysActor; | 1054 | PhysicsActor actor = PhysActor; |
1056 | if ((actor != null) && actor.IsPhysical) | ||
1057 | actor.RotationalVelocity = m_angularVelocity; | ||
1058 | ======= | ||
1059 | m_angularVelocity = value; | ||
1060 | PhysicsActor actor = PhysActor; | ||
1061 | if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE) | 1055 | if ((actor != null) && actor.IsPhysical && ParentGroup.RootPart == this && VehicleType == (int)Vehicle.TYPE_NONE) |
1062 | { | 1056 | { |
1063 | actor.RotationalVelocity = m_angularVelocity; | 1057 | actor.RotationalVelocity = m_angularVelocity; |
1064 | } | 1058 | } |
1065 | >>>>>>> avn/ubitvar | ||
1066 | } | 1059 | } |
1067 | } | 1060 | } |
1068 | 1061 | ||
1069 | /// <summary></summary> | 1062 | /// <summary></summary> |
1070 | public Vector3 Acceleration | 1063 | public Vector3 Acceleration |
1071 | { | 1064 | { |
1072 | <<<<<<< HEAD | ||
1073 | get { return m_acceleration; } | ||
1074 | set | ||
1075 | { | ||
1076 | if (Util.IsNanOrInfinity(value)) | ||
1077 | m_acceleration = Vector3.Zero; | ||
1078 | else | ||
1079 | m_acceleration = value; | ||
1080 | } | ||
1081 | ======= | ||
1082 | get | 1065 | get |
1083 | { | 1066 | { |
1084 | PhysicsActor actor = PhysActor; | 1067 | PhysicsActor actor = PhysActor; |
@@ -1088,9 +1071,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
1088 | } | 1071 | } |
1089 | return m_acceleration; | 1072 | return m_acceleration; |
1090 | } | 1073 | } |
1091 | 1074 | ||
1092 | set { m_acceleration = value; } | 1075 | set |
1093 | >>>>>>> avn/ubitvar | 1076 | { |
1077 | if (Util.IsNanOrInfinity(value)) | ||
1078 | m_acceleration = Vector3.Zero; | ||
1079 | else | ||
1080 | m_acceleration = value; | ||
1081 | } | ||
1094 | } | 1082 | } |
1095 | 1083 | ||
1096 | public string Description { get; set; } | 1084 | public string Description { get; set; } |
@@ -1431,7 +1419,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1431 | /// <value> | 1419 | /// <value> |
1432 | /// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene. | 1420 | /// null if there are no sitting avatars. This is to save us create a hashset for every prim in a scene. |
1433 | /// </value> | 1421 | /// </value> |
1434 | private HashSet<ScenePresence> m_sittingAvatars; | 1422 | private HashSet<UUID> m_sittingAvatars; |
1435 | 1423 | ||
1436 | public virtual UUID RegionID | 1424 | public virtual UUID RegionID |
1437 | { | 1425 | { |
@@ -1932,7 +1920,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1932 | 1920 | ||
1933 | public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim) | 1921 | public void AddTextureAnimation(Primitive.TextureAnimation pTexAnim) |
1934 | { | 1922 | { |
1935 | <<<<<<< HEAD | ||
1936 | byte[] data; | 1923 | byte[] data; |
1937 | 1924 | ||
1938 | if (pTexAnim.Flags == Primitive.TextureAnimMode.ANIM_OFF) | 1925 | if (pTexAnim.Flags == Primitive.TextureAnimMode.ANIM_OFF) |
@@ -1944,13 +1931,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
1944 | data = new byte[16]; | 1931 | data = new byte[16]; |
1945 | int pos = 0; | 1932 | int pos = 0; |
1946 | 1933 | ||
1947 | ======= | ||
1948 | if (((int)pTexAnim.Flags & 1) != 0) // ANIM_ON | ||
1949 | { | ||
1950 | byte[] data = new byte[16]; | ||
1951 | int pos = 0; | ||
1952 | |||
1953 | >>>>>>> avn/ubitvar | ||
1954 | // The flags don't like conversion from uint to byte, so we have to do | 1934 | // The flags don't like conversion from uint to byte, so we have to do |
1955 | // it the crappy way. See the above function :( | 1935 | // it the crappy way. See the above function :( |
1956 | 1936 | ||
@@ -1962,17 +1942,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1962 | Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos); | 1942 | Utils.FloatToBytes(pTexAnim.Start).CopyTo(data, pos); |
1963 | Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4); | 1943 | Utils.FloatToBytes(pTexAnim.Length).CopyTo(data, pos + 4); |
1964 | Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8); | 1944 | Utils.FloatToBytes(pTexAnim.Rate).CopyTo(data, pos + 8); |
1965 | <<<<<<< HEAD | 1945 | |
1966 | } | ||
1967 | ======= | ||
1968 | >>>>>>> avn/ubitvar | ||
1969 | |||
1970 | m_TextureAnimation = data; | ||
1971 | } | ||
1972 | else | ||
1973 | { | ||
1974 | m_TextureAnimation = Utils.EmptyBytes; | ||
1975 | } | 1946 | } |
1947 | m_TextureAnimation = data; | ||
1976 | } | 1948 | } |
1977 | 1949 | ||
1978 | public void AdjustSoundGain(double volume) | 1950 | public void AdjustSoundGain(double volume) |
@@ -2240,7 +2212,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2240 | Array.Copy(Shape.ExtraParams, extraP, extraP.Length); | 2212 | Array.Copy(Shape.ExtraParams, extraP, extraP.Length); |
2241 | dupe.Shape.ExtraParams = extraP; | 2213 | dupe.Shape.ExtraParams = extraP; |
2242 | 2214 | ||
2243 | dupe.m_sittingAvatars = new HashSet<ScenePresence>(); | 2215 | dupe.m_sittingAvatars = new HashSet<UUID>(); |
2244 | 2216 | ||
2245 | // safeguard actual copy is done in sog.copy | 2217 | // safeguard actual copy is done in sog.copy |
2246 | dupe.KeyframeMotion = null; | 2218 | dupe.KeyframeMotion = null; |
@@ -2829,7 +2801,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2829 | CollidingMessage = CreateColliderArgs(this, colliders); | 2801 | CollidingMessage = CreateColliderArgs(this, colliders); |
2830 | 2802 | ||
2831 | if (CollidingMessage.Colliders.Count > 0) | 2803 | if (CollidingMessage.Colliders.Count > 0) |
2832 | DoNotify(notify, LocalId, CollidingMessage); | 2804 | notify(LocalId, CollidingMessage); |
2833 | 2805 | ||
2834 | if (PassCollisions) | 2806 | if (PassCollisions) |
2835 | sendToRoot = true; | 2807 | sendToRoot = true; |
@@ -2843,7 +2815,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2843 | { | 2815 | { |
2844 | CollidingMessage = CreateColliderArgs(ParentGroup.RootPart, colliders); | 2816 | CollidingMessage = CreateColliderArgs(ParentGroup.RootPart, colliders); |
2845 | if (CollidingMessage.Colliders.Count > 0) | 2817 | if (CollidingMessage.Colliders.Count > 0) |
2846 | DoNotify(notify, ParentGroup.RootPart.LocalId, CollidingMessage); | 2818 | notify(ParentGroup.RootPart.LocalId, CollidingMessage); |
2847 | } | 2819 | } |
2848 | } | 2820 | } |
2849 | } | 2821 | } |
@@ -2858,35 +2830,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2858 | colliding.Add(CreateDetObjectForGround()); | 2830 | colliding.Add(CreateDetObjectForGround()); |
2859 | LandCollidingMessage.Colliders = colliding; | 2831 | LandCollidingMessage.Colliders = colliding; |
2860 | 2832 | ||
2861 | <<<<<<< HEAD | ||
2862 | DoNotify(notify, LocalId, LandCollidingMessage); | ||
2863 | } | ||
2864 | } | ||
2865 | |||
2866 | private void DoNotify(ScriptCollidingNotification notify, uint id, ColliderArgs collargs) | ||
2867 | { | ||
2868 | if (m_parentGroup != null && ParentGroup.Scene != null && ParentGroup.Scene.ShouldUseFireAndForgetForCollisions) | ||
2869 | { | ||
2870 | // For those learning C#, FireAndForget takes a function, an object to pass | ||
2871 | // to that function and an ID string. The "oo => {}" construct is a lambda expression | ||
2872 | // for a function with one arguement ('oo'). The 'new Object[] {}" construct creates an Object | ||
2873 | // that is an object array and initializes it with three items (the parameters | ||
2874 | // being passed). The parameters passed are the function to call ('notify') and | ||
2875 | // its two arguements. Finally, once in the function (called later by the FireAndForget | ||
2876 | // thread scheduler), the passed object is cast to an object array and then each | ||
2877 | // of its items (aoo[0] to aoo[2]) are individually cast to what they are and | ||
2878 | // then used in a call of the passed ScriptCollidingNotification function. | ||
2879 | Util.FireAndForget(oo => | ||
2880 | { | ||
2881 | Object[] aoo = (Object[])oo; | ||
2882 | ((ScriptCollidingNotification)aoo[0])((uint)aoo[1], (ColliderArgs)aoo[2]); | ||
2883 | |||
2884 | }, new Object[] { notify, id, collargs }, "SOP.Collision"); | ||
2885 | } | ||
2886 | else | ||
2887 | { | ||
2888 | notify(id, collargs); | ||
2889 | ======= | ||
2890 | if (Inventory.ContainsScripts()) | 2833 | if (Inventory.ContainsScripts()) |
2891 | { | 2834 | { |
2892 | if (!PassCollisions) | 2835 | if (!PassCollisions) |
@@ -2898,7 +2841,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2898 | if ((ParentGroup.RootPart.ScriptEvents & ev) != 0 && sendToRoot) | 2841 | if ((ParentGroup.RootPart.ScriptEvents & ev) != 0 && sendToRoot) |
2899 | { | 2842 | { |
2900 | notify(ParentGroup.RootPart.LocalId, LandCollidingMessage); | 2843 | notify(ParentGroup.RootPart.LocalId, LandCollidingMessage); |
2901 | >>>>>>> avn/ubitvar | ||
2902 | } | 2844 | } |
2903 | } | 2845 | } |
2904 | 2846 | ||
@@ -3046,12 +2988,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
3046 | 2988 | ||
3047 | if (pa != null) | 2989 | if (pa != null) |
3048 | { | 2990 | { |
3049 | <<<<<<< HEAD | ||
3050 | Vector3 newpos = pa.Position; | 2991 | Vector3 newpos = pa.Position; |
3051 | ======= | ||
3052 | Vector3 newpos = new Vector3(pa.Position.GetBytes(), 0); | ||
3053 | |||
3054 | >>>>>>> avn/ubitvar | ||
3055 | if (!ParentGroup.Scene.PositionIsInCurrentRegion(newpos)) | 2992 | if (!ParentGroup.Scene.PositionIsInCurrentRegion(newpos)) |
3056 | { | 2993 | { |
3057 | // Setting position outside current region will start region crossing | 2994 | // Setting position outside current region will start region crossing |
@@ -3996,14 +3933,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
3996 | 3933 | ||
3997 | public void StopMoveToTarget() | 3934 | public void StopMoveToTarget() |
3998 | { | 3935 | { |
3999 | <<<<<<< HEAD | ||
4000 | ParentGroup.StopMoveToTarget(); | 3936 | ParentGroup.StopMoveToTarget(); |
4001 | ======= | ||
4002 | ParentGroup.stopMoveToTarget(); | ||
4003 | |||
4004 | // ParentGroup.ScheduleGroupForTerseUpdate(); | ||
4005 | //ParentGroup.ScheduleGroupForFullUpdate(); | ||
4006 | >>>>>>> avn/ubitvar | ||
4007 | } | 3937 | } |
4008 | 3938 | ||
4009 | public void StoreUndoState(ObjectChangeType change) | 3939 | public void StoreUndoState(ObjectChangeType change) |
@@ -4665,8 +4595,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
4665 | 4595 | ||
4666 | public void ClonePermissions(SceneObjectPart source) | 4596 | public void ClonePermissions(SceneObjectPart source) |
4667 | { | 4597 | { |
4668 | bool update = false; | ||
4669 | |||
4670 | uint prevOwnerMask = OwnerMask; | 4598 | uint prevOwnerMask = OwnerMask; |
4671 | uint prevGroupMask = GroupMask; | 4599 | uint prevGroupMask = GroupMask; |
4672 | uint prevEveryoneMask = EveryoneMask; | 4600 | uint prevEveryoneMask = EveryoneMask; |
@@ -4851,12 +4779,7 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
4851 | } | 4779 | } |
4852 | else // it already has a physical representation | 4780 | else // it already has a physical representation |
4853 | { | 4781 | { |
4854 | <<<<<<< HEAD | 4782 | |
4855 | pa.SetMaterial(Material); | ||
4856 | pa.Position = GetWorldPosition(); | ||
4857 | pa.Orientation = GetWorldRotation(); | ||
4858 | DoPhysicsPropertyUpdate(UsePhysics, true); | ||
4859 | ======= | ||
4860 | DoPhysicsPropertyUpdate(UsePhysics, false); // Update physical status. | 4783 | DoPhysicsPropertyUpdate(UsePhysics, false); // Update physical status. |
4861 | /* moved into DoPhysicsPropertyUpdate | 4784 | /* moved into DoPhysicsPropertyUpdate |
4862 | if(VolumeDetectActive) | 4785 | if(VolumeDetectActive) |
@@ -4864,7 +4787,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
4864 | else | 4787 | else |
4865 | pa.SetVolumeDetect(0); | 4788 | pa.SetVolumeDetect(0); |
4866 | */ | 4789 | */ |
4867 | >>>>>>> avn/ubitvar | ||
4868 | 4790 | ||
4869 | if (pa.Building != building) | 4791 | if (pa.Building != building) |
4870 | pa.Building = building; | 4792 | pa.Building = building; |
@@ -5621,19 +5543,19 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
5621 | /// true if the avatar was not already recorded, false otherwise. | 5543 | /// true if the avatar was not already recorded, false otherwise. |
5622 | /// </returns> | 5544 | /// </returns> |
5623 | /// <param name='avatarId'></param> | 5545 | /// <param name='avatarId'></param> |
5624 | protected internal bool AddSittingAvatar(ScenePresence sp) | 5546 | protected internal bool AddSittingAvatar(UUID id) |
5625 | { | 5547 | { |
5626 | lock (ParentGroup.m_sittingAvatars) | 5548 | lock (ParentGroup.m_sittingAvatars) |
5627 | { | 5549 | { |
5628 | if (IsSitTargetSet && SitTargetAvatar == UUID.Zero) | 5550 | if (IsSitTargetSet && SitTargetAvatar == UUID.Zero) |
5629 | SitTargetAvatar = sp.UUID; | 5551 | SitTargetAvatar = id; |
5630 | 5552 | ||
5631 | if (m_sittingAvatars == null) | 5553 | if (m_sittingAvatars == null) |
5632 | m_sittingAvatars = new HashSet<ScenePresence>(); | 5554 | m_sittingAvatars = new HashSet<UUID>(); |
5633 | 5555 | ||
5634 | if (m_sittingAvatars.Add(sp)) | 5556 | if (m_sittingAvatars.Add(id)) |
5635 | { | 5557 | { |
5636 | ParentGroup.m_sittingAvatars.Add(sp); | 5558 | ParentGroup.m_sittingAvatars.Add(id); |
5637 | 5559 | ||
5638 | return true; | 5560 | return true; |
5639 | } | 5561 | } |
@@ -5650,22 +5572,22 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
5650 | /// true if the avatar was present and removed, false if it was not present. | 5572 | /// true if the avatar was present and removed, false if it was not present. |
5651 | /// </returns> | 5573 | /// </returns> |
5652 | /// <param name='avatarId'></param> | 5574 | /// <param name='avatarId'></param> |
5653 | protected internal bool RemoveSittingAvatar(ScenePresence sp) | 5575 | protected internal bool RemoveSittingAvatar(UUID id) |
5654 | { | 5576 | { |
5655 | lock (ParentGroup.m_sittingAvatars) | 5577 | lock (ParentGroup.m_sittingAvatars) |
5656 | { | 5578 | { |
5657 | if (SitTargetAvatar == sp.UUID) | 5579 | if (SitTargetAvatar == id) |
5658 | SitTargetAvatar = UUID.Zero; | 5580 | SitTargetAvatar = UUID.Zero; |
5659 | 5581 | ||
5660 | if (m_sittingAvatars == null) | 5582 | if (m_sittingAvatars == null) |
5661 | return false; | 5583 | return false; |
5662 | 5584 | ||
5663 | if (m_sittingAvatars.Remove(sp)) | 5585 | if (m_sittingAvatars.Remove(id)) |
5664 | { | 5586 | { |
5665 | if (m_sittingAvatars.Count == 0) | 5587 | if (m_sittingAvatars.Count == 0) |
5666 | m_sittingAvatars = null; | 5588 | m_sittingAvatars = null; |
5667 | 5589 | ||
5668 | ParentGroup.m_sittingAvatars.Remove(sp); | 5590 | ParentGroup.m_sittingAvatars.Remove(id); |
5669 | 5591 | ||
5670 | return true; | 5592 | return true; |
5671 | } | 5593 | } |
@@ -5679,14 +5601,14 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter | |||
5679 | /// </summary> | 5601 | /// </summary> |
5680 | /// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks> | 5602 | /// <remarks>This applies to all sitting avatars whether there is a sit target set or not.</remarks> |
5681 | /// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns> | 5603 | /// <returns>A hashset of the sitting avatars. Returns null if there are no sitting avatars.</returns> |
5682 | public HashSet<ScenePresence> GetSittingAvatars() | 5604 | public HashSet<UUID> GetSittingAvatars() |
5683 | { | 5605 | { |
5684 | lock (ParentGroup.m_sittingAvatars) | 5606 | lock (ParentGroup.m_sittingAvatars) |
5685 | { | 5607 | { |
5686 | if (m_sittingAvatars == null) | 5608 | if (m_sittingAvatars == null) |
5687 | return null; | 5609 | return null; |
5688 | else | 5610 | else |
5689 | return new HashSet<ScenePresence>(m_sittingAvatars); | 5611 | return new HashSet<UUID>(m_sittingAvatars); |
5690 | } | 5612 | } |
5691 | } | 5613 | } |
5692 | 5614 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs index 7af0b20..5811ed9 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs | |||
@@ -892,16 +892,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
892 | offsetHeight = 0; | 892 | offsetHeight = 0; |
893 | return false; | 893 | return false; |
894 | } | 894 | } |
895 | <<<<<<< HEAD | ||
896 | |||
897 | Vector3 bbox; | ||
898 | float offsetHeight; | ||
899 | |||
900 | m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight); | ||
901 | ======= | ||
902 | 895 | ||
903 | bool single = m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight); | 896 | bool single = m_part.ParentGroup.Scene.GetObjectsToRez(rezAsset.Data, false, out objlist, out veclist, out bbox, out offsetHeight); |
904 | >>>>>>> avn/ubitvar | ||
905 | 897 | ||
906 | for (int i = 0; i < objlist.Count; i++) | 898 | for (int i = 0; i < objlist.Count; i++) |
907 | { | 899 | { |
@@ -1068,12 +1060,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1068 | m_items.LockItemsForRead(false); | 1060 | m_items.LockItemsForRead(false); |
1069 | if (type == 10) // Script | 1061 | if (type == 10) // Script |
1070 | { | 1062 | { |
1071 | <<<<<<< HEAD | ||
1072 | // route it through here, to handle script cleanup tasks | ||
1073 | RemoveScriptInstance(itemID, false); | ||
1074 | ======= | ||
1075 | m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID); | 1063 | m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID); |
1076 | >>>>>>> avn/ubitvar | ||
1077 | } | 1064 | } |
1078 | m_items.LockItemsForWrite(true); | 1065 | m_items.LockItemsForWrite(true); |
1079 | m_items.Remove(itemID); | 1066 | m_items.Remove(itemID); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 4bccb7d..022a90d 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -299,6 +299,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
299 | // private int m_lastColCount = -1; //KF: Look for Collision chnages | 299 | // private int m_lastColCount = -1; //KF: Look for Collision chnages |
300 | // private int m_updateCount = 0; //KF: Update Anims for a while | 300 | // private int m_updateCount = 0; //KF: Update Anims for a while |
301 | // private static readonly int UPDATE_COUNT = 10; // how many frames to update for | 301 | // private static readonly int UPDATE_COUNT = 10; // how many frames to update for |
302 | private List<uint> m_lastColliders = new List<uint>(); | ||
302 | 303 | ||
303 | private TeleportFlags m_teleportFlags; | 304 | private TeleportFlags m_teleportFlags; |
304 | public TeleportFlags TeleportFlags | 305 | public TeleportFlags TeleportFlags |
@@ -361,6 +362,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
361 | //private int m_moveToPositionStateStatus; | 362 | //private int m_moveToPositionStateStatus; |
362 | //***************************************************** | 363 | //***************************************************** |
363 | 364 | ||
365 | private bool m_collisionEventFlag = false; | ||
366 | private object m_collisionEventLock = new Object(); | ||
367 | |||
364 | private int m_movementAnimationUpdateCounter = 0; | 368 | private int m_movementAnimationUpdateCounter = 0; |
365 | 369 | ||
366 | public Vector3 PrevSitOffset { get; set; } | 370 | public Vector3 PrevSitOffset { get; set; } |
@@ -377,7 +381,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
377 | } | 381 | } |
378 | } | 382 | } |
379 | 383 | ||
380 | public bool SentInitialDataToClient { get; private set; } | ||
381 | 384 | ||
382 | /// <summary> | 385 | /// <summary> |
383 | /// Copy of the script states while the agent is in transit. This state may | 386 | /// Copy of the script states while the agent is in transit. This state may |
@@ -438,12 +441,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
438 | private object m_originRegionIDAccessLock = new object(); | 441 | private object m_originRegionIDAccessLock = new object(); |
439 | 442 | ||
440 | /// <summary> | 443 | /// <summary> |
441 | /// Triggered on entity transfer after to allow CompleteMovement() to proceed after we have received an | ||
442 | /// UpdateAgent from the originating region.ddkjjkj | ||
443 | /// </summary> | ||
444 | private AutoResetEvent m_updateAgentReceivedAfterTransferEvent = new AutoResetEvent(false); | ||
445 | |||
446 | /// <summary> | ||
447 | /// Used by the entity transfer module to signal when the presence should not be closed because a subsequent | 444 | /// Used by the entity transfer module to signal when the presence should not be closed because a subsequent |
448 | /// teleport is reusing the connection. | 445 | /// teleport is reusing the connection. |
449 | /// </summary> | 446 | /// </summary> |
@@ -470,11 +467,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
470 | public uint MovementFlag { get; private set; } | 467 | public uint MovementFlag { get; private set; } |
471 | 468 | ||
472 | /// <summary> | 469 | /// <summary> |
473 | /// Set this if we need to force a movement update on the next received AgentUpdate from the viewer. | ||
474 | /// </summary> | ||
475 | private const uint ForceUpdateMovementFlagValue = uint.MaxValue; | ||
476 | |||
477 | /// <summary> | ||
478 | /// Is the agent stop control flag currently active? | 470 | /// Is the agent stop control flag currently active? |
479 | /// </summary> | 471 | /// </summary> |
480 | public bool AgentControlStopActive { get; private set; } | 472 | public bool AgentControlStopActive { get; private set; } |
@@ -653,12 +645,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
653 | // in the sim unless the avatar is on a sit target. While | 645 | // in the sim unless the avatar is on a sit target. While |
654 | // on a sit target, m_pos will contain the desired offset | 646 | // on a sit target, m_pos will contain the desired offset |
655 | // without the parent rotation applied. | 647 | // without the parent rotation applied. |
656 | <<<<<<< HEAD | ||
657 | SceneObjectPart sitPart = ParentPart; | ||
658 | |||
659 | if (sitPart != null) | ||
660 | return sitPart.ParentGroup.AbsolutePosition + (m_pos * sitPart.GetWorldRotation()); | ||
661 | ======= | ||
662 | if (ParentPart != null) | 648 | if (ParentPart != null) |
663 | { | 649 | { |
664 | SceneObjectPart rootPart = ParentPart.ParentGroup.RootPart; | 650 | SceneObjectPart rootPart = ParentPart.ParentGroup.RootPart; |
@@ -667,7 +653,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
667 | if (rootPart != null) | 653 | if (rootPart != null) |
668 | return rootPart.AbsolutePosition + (m_pos * rootPart.GetWorldRotation()); | 654 | return rootPart.AbsolutePosition + (m_pos * rootPart.GetWorldRotation()); |
669 | } | 655 | } |
670 | >>>>>>> avn/ubitvar | ||
671 | } | 656 | } |
672 | 657 | ||
673 | return m_pos; | 658 | return m_pos; |
@@ -721,11 +706,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
721 | } | 706 | } |
722 | 707 | ||
723 | /// <summary> | 708 | /// <summary> |
724 | /// Velocity of the avatar with respect to its local reference frame. | 709 | /// Current velocity of the avatar. |
725 | /// </summary> | 710 | /// </summary> |
726 | /// <remarks> | ||
727 | /// So when sat on a vehicle this will be 0. To get velocity with respect to the world use GetWorldVelocity() | ||
728 | /// </remarks> | ||
729 | public override Vector3 Velocity | 711 | public override Vector3 Velocity |
730 | { | 712 | { |
731 | get | 713 | get |
@@ -738,21 +720,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
738 | // "[SCENE PRESENCE]: Set velocity {0} for {1} in {2} via getting Velocity!", | 720 | // "[SCENE PRESENCE]: Set velocity {0} for {1} in {2} via getting Velocity!", |
739 | // m_velocity, Name, Scene.RegionInfo.RegionName); | 721 | // m_velocity, Name, Scene.RegionInfo.RegionName); |
740 | } | 722 | } |
741 | // else if (ParentPart != null) | ||
742 | // { | ||
743 | // return ParentPart.ParentGroup.Velocity; | ||
744 | // } | ||
745 | 723 | ||
746 | return m_velocity; | 724 | return m_velocity; |
747 | } | 725 | } |
748 | 726 | ||
749 | set | 727 | set |
750 | { | 728 | { |
751 | // Util.PrintCallStack(); | ||
752 | // m_log.DebugFormat( | ||
753 | // "[SCENE PRESENCE]: In {0} set velocity of {1} to {2}", | ||
754 | // Scene.RegionInfo.RegionName, Name, value); | ||
755 | |||
756 | if (PhysicsActor != null) | 729 | if (PhysicsActor != null) |
757 | { | 730 | { |
758 | try | 731 | try |
@@ -765,7 +738,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
765 | } | 738 | } |
766 | } | 739 | } |
767 | 740 | ||
768 | m_velocity = value; | 741 | m_velocity = value; |
742 | |||
743 | // m_log.DebugFormat( | ||
744 | // "[SCENE PRESENCE]: In {0} set velocity of {1} to {2}", | ||
745 | // Scene.RegionInfo.RegionName, Name, m_velocity); | ||
769 | } | 746 | } |
770 | } | 747 | } |
771 | 748 | ||
@@ -849,15 +826,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
849 | } | 826 | } |
850 | 827 | ||
851 | /// <summary> | 828 | /// <summary> |
852 | /// Get rotation relative to the world. | 829 | /// Gets the world rotation of this presence. |
853 | /// </summary> | 830 | /// </summary> |
831 | /// <remarks> | ||
832 | /// Unlike Rotation, this returns the world rotation no matter whether the avatar is sitting on a prim or not. | ||
833 | /// </remarks> | ||
854 | /// <returns></returns> | 834 | /// <returns></returns> |
855 | public Quaternion GetWorldRotation() | 835 | public Quaternion GetWorldRotation() |
856 | { | 836 | { |
857 | SceneObjectPart sitPart = ParentPart; | 837 | if (IsSatOnObject) |
838 | { | ||
839 | SceneObjectPart sitPart = ParentPart; | ||
858 | 840 | ||
859 | if (sitPart != null) | 841 | if (sitPart != null) |
860 | return sitPart.GetWorldRotation() * Rotation; | 842 | return sitPart.GetWorldRotation() * Rotation; |
843 | } | ||
861 | 844 | ||
862 | return Rotation; | 845 | return Rotation; |
863 | } | 846 | } |
@@ -924,7 +907,7 @@ no information to check this | |||
924 | } | 907 | } |
925 | 908 | ||
926 | private bool m_mouseLook; | 909 | private bool m_mouseLook; |
927 | // private bool m_leftButtonDown; | 910 | private bool m_leftButtonDown; |
928 | 911 | ||
929 | private bool m_inTransit; | 912 | private bool m_inTransit; |
930 | 913 | ||
@@ -991,12 +974,7 @@ no information to check this | |||
991 | { | 974 | { |
992 | get { return Util.GetViewerName(m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode)); } | 975 | get { return Util.GetViewerName(m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode)); } |
993 | } | 976 | } |
994 | 977 | ||
995 | /// <summary> | ||
996 | /// Count of how many terse updates we have sent out. It doesn't matter if this overflows. | ||
997 | /// </summary> | ||
998 | private int m_terseUpdateCount; | ||
999 | |||
1000 | #endregion | 978 | #endregion |
1001 | 979 | ||
1002 | #region Constructor(s) | 980 | #region Constructor(s) |
@@ -1012,8 +990,7 @@ no information to check this | |||
1012 | Animator = new ScenePresenceAnimator(this); | 990 | Animator = new ScenePresenceAnimator(this); |
1013 | Overrides = new MovementAnimationOverrides(); | 991 | Overrides = new MovementAnimationOverrides(); |
1014 | PresenceType = type; | 992 | PresenceType = type; |
1015 | // DrawDistance = world.DefaultDrawDistance; | 993 | DrawDistance = world.DefaultDrawDistance; |
1016 | DrawDistance = Constants.RegionSize; | ||
1017 | RegionHandle = world.RegionInfo.RegionHandle; | 994 | RegionHandle = world.RegionInfo.RegionHandle; |
1018 | ControllingClient = client; | 995 | ControllingClient = client; |
1019 | Firstname = ControllingClient.FirstName; | 996 | Firstname = ControllingClient.FirstName; |
@@ -1021,7 +998,7 @@ no information to check this | |||
1021 | m_name = String.Format("{0} {1}", Firstname, Lastname); | 998 | m_name = String.Format("{0} {1}", Firstname, Lastname); |
1022 | m_scene = world; | 999 | m_scene = world; |
1023 | m_uuid = client.AgentId; | 1000 | m_uuid = client.AgentId; |
1024 | LocalId = m_scene.AllocatePresenceLocalId(); | 1001 | LocalId = m_scene.AllocateLocalId(); |
1025 | 1002 | ||
1026 | UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, m_uuid); | 1003 | UserAccount account = m_scene.UserAccountService.GetUserAccount(m_scene.RegionInfo.ScopeID, m_uuid); |
1027 | if (account != null) | 1004 | if (account != null) |
@@ -1103,21 +1080,6 @@ no information to check this | |||
1103 | 1080 | ||
1104 | private void SetDirectionVectors() | 1081 | private void SetDirectionVectors() |
1105 | { | 1082 | { |
1106 | <<<<<<< HEAD | ||
1107 | Dir_Vectors[0] = Vector3.UnitX; //FORWARD | ||
1108 | Dir_Vectors[1] = -Vector3.UnitX; //BACK | ||
1109 | Dir_Vectors[2] = Vector3.UnitY; //LEFT | ||
1110 | Dir_Vectors[3] = -Vector3.UnitY; //RIGHT | ||
1111 | Dir_Vectors[4] = Vector3.UnitZ; //UP | ||
1112 | Dir_Vectors[5] = -Vector3.UnitZ; //DOWN | ||
1113 | Dir_Vectors[6] = new Vector3(0.5f, 0f, 0f); //FORWARD_NUDGE | ||
1114 | Dir_Vectors[7] = new Vector3(-0.5f, 0f, 0f); //BACK_NUDGE | ||
1115 | Dir_Vectors[8] = new Vector3(0f, 0.5f, 0f); //LEFT_NUDGE | ||
1116 | Dir_Vectors[9] = new Vector3(0f, -0.5f, 0f); //RIGHT_NUDGE | ||
1117 | Dir_Vectors[10] = new Vector3(0f, 0f, -0.5f); //DOWN_Nudge | ||
1118 | } | ||
1119 | |||
1120 | ======= | ||
1121 | Dir_Vectors[0] = new Vector3(AgentControlNormalVel,0,0); //FORWARD | 1083 | Dir_Vectors[0] = new Vector3(AgentControlNormalVel,0,0); //FORWARD |
1122 | Dir_Vectors[1] = new Vector3(-AgentControlNormalVel,0,0);; //BACK | 1084 | Dir_Vectors[1] = new Vector3(-AgentControlNormalVel,0,0);; //BACK |
1123 | Dir_Vectors[2] = new Vector3(0,AgentControlNormalVel,0); //LEFT | 1085 | Dir_Vectors[2] = new Vector3(0,AgentControlNormalVel,0); //LEFT |
@@ -1131,27 +1093,6 @@ no information to check this | |||
1131 | Dir_Vectors[10] = new Vector3(0f, 0f, AgentControlNudgeVel); //UP_Nudge | 1093 | Dir_Vectors[10] = new Vector3(0f, 0f, AgentControlNudgeVel); //UP_Nudge |
1132 | Dir_Vectors[11] = new Vector3(0f, 0f, -AgentControlNudgeVel); //DOWN_Nudge | 1094 | Dir_Vectors[11] = new Vector3(0f, 0f, -AgentControlNudgeVel); //DOWN_Nudge |
1133 | } | 1095 | } |
1134 | |||
1135 | /* dont see any use for this | ||
1136 | private Vector3[] GetWalkDirectionVectors() | ||
1137 | { | ||
1138 | Vector3[] vector = new Vector3[12]; | ||
1139 | vector[0] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD | ||
1140 | vector[1] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK | ||
1141 | vector[2] = Vector3.UnitY; //LEFT | ||
1142 | vector[3] = -Vector3.UnitY; //RIGHT | ||
1143 | vector[4] = new Vector3(CameraAtAxis.Z, 0f, CameraUpAxis.Z); //UP | ||
1144 | vector[5] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN | ||
1145 | vector[6] = new Vector3(CameraUpAxis.Z, 0f, -CameraAtAxis.Z); //FORWARD_NUDGE | ||
1146 | vector[7] = new Vector3(-CameraUpAxis.Z, 0f, CameraAtAxis.Z); //BACK_NUDGE | ||
1147 | vector[8] = Vector3.UnitY; //LEFT_NUDGE | ||
1148 | vector[9] = -Vector3.UnitY; //RIGHT_NUDGE | ||
1149 | vector[10] = new Vector3(CameraAtAxis.Z, 0f, CameraUpAxis.Z); //UP_NUDGE | ||
1150 | vector[11] = new Vector3(-CameraAtAxis.Z, 0f, -CameraUpAxis.Z); //DOWN_NUDGE | ||
1151 | return vector; | ||
1152 | } | ||
1153 | */ | ||
1154 | >>>>>>> avn/ubitvar | ||
1155 | #endregion | 1096 | #endregion |
1156 | 1097 | ||
1157 | #region Status Methods | 1098 | #region Status Methods |
@@ -1203,14 +1144,9 @@ no information to check this | |||
1203 | } | 1144 | } |
1204 | else | 1145 | else |
1205 | { | 1146 | { |
1206 | <<<<<<< HEAD | ||
1207 | part.AddSittingAvatar(this); | ||
1208 | // ParentPosition = part.GetWorldPosition(); | ||
1209 | ======= | ||
1210 | part.ParentGroup.AddAvatar(UUID); | 1147 | part.ParentGroup.AddAvatar(UUID); |
1211 | if (part.SitTargetPosition != Vector3.Zero) | 1148 | if (part.SitTargetPosition != Vector3.Zero) |
1212 | part.SitTargetAvatar = UUID; | 1149 | part.SitTargetAvatar = UUID; |
1213 | >>>>>>> avn/ubitvar | ||
1214 | ParentID = part.LocalId; | 1150 | ParentID = part.LocalId; |
1215 | ParentPart = part; | 1151 | ParentPart = part; |
1216 | m_pos = PrevSitOffset; | 1152 | m_pos = PrevSitOffset; |
@@ -1222,8 +1158,6 @@ no information to check this | |||
1222 | { | 1158 | { |
1223 | IsLoggingIn = false; | 1159 | IsLoggingIn = false; |
1224 | } | 1160 | } |
1225 | |||
1226 | IsChildAgent = false; | ||
1227 | } | 1161 | } |
1228 | 1162 | ||
1229 | m_log.DebugFormat("[MakeRootAgent] out lock: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1163 | m_log.DebugFormat("[MakeRootAgent] out lock: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
@@ -1237,7 +1171,7 @@ no information to check this | |||
1237 | if (gm != null) | 1171 | if (gm != null) |
1238 | Grouptitle = gm.GetGroupTitle(m_uuid); | 1172 | Grouptitle = gm.GetGroupTitle(m_uuid); |
1239 | 1173 | ||
1240 | <<<<<<< HEAD | 1174 | |
1241 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode); | 1175 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(ControllingClient.CircuitCode); |
1242 | uint teleportFlags = (aCircuit == null) ? 0 : aCircuit.teleportFlags; | 1176 | uint teleportFlags = (aCircuit == null) ? 0 : aCircuit.teleportFlags; |
1243 | if ((teleportFlags & (uint)TeleportFlags.ViaHGLogin) != 0) | 1177 | if ((teleportFlags & (uint)TeleportFlags.ViaHGLogin) != 0) |
@@ -1246,75 +1180,18 @@ no information to check this | |||
1246 | // avatar's name to or from the special Hypergrid format ("First.Last @grid.example.com"). | 1180 | // avatar's name to or from the special Hypergrid format ("First.Last @grid.example.com"). |
1247 | // Unfortunately, due to a viewer bug, viewers don't always show the new name. | 1181 | // Unfortunately, due to a viewer bug, viewers don't always show the new name. |
1248 | // But we have a trick that can force them to update the name anyway. | 1182 | // But we have a trick that can force them to update the name anyway. |
1249 | ForceViewersUpdateName(); | 1183 | // ForceViewersUpdateName(); |
1250 | } | 1184 | } |
1251 | ======= | 1185 | |
1252 | m_log.DebugFormat("[MakeRootAgent] Grouptitle: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1186 | m_log.DebugFormat("[MakeRootAgent] Grouptitle: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1253 | >>>>>>> avn/ubitvar | ||
1254 | 1187 | ||
1255 | RegionHandle = m_scene.RegionInfo.RegionHandle; | 1188 | RegionHandle = m_scene.RegionInfo.RegionHandle; |
1256 | 1189 | ||
1257 | m_scene.EventManager.TriggerSetRootAgentScene(m_uuid, m_scene); | 1190 | m_scene.EventManager.TriggerSetRootAgentScene(m_uuid, m_scene); |
1258 | m_log.DebugFormat("[MakeRootAgent] TriggerSetRootAgentScene: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1191 | m_log.DebugFormat("[MakeRootAgent] TriggerSetRootAgentScene: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1259 | 1192 | ||
1260 | <<<<<<< HEAD | ||
1261 | UUID groupUUID = ControllingClient.ActiveGroupId; | ||
1262 | string groupName = string.Empty; | ||
1263 | ulong groupPowers = 0; | ||
1264 | |||
1265 | // ---------------------------------- | ||
1266 | // Previous Agent Difference - AGNI sends an unsolicited AgentDataUpdate upon root agent status | ||
1267 | try | ||
1268 | { | ||
1269 | if (groupUUID != UUID.Zero && gm != null) | ||
1270 | { | ||
1271 | GroupRecord record = gm.GetGroupRecord(groupUUID); | ||
1272 | if (record != null) | ||
1273 | groupName = record.GroupName; | ||
1274 | |||
1275 | GroupMembershipData groupMembershipData = gm.GetMembershipData(groupUUID, m_uuid); | ||
1276 | |||
1277 | if (groupMembershipData != null) | ||
1278 | groupPowers = groupMembershipData.GroupPowers; | ||
1279 | } | ||
1280 | |||
1281 | ControllingClient.SendAgentDataUpdate( | ||
1282 | m_uuid, groupUUID, Firstname, Lastname, groupPowers, groupName, Grouptitle); | ||
1283 | } | ||
1284 | catch (Exception e) | ||
1285 | { | ||
1286 | m_log.Error("[AGENTUPDATE]: Error ", e); | ||
1287 | } | ||
1288 | // ------------------------------------ | ||
1289 | |||
1290 | if (ParentID == 0) | ||
1291 | { | ||
1292 | // Moved this from SendInitialData to ensure that Appearance is initialized | ||
1293 | // before the inventory is processed in MakeRootAgent. This fixes a race condition | ||
1294 | // related to the handling of attachments | ||
1295 | //m_scene.GetAvatarAppearance(ControllingClient, out Appearance); | ||
1296 | |||
1297 | /* RA 20140111: Commented out these TestBorderCross's. | ||
1298 | * Not sure why this code is here. It is not checking all the borders | ||
1299 | * and 'in region' sanity checking is done in CheckAndAdjustLandingPoint and below. | ||
1300 | if (m_scene.TestBorderCross(pos, Cardinals.E)) | ||
1301 | { | ||
1302 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.E); | ||
1303 | pos.X = crossedBorder.BorderLine.Z - 1; | ||
1304 | } | ||
1305 | |||
1306 | if (m_scene.TestBorderCross(pos, Cardinals.N)) | ||
1307 | { | ||
1308 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.N); | ||
1309 | pos.Y = crossedBorder.BorderLine.Z - 1; | ||
1310 | } | ||
1311 | */ | ||
1312 | |||
1313 | ======= | ||
1314 | |||
1315 | if (ParentID == 0) | 1193 | if (ParentID == 0) |
1316 | { | 1194 | { |
1317 | >>>>>>> avn/ubitvar | ||
1318 | CheckAndAdjustLandingPoint(ref pos); | 1195 | CheckAndAdjustLandingPoint(ref pos); |
1319 | 1196 | ||
1320 | if (pos.X < 0f || pos.Y < 0f || pos.Z < 0f) | 1197 | if (pos.X < 0f || pos.Y < 0f || pos.Z < 0f) |
@@ -1350,30 +1227,18 @@ no information to check this | |||
1350 | // | 1227 | // |
1351 | if (m_teleportFlags == TeleportFlags.Default) | 1228 | if (m_teleportFlags == TeleportFlags.Default) |
1352 | { | 1229 | { |
1230 | Vector3 vel = Velocity; | ||
1353 | AddToPhysicalScene(isFlying); | 1231 | AddToPhysicalScene(isFlying); |
1354 | // | 1232 | if (PhysicsActor != null) |
1355 | // Console.WriteLine( | 1233 | PhysicsActor.SetMomentum(vel); |
1356 | // "Set velocity of {0} in {1} to {2} from input velocity of {3} on MakeRootAgent", | ||
1357 | // Name, Scene.Name, PhysicsActor.Velocity, vel); | ||
1358 | // } | ||
1359 | } | 1234 | } |
1360 | else | 1235 | else |
1361 | { | 1236 | { |
1362 | AddToPhysicalScene(isFlying); | 1237 | AddToPhysicalScene(isFlying); |
1363 | <<<<<<< HEAD | ||
1364 | } | ||
1365 | 1238 | ||
1366 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a | ||
1367 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it | ||
1368 | // since it requires a physics actor to be present. If it is left any later, then physics appears to reset | ||
1369 | // the value to a negative position which does not trigger the border cross. | ||
1370 | // This may not be the best location for this. | ||
1371 | CheckForBorderCrossing(); | ||
1372 | ======= | ||
1373 | // reset camera to avatar pos | 1239 | // reset camera to avatar pos |
1374 | CameraPosition = pos; | 1240 | CameraPosition = pos; |
1375 | } | 1241 | } |
1376 | >>>>>>> avn/ubitvar | ||
1377 | 1242 | ||
1378 | if (ForceFly) | 1243 | if (ForceFly) |
1379 | { | 1244 | { |
@@ -1383,40 +1248,6 @@ no information to check this | |||
1383 | { | 1248 | { |
1384 | Flying = false; | 1249 | Flying = false; |
1385 | } | 1250 | } |
1386 | <<<<<<< HEAD | ||
1387 | } | ||
1388 | |||
1389 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying | ||
1390 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent | ||
1391 | // elsewhere anyway | ||
1392 | // Animator.SendAnimPack(); | ||
1393 | |||
1394 | m_scene.SwapRootAgentCount(false); | ||
1395 | |||
1396 | if (Scene.AttachmentsModule != null) | ||
1397 | { | ||
1398 | // The initial login scene presence is already root when it gets here | ||
1399 | // and it has already rezzed the attachments and started their scripts. | ||
1400 | // We do the following only for non-login agents, because their scripts | ||
1401 | // haven't started yet. | ||
1402 | if (PresenceType == PresenceType.Npc || IsRealLogin(m_teleportFlags)) | ||
1403 | { | ||
1404 | WorkManager.RunJob( | ||
1405 | "RezAttachments", | ||
1406 | o => Scene.AttachmentsModule.RezAttachments(this), | ||
1407 | null, | ||
1408 | string.Format("Rez attachments for {0} in {1}", Name, Scene.Name)); | ||
1409 | } | ||
1410 | else | ||
1411 | { | ||
1412 | WorkManager.RunJob( | ||
1413 | "StartAttachmentScripts", | ||
1414 | o => RestartAttachmentScripts(), | ||
1415 | null, | ||
1416 | string.Format("Start attachment scripts for {0} in {1}", Name, Scene.Name), | ||
1417 | true); | ||
1418 | } | ||
1419 | ======= | ||
1420 | 1251 | ||
1421 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a | 1252 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a |
1422 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it | 1253 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it |
@@ -1427,28 +1258,16 @@ no information to check this | |||
1427 | 1258 | ||
1428 | // its not | 1259 | // its not |
1429 | // CheckForBorderCrossing(); | 1260 | // CheckForBorderCrossing(); |
1430 | >>>>>>> avn/ubitvar | ||
1431 | } | 1261 | } |
1262 | |||
1432 | 1263 | ||
1433 | m_log.DebugFormat("[MakeRootAgent] position and physical: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1264 | m_log.DebugFormat("[MakeRootAgent] position and physical: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
1434 | m_scene.SwapRootAgentCount(false); | 1265 | m_scene.SwapRootAgentCount(false); |
1435 | 1266 | ||
1436 | <<<<<<< HEAD | ||
1437 | SendAvatarDataToAllClients(); | ||
1438 | |||
1439 | // send the animations of the other presences to me | ||
1440 | m_scene.ForEachRootScenePresence(delegate(ScenePresence presence) | ||
1441 | { | ||
1442 | if (presence != this) | ||
1443 | presence.Animator.SendAnimPackToClient(ControllingClient); | ||
1444 | }); | ||
1445 | ======= | ||
1446 | >>>>>>> avn/ubitvar | ||
1447 | |||
1448 | // If we don't reset the movement flag here, an avatar that crosses to a neighbouring sim and returns will | 1267 | // If we don't reset the movement flag here, an avatar that crosses to a neighbouring sim and returns will |
1449 | // stall on the border crossing since the existing child agent will still have the last movement | 1268 | // stall on the border crossing since the existing child agent will still have the last movement |
1450 | // recorded, which stops the input from being processed. | 1269 | // recorded, which stops the input from being processed. |
1451 | MovementFlag = ForceUpdateMovementFlagValue; | 1270 | MovementFlag = 0; |
1452 | 1271 | ||
1453 | m_scene.EventManager.TriggerOnMakeRootAgent(this); | 1272 | m_scene.EventManager.TriggerOnMakeRootAgent(this); |
1454 | m_log.DebugFormat("[MakeRootAgent] TriggerOnMakeRootAgent and done: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1273 | m_log.DebugFormat("[MakeRootAgent] TriggerOnMakeRootAgent and done: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
@@ -1500,12 +1319,13 @@ no information to check this | |||
1500 | /// Group Title. So the following trick makes viewers update the avatar's name by briefly changing | 1319 | /// Group Title. So the following trick makes viewers update the avatar's name by briefly changing |
1501 | /// the group title (to "(Loading)"), and then restoring it. | 1320 | /// the group title (to "(Loading)"), and then restoring it. |
1502 | /// </remarks> | 1321 | /// </remarks> |
1322 | /* | ||
1503 | public void ForceViewersUpdateName() | 1323 | public void ForceViewersUpdateName() |
1504 | { | 1324 | { |
1505 | m_log.DebugFormat("[SCENE PRESENCE]: Forcing viewers to update the avatar name for " + Name); | 1325 | m_log.DebugFormat("[SCENE PRESENCE]: Forcing viewers to update the avatar name for " + Name); |
1506 | 1326 | ||
1507 | UseFakeGroupTitle = true; | 1327 | UseFakeGroupTitle = true; |
1508 | SendAvatarDataToAllClients(false); | 1328 | |
1509 | 1329 | ||
1510 | Util.FireAndForget(o => | 1330 | Util.FireAndForget(o => |
1511 | { | 1331 | { |
@@ -1519,7 +1339,7 @@ no information to check this | |||
1519 | SendAvatarDataToAllClients(false); | 1339 | SendAvatarDataToAllClients(false); |
1520 | }, null, "Scenepresence.ForceViewersUpdateName"); | 1340 | }, null, "Scenepresence.ForceViewersUpdateName"); |
1521 | } | 1341 | } |
1522 | 1342 | */ | |
1523 | public int GetStateSource() | 1343 | public int GetStateSource() |
1524 | { | 1344 | { |
1525 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(UUID); | 1345 | AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(UUID); |
@@ -1557,11 +1377,6 @@ no information to check this | |||
1557 | lock (m_originRegionIDAccessLock) | 1377 | lock (m_originRegionIDAccessLock) |
1558 | m_originRegionID = UUID.Zero; | 1378 | m_originRegionID = UUID.Zero; |
1559 | 1379 | ||
1560 | // Reset the m_originRegionID as it has dual use as a flag to signal that the UpdateAgent() call orignating | ||
1561 | // from the source simulator has completed on a V2 teleport. | ||
1562 | lock (m_originRegionIDAccessLock) | ||
1563 | m_originRegionID = UUID.Zero; | ||
1564 | |||
1565 | // Reset these so that teleporting in and walking out isn't seen | 1380 | // Reset these so that teleporting in and walking out isn't seen |
1566 | // as teleporting back | 1381 | // as teleporting back |
1567 | TeleportFlags = TeleportFlags.Default; | 1382 | TeleportFlags = TeleportFlags.Default; |
@@ -1609,9 +1424,10 @@ no information to check this | |||
1609 | if (PhysicsActor != null) | 1424 | if (PhysicsActor != null) |
1610 | { | 1425 | { |
1611 | // PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; | 1426 | // PhysicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients; |
1612 | PhysicsActor.UnSubscribeEvents(); | 1427 | |
1613 | PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; | 1428 | PhysicsActor.OnOutOfBounds -= OutOfBoundsCall; |
1614 | PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; | 1429 | PhysicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate; |
1430 | PhysicsActor.UnSubscribeEvents(); | ||
1615 | m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); | 1431 | m_scene.PhysicsScene.RemoveAvatar(PhysicsActor); |
1616 | PhysicsActor = null; | 1432 | PhysicsActor = null; |
1617 | } | 1433 | } |
@@ -1649,6 +1465,8 @@ no information to check this | |||
1649 | else | 1465 | else |
1650 | PhysicsActor.SetMomentum(vel); | 1466 | PhysicsActor.SetMomentum(vel); |
1651 | } | 1467 | } |
1468 | |||
1469 | SendTerseUpdateToAllClients(); | ||
1652 | } | 1470 | } |
1653 | 1471 | ||
1654 | public void avnLocalTeleport(Vector3 newpos, Vector3? newvel, bool rotateToVelXY) | 1472 | public void avnLocalTeleport(Vector3 newpos, Vector3? newvel, bool rotateToVelXY) |
@@ -1680,6 +1498,7 @@ no information to check this | |||
1680 | } | 1498 | } |
1681 | } | 1499 | } |
1682 | } | 1500 | } |
1501 | SendTerseUpdateToAllClients(); | ||
1683 | } | 1502 | } |
1684 | 1503 | ||
1685 | public void StopFlying() | 1504 | public void StopFlying() |
@@ -1915,17 +1734,7 @@ no information to check this | |||
1915 | public void SetSize(Vector3 size, float feetoffset) | 1734 | public void SetSize(Vector3 size, float feetoffset) |
1916 | { | 1735 | { |
1917 | if (PhysicsActor != null && !IsChildAgent) | 1736 | if (PhysicsActor != null && !IsChildAgent) |
1918 | <<<<<<< HEAD | ||
1919 | { | ||
1920 | // Eventually there will be a physics call that sets avatar size that includes offset info. | ||
1921 | // For the moment, just set the size as passed. | ||
1922 | PhysicsActor.Size = size; | ||
1923 | // PhysicsActor.setAvatarSize(size, feetoffset); | ||
1924 | } | ||
1925 | ======= | ||
1926 | PhysicsActor.setAvatarSize(size, feetoffset); | 1737 | PhysicsActor.setAvatarSize(size, feetoffset); |
1927 | |||
1928 | >>>>>>> avn/ubitvar | ||
1929 | } | 1738 | } |
1930 | 1739 | ||
1931 | private bool WaitForUpdateAgent(IClientAPI client) | 1740 | private bool WaitForUpdateAgent(IClientAPI client) |
@@ -1934,13 +1743,23 @@ no information to check this | |||
1934 | // (which triggers Scene.IncomingUpdateChildAgent(AgentData cAgentData) here in the destination, | 1743 | // (which triggers Scene.IncomingUpdateChildAgent(AgentData cAgentData) here in the destination, |
1935 | // m_originRegionID is UUID.Zero; after, it's non-Zero. The CompleteMovement sequence initiated from the | 1744 | // m_originRegionID is UUID.Zero; after, it's non-Zero. The CompleteMovement sequence initiated from the |
1936 | // viewer (in turn triggered by the source region sending it a TeleportFinish event) waits until it's non-zero | 1745 | // viewer (in turn triggered by the source region sending it a TeleportFinish event) waits until it's non-zero |
1937 | m_updateAgentReceivedAfterTransferEvent.WaitOne(10000); | 1746 | // m_updateAgentReceivedAfterTransferEvent.WaitOne(10000); |
1938 | 1747 | int count = 50; | |
1939 | UUID originID = UUID.Zero; | 1748 | UUID originID = UUID.Zero; |
1940 | 1749 | ||
1941 | lock (m_originRegionIDAccessLock) | 1750 | lock (m_originRegionIDAccessLock) |
1942 | originID = m_originRegionID; | 1751 | originID = m_originRegionID; |
1943 | 1752 | ||
1753 | |||
1754 | while (originID.Equals(UUID.Zero) && count-- > 0) | ||
1755 | { | ||
1756 | lock (m_originRegionIDAccessLock) | ||
1757 | originID = m_originRegionID; | ||
1758 | |||
1759 | m_log.DebugFormat("[SCENE PRESENCE]: Agent {0} waiting for update in {1}", client.Name, Scene.Name); | ||
1760 | Thread.Sleep(200); | ||
1761 | } | ||
1762 | |||
1944 | if (originID.Equals(UUID.Zero)) | 1763 | if (originID.Equals(UUID.Zero)) |
1945 | { | 1764 | { |
1946 | // Movement into region will fail | 1765 | // Movement into region will fail |
@@ -1970,40 +1789,6 @@ no information to check this | |||
1970 | 1789 | ||
1971 | m_inTransit = true; | 1790 | m_inTransit = true; |
1972 | 1791 | ||
1973 | <<<<<<< HEAD | ||
1974 | bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); // Get this ahead of time because IsInTransit modifies 'm_AgentControlFlags' | ||
1975 | |||
1976 | IsInTransit = true; | ||
1977 | try | ||
1978 | { | ||
1979 | // Make sure it's not a login agent. We don't want to wait for updates during login | ||
1980 | if (!(PresenceType == PresenceType.Npc || IsRealLogin(m_teleportFlags))) | ||
1981 | { | ||
1982 | // Let's wait until UpdateAgent (called by departing region) is done | ||
1983 | if (!WaitForUpdateAgent(client)) | ||
1984 | // The sending region never sent the UpdateAgent data, we have to refuse | ||
1985 | return; | ||
1986 | } | ||
1987 | |||
1988 | Vector3 look = Velocity; | ||
1989 | |||
1990 | // if ((look.X == 0) && (look.Y == 0) && (look.Z == 0)) | ||
1991 | if ((Math.Abs(look.X) < 0.1) && (Math.Abs(look.Y) < 0.1) && (Math.Abs(look.Z) < 0.1)) | ||
1992 | { | ||
1993 | look = new Vector3(0.99f, 0.042f, 0); | ||
1994 | } | ||
1995 | |||
1996 | // Prevent teleporting to an underground location | ||
1997 | // (may crash client otherwise) | ||
1998 | // | ||
1999 | Vector3 pos = AbsolutePosition; | ||
2000 | float ground = m_scene.GetGroundHeight(pos.X, pos.Y); | ||
2001 | if (pos.Z < ground + 1.5f) | ||
2002 | { | ||
2003 | pos.Z = ground + 1.5f; | ||
2004 | AbsolutePosition = pos; | ||
2005 | } | ||
2006 | ======= | ||
2007 | try | 1792 | try |
2008 | { | 1793 | { |
2009 | // Make sure it's not a login agent. We don't want to wait for updates during login | 1794 | // Make sure it's not a login agent. We don't want to wait for updates during login |
@@ -2019,103 +1804,16 @@ no information to check this | |||
2019 | m_log.DebugFormat("[CompleteMovement] WaitForUpdateAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1804 | m_log.DebugFormat("[CompleteMovement] WaitForUpdateAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
2020 | 1805 | ||
2021 | bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); | 1806 | bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); |
2022 | >>>>>>> avn/ubitvar | ||
2023 | 1807 | ||
2024 | if (!MakeRootAgent(AbsolutePosition, flying)) | 1808 | if (!MakeRootAgent(AbsolutePosition, flying)) |
2025 | { | 1809 | { |
2026 | m_log.DebugFormat( | 1810 | m_log.DebugFormat( |
2027 | <<<<<<< HEAD | ||
2028 | "[SCENE PRESENCE]: Aborting CompleteMovement call for {0} in {1} as they are already root", | ||
2029 | ======= | ||
2030 | "[SCENE PRESENCE]: Aborting CompleteMovement call for {0} in {1} as they are already root", | 1811 | "[SCENE PRESENCE]: Aborting CompleteMovement call for {0} in {1} as they are already root", |
2031 | >>>>>>> avn/ubitvar | ||
2032 | Name, Scene.Name); | 1812 | Name, Scene.Name); |
2033 | 1813 | ||
2034 | return; | 1814 | return; |
2035 | } | 1815 | } |
2036 | 1816 | ||
2037 | <<<<<<< HEAD | ||
2038 | // Tell the client that we're totally ready | ||
2039 | ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look); | ||
2040 | |||
2041 | // Child agents send initial data up in LLUDPServer.HandleUseCircuitCode() | ||
2042 | if (!SentInitialDataToClient) | ||
2043 | SendInitialDataToClient(); | ||
2044 | |||
2045 | // m_log.DebugFormat("[SCENE PRESENCE] Completed movement"); | ||
2046 | |||
2047 | if (!string.IsNullOrEmpty(m_callbackURI)) | ||
2048 | { | ||
2049 | // We cannot sleep here since this would hold up the inbound packet processing thread, as | ||
2050 | // CompleteMovement() is executed synchronously. However, it might be better to delay the release | ||
2051 | // here until we know for sure that the agent is active in this region. Sending AgentMovementComplete | ||
2052 | // is not enough for Imprudence clients - there appears to be a small delay (<200ms, <500ms) until they regard this | ||
2053 | // region as the current region, meaning that a close sent before then will fail the teleport. | ||
2054 | // System.Threading.Thread.Sleep(2000); | ||
2055 | |||
2056 | m_log.DebugFormat( | ||
2057 | "[SCENE PRESENCE]: Releasing {0} {1} with callback to {2}", | ||
2058 | client.Name, client.AgentId, m_callbackURI); | ||
2059 | |||
2060 | Scene.SimulationService.ReleaseAgent(m_originRegionID, UUID, m_callbackURI); | ||
2061 | m_callbackURI = null; | ||
2062 | } | ||
2063 | // else | ||
2064 | // { | ||
2065 | // m_log.DebugFormat( | ||
2066 | // "[SCENE PRESENCE]: No callback provided on CompleteMovement of {0} {1} to {2}", | ||
2067 | // client.Name, client.AgentId, m_scene.RegionInfo.RegionName); | ||
2068 | // } | ||
2069 | |||
2070 | ValidateAndSendAppearanceAndAgentData(); | ||
2071 | |||
2072 | // Create child agents in neighbouring regions | ||
2073 | if (openChildAgents && !IsChildAgent) | ||
2074 | { | ||
2075 | IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>(); | ||
2076 | if (m_agentTransfer != null) | ||
2077 | { | ||
2078 | // Note: this call can take a while, because it notifies each of the simulator's neighbours. | ||
2079 | // It's important that we don't allow the avatar to cross regions meanwhile, as that will | ||
2080 | // cause serious errors. We've prevented that from happening by setting IsInTransit=true. | ||
2081 | m_agentTransfer.EnableChildAgents(this); | ||
2082 | } | ||
2083 | |||
2084 | IFriendsModule friendsModule = m_scene.RequestModuleInterface<IFriendsModule>(); | ||
2085 | if (friendsModule != null) | ||
2086 | friendsModule.SendFriendsOnlineIfNeeded(ControllingClient); | ||
2087 | |||
2088 | } | ||
2089 | |||
2090 | // XXX: If we force an update after activity has completed, then multiple attachments do appear correctly on a destination region | ||
2091 | // If we do it a little bit earlier (e.g. when converting the child to a root agent) then this does not work. | ||
2092 | // This may be due to viewer code or it may be something we're not doing properly simulator side. | ||
2093 | WorkManager.RunJob( | ||
2094 | "ScheduleAttachmentsForFullUpdate", | ||
2095 | o => ScheduleAttachmentsForFullUpdate(), | ||
2096 | null, | ||
2097 | string.Format("Schedule attachments for full update for {0} in {1}", Name, Scene.Name), | ||
2098 | true); | ||
2099 | |||
2100 | // m_log.DebugFormat( | ||
2101 | // "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms", | ||
2102 | // client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds); | ||
2103 | } | ||
2104 | finally | ||
2105 | { | ||
2106 | IsInTransit = false; | ||
2107 | } | ||
2108 | } | ||
2109 | |||
2110 | private void ScheduleAttachmentsForFullUpdate() | ||
2111 | { | ||
2112 | lock (m_attachments) | ||
2113 | { | ||
2114 | foreach (SceneObjectGroup sog in m_attachments) | ||
2115 | sog.ScheduleGroupForFullUpdate(); | ||
2116 | } | ||
2117 | } | ||
2118 | ======= | ||
2119 | m_log.DebugFormat("[CompleteMovement] MakeRootAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); | 1817 | m_log.DebugFormat("[CompleteMovement] MakeRootAgent: {0}ms", Util.EnvironmentTickCountSubtract(ts)); |
2120 | 1818 | ||
2121 | Vector3 look = Lookat; | 1819 | Vector3 look = Lookat; |
@@ -2134,7 +1832,7 @@ no information to check this | |||
2134 | 1832 | ||
2135 | if (!IsChildAgent && !isNPC) | 1833 | if (!IsChildAgent && !isNPC) |
2136 | { | 1834 | { |
2137 | InventoryFolderBase cof = m_scene.InventoryService.GetFolderForType(client.AgentId, (AssetType)46); | 1835 | InventoryFolderBase cof = m_scene.InventoryService.GetFolderForType(client.AgentId, (FolderType)46); |
2138 | if (cof == null) | 1836 | if (cof == null) |
2139 | COF = UUID.Zero; | 1837 | COF = UUID.Zero; |
2140 | else | 1838 | else |
@@ -2197,9 +1895,6 @@ no information to check this | |||
2197 | // so sequence is clear | 1895 | // so sequence is clear |
2198 | 1896 | ||
2199 | // verify baked textures and cache | 1897 | // verify baked textures and cache |
2200 | >>>>>>> avn/ubitvar | ||
2201 | |||
2202 | |||
2203 | bool cachedbaked = false; | 1898 | bool cachedbaked = false; |
2204 | 1899 | ||
2205 | if (isNPC) | 1900 | if (isNPC) |
@@ -2484,23 +2179,16 @@ no information to check this | |||
2484 | // When we get to the point of re-computing neighbors everytime this | 2179 | // When we get to the point of re-computing neighbors everytime this |
2485 | // changes, then start using the agent's drawdistance rather than the | 2180 | // changes, then start using the agent's drawdistance rather than the |
2486 | // region's draw distance. | 2181 | // region's draw distance. |
2487 | <<<<<<< HEAD | ||
2488 | DrawDistance = agentData.Far; | ||
2489 | // DrawDistance = Scene.DefaultDrawDistance; | ||
2490 | ======= | ||
2491 | 2182 | ||
2492 | DrawDistance = Util.Clamp(agentData.Far, 32, m_scene.MaxDrawDistance); | 2183 | DrawDistance = Util.Clamp(agentData.Far, 32, m_scene.MaxDrawDistance); |
2493 | 2184 | ||
2494 | // DrawDistance = Scene.DefaultDrawDistance; | ||
2495 | >>>>>>> avn/ubitvar | ||
2496 | |||
2497 | m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0; | 2185 | m_mouseLook = (flags & AgentManager.ControlFlags.AGENT_CONTROL_MOUSELOOK) != 0; |
2498 | 2186 | ||
2499 | // FIXME: This does not work as intended because the viewer only sends the lbutton down when the button | 2187 | // FIXME: This does not work as intended because the viewer only sends the lbutton down when the button |
2500 | // is first pressed, not whilst it is held down. If this is required in the future then need to look | 2188 | // is first pressed, not whilst it is held down. If this is required in the future then need to look |
2501 | // for an AGENT_CONTROL_LBUTTON_UP event and make sure to handle cases where an initial DOWN is not | 2189 | // for an AGENT_CONTROL_LBUTTON_UP event and make sure to handle cases where an initial DOWN is not |
2502 | // received (e.g. on holding LMB down on the avatar in a viewer). | 2190 | // received (e.g. on holding LMB down on the avatar in a viewer). |
2503 | // m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0; | 2191 | m_leftButtonDown = (flags & AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0; |
2504 | 2192 | ||
2505 | #endregion Inputs | 2193 | #endregion Inputs |
2506 | 2194 | ||
@@ -2592,14 +2280,6 @@ no information to check this | |||
2592 | 2280 | ||
2593 | bool update_movementflag = false; | 2281 | bool update_movementflag = false; |
2594 | 2282 | ||
2595 | // If we were just made root agent then we must perform movement updates for the first AgentUpdate that | ||
2596 | // we get | ||
2597 | if (MovementFlag == ForceUpdateMovementFlagValue) | ||
2598 | { | ||
2599 | MovementFlag = 0; | ||
2600 | update_movementflag = true; | ||
2601 | } | ||
2602 | |||
2603 | if (agentData.UseClientAgentPosition) | 2283 | if (agentData.UseClientAgentPosition) |
2604 | { | 2284 | { |
2605 | MovingToTarget = (agentData.ClientAgentPosition - AbsolutePosition).Length() > 0.2f; | 2285 | MovingToTarget = (agentData.ClientAgentPosition - AbsolutePosition).Length() > 0.2f; |
@@ -2631,8 +2311,6 @@ no information to check this | |||
2631 | { | 2311 | { |
2632 | bool bAllowUpdateMoveToPosition = false; | 2312 | bool bAllowUpdateMoveToPosition = false; |
2633 | 2313 | ||
2634 | <<<<<<< HEAD | ||
2635 | ======= | ||
2636 | Vector3[] dirVectors; | 2314 | Vector3[] dirVectors; |
2637 | 2315 | ||
2638 | // use camera up angle when in mouselook and not flying or when holding the left mouse button down and not flying | 2316 | // use camera up angle when in mouselook and not flying or when holding the left mouse button down and not flying |
@@ -2642,8 +2320,6 @@ no information to check this | |||
2642 | // else | 2320 | // else |
2643 | dirVectors = Dir_Vectors; | 2321 | dirVectors = Dir_Vectors; |
2644 | 2322 | ||
2645 | |||
2646 | >>>>>>> avn/ubitvar | ||
2647 | // A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction. | 2323 | // A DIR_CONTROL_FLAG occurs when the user is trying to move in a particular direction. |
2648 | foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS) | 2324 | foreach (Dir_ControlFlags DCF in DIR_CONTROL_FLAGS) |
2649 | { | 2325 | { |
@@ -2865,12 +2541,8 @@ no information to check this | |||
2865 | // When we get to the point of re-computing neighbors everytime this | 2541 | // When we get to the point of re-computing neighbors everytime this |
2866 | // changes, then start using the agent's drawdistance rather than the | 2542 | // changes, then start using the agent's drawdistance rather than the |
2867 | // region's draw distance. | 2543 | // region's draw distance. |
2868 | <<<<<<< HEAD | 2544 | |
2869 | DrawDistance = agentData.Far; | ||
2870 | // DrawDistance = Scene.DefaultDrawDistance; | ||
2871 | ======= | ||
2872 | DrawDistance = Util.Clamp(agentData.Far, 32, m_scene.MaxDrawDistance); | 2545 | DrawDistance = Util.Clamp(agentData.Far, 32, m_scene.MaxDrawDistance); |
2873 | >>>>>>> avn/ubitvar | ||
2874 | 2546 | ||
2875 | // Check if Client has camera in 'follow cam' or 'build' mode. | 2547 | // Check if Client has camera in 'follow cam' or 'build' mode. |
2876 | Vector3 camdif = (Vector3.One * Rotation - Vector3.One * CameraRotation); | 2548 | Vector3 camdif = (Vector3.One * Rotation - Vector3.One * CameraRotation); |
@@ -3064,54 +2736,63 @@ no information to check this | |||
3064 | || pos.Y < 0 || pos.Y >= regionSize.Y | 2736 | || pos.Y < 0 || pos.Y >= regionSize.Y |
3065 | || pos.Z < 0) | 2737 | || pos.Z < 0) |
3066 | return; | 2738 | return; |
3067 | 2739 | ||
3068 | Scene targetScene = m_scene; | 2740 | Scene targetScene = m_scene; |
3069 | |||
3070 | // Vector3 heightAdjust = new Vector3(0, 0, Appearance.AvatarHeight / 2); | ||
3071 | // pos += heightAdjust; | ||
3072 | // | ||
3073 | // // Anti duck-walking measure | ||
3074 | // if (Math.Abs(pos.Z - AbsolutePosition.Z) < 0.2f) | ||
3075 | // { | ||
3076 | //// m_log.DebugFormat("[SCENE PRESENCE]: Adjusting MoveToPosition from {0} to {1}", pos, AbsolutePosition); | ||
3077 | // pos.Z = AbsolutePosition.Z; | ||
3078 | // } | ||
3079 | |||
3080 | // Get terrain height for sub-region in a megaregion if necessary | 2741 | // Get terrain height for sub-region in a megaregion if necessary |
3081 | <<<<<<< HEAD | ||
3082 | ======= | ||
3083 | int X = (int)((m_scene.RegionInfo.WorldLocX) + pos.X); | ||
3084 | int Y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y); | ||
3085 | GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y); | ||
3086 | // If X and Y is NaN, target_region will be null | ||
3087 | if (target_region == null) | ||
3088 | return; | ||
3089 | UUID target_regionID = target_region.RegionID; | ||
3090 | Scene targetScene = m_scene; | ||
3091 | >>>>>>> avn/ubitvar | ||
3092 | |||
3093 | //COMMENT: If its only nessesary in a megaregion, why do it on normal region's too? | ||
3094 | |||
3095 | if (regionCombinerModule != null) | 2742 | if (regionCombinerModule != null) |
3096 | { | 2743 | { |
3097 | int x = (int)((m_scene.RegionInfo.WorldLocX) + pos.X); | 2744 | int X = (int)((m_scene.RegionInfo.WorldLocX) + pos.X); |
3098 | int y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y); | 2745 | int Y = (int)((m_scene.RegionInfo.WorldLocY) + pos.Y); |
3099 | GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, x, y); | 2746 | GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y); |
3100 | |||
3101 | <<<<<<< HEAD | ||
3102 | // If X and Y is NaN, target_region will be null | 2747 | // If X and Y is NaN, target_region will be null |
3103 | if (target_region == null) | 2748 | if (target_region == null) |
3104 | return; | 2749 | return; |
3105 | 2750 | UUID target_regionID = target_region.RegionID; | |
3106 | SceneManager.Instance.TryGetScene(target_region.RegionID, out targetScene); | 2751 | SceneManager.Instance.TryGetScene(target_region.RegionID, out targetScene); |
3107 | } | 2752 | } |
3108 | 2753 | ||
3109 | float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)]; | 2754 | |
3110 | ======= | 2755 | |
2756 | |||
2757 | |||
2758 | |||
2759 | |||
2760 | |||
2761 | |||
2762 | |||
2763 | |||
2764 | |||
2765 | |||
2766 | |||
2767 | |||
2768 | |||
2769 | |||
2770 | |||
2771 | |||
2772 | |||
2773 | |||
2774 | |||
2775 | |||
2776 | |||
2777 | |||
2778 | |||
2779 | |||
2780 | |||
2781 | |||
2782 | |||
2783 | |||
2784 | |||
2785 | |||
2786 | |||
2787 | |||
2788 | |||
2789 | |||
2790 | |||
2791 | |||
3111 | float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)]; | 2792 | float terrainHeight = (float)targetScene.Heightmap[(int)(pos.X % regionSize.X), (int)(pos.Y % regionSize.Y)]; |
3112 | // dont try to land underground | 2793 | // dont try to land underground |
3113 | terrainHeight += Appearance.AvatarHeight / 2; | 2794 | terrainHeight += Appearance.AvatarHeight / 2; |
3114 | >>>>>>> avn/ubitvar | 2795 | |
3115 | pos.Z = Math.Max(terrainHeight, pos.Z); | 2796 | pos.Z = Math.Max(terrainHeight, pos.Z); |
3116 | 2797 | ||
3117 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is | 2798 | // Fudge factor. It appears that if one clicks "go here" on a piece of ground, the go here request is |
@@ -3120,26 +2801,15 @@ no information to check this | |||
3120 | if (pos.Z - terrainHeight < 0.2) | 2801 | if (pos.Z - terrainHeight < 0.2) |
3121 | pos.Z = terrainHeight; | 2802 | pos.Z = terrainHeight; |
3122 | 2803 | ||
3123 | <<<<<<< HEAD | ||
3124 | ======= | ||
3125 | // m_log.DebugFormat( | 2804 | // m_log.DebugFormat( |
3126 | // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", | 2805 | // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", |
3127 | // Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); | 2806 | // Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); |
3128 | 2807 | ||
3129 | |||
3130 | >>>>>>> avn/ubitvar | ||
3131 | if (noFly) | 2808 | if (noFly) |
3132 | Flying = false; | 2809 | Flying = false; |
3133 | else if (pos.Z > terrainHeight + Appearance.AvatarHeight / 2 || Flying) | 2810 | else if (pos.Z > terrainHeight + Appearance.AvatarHeight / 2 || Flying) |
3134 | Flying = true; | 2811 | Flying = true; |
3135 | 2812 | ||
3136 | // m_log.DebugFormat( | ||
3137 | // "[SCENE PRESENCE]: Avatar {0} set move to target {1} (terrain height {2}) in {3}", | ||
3138 | // Name, pos, terrainHeight, m_scene.RegionInfo.RegionName); | ||
3139 | |||
3140 | if (noFly) | ||
3141 | Flying = false; | ||
3142 | |||
3143 | LandAtTarget = landAtTarget; | 2813 | LandAtTarget = landAtTarget; |
3144 | MovingToTarget = true; | 2814 | MovingToTarget = true; |
3145 | MoveToPositionTarget = pos; | 2815 | MoveToPositionTarget = pos; |
@@ -3214,13 +2884,10 @@ no information to check this | |||
3214 | } | 2884 | } |
3215 | } | 2885 | } |
3216 | 2886 | ||
3217 | <<<<<<< HEAD | ||
3218 | ======= | ||
3219 | part.ParentGroup.DeleteAvatar(UUID); | 2887 | part.ParentGroup.DeleteAvatar(UUID); |
3220 | 2888 | ||
3221 | Quaternion standRotation = part.ParentGroup.RootPart.RotationOffset; | 2889 | Quaternion standRotation = part.ParentGroup.RootPart.RotationOffset; |
3222 | Vector3 sitPartWorldPosition = part.ParentGroup.AbsolutePosition + m_pos * standRotation; | 2890 | Vector3 sitPartWorldPosition = part.ParentGroup.AbsolutePosition + m_pos * standRotation; |
3223 | >>>>>>> avn/ubitvar | ||
3224 | ControllingClient.SendClearFollowCamProperties(part.ParentUUID); | 2891 | ControllingClient.SendClearFollowCamProperties(part.ParentUUID); |
3225 | 2892 | ||
3226 | ParentID = 0; | 2893 | ParentID = 0; |
@@ -3248,25 +2915,9 @@ no information to check this | |||
3248 | standRotationZ.Z = 0f; | 2915 | standRotationZ.Z = 0f; |
3249 | } | 2916 | } |
3250 | 2917 | ||
3251 | <<<<<<< HEAD | ||
3252 | //Vector3 standPos = ParentPosition + new Vector3(0.0f, 0.0f, 2.0f * m_sitAvatarHeight); | ||
3253 | //Vector3 standPos = ParentPosition; | ||
3254 | |||
3255 | // Vector3 standPositionAdjustment | ||
3256 | // = part.SitTargetPosition + new Vector3(0.5f, 0f, m_sitAvatarHeight / 2f); | ||
3257 | Vector3 adjustmentForSitPosition = OffsetPosition * part.ParentGroup.GroupRotation - SIT_TARGET_ADJUSTMENT * part.GetWorldRotation(); | ||
3258 | |||
3259 | // XXX: This is based on the physics capsule sizes. Need to find a better way to read this rather than | ||
3260 | // hardcoding here. | ||
3261 | Vector3 adjustmentForSitPose = new Vector3(0.74f, 0f, 0f) * standRotation; | ||
3262 | |||
3263 | Vector3 standPos = part.ParentGroup.AbsolutePosition + adjustmentForSitPosition + adjustmentForSitPose; | ||
3264 | ======= | ||
3265 | Vector3 adjustmentForSitPose = new Vector3(0.75f, 0, m_sitAvatarHeight + .3f) * standRotationZ; | 2918 | Vector3 adjustmentForSitPose = new Vector3(0.75f, 0, m_sitAvatarHeight + .3f) * standRotationZ; |
3266 | 2919 | ||
3267 | Vector3 standPos = sitPartWorldPosition + adjustmentForSitPose; | 2920 | Vector3 standPos = sitPartWorldPosition + adjustmentForSitPose; |
3268 | >>>>>>> avn/ubitvar | ||
3269 | |||
3270 | m_pos = standPos; | 2921 | m_pos = standPos; |
3271 | } | 2922 | } |
3272 | 2923 | ||
@@ -3277,16 +2928,9 @@ no information to check this | |||
3277 | 2928 | ||
3278 | if (satOnObject) | 2929 | if (satOnObject) |
3279 | { | 2930 | { |
3280 | <<<<<<< HEAD | ||
3281 | SendAvatarDataToAllClients(); | ||
3282 | m_requestedSitTargetID = 0; | ||
3283 | 2931 | ||
3284 | part.RemoveSittingAvatar(this); | ||
3285 | |||
3286 | ======= | ||
3287 | m_requestedSitTargetID = 0; | 2932 | m_requestedSitTargetID = 0; |
3288 | part.RemoveSittingAvatar(UUID); | 2933 | part.RemoveSittingAvatar(UUID); |
3289 | >>>>>>> avn/ubitvar | ||
3290 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); | 2934 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); |
3291 | 2935 | ||
3292 | SendAvatarDataToAllAgents(); | 2936 | SendAvatarDataToAllAgents(); |
@@ -3386,37 +3030,11 @@ no information to check this | |||
3386 | 3030 | ||
3387 | Velocity = Vector3.Zero; | 3031 | Velocity = Vector3.Zero; |
3388 | 3032 | ||
3389 | part.AddSittingAvatar(this); | 3033 | part.AddSittingAvatar(UUID); |
3390 | 3034 | ||
3391 | cameraAtOffset = part.GetCameraAtOffset(); | 3035 | cameraAtOffset = part.GetCameraAtOffset(); |
3392 | |||
3393 | if (!part.IsRoot && cameraAtOffset == Vector3.Zero) | ||
3394 | cameraAtOffset = part.ParentGroup.RootPart.GetCameraAtOffset(); | ||
3395 | |||
3396 | bool cameraEyeOffsetFromRootForChild = false; | ||
3397 | cameraEyeOffset = part.GetCameraEyeOffset(); | 3036 | cameraEyeOffset = part.GetCameraEyeOffset(); |
3398 | 3037 | ||
3399 | if (!part.IsRoot && cameraEyeOffset == Vector3.Zero) | ||
3400 | { | ||
3401 | cameraEyeOffset = part.ParentGroup.RootPart.GetCameraEyeOffset(); | ||
3402 | cameraEyeOffsetFromRootForChild = true; | ||
3403 | } | ||
3404 | |||
3405 | if ((cameraEyeOffset != Vector3.Zero && !cameraEyeOffsetFromRootForChild) || cameraAtOffset != Vector3.Zero) | ||
3406 | { | ||
3407 | if (!part.IsRoot) | ||
3408 | { | ||
3409 | cameraEyeOffset = cameraEyeOffset * part.RotationOffset; | ||
3410 | cameraAtOffset += part.OffsetPosition; | ||
3411 | } | ||
3412 | |||
3413 | cameraEyeOffset += part.OffsetPosition; | ||
3414 | } | ||
3415 | |||
3416 | // m_log.DebugFormat( | ||
3417 | // "[SCENE PRESENCE]: Using cameraAtOffset {0}, cameraEyeOffset {1} for sit on {2} by {3} in {4}", | ||
3418 | // cameraAtOffset, cameraEyeOffset, part.Name, Name, Scene.Name); | ||
3419 | |||
3420 | forceMouselook = part.GetForceMouselook(); | 3038 | forceMouselook = part.GetForceMouselook(); |
3421 | 3039 | ||
3422 | if (!part.IsRoot) | 3040 | if (!part.IsRoot) |
@@ -3560,7 +3178,7 @@ no information to check this | |||
3560 | Velocity = Vector3.Zero; | 3178 | Velocity = Vector3.Zero; |
3561 | m_AngularVelocity = Vector3.Zero; | 3179 | m_AngularVelocity = Vector3.Zero; |
3562 | 3180 | ||
3563 | part.AddSittingAvatar(this); | 3181 | part.AddSittingAvatar(UUID); |
3564 | 3182 | ||
3565 | Vector3 cameraAtOffset = part.GetCameraAtOffset(); | 3183 | Vector3 cameraAtOffset = part.GetCameraAtOffset(); |
3566 | Vector3 cameraEyeOffset = part.GetCameraEyeOffset(); | 3184 | Vector3 cameraEyeOffset = part.GetCameraEyeOffset(); |
@@ -3596,6 +3214,7 @@ no information to check this | |||
3596 | 3214 | ||
3597 | 3215 | ||
3598 | m_requestedSitTargetID = 0; | 3216 | m_requestedSitTargetID = 0; |
3217 | part.ParentGroup.AddAvatar(UUID); | ||
3599 | 3218 | ||
3600 | ParentPart = part; | 3219 | ParentPart = part; |
3601 | ParentID = part.LocalId; | 3220 | ParentID = part.LocalId; |
@@ -3607,9 +3226,6 @@ no information to check this | |||
3607 | Animator.TrySetMovementAnimation("SIT_GROUND"); | 3226 | Animator.TrySetMovementAnimation("SIT_GROUND"); |
3608 | else | 3227 | else |
3609 | Animator.TrySetMovementAnimation("SIT"); | 3228 | Animator.TrySetMovementAnimation("SIT"); |
3610 | <<<<<<< HEAD | ||
3611 | SendAvatarDataToAllClients(); | ||
3612 | ======= | ||
3613 | */ | 3229 | */ |
3614 | if (status == 3) | 3230 | if (status == 3) |
3615 | sitAnimation = "SIT_GROUND"; | 3231 | sitAnimation = "SIT_GROUND"; |
@@ -3617,8 +3233,6 @@ no information to check this | |||
3617 | sitAnimation = "SIT"; | 3233 | sitAnimation = "SIT"; |
3618 | 3234 | ||
3619 | Animator.SetMovementAnimations("SIT"); | 3235 | Animator.SetMovementAnimations("SIT"); |
3620 | >>>>>>> avn/ubitvar | ||
3621 | |||
3622 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); | 3236 | part.ParentGroup.TriggerScriptChangedEvent(Changed.LINK); |
3623 | } | 3237 | } |
3624 | 3238 | ||
@@ -3654,40 +3268,27 @@ no information to check this | |||
3654 | 3268 | ||
3655 | //Quaternion result = (sitTargetOrient * vq) * nq; | 3269 | //Quaternion result = (sitTargetOrient * vq) * nq; |
3656 | 3270 | ||
3657 | double x, y, z, m1, m2; | 3271 | double x, y, z, m; |
3658 | 3272 | ||
3659 | Quaternion r = sitTargetOrient; | 3273 | Quaternion r = sitTargetOrient; |
3660 | m1 = r.X * r.X + r.Y * r.Y; | 3274 | m = r.X * r.X + r.Y * r.Y + r.Z * r.Z + r.W * r.W; |
3661 | m2 = r.Z * r.Z + r.W * r.W; | ||
3662 | |||
3663 | // Rotate the vector <0, 0, 1> | ||
3664 | x = 2 * (r.X * r.Z + r.Y * r.W); | ||
3665 | y = 2 * (-r.X * r.W + r.Y * r.Z); | ||
3666 | z = m2 - m1; | ||
3667 | |||
3668 | // Set m to be the square of the norm of r. | ||
3669 | double m = m1 + m2; | ||
3670 | 3275 | ||
3671 | // This constant is emperically determined to be what is used in SL. | 3276 | if (Math.Abs(1.0 - m) > 0.000001) |
3672 | // See also http://opensimulator.org/mantis/view.php?id=7096 | ||
3673 | double offset = 0.05; | ||
3674 | |||
3675 | // Normally m will be ~ 1, but if someone passed a handcrafted quaternion | ||
3676 | // to llSitTarget with values so small that squaring them is rounded off | ||
3677 | // to zero, then m could be zero. The result of this floating point | ||
3678 | // round off error (causing us to skip this impossible normalization) | ||
3679 | // is only 5 cm. | ||
3680 | if (m > 0.000001) | ||
3681 | { | 3277 | { |
3682 | offset /= m; | 3278 | m = 1.0 / Math.Sqrt(m); |
3279 | r.X *= (float)m; | ||
3280 | r.Y *= (float)m; | ||
3281 | r.Z *= (float)m; | ||
3282 | r.W *= (float)m; | ||
3683 | } | 3283 | } |
3684 | 3284 | ||
3285 | x = 2 * (r.X * r.Z + r.Y * r.W); | ||
3286 | y = 2 * (-r.X * r.W + r.Y * r.Z); | ||
3287 | z = -r.X * r.X - r.Y * r.Y + r.Z * r.Z + r.W * r.W; | ||
3685 | Vector3 up = new Vector3((float)x, (float)y, (float)z); | 3288 | Vector3 up = new Vector3((float)x, (float)y, (float)z); |
3686 | Vector3 sitOffset = up * (float)offset; | 3289 | Vector3 sitOffset = up * Appearance.AvatarHeight * 0.02638f; |
3687 | 3290 | ||
3688 | // sitOffset is in Avatar Center coordinates: from origin to 'sitTargetPos + SIT_TARGET_ADJUSTMENT'. | 3291 | Vector3 newPos = sitTargetPos + sitOffset + SIT_TARGET_ADJUSTMENT; |
3689 | // So, we need to _substract_ it to get to the origin of the Avatar Center. | ||
3690 | Vector3 newPos = sitTargetPos + SIT_TARGET_ADJUSTMENT - sitOffset; | ||
3691 | Quaternion newRot; | 3292 | Quaternion newRot; |
3692 | 3293 | ||
3693 | if (part.IsRoot) | 3294 | if (part.IsRoot) |
@@ -3720,7 +3321,8 @@ no information to check this | |||
3720 | // Name, part.AbsolutePosition, m_pos, ParentPosition, part.Name, part.LocalId); | 3321 | // Name, part.AbsolutePosition, m_pos, ParentPosition, part.Name, part.LocalId); |
3721 | } | 3322 | } |
3722 | 3323 | ||
3723 | ParentPart = part; | 3324 | part.ParentGroup.AddAvatar(UUID); |
3325 | ParentPart = m_scene.GetSceneObjectPart(m_requestedSitTargetID); | ||
3724 | ParentID = m_requestedSitTargetID; | 3326 | ParentID = m_requestedSitTargetID; |
3725 | m_AngularVelocity = Vector3.Zero; | 3327 | m_AngularVelocity = Vector3.Zero; |
3726 | Velocity = Vector3.Zero; | 3328 | Velocity = Vector3.Zero; |
@@ -3733,13 +3335,8 @@ no information to check this | |||
3733 | { | 3335 | { |
3734 | sitAnimation = part.SitAnimation; | 3336 | sitAnimation = part.SitAnimation; |
3735 | } | 3337 | } |
3736 | <<<<<<< HEAD | ||
3737 | Animator.TrySetMovementAnimation(sitAnimation); | ||
3738 | SendAvatarDataToAllClients(); | ||
3739 | ======= | ||
3740 | // Animator.TrySetMovementAnimation(sitAnimation); | 3338 | // Animator.TrySetMovementAnimation(sitAnimation); |
3741 | Animator.SetMovementAnimations("SIT"); | 3339 | Animator.SetMovementAnimations("SIT"); |
3742 | >>>>>>> avn/ubitvar | ||
3743 | TriggerScenePresenceUpdated(); | 3340 | TriggerScenePresenceUpdated(); |
3744 | } | 3341 | } |
3745 | } | 3342 | } |
@@ -3801,25 +3398,10 @@ no information to check this | |||
3801 | // "[SCENE PRESENCE]: Adding new movement {0} with rotation {1}, thisAddSpeedModifier {2} for {3}", | 3398 | // "[SCENE PRESENCE]: Adding new movement {0} with rotation {1}, thisAddSpeedModifier {2} for {3}", |
3802 | // vec, Rotation, thisAddSpeedModifier, Name); | 3399 | // vec, Rotation, thisAddSpeedModifier, Name); |
3803 | 3400 | ||
3804 | <<<<<<< HEAD | ||
3805 | Quaternion rot = Rotation; | ||
3806 | if (!Flying && PresenceType != PresenceType.Npc) | ||
3807 | { | ||
3808 | // The only situation in which we care about X and Y is avatar flying. The rest of the time | ||
3809 | // these parameters are not relevant for determining avatar movement direction and cause issues such | ||
3810 | // as wrong walk speed if the camera is rotated. | ||
3811 | rot.X = 0; | ||
3812 | rot.Y = 0; | ||
3813 | rot.Normalize(); | ||
3814 | } | ||
3815 | |||
3816 | Vector3 direc = vec * rot; | ||
3817 | ======= | ||
3818 | // rotate from avatar coord space to world | 3401 | // rotate from avatar coord space to world |
3819 | // for now all controls assume this is only a rotation around Z | 3402 | // for now all controls assume this is only a rotation around Z |
3820 | // if not all checks below need to be done before this rotation | 3403 | // if not all checks below need to be done before this rotation |
3821 | Vector3 direc = vec * Rotation; | 3404 | Vector3 direc = vec * Rotation; |
3822 | >>>>>>> avn/ubitvar | ||
3823 | direc.Normalize(); | 3405 | direc.Normalize(); |
3824 | 3406 | ||
3825 | // mouse look situation ? | 3407 | // mouse look situation ? |
@@ -3869,6 +3451,10 @@ no information to check this | |||
3869 | 3451 | ||
3870 | public override void Update() | 3452 | public override void Update() |
3871 | { | 3453 | { |
3454 | const float ROTATION_TOLERANCE = 0.01f; | ||
3455 | const float VELOCITY_TOLERANCE = 0.001f; | ||
3456 | const float POSITION_TOLERANCE = 0.05f; | ||
3457 | |||
3872 | if (IsChildAgent == false) | 3458 | if (IsChildAgent == false) |
3873 | { | 3459 | { |
3874 | CheckForBorderCrossing(); | 3460 | CheckForBorderCrossing(); |
@@ -3880,21 +3466,11 @@ no information to check this | |||
3880 | // grab the latest PhysicsActor velocity, whereas m_velocity is often | 3466 | // grab the latest PhysicsActor velocity, whereas m_velocity is often |
3881 | // storing a requested force instead of an actual traveling velocity | 3467 | // storing a requested force instead of an actual traveling velocity |
3882 | if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn) | 3468 | if (Appearance.AvatarSize != m_lastSize && !IsLoggingIn) |
3883 | SendAvatarDataToAllClients(); | 3469 | SendAvatarDataToAllAgents(); |
3884 | 3470 | ||
3885 | // Allow any updates for sitting avatars to that llSetPrimitiveLinkParams() can work for very | 3471 | if (!Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || |
3886 | // small increments (e.g. sit position adjusters). An alternative may be to eliminate the tolerance | 3472 | !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || |
3887 | // checks on all updates but the ramifications of this would need careful consideration. | 3473 | !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE)) |
3888 | bool updateClients | ||
3889 | = IsSatOnObject && (Rotation != m_lastRotation || Velocity != m_lastVelocity || m_pos != m_lastPosition); | ||
3890 | |||
3891 | if (!updateClients) | ||
3892 | updateClients | ||
3893 | = !Rotation.ApproxEquals(m_lastRotation, Scene.RootRotationUpdateTolerance) | ||
3894 | || !Velocity.ApproxEquals(m_lastVelocity, Scene.RootVelocityUpdateTolerance) | ||
3895 | || !m_pos.ApproxEquals(m_lastPosition, Scene.RootPositionUpdateTolerance); | ||
3896 | |||
3897 | if (updateClients) | ||
3898 | { | 3474 | { |
3899 | SendTerseUpdateToAllClients(); | 3475 | SendTerseUpdateToAllClients(); |
3900 | 3476 | ||
@@ -3904,12 +3480,6 @@ no information to check this | |||
3904 | m_lastVelocity = Velocity; | 3480 | m_lastVelocity = Velocity; |
3905 | } | 3481 | } |
3906 | 3482 | ||
3907 | <<<<<<< HEAD | ||
3908 | if (Scene.AllowAvatarCrossing) | ||
3909 | CheckForBorderCrossing(); | ||
3910 | |||
3911 | ======= | ||
3912 | >>>>>>> avn/ubitvar | ||
3913 | CheckForSignificantMovement(); // sends update to the modules. | 3483 | CheckForSignificantMovement(); // sends update to the modules. |
3914 | } | 3484 | } |
3915 | } | 3485 | } |
@@ -3918,8 +3488,6 @@ no information to check this | |||
3918 | 3488 | ||
3919 | #region Update Client(s) | 3489 | #region Update Client(s) |
3920 | 3490 | ||
3921 | <<<<<<< HEAD | ||
3922 | ======= | ||
3923 | public void SendUpdateToAgent(ScenePresence p) | 3491 | public void SendUpdateToAgent(ScenePresence p) |
3924 | { | 3492 | { |
3925 | IClientAPI remoteClient = p.ControllingClient; | 3493 | IClientAPI remoteClient = p.ControllingClient; |
@@ -3949,7 +3517,6 @@ no information to check this | |||
3949 | ControllingClient.SendAgentTerseUpdate(p); | 3517 | ControllingClient.SendAgentTerseUpdate(p); |
3950 | } | 3518 | } |
3951 | 3519 | ||
3952 | >>>>>>> avn/ubitvar | ||
3953 | /// <summary> | 3520 | /// <summary> |
3954 | /// Sends a location update to the client connected to this scenePresence | 3521 | /// Sends a location update to the client connected to this scenePresence |
3955 | /// via entity updates | 3522 | /// via entity updates |
@@ -3961,29 +3528,6 @@ no information to check this | |||
3961 | // server. | 3528 | // server. |
3962 | if (remoteClient.IsActive) | 3529 | if (remoteClient.IsActive) |
3963 | { | 3530 | { |
3964 | if (Scene.RootTerseUpdatePeriod > 1) | ||
3965 | { | ||
3966 | // Console.WriteLine( | ||
3967 | // "{0} {1} {2} {3} {4} {5} for {6} to {7}", | ||
3968 | // remoteClient.AgentId, UUID, remoteClient.SceneAgent.IsChildAgent, m_terseUpdateCount, Scene.RootTerseUpdatePeriod, Velocity.ApproxEquals(Vector3.Zero, 0.001f), Name, remoteClient.Name); | ||
3969 | if (remoteClient.AgentId != UUID | ||
3970 | && !remoteClient.SceneAgent.IsChildAgent | ||
3971 | && m_terseUpdateCount % Scene.RootTerseUpdatePeriod != 0 | ||
3972 | && !Velocity.ApproxEquals(Vector3.Zero, 0.001f)) | ||
3973 | { | ||
3974 | // m_log.DebugFormat("[SCENE PRESENCE]: Discarded update from {0} to {1}, args {2} {3} {4} {5} {6} {7}", | ||
3975 | // Name, remoteClient.Name, remoteClient.AgentId, UUID, remoteClient.SceneAgent.IsChildAgent, m_terseUpdateCount, Scene.RootTerseUpdatePeriod, Velocity.ApproxEquals(Vector3.Zero, 0.001f)); | ||
3976 | |||
3977 | return; | ||
3978 | } | ||
3979 | } | ||
3980 | |||
3981 | if (Scene.ChildTerseUpdatePeriod > 1 | ||
3982 | && remoteClient.SceneAgent.IsChildAgent | ||
3983 | && m_terseUpdateCount % Scene.ChildTerseUpdatePeriod != 0 | ||
3984 | && !Velocity.ApproxEquals(Vector3.Zero, 0.001f)) | ||
3985 | return; | ||
3986 | |||
3987 | //m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity); | 3531 | //m_log.DebugFormat("[SCENE PRESENCE]: " + Name + " sending TerseUpdate to " + remoteClient.Name + " : Pos={0} Rot={1} Vel={2}", m_pos, Rotation, m_velocity); |
3988 | remoteClient.SendEntityUpdate( | 3532 | remoteClient.SendEntityUpdate( |
3989 | this, | 3533 | this, |
@@ -4054,10 +3598,6 @@ no information to check this | |||
4054 | float speed = Velocity.Length(); | 3598 | float speed = Velocity.Length(); |
4055 | float velocityDiff = Vector3.Distance(lastVelocitySentToAllClients, Velocity); | 3599 | float velocityDiff = Vector3.Distance(lastVelocitySentToAllClients, Velocity); |
4056 | 3600 | ||
4057 | // m_log.DebugFormat( | ||
4058 | // "[SCENE PRESENCE]: Delta-v {0}, lastVelocity {1}, Velocity {2} for {3} in {4}", | ||
4059 | // velocidyDiff, lastVelocitySentToAllClients, Velocity, Name, Scene.Name); | ||
4060 | |||
4061 | // assuming 5 ms. worst case precision for timer, use 2x that | 3601 | // assuming 5 ms. worst case precision for timer, use 2x that |
4062 | // for distance error threshold | 3602 | // for distance error threshold |
4063 | float distanceErrorThreshold = speed * 0.01f; | 3603 | float distanceErrorThreshold = speed * 0.01f; |
@@ -4066,17 +3606,11 @@ no information to check this | |||
4066 | || Math.Abs(distanceError) > distanceErrorThreshold | 3606 | || Math.Abs(distanceError) > distanceErrorThreshold |
4067 | || velocityDiff > 0.01f) // did velocity change from last update? | 3607 | || velocityDiff > 0.01f) // did velocity change from last update? |
4068 | { | 3608 | { |
4069 | // m_log.DebugFormat( | ||
4070 | // "[SCENE PRESENCE]: Update triggered with speed {0}, distanceError {1}, distanceThreshold {2}, delta-v {3} for {4} in {5}", | ||
4071 | // speed, distanceError, distanceErrorThreshold, velocidyDiff, Name, Scene.Name); | ||
4072 | |||
4073 | lastVelocitySentToAllClients = Velocity; | 3609 | lastVelocitySentToAllClients = Velocity; |
4074 | lastTerseUpdateToAllClientsTick = currentTick; | 3610 | lastTerseUpdateToAllClientsTick = currentTick; |
4075 | lastPositionSentToAllClients = OffsetPosition; | 3611 | lastPositionSentToAllClients = OffsetPosition; |
4076 | 3612 | ||
4077 | m_terseUpdateCount++; | 3613 | // Console.WriteLine("Scheduled update for {0} in {1}", Name, Scene.Name); |
4078 | |||
4079 | // Console.WriteLine("Scheduled update for {0} in {1}", Name, Scene.Name); | ||
4080 | // m_scene.ForEachClient(SendTerseUpdateToClient); | 3614 | // m_scene.ForEachClient(SendTerseUpdateToClient); |
4081 | m_scene.ForEachScenePresence(SendTerseUpdateToAgent); | 3615 | m_scene.ForEachScenePresence(SendTerseUpdateToAgent); |
4082 | } | 3616 | } |
@@ -4103,24 +3637,14 @@ no information to check this | |||
4103 | ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations); | 3637 | ControllingClient.SendCoarseLocationUpdate(avatarUUIDs, coarseLocations); |
4104 | } | 3638 | } |
4105 | 3639 | ||
4106 | public void SendInitialDataToClient() | 3640 | public void SendInitialDataToMe() |
4107 | { | 3641 | { |
4108 | SentInitialDataToClient = true; | ||
4109 | |||
4110 | // Send all scene object to the new client | 3642 | // Send all scene object to the new client |
4111 | WorkManager.RunJob("SendInitialDataToClient", delegate | 3643 | Util.FireAndForget(delegate |
4112 | { | 3644 | { |
4113 | // m_log.DebugFormat( | ||
4114 | // "[SCENE PRESENCE]: Sending initial data to {0} agent {1} in {2}, tp flags {3}", | ||
4115 | // IsChildAgent ? "child" : "root", Name, Scene.Name, m_teleportFlags); | ||
4116 | |||
4117 | // we created a new ScenePresence (a new child agent) in a fresh region. | 3645 | // we created a new ScenePresence (a new child agent) in a fresh region. |
4118 | // Request info about all the (root) agents in this region | 3646 | // Request info about all the (root) agents in this region |
4119 | // Note: This won't send data *to* other clients in that region (children don't send) | 3647 | // Note: This won't send data *to* other clients in that region (children don't send) |
4120 | <<<<<<< HEAD | ||
4121 | SendOtherAgentsAvatarDataToClient(); | ||
4122 | SendOtherAgentsAppearanceToClient(); | ||
4123 | ======= | ||
4124 | if (m_teleportFlags <= 0) | 3648 | if (m_teleportFlags <= 0) |
4125 | { | 3649 | { |
4126 | ILandChannel landch = m_scene.LandChannel; | 3650 | ILandChannel landch = m_scene.LandChannel; |
@@ -4129,7 +3653,6 @@ no information to check this | |||
4129 | landch.sendClientInitialLandInfo(ControllingClient); | 3653 | landch.sendClientInitialLandInfo(ControllingClient); |
4130 | } | 3654 | } |
4131 | } | 3655 | } |
4132 | >>>>>>> avn/ubitvar | ||
4133 | 3656 | ||
4134 | SendOtherAgentsAvatarFullToMe(); | 3657 | SendOtherAgentsAvatarFullToMe(); |
4135 | EntityBase[] entities = Scene.Entities.GetEntities(); | 3658 | EntityBase[] entities = Scene.Entities.GetEntities(); |
@@ -4138,13 +3661,9 @@ no information to check this | |||
4138 | if (e != null && e is SceneObjectGroup && !((SceneObjectGroup)e).IsAttachment) | 3661 | if (e != null && e is SceneObjectGroup && !((SceneObjectGroup)e).IsAttachment) |
4139 | ((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient); | 3662 | ((SceneObjectGroup)e).SendFullUpdateToClient(ControllingClient); |
4140 | } | 3663 | } |
4141 | <<<<<<< HEAD | ||
4142 | }, null, string.Format("SendInitialDataToClient ({0} in {1})", Name, Scene.Name), false, true); | ||
4143 | ======= | ||
4144 | }); | 3664 | }); |
4145 | >>>>>>> avn/ubitvar | ||
4146 | } | 3665 | } |
4147 | 3666 | ||
4148 | /// <summary> | 3667 | /// <summary> |
4149 | /// Do everything required once a client completes its movement into a region and becomes | 3668 | /// Do everything required once a client completes its movement into a region and becomes |
4150 | /// a root agent. | 3669 | /// a root agent. |
@@ -4171,17 +3690,6 @@ no information to check this | |||
4171 | if (m_scene.AvatarFactory != null) | 3690 | if (m_scene.AvatarFactory != null) |
4172 | m_scene.AvatarFactory.QueueAppearanceSave(UUID); | 3691 | m_scene.AvatarFactory.QueueAppearanceSave(UUID); |
4173 | } | 3692 | } |
4174 | <<<<<<< HEAD | ||
4175 | |||
4176 | // This agent just became root. We are going to tell everyone about it. The process of | ||
4177 | // getting other avatars information was initiated elsewhere immediately after the child circuit connected... don't do it | ||
4178 | // again here... this comes after the cached appearance check because the avatars | ||
4179 | // appearance goes into the avatar update packet | ||
4180 | SendAvatarDataToAllClients(); | ||
4181 | |||
4182 | // This invocation always shows up in the viewer logs as an error. Is it needed? | ||
4183 | SendAppearanceToClient(this); | ||
4184 | ======= | ||
4185 | 3693 | ||
4186 | // send avatar object to all viewers so they cross it into region | 3694 | // send avatar object to all viewers so they cross it into region |
4187 | bool newhide = m_currentParcelHide; | 3695 | bool newhide = m_currentParcelHide; |
@@ -4197,7 +3705,6 @@ no information to check this | |||
4197 | } | 3705 | } |
4198 | 3706 | ||
4199 | SendAppearanceToAgent(this); | 3707 | SendAppearanceToAgent(this); |
4200 | >>>>>>> avn/ubitvar | ||
4201 | 3708 | ||
4202 | m_inTransit = false; | 3709 | m_inTransit = false; |
4203 | 3710 | ||
@@ -4220,13 +3727,6 @@ no information to check this | |||
4220 | if (p.UUID == UUID) | 3727 | if (p.UUID == UUID) |
4221 | return; | 3728 | return; |
4222 | 3729 | ||
4223 | <<<<<<< HEAD | ||
4224 | // If the avatars baked textures are all in the cache, then we have a | ||
4225 | // complete appearance... send it out, if not, then we'll send it when | ||
4226 | // the avatar finishes updating its appearance | ||
4227 | SendAppearanceToAllOtherClients(); | ||
4228 | } | ||
4229 | ======= | ||
4230 | // get the avatar, then a kill if can't see it | 3730 | // get the avatar, then a kill if can't see it |
4231 | p.SendInitialAvatarDataToAgent(this); | 3731 | p.SendInitialAvatarDataToAgent(this); |
4232 | 3732 | ||
@@ -4240,19 +3740,13 @@ no information to check this | |||
4240 | }); | 3740 | }); |
4241 | 3741 | ||
4242 | m_scene.StatsReporter.AddAgentUpdates(count); | 3742 | m_scene.StatsReporter.AddAgentUpdates(count); |
4243 | >>>>>>> avn/ubitvar | ||
4244 | } | ||
4245 | |||
4246 | public void SendAvatarDataToAllClients() | ||
4247 | { | ||
4248 | SendAvatarDataToAllClients(true); | ||
4249 | } | 3743 | } |
4250 | 3744 | ||
4251 | /// <summary> | 3745 | /// <summary> |
4252 | /// Send this agent's avatar data to all other root and child agents in the scene | 3746 | /// Send this agent's avatar data to all other root and child agents in the scene |
4253 | /// This agent must be root. This avatar will receive its own update. | 3747 | /// This agent must be root. This avatar will receive its own update. |
4254 | /// </summary> | 3748 | /// </summary> |
4255 | public void SendAvatarDataToAllClients(bool full) | 3749 | public void SendAvatarDataToAllAgents() |
4256 | { | 3750 | { |
4257 | //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAllAgents: {0} ({1})", Name, UUID); | 3751 | //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAllAgents: {0} ({1})", Name, UUID); |
4258 | // only send update from root agents to other clients; children are only "listening posts" | 3752 | // only send update from root agents to other clients; children are only "listening posts" |
@@ -4269,47 +3763,18 @@ no information to check this | |||
4269 | 3763 | ||
4270 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) | 3764 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) |
4271 | { | 3765 | { |
4272 | <<<<<<< HEAD | ||
4273 | if (full) | ||
4274 | SendAvatarDataToClient(scenePresence); | ||
4275 | else | ||
4276 | scenePresence.ControllingClient.SendAvatarDataImmediate(this); | ||
4277 | ======= | ||
4278 | SendAvatarDataToAgent(scenePresence); | 3766 | SendAvatarDataToAgent(scenePresence); |
4279 | >>>>>>> avn/ubitvar | ||
4280 | count++; | 3767 | count++; |
4281 | }); | 3768 | }); |
4282 | 3769 | ||
4283 | m_scene.StatsReporter.AddAgentUpdates(count); | 3770 | m_scene.StatsReporter.AddAgentUpdates(count); |
4284 | } | 3771 | } |
4285 | |||
4286 | <<<<<<< HEAD | ||
4287 | /// <summary> | ||
4288 | /// Send avatar data for all other root agents to this agent, this agent | ||
4289 | /// can be either a child or root | ||
4290 | /// </summary> | ||
4291 | public void SendOtherAgentsAvatarDataToClient() | ||
4292 | ======= | ||
4293 | // sends avatar object to all clients so they cross it into region | 3772 | // sends avatar object to all clients so they cross it into region |
4294 | // then sends kills to hide | 3773 | // then sends kills to hide |
4295 | public void SendInitialAvatarDataToAllAgents(List<ScenePresence> presences) | 3774 | public void SendInitialAvatarDataToAllAgents(List<ScenePresence> presences) |
4296 | >>>>>>> avn/ubitvar | ||
4297 | { | 3775 | { |
4298 | m_lastSize = Appearance.AvatarSize; | 3776 | m_lastSize = Appearance.AvatarSize; |
4299 | int count = 0; | 3777 | int count = 0; |
4300 | <<<<<<< HEAD | ||
4301 | m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence) | ||
4302 | { | ||
4303 | // only send information about other root agents | ||
4304 | if (scenePresence.UUID == UUID) | ||
4305 | return; | ||
4306 | |||
4307 | scenePresence.SendAvatarDataToClient(this); | ||
4308 | count++; | ||
4309 | }); | ||
4310 | ======= | ||
4311 | >>>>>>> avn/ubitvar | ||
4312 | |||
4313 | foreach (ScenePresence p in presences) | 3778 | foreach (ScenePresence p in presences) |
4314 | { | 3779 | { |
4315 | p.ControllingClient.SendAvatarDataImmediate(this); | 3780 | p.ControllingClient.SendAvatarDataImmediate(this); |
@@ -4337,16 +3802,11 @@ no information to check this | |||
4337 | /// Send avatar data to an agent. | 3802 | /// Send avatar data to an agent. |
4338 | /// </summary> | 3803 | /// </summary> |
4339 | /// <param name="avatar"></param> | 3804 | /// <param name="avatar"></param> |
4340 | public void SendAvatarDataToClient(ScenePresence avatar) | 3805 | public void SendAvatarDataToAgent(ScenePresence avatar) |
4341 | { | 3806 | { |
4342 | <<<<<<< HEAD | ||
4343 | //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToClient from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); | ||
4344 | |||
4345 | ======= | ||
4346 | //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); | 3807 | //m_log.DebugFormat("[SCENE PRESENCE] SendAvatarDataToAgent from {0} ({1}) to {2} ({3})", Name, UUID, avatar.Name, avatar.UUID); |
4347 | if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200) | 3808 | if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200) |
4348 | return; | 3809 | return; |
4349 | >>>>>>> avn/ubitvar | ||
4350 | avatar.ControllingClient.SendAvatarDataImmediate(this); | 3810 | avatar.ControllingClient.SendAvatarDataImmediate(this); |
4351 | } | 3811 | } |
4352 | 3812 | ||
@@ -4354,18 +3814,14 @@ no information to check this | |||
4354 | { | 3814 | { |
4355 | avatar.ControllingClient.SendAvatarDataImmediate(this); | 3815 | avatar.ControllingClient.SendAvatarDataImmediate(this); |
4356 | } | 3816 | } |
4357 | 3817 | ||
4358 | /// <summary> | 3818 | /// <summary> |
4359 | /// Send this agent's appearance to all other root and child agents in the scene | 3819 | /// Send this agent's appearance to all other root and child agents in the scene |
4360 | /// This agent must be root. | 3820 | /// This agent must be root. |
4361 | /// </summary> | 3821 | /// </summary> |
4362 | public void SendAppearanceToAllOtherClients() | 3822 | public void SendAppearanceToAllOtherAgents() |
4363 | { | 3823 | { |
4364 | <<<<<<< HEAD | ||
4365 | // m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherClients: {0} {1}", Name, UUID); | ||
4366 | ======= | ||
4367 | // m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID); | 3824 | // m_log.DebugFormat("[SCENE PRESENCE] SendAppearanceToAllOtherAgents: {0} {1}", Name, UUID); |
4368 | >>>>>>> avn/ubitvar | ||
4369 | 3825 | ||
4370 | // only send update from root agents to other clients; children are only "listening posts" | 3826 | // only send update from root agents to other clients; children are only "listening posts" |
4371 | if (IsChildAgent) | 3827 | if (IsChildAgent) |
@@ -4379,51 +3835,21 @@ no information to check this | |||
4379 | 3835 | ||
4380 | int count = 0; | 3836 | int count = 0; |
4381 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) | 3837 | m_scene.ForEachScenePresence(delegate(ScenePresence scenePresence) |
4382 | { | 3838 | { |
4383 | // only send information to other root agents | 3839 | // only send information to other root agents |
4384 | if (scenePresence.UUID == UUID) | 3840 | if (scenePresence.UUID == UUID) |
4385 | return; | 3841 | return; |
4386 | |||
4387 | SendAppearanceToClient(scenePresence); | ||
4388 | count++; | ||
4389 | }); | ||
4390 | <<<<<<< HEAD | ||
4391 | |||
4392 | m_scene.StatsReporter.AddAgentUpdates(count); | ||
4393 | } | ||
4394 | |||
4395 | /// <summary> | ||
4396 | /// Send appearance from all other root agents to this agent. this agent | ||
4397 | /// can be either root or child | ||
4398 | /// </summary> | ||
4399 | public void SendOtherAgentsAppearanceToClient() | ||
4400 | { | ||
4401 | // m_log.DebugFormat("[SCENE PRESENCE] SendOtherAgentsAppearanceToClient {0} {1}", Name, UUID); | ||
4402 | |||
4403 | int count = 0; | ||
4404 | m_scene.ForEachRootScenePresence(delegate(ScenePresence scenePresence) | ||
4405 | { | ||
4406 | // only send information about other root agents | ||
4407 | if (scenePresence.UUID == UUID) | ||
4408 | return; | ||
4409 | |||
4410 | scenePresence.SendAppearanceToClient(this); | ||
4411 | count++; | ||
4412 | }); | ||
4413 | 3842 | ||
4414 | ======= | 3843 | SendAppearanceToAgent(scenePresence); |
4415 | >>>>>>> avn/ubitvar | 3844 | count++; |
3845 | }); | ||
4416 | m_scene.StatsReporter.AddAgentUpdates(count); | 3846 | m_scene.StatsReporter.AddAgentUpdates(count); |
4417 | } | 3847 | } |
4418 | 3848 | ||
4419 | /// <summary> | 3849 | public void SendAppearanceToAgent(ScenePresence avatar) |
4420 | /// Send appearance data to an agent. | ||
4421 | /// </summary> | ||
4422 | /// <param name="avatar"></param> | ||
4423 | public void SendAppearanceToClient(ScenePresence avatar) | ||
4424 | { | 3850 | { |
4425 | // m_log.DebugFormat( | 3851 | // m_log.DebugFormat( |
4426 | // "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); | 3852 | // "[SCENE PRESENCE]: Sending appearance data from {0} {1} to {2} {3}", Name, m_uuid, avatar.Name, avatar.UUID); |
4427 | if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200) | 3853 | if (ParcelHideThisAvatar && currentParcelUUID != avatar.currentParcelUUID && avatar.GodLevel < 200) |
4428 | return; | 3854 | return; |
4429 | SendAppearanceToAgentNF(avatar); | 3855 | SendAppearanceToAgentNF(avatar); |
@@ -4574,81 +4000,6 @@ no information to check this | |||
4574 | if (ParentID != 0 || PhysicsActor == null || ParentUUID != UUID.Zero) | 4000 | if (ParentID != 0 || PhysicsActor == null || ParentUUID != UUID.Zero) |
4575 | return; | 4001 | return; |
4576 | 4002 | ||
4577 | <<<<<<< HEAD | ||
4578 | if (IsInTransit) | ||
4579 | return; | ||
4580 | |||
4581 | Vector3 pos2 = AbsolutePosition; | ||
4582 | Vector3 origPosition = pos2; | ||
4583 | Vector3 vel = Velocity; | ||
4584 | |||
4585 | // Compute the future avatar position. | ||
4586 | // If the avatar will be crossing, we force the crossing to happen now | ||
4587 | // in the hope that this will make the avatar movement smoother when crossing. | ||
4588 | pos2 += vel * 0.05f; | ||
4589 | |||
4590 | if (m_scene.PositionIsInCurrentRegion(pos2)) | ||
4591 | return; | ||
4592 | |||
4593 | m_log.DebugFormat("{0} CheckForBorderCrossing: position outside region. {1} in {2} at pos {3}", | ||
4594 | LogHeader, Name, Scene.Name, pos2); | ||
4595 | |||
4596 | // Disconnect from the current region | ||
4597 | bool isFlying = Flying; | ||
4598 | RemoveFromPhysicalScene(); | ||
4599 | |||
4600 | // pos2 is the forcasted position so make that the 'current' position so the crossing | ||
4601 | // code will move us into the newly addressed region. | ||
4602 | m_pos = pos2; | ||
4603 | |||
4604 | if (CrossToNewRegion()) | ||
4605 | { | ||
4606 | AddToPhysicalScene(isFlying); | ||
4607 | } | ||
4608 | else | ||
4609 | { | ||
4610 | // Tried to make crossing happen but it failed. | ||
4611 | if (m_requestedSitTargetUUID == UUID.Zero) | ||
4612 | { | ||
4613 | m_log.DebugFormat("{0} CheckForBorderCrossing: Crossing failed. Restoring old position.", LogHeader); | ||
4614 | |||
4615 | Velocity = Vector3.Zero; | ||
4616 | AbsolutePosition = EnforceSanityOnPosition(origPosition); | ||
4617 | |||
4618 | AddToPhysicalScene(isFlying); | ||
4619 | } | ||
4620 | } | ||
4621 | } | ||
4622 | |||
4623 | // Given a position, make sure it is within the current region. | ||
4624 | // If just outside some border, the returned position will be just inside the border on that side. | ||
4625 | private Vector3 EnforceSanityOnPosition(Vector3 origPosition) | ||
4626 | { | ||
4627 | const float borderFudge = 0.1f; | ||
4628 | Vector3 ret = origPosition; | ||
4629 | |||
4630 | // Sanity checking on the position to make sure it is in the region we couldn't cross from | ||
4631 | float extentX = (float)m_scene.RegionInfo.RegionSizeX; | ||
4632 | float extentY = (float)m_scene.RegionInfo.RegionSizeY; | ||
4633 | IRegionCombinerModule combiner = m_scene.RequestModuleInterface<IRegionCombinerModule>(); | ||
4634 | if (combiner != null) | ||
4635 | { | ||
4636 | // If a mega-region, the size could be much bigger | ||
4637 | Vector2 megaExtent = combiner.GetSizeOfMegaregion(m_scene.RegionInfo.RegionID); | ||
4638 | extentX = megaExtent.X; | ||
4639 | extentY = megaExtent.Y; | ||
4640 | } | ||
4641 | if (ret.X < 0) | ||
4642 | ret.X = borderFudge; | ||
4643 | else if (ret.X >= extentX) | ||
4644 | ret.X = extentX - borderFudge; | ||
4645 | if (ret.Y < 0) | ||
4646 | ret.Y = borderFudge; | ||
4647 | else if (ret.Y >= extentY) | ||
4648 | ret.Y = extentY - borderFudge; | ||
4649 | |||
4650 | return ret; | ||
4651 | ======= | ||
4652 | Vector3 pos2 = AbsolutePosition; | 4003 | Vector3 pos2 = AbsolutePosition; |
4653 | Vector3 vel = Velocity; | 4004 | Vector3 vel = Velocity; |
4654 | 4005 | ||
@@ -4710,8 +4061,6 @@ no information to check this | |||
4710 | 4061 | ||
4711 | AddToPhysicalScene(isFlying); | 4062 | AddToPhysicalScene(isFlying); |
4712 | } | 4063 | } |
4713 | |||
4714 | >>>>>>> avn/ubitvar | ||
4715 | } | 4064 | } |
4716 | 4065 | ||
4717 | /// <summary> | 4066 | /// <summary> |
@@ -4779,16 +4128,6 @@ no information to check this | |||
4779 | // Don't close the agent on this region yet | 4128 | // Don't close the agent on this region yet |
4780 | if (handle != Scene.RegionInfo.RegionHandle) | 4129 | if (handle != Scene.RegionInfo.RegionHandle) |
4781 | { | 4130 | { |
4782 | <<<<<<< HEAD | ||
4783 | uint x, y; | ||
4784 | Util.RegionHandleToRegionLoc(handle, out x, out y); | ||
4785 | |||
4786 | // m_log.Debug("---> x: " + x + "; newx:" + newRegionX + "; Abs:" + (int)Math.Abs((int)(x - newRegionX))); | ||
4787 | // m_log.Debug("---> y: " + y + "; newy:" + newRegionY + "; Abs:" + (int)Math.Abs((int)(y - newRegionY))); | ||
4788 | float dist = (float)Math.Max(Scene.DefaultDrawDistance, | ||
4789 | (float)Math.Max(Scene.RegionInfo.RegionSizeX, Scene.RegionInfo.RegionSizeY)); | ||
4790 | if (Util.IsOutsideView(dist, x, newRegionX, y, newRegionY)) | ||
4791 | ======= | ||
4792 | Util.RegionHandleToRegionLoc(handle, out x, out y); | 4131 | Util.RegionHandleToRegionLoc(handle, out x, out y); |
4793 | if (m_knownChildRegionsSizeInfo.TryGetValue(handle, out regInfo)) | 4132 | if (m_knownChildRegionsSizeInfo.TryGetValue(handle, out regInfo)) |
4794 | { | 4133 | { |
@@ -4802,7 +4141,6 @@ no information to check this | |||
4802 | } | 4141 | } |
4803 | } | 4142 | } |
4804 | else | 4143 | else |
4805 | >>>>>>> avn/ubitvar | ||
4806 | { | 4144 | { |
4807 | if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY, | 4145 | if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY, |
4808 | (int)Constants.RegionSize, (int)Constants.RegionSize, newRegionSizeX, newRegionSizeY)) | 4146 | (int)Constants.RegionSize, (int)Constants.RegionSize, newRegionSizeX, newRegionSizeY)) |
@@ -4875,8 +4213,7 @@ no information to check this | |||
4875 | return; | 4213 | return; |
4876 | 4214 | ||
4877 | CopyFrom(cAgentData); | 4215 | CopyFrom(cAgentData); |
4878 | 4216 | ||
4879 | m_updateAgentReceivedAfterTransferEvent.Set(); | ||
4880 | } | 4217 | } |
4881 | 4218 | ||
4882 | private static Vector3 marker = new Vector3(-1f, -1f, -1f); | 4219 | private static Vector3 marker = new Vector3(-1f, -1f, -1f); |
@@ -4895,23 +4232,11 @@ no information to check this | |||
4895 | if (!IsChildAgent) | 4232 | if (!IsChildAgent) |
4896 | return; | 4233 | return; |
4897 | 4234 | ||
4898 | <<<<<<< HEAD | ||
4899 | // m_log.DebugFormat( | ||
4900 | // "[SCENE PRESENCE]: ChildAgentPositionUpdate for {0} in {1}, tRegion {2},{3}, rRegion {4},{5}, pos {6}", | ||
4901 | // Name, Scene.Name, tRegionX, tRegionY, rRegionX, rRegionY, cAgentData.Position); | ||
4902 | |||
4903 | // Find the distance (in meters) between the two regions | ||
4904 | // XXX: We cannot use Util.RegionLocToHandle() here because a negative value will silently overflow the | ||
4905 | // uint | ||
4906 | int shiftx = (int)(((int)rRegionX - (int)tRegionX) * Constants.RegionSize); | ||
4907 | int shifty = (int)(((int)rRegionY - (int)tRegionY) * Constants.RegionSize); | ||
4908 | ======= | ||
4909 | RegionHandle = cAgentData.RegionHandle; | 4235 | RegionHandle = cAgentData.RegionHandle; |
4910 | 4236 | ||
4911 | //m_log.Debug(" >>> ChildAgentPositionUpdate <<< " + rRegionX + "-" + rRegionY); | 4237 | //m_log.Debug(" >>> ChildAgentPositionUpdate <<< " + rRegionX + "-" + rRegionY); |
4912 | int shiftx = ((int)rRegionX - (int)tRegionX) * (int)Constants.RegionSize; | 4238 | int shiftx = ((int)rRegionX - (int)tRegionX) * (int)Constants.RegionSize; |
4913 | int shifty = ((int)rRegionY - (int)tRegionY) * (int)Constants.RegionSize; | 4239 | int shifty = ((int)rRegionY - (int)tRegionY) * (int)Constants.RegionSize; |
4914 | >>>>>>> avn/ubitvar | ||
4915 | 4240 | ||
4916 | Vector3 offset = new Vector3(shiftx, shifty, 0f); | 4241 | Vector3 offset = new Vector3(shiftx, shifty, 0f); |
4917 | 4242 | ||
@@ -4919,11 +4244,7 @@ no information to check this | |||
4919 | // changes, then start using the agent's drawdistance rather than the | 4244 | // changes, then start using the agent's drawdistance rather than the |
4920 | // region's draw distance. | 4245 | // region's draw distance. |
4921 | DrawDistance = cAgentData.Far; | 4246 | DrawDistance = cAgentData.Far; |
4922 | <<<<<<< HEAD | ||
4923 | // DrawDistance = Scene.DefaultDrawDistance; | ||
4924 | ======= | ||
4925 | // DrawDistance = Scene.DefaultDrawDistance; | 4247 | // DrawDistance = Scene.DefaultDrawDistance; |
4926 | >>>>>>> avn/ubitvar | ||
4927 | 4248 | ||
4928 | if (cAgentData.Position != marker) // UGH!! | 4249 | if (cAgentData.Position != marker) // UGH!! |
4929 | m_pos = cAgentData.Position + offset; | 4250 | m_pos = cAgentData.Position + offset; |
@@ -5038,10 +4359,6 @@ no information to check this | |||
5038 | 4359 | ||
5039 | private void CopyFrom(AgentData cAgent) | 4360 | private void CopyFrom(AgentData cAgent) |
5040 | { | 4361 | { |
5041 | <<<<<<< HEAD | ||
5042 | ======= | ||
5043 | |||
5044 | >>>>>>> avn/ubitvar | ||
5045 | m_callbackURI = cAgent.CallbackURI; | 4362 | m_callbackURI = cAgent.CallbackURI; |
5046 | // m_log.DebugFormat( | 4363 | // m_log.DebugFormat( |
5047 | // "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", | 4364 | // "[SCENE PRESENCE]: Set callback for {0} in {1} to {2} in CopyFrom()", |
@@ -5060,9 +4377,6 @@ no information to check this | |||
5060 | // changes, then start using the agent's drawdistance rather than the | 4377 | // changes, then start using the agent's drawdistance rather than the |
5061 | // region's draw distance. | 4378 | // region's draw distance. |
5062 | DrawDistance = cAgent.Far; | 4379 | DrawDistance = cAgent.Far; |
5063 | <<<<<<< HEAD | ||
5064 | // DrawDistance = Scene.DefaultDrawDistance; | ||
5065 | ======= | ||
5066 | //DrawDistance = Scene.DefaultDrawDistance; | 4380 | //DrawDistance = Scene.DefaultDrawDistance; |
5067 | 4381 | ||
5068 | if (cAgent.ChildrenCapSeeds != null && cAgent.ChildrenCapSeeds.Count > 0) | 4382 | if (cAgent.ChildrenCapSeeds != null && cAgent.ChildrenCapSeeds.Count > 0) |
@@ -5073,7 +4387,6 @@ no information to check this | |||
5073 | } | 4387 | } |
5074 | KnownRegions = cAgent.ChildrenCapSeeds; | 4388 | KnownRegions = cAgent.ChildrenCapSeeds; |
5075 | } | 4389 | } |
5076 | >>>>>>> avn/ubitvar | ||
5077 | 4390 | ||
5078 | if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) | 4391 | if ((cAgent.Throttles != null) && cAgent.Throttles.Length > 0) |
5079 | ControllingClient.SetChildAgentThrottle(cAgent.Throttles); | 4392 | ControllingClient.SetChildAgentThrottle(cAgent.Throttles); |
@@ -5135,35 +4448,10 @@ no information to check this | |||
5135 | Animator.currentControlState = (ScenePresenceAnimator.motionControlStates) cAgent.MotionState; | 4448 | Animator.currentControlState = (ScenePresenceAnimator.motionControlStates) cAgent.MotionState; |
5136 | 4449 | ||
5137 | if (Scene.AttachmentsModule != null) | 4450 | if (Scene.AttachmentsModule != null) |
5138 | <<<<<<< HEAD | ||
5139 | { | ||
5140 | // If the JobEngine is running we can schedule this job now and continue rather than waiting for all | ||
5141 | // attachments to copy, which might take a long time in the Hypergrid case as the entire inventory | ||
5142 | // graph is inspected for each attachments and assets possibly fetched. | ||
5143 | // | ||
5144 | // We don't need to worry about a race condition as the job to later start the scripts is also | ||
5145 | // JobEngine scheduled and so will always occur after this task. | ||
5146 | // XXX: This will not be true if JobEngine ever gets more than one thread. | ||
5147 | WorkManager.RunJob( | ||
5148 | "CopyAttachments", | ||
5149 | o => Scene.AttachmentsModule.CopyAttachments(cAgent, this), | ||
5150 | null, | ||
5151 | string.Format("Copy attachments for {0} entering {1}", Name, Scene.Name), | ||
5152 | true); | ||
5153 | } | ||
5154 | |||
5155 | // This must occur after attachments are copied or scheduled to be copied, as it releases the CompleteMovement() calling thread | ||
5156 | // originating from the client completing a teleport. Otherwise, CompleteMovement() code to restart | ||
5157 | // script attachments can outrace this thread. | ||
5158 | lock (m_originRegionIDAccessLock) | ||
5159 | m_originRegionID = cAgent.RegionID; | ||
5160 | ======= | ||
5161 | Scene.AttachmentsModule.CopyAttachments(cAgent, this); | 4451 | Scene.AttachmentsModule.CopyAttachments(cAgent, this); |
5162 | 4452 | ||
5163 | lock (m_originRegionIDAccessLock) | 4453 | lock (m_originRegionIDAccessLock) |
5164 | m_originRegionID = cAgent.RegionID; | 4454 | m_originRegionID = cAgent.RegionID; |
5165 | |||
5166 | >>>>>>> avn/ubitvar | ||
5167 | } | 4455 | } |
5168 | 4456 | ||
5169 | public bool CopyAgent(out IAgentData agent) | 4457 | public bool CopyAgent(out IAgentData agent) |
@@ -5212,22 +4500,13 @@ no information to check this | |||
5212 | if (Appearance.AvatarHeight == 0) | 4500 | if (Appearance.AvatarHeight == 0) |
5213 | // Appearance.SetHeight(); | 4501 | // Appearance.SetHeight(); |
5214 | Appearance.SetSize(new Vector3(0.45f,0.6f,1.9f)); | 4502 | Appearance.SetSize(new Vector3(0.45f,0.6f,1.9f)); |
5215 | |||
5216 | /* | ||
5217 | PhysicsActor = scene.AddAvatar( | ||
5218 | LocalId, Firstname + "." + Lastname, pVec, | ||
5219 | new Vector3(0.45f, 0.6f, Appearance.AvatarHeight), isFlying); | ||
5220 | */ | ||
5221 | 4503 | ||
5222 | <<<<<<< HEAD | 4504 | PhysicsScene scene = m_scene.PhysicsScene; |
5223 | PhysicsActor = m_scene.PhysicsScene.AddAvatar( | 4505 | Vector3 pVec = AbsolutePosition; |
5224 | LocalId, Firstname + "." + Lastname, AbsolutePosition, Velocity, | 4506 | |
5225 | Appearance.AvatarBoxSize, isFlying); | ||
5226 | ======= | ||
5227 | PhysicsActor = scene.AddAvatar( | 4507 | PhysicsActor = scene.AddAvatar( |
5228 | LocalId, Firstname + "." + Lastname, pVec, | 4508 | LocalId, Firstname + "." + Lastname, pVec, |
5229 | Appearance.AvatarBoxSize,Appearance.AvatarFeetOffset, isFlying); | 4509 | Appearance.AvatarBoxSize,Appearance.AvatarFeetOffset, isFlying); |
5230 | >>>>>>> avn/ubitvar | ||
5231 | 4510 | ||
5232 | //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; | 4511 | //PhysicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients; |
5233 | PhysicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; | 4512 | PhysicsActor.OnCollisionUpdate += PhysicsCollisionUpdate; |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index dc5de58..c8a01a0 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -307,21 +307,13 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
307 | } | 307 | } |
308 | } | 308 | } |
309 | 309 | ||
310 | <<<<<<< HEAD | ||
311 | |||
312 | ======= | ||
313 | >>>>>>> avn/ubitvar | ||
314 | /// <summary> | 310 | /// <summary> |
315 | /// Modifies a SceneObjectGroup. | 311 | /// Modifies a SceneObjectGroup. |
316 | /// </summary> | 312 | /// </summary> |
317 | /// <param name="sog">The object</param> | 313 | /// <param name="sog">The object</param> |
318 | /// <returns>Whether the object was actually modified</returns> | 314 | /// <returns>Whether the object was actually modified</returns> |
319 | public delegate bool SceneObjectModifier(SceneObjectGroup sog); | 315 | public delegate bool SceneObjectModifier(SceneObjectGroup sog); |
320 | <<<<<<< HEAD | ||
321 | |||
322 | ======= | ||
323 | 316 | ||
324 | >>>>>>> avn/ubitvar | ||
325 | /// <summary> | 317 | /// <summary> |
326 | /// Modifies an object by deserializing it; applying 'modifier' to each SceneObjectGroup; and reserializing. | 318 | /// Modifies an object by deserializing it; applying 'modifier' to each SceneObjectGroup; and reserializing. |
327 | /// </summary> | 319 | /// </summary> |
@@ -335,11 +327,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
335 | CoalescedSceneObjects coa = null; | 327 | CoalescedSceneObjects coa = null; |
336 | 328 | ||
337 | string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(data)); | 329 | string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(data)); |
338 | <<<<<<< HEAD | ||
339 | |||
340 | ======= | ||
341 | |||
342 | >>>>>>> avn/ubitvar | ||
343 | if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa)) | 330 | if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa)) |
344 | { | 331 | { |
345 | // m_log.DebugFormat("[SERIALIZER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); | 332 | // m_log.DebugFormat("[SERIALIZER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); |
@@ -384,10 +371,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
384 | 371 | ||
385 | return data; | 372 | return data; |
386 | } | 373 | } |
387 | <<<<<<< HEAD | ||
388 | |||
389 | ======= | ||
390 | >>>>>>> avn/ubitvar | ||
391 | 374 | ||
392 | #region manual serialization | 375 | #region manual serialization |
393 | 376 | ||
@@ -739,44 +722,42 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
739 | obj.GravityModifier = reader.ReadElementContentAsFloat("GravityModifier", String.Empty); | 722 | obj.GravityModifier = reader.ReadElementContentAsFloat("GravityModifier", String.Empty); |
740 | } | 723 | } |
741 | 724 | ||
742 | <<<<<<< HEAD | 725 | private static void ProcessCameraEyeOffset(SceneObjectPart obj, XmlReader reader) |
743 | private static void ProcessShape(SceneObjectPart obj, XmlReader reader) | ||
744 | ======= | ||
745 | private static void ProcessCameraEyeOffset(SceneObjectPart obj, XmlTextReader reader) | ||
746 | { | 726 | { |
747 | obj.SetCameraEyeOffset(Util.ReadVector(reader, "CameraEyeOffset")); | 727 | obj.SetCameraEyeOffset(Util.ReadVector(reader, "CameraEyeOffset")); |
748 | } | 728 | } |
749 | 729 | ||
750 | private static void ProcessCameraAtOffset(SceneObjectPart obj, XmlTextReader reader) | 730 | private static void ProcessCameraAtOffset(SceneObjectPart obj, XmlReader reader) |
751 | { | 731 | { |
752 | obj.SetCameraAtOffset(Util.ReadVector(reader, "CameraAtOffset")); | 732 | obj.SetCameraAtOffset(Util.ReadVector(reader, "CameraAtOffset")); |
753 | } | 733 | } |
754 | 734 | ||
755 | private static void ProcessSoundID(SceneObjectPart obj, XmlTextReader reader) | 735 | private static void ProcessSoundID(SceneObjectPart obj, XmlReader reader) |
756 | { | 736 | { |
757 | obj.Sound = Util.ReadUUID(reader, "SoundID"); | 737 | obj.Sound = Util.ReadUUID(reader, "SoundID"); |
758 | } | 738 | } |
759 | 739 | ||
760 | private static void ProcessSoundGain(SceneObjectPart obj, XmlTextReader reader) | 740 | private static void ProcessSoundGain(SceneObjectPart obj, XmlReader reader) |
761 | { | 741 | { |
762 | obj.SoundGain = reader.ReadElementContentAsDouble("SoundGain", String.Empty); | 742 | obj.SoundGain = reader.ReadElementContentAsDouble("SoundGain", String.Empty); |
763 | } | 743 | } |
764 | 744 | ||
765 | private static void ProcessSoundFlags(SceneObjectPart obj, XmlTextReader reader) | 745 | private static void ProcessSoundFlags(SceneObjectPart obj, XmlReader reader) |
766 | { | 746 | { |
767 | obj.SoundFlags = (byte)reader.ReadElementContentAsInt("SoundFlags", String.Empty); | 747 | obj.SoundFlags = (byte)reader.ReadElementContentAsInt("SoundFlags", String.Empty); |
768 | } | 748 | } |
769 | 749 | ||
770 | private static void ProcessSoundRadius(SceneObjectPart obj, XmlTextReader reader) | 750 | private static void ProcessSoundRadius(SceneObjectPart obj, XmlReader reader) |
771 | { | 751 | { |
772 | obj.SoundRadius = reader.ReadElementContentAsDouble("SoundRadius", String.Empty); | 752 | obj.SoundRadius = reader.ReadElementContentAsDouble("SoundRadius", String.Empty); |
773 | } | 753 | } |
774 | 754 | ||
775 | private static void ProcessSoundQueueing(SceneObjectPart obj, XmlTextReader reader) | 755 | private static void ProcessSoundQueueing(SceneObjectPart obj, XmlReader reader) |
776 | { | 756 | { |
777 | obj.SoundQueueing = Util.ReadBoolean(reader); | 757 | obj.SoundQueueing = Util.ReadBoolean(reader); |
778 | } | 758 | } |
779 | private static void ProcessVehicle(SceneObjectPart obj, XmlTextReader reader) | 759 | |
760 | private static void ProcessVehicle(SceneObjectPart obj, XmlReader reader) | ||
780 | { | 761 | { |
781 | SOPVehicle vehicle = SOPVehicle.FromXml2(reader); | 762 | SOPVehicle vehicle = SOPVehicle.FromXml2(reader); |
782 | 763 | ||
@@ -793,8 +774,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
793 | } | 774 | } |
794 | } | 775 | } |
795 | 776 | ||
796 | private static void ProcessShape(SceneObjectPart obj, XmlTextReader reader) | 777 | private static void ProcessShape(SceneObjectPart obj, XmlReader reader) |
797 | >>>>>>> avn/ubitvar | ||
798 | { | 778 | { |
799 | List<string> errorNodeNames; | 779 | List<string> errorNodeNames; |
800 | obj.Shape = ReadShape(reader, "Shape", out errorNodeNames, obj); | 780 | obj.Shape = ReadShape(reader, "Shape", out errorNodeNames, obj); |
@@ -968,21 +948,21 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
968 | obj.PayPrice[4] = (int)reader.ReadElementContentAsInt("PayPrice4", String.Empty); | 948 | obj.PayPrice[4] = (int)reader.ReadElementContentAsInt("PayPrice4", String.Empty); |
969 | } | 949 | } |
970 | 950 | ||
971 | private static void ProcessBuoyancy(SceneObjectPart obj, XmlTextReader reader) | 951 | private static void ProcessBuoyancy(SceneObjectPart obj, XmlReader reader) |
972 | { | 952 | { |
973 | obj.Buoyancy = (float)reader.ReadElementContentAsFloat("Buoyancy", String.Empty); | 953 | obj.Buoyancy = (float)reader.ReadElementContentAsFloat("Buoyancy", String.Empty); |
974 | } | 954 | } |
975 | 955 | ||
976 | private static void ProcessForce(SceneObjectPart obj, XmlTextReader reader) | 956 | private static void ProcessForce(SceneObjectPart obj, XmlReader reader) |
977 | { | 957 | { |
978 | obj.Force = Util.ReadVector(reader, "Force"); | 958 | obj.Force = Util.ReadVector(reader, "Force"); |
979 | } | 959 | } |
980 | private static void ProcessTorque(SceneObjectPart obj, XmlTextReader reader) | 960 | private static void ProcessTorque(SceneObjectPart obj, XmlReader reader) |
981 | { | 961 | { |
982 | obj.Torque = Util.ReadVector(reader, "Torque"); | 962 | obj.Torque = Util.ReadVector(reader, "Torque"); |
983 | } | 963 | } |
984 | 964 | ||
985 | private static void ProcessVolumeDetectActive(SceneObjectPart obj, XmlTextReader reader) | 965 | private static void ProcessVolumeDetectActive(SceneObjectPart obj, XmlReader reader) |
986 | { | 966 | { |
987 | obj.VolumeDetectActive = Util.ReadBoolean(reader); | 967 | obj.VolumeDetectActive = Util.ReadBoolean(reader); |
988 | } | 968 | } |
diff --git a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs index 52e3ff1..bdddd73 100755 --- a/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs +++ b/OpenSim/Region/Framework/Scenes/SimStatsReporter.cs | |||
@@ -184,11 +184,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
184 | 184 | ||
185 | // saved last reported value so there is something available for llGetRegionFPS | 185 | // saved last reported value so there is something available for llGetRegionFPS |
186 | private float lastReportedSimFPS; | 186 | private float lastReportedSimFPS; |
187 | <<<<<<< HEAD | ||
188 | private float[] lastReportedSimStats = new float[m_statisticArraySize]; | ||
189 | ======= | ||
190 | private float[] lastReportedSimStats = new float[23]; | 187 | private float[] lastReportedSimStats = new float[23]; |
191 | >>>>>>> avn/ubitvar | ||
192 | private float m_pfps; | 188 | private float m_pfps; |
193 | 189 | ||
194 | /// <summary> | 190 | /// <summary> |
@@ -208,14 +204,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
208 | private int m_physicsMS; | 204 | private int m_physicsMS; |
209 | private int m_imageMS; | 205 | private int m_imageMS; |
210 | private int m_otherMS; | 206 | private int m_otherMS; |
211 | <<<<<<< HEAD | ||
212 | private int m_scriptMS; | ||
213 | ======= | ||
214 | private int m_sleeptimeMS; | 207 | private int m_sleeptimeMS; |
215 | 208 | ||
216 | //Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed. | 209 | //Ckrinke: (3-21-08) Comment out to remove a compiler warning. Bring back into play when needed. |
217 | //Ckrinke private int m_scriptMS = 0; | 210 | //Ckrinke private int m_scriptMS = 0; |
218 | >>>>>>> avn/ubitvar | ||
219 | 211 | ||
220 | private int m_rootAgents; | 212 | private int m_rootAgents; |
221 | private int m_childAgents; | 213 | private int m_childAgents; |
@@ -269,27 +261,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
269 | 261 | ||
270 | private IEstateModule estateModule; | 262 | private IEstateModule estateModule; |
271 | 263 | ||
272 | public SimStatsReporter(Scene scene) | 264 | public SimStatsReporter(Scene scene) |
273 | : this(scene, Scene.m_defaultNumberFramesStored) | ||
274 | { | 265 | { |
275 | } | ||
276 | |||
277 | public SimStatsReporter(Scene scene, int numberOfFrames) | ||
278 | { | ||
279 | // Store the number of frames from the OpenSim.ini configuration file | ||
280 | m_numberFramesStored = numberOfFrames; | ||
281 | |||
282 | // Initialize the different frame time arrays to the correct sizes | ||
283 | m_totalFrameTimeMilliseconds = new double[m_numberFramesStored]; | ||
284 | m_simulationFrameTimeMilliseconds = new double[m_numberFramesStored]; | ||
285 | m_physicsFrameTimeMilliseconds = new double[m_numberFramesStored]; | ||
286 | m_networkFrameTimeMilliseconds = new double[m_numberFramesStored]; | ||
287 | |||
288 | // Initialize the current number of users logging into the region | ||
289 | m_usersLoggingIn = 0; | ||
290 | |||
291 | m_scene = scene; | 266 | m_scene = scene; |
292 | m_reportedFpsCorrectionFactor = scene.MinFrameSeconds * m_nominalReportedFps; | 267 | m_reportedFpsCorrectionFactor = scene.MinFrameTime * m_nominalReportedFps; |
293 | m_statsUpdateFactor = (float)(m_statsUpdatesEveryMS / 1000); | 268 | m_statsUpdateFactor = (float)(m_statsUpdatesEveryMS / 1000); |
294 | ReportingRegion = scene.RegionInfo; | 269 | ReportingRegion = scene.RegionInfo; |
295 | 270 | ||
@@ -304,7 +279,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
304 | 279 | ||
305 | /// At the moment, we'll only report if a frame is over 120% of target, since commonly frames are a bit | 280 | /// At the moment, we'll only report if a frame is over 120% of target, since commonly frames are a bit |
306 | /// longer than ideal (which in itself is a concern). | 281 | /// longer than ideal (which in itself is a concern). |
307 | SlowFramesStatReportThreshold = (int)Math.Ceiling(scene.MinFrameTicks * 1.2); | 282 | SlowFramesStatReportThreshold = (int)Math.Ceiling(m_scene.MinFrameTime * 1000 * 1.2); |
308 | 283 | ||
309 | SlowFramesStat | 284 | SlowFramesStat |
310 | = new Stat( | 285 | = new Stat( |
@@ -319,7 +294,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
319 | StatVerbosity.Info); | 294 | StatVerbosity.Info); |
320 | 295 | ||
321 | StatsManager.RegisterStat(SlowFramesStat); | 296 | StatsManager.RegisterStat(SlowFramesStat); |
322 | |||
323 | } | 297 | } |
324 | 298 | ||
325 | 299 | ||
@@ -356,25 +330,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
356 | 330 | ||
357 | private void statsHeartBeat(object sender, EventArgs e) | 331 | private void statsHeartBeat(object sender, EventArgs e) |
358 | { | 332 | { |
359 | double totalSumFrameTime; | 333 | if (!m_scene.Active) |
360 | double simulationSumFrameTime; | ||
361 | double physicsSumFrameTime; | ||
362 | double networkSumFrameTime; | ||
363 | float frameDilation; | ||
364 | int currentFrame; | ||
365 | |||
366 | if (!m_scene.Active) | ||
367 | return; | 334 | return; |
368 | 335 | ||
369 | <<<<<<< HEAD | ||
370 | // Create arrays to hold the statistics for this current scene, | ||
371 | // these will be passed to the SimExtraStatsCollector, they are also | ||
372 | // sent to the SimStats class | ||
373 | SimStatsPacket.StatBlock[] sb = new | ||
374 | SimStatsPacket.StatBlock[m_statisticArraySize]; | ||
375 | ======= | ||
376 | SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23]; | 336 | SimStatsPacket.StatBlock[] sb = new SimStatsPacket.StatBlock[23]; |
377 | >>>>>>> avn/ubitvar | ||
378 | SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); | 337 | SimStatsPacket.RegionBlock rb = new SimStatsPacket.RegionBlock(); |
379 | 338 | ||
380 | // Know what's not thread safe in Mono... modifying timers. | 339 | // Know what's not thread safe in Mono... modifying timers. |
@@ -409,9 +368,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
409 | 368 | ||
410 | // ORIGINAL code commented out until we have time to add our own | 369 | // ORIGINAL code commented out until we have time to add our own |
411 | // statistics to the statistics window | 370 | // statistics to the statistics window |
412 | //float physfps = ((m_pfps / 1000)); | 371 | float physfps = ((m_pfps / 1000)); |
413 | float physfps = m_numberPhysicsFrames; | 372 | |
414 | |||
415 | //if (physfps > 600) | 373 | //if (physfps > 600) |
416 | //physfps = physfps - (physfps - 600); | 374 | //physfps = physfps - (physfps - 600); |
417 | 375 | ||
@@ -465,61 +423,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
465 | // m_otherMS = m_frameMS - m_physicsMS - m_imageMS - m_netMS - m_agentMS; | 423 | // m_otherMS = m_frameMS - m_physicsMS - m_imageMS - m_netMS - m_agentMS; |
466 | // m_imageMS m_netMS are not included in m_frameMS | 424 | // m_imageMS m_netMS are not included in m_frameMS |
467 | 425 | ||
468 | <<<<<<< HEAD | ||
469 | uint thisFrame = m_scene.Frame; | ||
470 | uint numFrames = thisFrame - m_lastUpdateFrame; | ||
471 | float framesUpdated = (float)numFrames * m_reportedFpsCorrectionFactor; | ||
472 | m_lastUpdateFrame = thisFrame; | ||
473 | |||
474 | // Avoid div-by-zero if somehow we've not updated any frames. | ||
475 | if (framesUpdated == 0) | ||
476 | framesUpdated = 1; | ||
477 | |||
478 | for (int i = 0; i < m_statisticArraySize; i++) | ||
479 | ======= | ||
480 | m_otherMS = m_frameMS - m_physicsMS - m_agentMS - m_sleeptimeMS; | 426 | m_otherMS = m_frameMS - m_physicsMS - m_agentMS - m_sleeptimeMS; |
481 | if (m_otherMS < 0) | 427 | if (m_otherMS < 0) |
482 | m_otherMS = 0; | 428 | m_otherMS = 0; |
483 | 429 | ||
484 | for (int i = 0; i < 23; i++) | 430 | for (int i = 0; i < 23; i++) |
485 | >>>>>>> avn/ubitvar | ||
486 | { | 431 | { |
487 | sb[i] = new SimStatsPacket.StatBlock(); | 432 | sb[i] = new SimStatsPacket.StatBlock(); |
488 | } | 433 | } |
489 | 434 | ||
490 | // Resetting the sums of the frame times to prevent any errors | 435 | |
491 | // in calculating the moving average for frame time | ||
492 | totalSumFrameTime = 0; | ||
493 | simulationSumFrameTime = 0; | ||
494 | physicsSumFrameTime = 0; | ||
495 | networkSumFrameTime = 0; | ||
496 | |||
497 | // Loop through all the frames that were stored for the current | ||
498 | // heartbeat to process the moving average of frame times | ||
499 | for (int i = 0; i < m_numberFramesStored; i++) | ||
500 | { | ||
501 | // Sum up each frame time in order to calculate the moving | ||
502 | // average of frame time | ||
503 | totalSumFrameTime += m_totalFrameTimeMilliseconds[i]; | ||
504 | simulationSumFrameTime += | ||
505 | m_simulationFrameTimeMilliseconds[i]; | ||
506 | physicsSumFrameTime += m_physicsFrameTimeMilliseconds[i]; | ||
507 | networkSumFrameTime += m_networkFrameTimeMilliseconds[i]; | ||
508 | } | ||
509 | |||
510 | // Get the index that represents the current frame based on the next one known; go back | ||
511 | // to the last index if next one is stated to restart at 0 | ||
512 | if (m_nextLocation == 0) | ||
513 | currentFrame = m_numberFramesStored - 1; | ||
514 | else | ||
515 | currentFrame = m_nextLocation - 1; | ||
516 | |||
517 | // Calculate the frame dilation; which is currently based on the ratio between the sum of the | ||
518 | // physics and simulation rate, and the set minimum time to run a scene's frame | ||
519 | frameDilation = (float)(m_simulationFrameTimeMilliseconds[currentFrame] + | ||
520 | m_physicsFrameTimeMilliseconds[currentFrame]) / m_scene.MinFrameTicks; | ||
521 | |||
522 | // ORIGINAL code commented out until we have time to add our own | ||
523 | sb[0].StatID = (uint) Stats.TimeDilation; | 436 | sb[0].StatID = (uint) Stats.TimeDilation; |
524 | sb[0].StatValue = (Single.IsNaN(m_timeDilation)) ? 0.1f : m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor)); | 437 | sb[0].StatValue = (Single.IsNaN(m_timeDilation)) ? 0.1f : m_timeDilation ; //((((m_timeDilation + (0.10f * statsUpdateFactor)) /10) / statsUpdateFactor)); |
525 | 438 | ||
@@ -544,21 +457,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
544 | sb[7].StatID = (uint) Stats.ActivePrim; | 457 | sb[7].StatID = (uint) Stats.ActivePrim; |
545 | sb[7].StatValue = m_activePrim; | 458 | sb[7].StatValue = m_activePrim; |
546 | 459 | ||
547 | // ORIGINAL code commented out until we have time to add our own | ||
548 | // statistics to the statistics window | ||
549 | sb[8].StatID = (uint)Stats.FrameMS; | 460 | sb[8].StatID = (uint)Stats.FrameMS; |
550 | <<<<<<< HEAD | ||
551 | //sb[8].StatValue = m_frameMS / framesUpdated; | ||
552 | sb[8].StatValue = (float) totalSumFrameTime / m_numberFramesStored; | ||
553 | |||
554 | sb[9].StatID = (uint)Stats.NetMS; | ||
555 | //sb[9].StatValue = m_netMS / framesUpdated; | ||
556 | sb[9].StatValue = (float) networkSumFrameTime / m_numberFramesStored; | ||
557 | |||
558 | sb[10].StatID = (uint)Stats.PhysicsMS; | ||
559 | //sb[10].StatValue = m_physicsMS / framesUpdated; | ||
560 | sb[10].StatValue = (float) physicsSumFrameTime / m_numberFramesStored; | ||
561 | ======= | ||
562 | sb[8].StatValue = TotalFrameTime; | 461 | sb[8].StatValue = TotalFrameTime; |
563 | 462 | ||
564 | sb[9].StatID = (uint)Stats.NetMS; | 463 | sb[9].StatID = (uint)Stats.NetMS; |
@@ -566,18 +465,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
566 | 465 | ||
567 | sb[10].StatID = (uint)Stats.PhysicsMS; | 466 | sb[10].StatID = (uint)Stats.PhysicsMS; |
568 | sb[10].StatValue = m_physicsMS * perframe; | 467 | sb[10].StatValue = m_physicsMS * perframe; |
569 | >>>>>>> avn/ubitvar | ||
570 | 468 | ||
571 | sb[11].StatID = (uint)Stats.ImageMS ; | 469 | sb[11].StatID = (uint)Stats.ImageMS ; |
572 | sb[11].StatValue = m_imageMS * perframe; | 470 | sb[11].StatValue = m_imageMS * perframe; |
573 | 471 | ||
574 | sb[12].StatID = (uint)Stats.OtherMS; | 472 | sb[12].StatID = (uint)Stats.OtherMS; |
575 | <<<<<<< HEAD | ||
576 | //sb[12].StatValue = m_otherMS / framesUpdated; | ||
577 | sb[12].StatValue = (float) simulationSumFrameTime / m_numberFramesStored; | ||
578 | ======= | ||
579 | sb[12].StatValue = m_otherMS * perframe; | 473 | sb[12].StatValue = m_otherMS * perframe; |
580 | >>>>>>> avn/ubitvar | ||
581 | 474 | ||
582 | sb[13].StatID = (uint)Stats.InPacketsPerSecond; | 475 | sb[13].StatID = (uint)Stats.InPacketsPerSecond; |
583 | sb[13].StatValue = (m_inPacketsPerSecond / m_statsUpdateFactor); | 476 | sb[13].StatValue = (m_inPacketsPerSecond / m_statsUpdateFactor); |
@@ -609,30 +502,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
609 | sb[22].StatID = (uint)Stats.SimSleepMs; | 502 | sb[22].StatID = (uint)Stats.SimSleepMs; |
610 | sb[22].StatValue = sleeptime; | 503 | sb[22].StatValue = sleeptime; |
611 | 504 | ||
612 | // Current ratio between the sum of physics and sim rate, and the | ||
613 | // minimum time to run a scene's frame | ||
614 | sb[22].StatID = (uint)Stats.FrameDilation; | ||
615 | sb[22].StatValue = frameDilation; | ||
616 | |||
617 | // Current number of users currently attemptint to login to region | ||
618 | sb[23].StatID = (uint)Stats.UsersLoggingIn; | ||
619 | sb[23].StatValue = m_usersLoggingIn; | ||
620 | |||
621 | // Total number of geometric primitives in the scene | ||
622 | sb[24].StatID = (uint)Stats.TotalGeoPrim; | ||
623 | sb[24].StatValue = m_numGeoPrim; | ||
624 | |||
625 | // Total number of mesh objects in the scene | ||
626 | sb[25].StatID = (uint)Stats.TotalMesh; | ||
627 | sb[25].StatValue = m_numMesh; | ||
628 | |||
629 | // Current number of threads that XEngine is using | ||
630 | sb[26].StatID = (uint)Stats.ThreadCount; | ||
631 | sb[26].StatValue = m_inUseThreads; | ||
632 | |||
633 | sb[27].StatID = (uint)Stats.ScriptMS; | ||
634 | sb[27].StatValue = (numFrames <= 0) ? 0 : ((float)m_scriptMS / numFrames); | ||
635 | |||
636 | for (int i = 0; i < m_statisticArraySize; i++) | 505 | for (int i = 0; i < m_statisticArraySize; i++) |
637 | { | 506 | { |
638 | lastReportedSimStats[i] = sb[i].StatValue; | 507 | lastReportedSimStats[i] = sb[i].StatValue; |
@@ -702,16 +571,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
702 | m_physicsMS = 0; | 571 | m_physicsMS = 0; |
703 | m_imageMS = 0; | 572 | m_imageMS = 0; |
704 | m_otherMS = 0; | 573 | m_otherMS = 0; |
705 | <<<<<<< HEAD | ||
706 | m_scriptMS = 0; | ||
707 | m_spareMS = 0; | ||
708 | ======= | ||
709 | // m_spareMS = 0; | 574 | // m_spareMS = 0; |
710 | m_sleeptimeMS = 0; | 575 | m_sleeptimeMS = 0; |
711 | 576 | ||
712 | //Ckrinke This variable is not used, so comment to remove compiler warning until it is used. | 577 | //Ckrinke This variable is not used, so comment to remove compiler warning until it is used. |
713 | //Ckrinke m_scriptMS = 0; | 578 | //Ckrinke m_scriptMS = 0; |
714 | >>>>>>> avn/ubitvar | ||
715 | } | 579 | } |
716 | 580 | ||
717 | # region methods called from Scene | 581 | # region methods called from Scene |
@@ -817,41 +681,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
817 | m_otherMS += ms; | 681 | m_otherMS += ms; |
818 | } | 682 | } |
819 | 683 | ||
820 | <<<<<<< HEAD | ||
821 | public void AddScriptMS(int ms) | ||
822 | { | ||
823 | m_scriptMS += ms; | ||
824 | } | ||
825 | |||
826 | public void addPhysicsFrame(int frames) | ||
827 | { | ||
828 | // Add the number of physics frames to the correct total physics | ||
829 | // frames | ||
830 | m_numberPhysicsFrames += frames; | ||
831 | } | ||
832 | |||
833 | public void addFrameTimeMilliseconds(double total, double simulation, | ||
834 | double physics, double network) | ||
835 | { | ||
836 | // Save the frame times from the current frame into the appropriate | ||
837 | // arrays | ||
838 | m_totalFrameTimeMilliseconds[m_nextLocation] = total; | ||
839 | m_simulationFrameTimeMilliseconds[m_nextLocation] = simulation; | ||
840 | m_physicsFrameTimeMilliseconds[m_nextLocation] = physics; | ||
841 | m_networkFrameTimeMilliseconds[m_nextLocation] = network; | ||
842 | |||
843 | // Update to the next location in the list | ||
844 | m_nextLocation++; | ||
845 | |||
846 | // Since the list will begin to overwrite the oldest frame values | ||
847 | // first, the next location needs to loop back to the beginning of the | ||
848 | // list whenever it reaches the end | ||
849 | m_nextLocation = m_nextLocation % m_numberFramesStored; | ||
850 | ======= | ||
851 | public void addSleepMS(int ms) | 684 | public void addSleepMS(int ms) |
852 | { | 685 | { |
853 | m_sleeptimeMS += ms; | 686 | m_sleeptimeMS += ms; |
854 | >>>>>>> avn/ubitvar | ||
855 | } | 687 | } |
856 | 688 | ||
857 | public void AddPendingDownloads(int count) | 689 | public void AddPendingDownloads(int count) |
diff --git a/OpenSim/Region/Framework/Scenes/TerrainChannel.cs b/OpenSim/Region/Framework/Scenes/TerrainChannel.cs index 6fd9096..506ad24 100644 --- a/OpenSim/Region/Framework/Scenes/TerrainChannel.cs +++ b/OpenSim/Region/Framework/Scenes/TerrainChannel.cs | |||
@@ -49,7 +49,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
49 | { | 49 | { |
50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
51 | private static string LogHeader = "[TERRAIN CHANNEL]"; | 51 | private static string LogHeader = "[TERRAIN CHANNEL]"; |
52 | <<<<<<< HEAD | ||
53 | 52 | ||
54 | protected TerrainData m_terrainData; | 53 | protected TerrainData m_terrainData; |
55 | 54 | ||
@@ -58,16 +57,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
58 | public int Height { get { return m_terrainData.SizeY; } } // Y dimension | 57 | public int Height { get { return m_terrainData.SizeY; } } // Y dimension |
59 | public int Altitude { get { return m_terrainData.SizeZ; } } // Y dimension | 58 | public int Altitude { get { return m_terrainData.SizeZ; } } // Y dimension |
60 | 59 | ||
61 | ======= | ||
62 | 60 | ||
63 | protected TerrainData m_terrainData; | ||
64 | |||
65 | public int Width { get { return m_terrainData.SizeX; } } // X dimension | ||
66 | // Unfortunately, for historical reasons, in this module 'Width' is X and 'Height' is Y | ||
67 | public int Height { get { return m_terrainData.SizeY; } } // Y dimension | ||
68 | public int Altitude { get { return m_terrainData.SizeZ; } } // Y dimension | ||
69 | |||
70 | >>>>>>> avn/ubitvar | ||
71 | // Default, not-often-used builder | 61 | // Default, not-often-used builder |
72 | public TerrainChannel() | 62 | public TerrainChannel() |
73 | { | 63 | { |
@@ -168,15 +158,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
168 | { | 158 | { |
169 | if (Double.IsNaN(value) || Double.IsInfinity(value)) | 159 | if (Double.IsNaN(value) || Double.IsInfinity(value)) |
170 | return; | 160 | return; |
171 | <<<<<<< HEAD | ||
172 | |||
173 | ======= | ||
174 | if (value < 0) | 161 | if (value < 0) |
175 | value = 0; | 162 | value = 0; |
176 | else | 163 | else |
177 | if (value > 655.35) | 164 | if (value > 655.35) |
178 | value = 655.35; | 165 | value = 655.35; |
179 | >>>>>>> avn/ubitvar | ||
180 | m_terrainData[x, y] = (float)value; | 166 | m_terrainData[x, y] = (float)value; |
181 | } | 167 | } |
182 | } | 168 | } |
@@ -382,13 +368,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
382 | public int SizeY; | 368 | public int SizeY; |
383 | public int SizeZ; | 369 | public int SizeZ; |
384 | public float CompressionFactor; | 370 | public float CompressionFactor; |
385 | <<<<<<< HEAD | ||
386 | public int[] Map; | ||
387 | public TerrainChannelXMLPackage(int pX, int pY, int pZ, float pCompressionFactor, int[] pMap) | ||
388 | ======= | ||
389 | public float[] Map; | 371 | public float[] Map; |
390 | public TerrainChannelXMLPackage(int pX, int pY, int pZ, float pCompressionFactor, float[] pMap) | 372 | public TerrainChannelXMLPackage(int pX, int pY, int pZ, float pCompressionFactor, float[] pMap) |
391 | >>>>>>> avn/ubitvar | ||
392 | { | 373 | { |
393 | Version = 1; | 374 | Version = 1; |
394 | SizeX = pX; | 375 | SizeX = pX; |
@@ -419,25 +400,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
419 | // Fill the heightmap with the center bump terrain | 400 | // Fill the heightmap with the center bump terrain |
420 | private void PinHeadIsland() | 401 | private void PinHeadIsland() |
421 | { | 402 | { |
422 | <<<<<<< HEAD | ||
423 | ======= | ||
424 | float cx = m_terrainData.SizeX * 0.5f; | 403 | float cx = m_terrainData.SizeX * 0.5f; |
425 | float cy = m_terrainData.SizeY * 0.5f; | 404 | float cy = m_terrainData.SizeY * 0.5f; |
426 | float h; | 405 | float h; |
427 | >>>>>>> avn/ubitvar | ||
428 | for (int x = 0; x < Width; x++) | 406 | for (int x = 0; x < Width; x++) |
429 | { | 407 | { |
430 | for (int y = 0; y < Height; y++) | 408 | for (int y = 0; y < Height; y++) |
431 | { | 409 | { |
432 | <<<<<<< HEAD | ||
433 | m_terrainData[x, y] = (float)TerrainUtil.PerlinNoise2D(x, y, 2, 0.125) * 10; | ||
434 | float spherFacA = (float)(TerrainUtil.SphericalFactor(x, y, m_terrainData.SizeX / 2.0, m_terrainData.SizeY / 2.0, 50) * 0.01d); | ||
435 | float spherFacB = (float)(TerrainUtil.SphericalFactor(x, y, m_terrainData.SizeX / 2.0, m_terrainData.SizeY / 2.0, 100) * 0.001d); | ||
436 | if (m_terrainData[x, y]< spherFacA) | ||
437 | m_terrainData[x, y]= spherFacA; | ||
438 | if (m_terrainData[x, y]< spherFacB) | ||
439 | m_terrainData[x, y] = spherFacB; | ||
440 | ======= | ||
441 | // h = (float)TerrainUtil.PerlinNoise2D(x, y, 2, 0.125) * 10; | 410 | // h = (float)TerrainUtil.PerlinNoise2D(x, y, 2, 0.125) * 10; |
442 | h = 1.0f; | 411 | h = 1.0f; |
443 | float spherFacA = (float)(TerrainUtil.SphericalFactor(x, y, cx, cy, 50) * 0.01d); | 412 | float spherFacA = (float)(TerrainUtil.SphericalFactor(x, y, cx, cy, 50) * 0.01d); |
@@ -447,7 +416,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
447 | if (h < spherFacB) | 416 | if (h < spherFacB) |
448 | h = spherFacB; | 417 | h = spherFacB; |
449 | m_terrainData[x, y] = h; | 418 | m_terrainData[x, y] = h; |
450 | >>>>>>> avn/ubitvar | ||
451 | } | 419 | } |
452 | } | 420 | } |
453 | } | 421 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCopyTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCopyTests.cs index 1d41d33..93ac34f 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCopyTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectCopyTests.cs | |||
@@ -43,6 +43,7 @@ using OpenSim.Tests.Common; | |||
43 | 43 | ||
44 | namespace OpenSim.Region.Framework.Scenes.Tests | 44 | namespace OpenSim.Region.Framework.Scenes.Tests |
45 | { | 45 | { |
46 | /* | ||
46 | /// <summary> | 47 | /// <summary> |
47 | /// Test copying of scene objects. | 48 | /// Test copying of scene objects. |
48 | /// </summary> | 49 | /// </summary> |
@@ -344,4 +345,5 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
344 | } | 345 | } |
345 | } | 346 | } |
346 | } | 347 | } |
348 | */ | ||
347 | } \ No newline at end of file | 349 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs index b775178..0025e9b 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceSitTests.cs | |||
@@ -99,9 +99,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
99 | 99 | ||
100 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); | 100 | Assert.That(part.SitTargetAvatar, Is.EqualTo(UUID.Zero)); |
101 | Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); | 101 | Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); |
102 | HashSet<ScenePresence> sittingAvatars = part.GetSittingAvatars(); | 102 | HashSet<UUID> sittingAvatars = part.GetSittingAvatars(); |
103 | Assert.That(sittingAvatars.Count, Is.EqualTo(1)); | 103 | Assert.That(sittingAvatars.Count, Is.EqualTo(1)); |
104 | Assert.That(sittingAvatars.Contains(m_sp)); | 104 | Assert.That(sittingAvatars.Contains(m_sp.UUID)); |
105 | Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId)); | 105 | Assert.That(m_sp.ParentID, Is.EqualTo(part.LocalId)); |
106 | } | 106 | } |
107 | 107 | ||
@@ -211,9 +211,9 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
211 | Assert.That(m_sp.PhysicsActor, Is.Null); | 211 | Assert.That(m_sp.PhysicsActor, Is.Null); |
212 | 212 | ||
213 | Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); | 213 | Assert.That(part.GetSittingAvatarsCount(), Is.EqualTo(1)); |
214 | HashSet<ScenePresence> sittingAvatars = part.GetSittingAvatars(); | 214 | HashSet<UUID> sittingAvatars = part.GetSittingAvatars(); |
215 | Assert.That(sittingAvatars.Count, Is.EqualTo(1)); | 215 | Assert.That(sittingAvatars.Count, Is.EqualTo(1)); |
216 | Assert.That(sittingAvatars.Contains(m_sp)); | 216 | Assert.That(sittingAvatars.Contains(m_sp.UUID)); |
217 | 217 | ||
218 | m_sp.StandUp(); | 218 | m_sp.StandUp(); |
219 | 219 | ||
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index 25bbd3a..d8928ee 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs | |||
@@ -120,53 +120,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
120 | /// <param name="uuid">UUID.</param> | 120 | /// <param name="uuid">UUID.</param> |
121 | public bool AddForInspection(UUID uuid) | 121 | public bool AddForInspection(UUID uuid) |
122 | { | 122 | { |
123 | <<<<<<< HEAD | ||
124 | if (m_assetUuidsToInspect.Contains(uuid)) | 123 | if (m_assetUuidsToInspect.Contains(uuid)) |
125 | return false; | 124 | return false; |
126 | 125 | ||
127 | // m_log.DebugFormat("[UUID GATHERER]: Adding asset {0} for inspection", uuid); | 126 | // m_log.DebugFormat("[UUID GATHERER]: Adding asset {0} for inspection", uuid); |
128 | 127 | ||
129 | m_assetUuidsToInspect.Enqueue(uuid); | 128 | m_assetUuidsToInspect.Enqueue(uuid); |
130 | ======= | ||
131 | try | ||
132 | { | ||
133 | assetUuids[assetUuid] = assetType; | ||
134 | |||
135 | if ((sbyte)AssetType.Bodypart == assetType || (sbyte)AssetType.Clothing == assetType) | ||
136 | { | ||
137 | GetWearableAssetUuids(assetUuid, assetUuids); | ||
138 | } | ||
139 | else if ((sbyte)AssetType.Gesture == assetType) | ||
140 | { | ||
141 | GetGestureAssetUuids(assetUuid, assetUuids); | ||
142 | } | ||
143 | else if ((sbyte)AssetType.Notecard == assetType) | ||
144 | { | ||
145 | GetTextEmbeddedAssetUuids(assetUuid, assetUuids); | ||
146 | } | ||
147 | else if ((sbyte)AssetType.LSLText == assetType) | ||
148 | { | ||
149 | GetTextEmbeddedAssetUuids(assetUuid, assetUuids); | ||
150 | } | ||
151 | else if ((sbyte)OpenSimAssetType.Material == assetType) | ||
152 | { | ||
153 | GetMaterialAssetUuids(assetUuid, assetUuids); | ||
154 | } | ||
155 | else if ((sbyte)AssetType.Object == assetType) | ||
156 | { | ||
157 | GetSceneObjectAssetUuids(assetUuid, assetUuids); | ||
158 | } | ||
159 | } | ||
160 | catch (Exception) | ||
161 | { | ||
162 | m_log.ErrorFormat( | ||
163 | "[UUID GATHERER]: Failed to gather uuids for asset id {0}, type {1}", | ||
164 | assetUuid, assetType); | ||
165 | throw; | ||
166 | } | ||
167 | } | ||
168 | >>>>>>> avn/ubitvar | ||
169 | |||
170 | return true; | 129 | return true; |
171 | } | 130 | } |
172 | 131 | ||
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index 0512e48..ed1bab4 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs | |||
@@ -1398,7 +1398,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | |||
1398 | presence.Grouptitle = Title; | 1398 | presence.Grouptitle = Title; |
1399 | 1399 | ||
1400 | if (! presence.IsChildAgent) | 1400 | if (! presence.IsChildAgent) |
1401 | presence.SendAvatarDataToAllClients(); | 1401 | presence.SendAvatarDataToAllAgents(); |
1402 | } | 1402 | } |
1403 | } | 1403 | } |
1404 | } | 1404 | } |
diff --git a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs index d3c46c9..50a5fae 100644 --- a/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs +++ b/OpenSim/Region/OptionalModules/PrimLimitsModule/PrimLimitsModule.cs | |||
@@ -153,14 +153,6 @@ namespace OpenSim.Region.OptionalModules | |||
153 | 153 | ||
154 | ILandObject newParcel = scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y); | 154 | ILandObject newParcel = scene.LandChannel.GetLandObject(newPoint.X, newPoint.Y); |
155 | 155 | ||
156 | <<<<<<< HEAD | ||
157 | // newParcel will be null only if it outside of our current region. If this is the case, then the | ||
158 | // receiving permissions will perform the check. | ||
159 | if (newParcel == null) | ||
160 | return true; | ||
161 | |||
162 | // The prim hasn't crossed a region boundary so we don't need to worry | ||
163 | ======= | ||
164 | if (newParcel == null) | 156 | if (newParcel == null) |
165 | return true; | 157 | return true; |
166 | 158 | ||
@@ -168,7 +160,6 @@ namespace OpenSim.Region.OptionalModules | |||
168 | ILandObject oldParcel = scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y); | 160 | ILandObject oldParcel = scene.LandChannel.GetLandObject(oldPoint.X, oldPoint.Y); |
169 | 161 | ||
170 | // The prim hasn't crossed a region boundry so we don't need to worry | 162 | // The prim hasn't crossed a region boundry so we don't need to worry |
171 | >>>>>>> avn/ubitvar | ||
172 | // about prim counts here | 163 | // about prim counts here |
173 | if(oldParcel != null && oldParcel.Equals(newParcel)) | 164 | if(oldParcel != null && oldParcel.Equals(newParcel)) |
174 | { | 165 | { |
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs index edf51a2..e7d461f 100644 --- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs | |||
@@ -746,8 +746,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
746 | 746 | ||
747 | List<SceneObjectGroup> objlist; | 747 | List<SceneObjectGroup> objlist; |
748 | List<Vector3> veclist; | 748 | List<Vector3> veclist; |
749 | 749 | ||
750 | bool success = host.RootPart.Inventory.GetRezReadySceneObjects(item, out objlist, out veclist); | 750 | Vector3 bbox = new Vector3(); |
751 | float offsetHeight; | ||
752 | bool success = host.RootPart.Inventory.GetRezReadySceneObjects(item, out objlist, out veclist, out bbox, out offsetHeight); | ||
751 | if (! success) | 753 | if (! success) |
752 | { | 754 | { |
753 | GenerateRuntimeError("Failed to create object"); | 755 | GenerateRuntimeError("Failed to create object"); |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index dc1ea95..35af6e7 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -61,11 +61,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
61 | private readonly string m_firstname; | 61 | private readonly string m_firstname; |
62 | private readonly string m_lastname; | 62 | private readonly string m_lastname; |
63 | private readonly Vector3 m_startPos; | 63 | private readonly Vector3 m_startPos; |
64 | <<<<<<< HEAD | ||
65 | private readonly UUID m_uuid; | ||
66 | ======= | ||
67 | private UUID m_uuid = UUID.Random(); | 64 | private UUID m_uuid = UUID.Random(); |
68 | >>>>>>> avn/ubitvar | ||
69 | private readonly Scene m_scene; | 65 | private readonly Scene m_scene; |
70 | private readonly UUID m_ownerID; | 66 | private readonly UUID m_ownerID; |
71 | 67 | ||
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs index 2977195..9dc4489 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCModule.cs | |||
@@ -457,12 +457,8 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
457 | /// <returns>true if they do, false if they don't.</returns> | 457 | /// <returns>true if they do, false if they don't.</returns> |
458 | private bool CheckPermissions(NPCAvatar av, UUID callerID) | 458 | private bool CheckPermissions(NPCAvatar av, UUID callerID) |
459 | { | 459 | { |
460 | <<<<<<< HEAD | ||
461 | return callerID == UUID.Zero || av.OwnerID == UUID.Zero || | 460 | return callerID == UUID.Zero || av.OwnerID == UUID.Zero || |
462 | av.OwnerID == callerID || av.AgentId == callerID; | 461 | av.OwnerID == callerID || av.AgentId == callerID; |
463 | ======= | ||
464 | return callerID == UUID.Zero || av.OwnerID == UUID.Zero || av.OwnerID == callerID || av.AgentId == callerID; | ||
465 | >>>>>>> avn/ubitvar | ||
466 | } | 462 | } |
467 | } | 463 | } |
468 | } | 464 | } |
diff --git a/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs b/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs index a26d145..1102aca 100644 --- a/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs +++ b/OpenSim/Region/OptionalModules/World/SceneCommands/SceneCommandsModule.cs | |||
@@ -166,7 +166,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments | |||
166 | cdl.AddRow("physics", m_scene.PhysicsEnabled); | 166 | cdl.AddRow("physics", m_scene.PhysicsEnabled); |
167 | cdl.AddRow("scripting", m_scene.ScriptsEnabled); | 167 | cdl.AddRow("scripting", m_scene.ScriptsEnabled); |
168 | cdl.AddRow("teleport", m_scene.DebugTeleporting); | 168 | cdl.AddRow("teleport", m_scene.DebugTeleporting); |
169 | cdl.AddRow("update-on-timer", m_scene.UpdateOnTimer); | 169 | // cdl.AddRow("update-on-timer", m_scene.UpdateOnTimer); |
170 | cdl.AddRow("updates", m_scene.DebugUpdates); | 170 | cdl.AddRow("updates", m_scene.DebugUpdates); |
171 | 171 | ||
172 | MainConsole.Instance.OutputFormat("Scene {0} options:", m_scene.Name); | 172 | MainConsole.Instance.OutputFormat("Scene {0} options:", m_scene.Name); |
@@ -313,7 +313,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Attachments | |||
313 | bool enableUpdateOnTimer; | 313 | bool enableUpdateOnTimer; |
314 | if (bool.TryParse(options["update-on-timer"], out enableUpdateOnTimer)) | 314 | if (bool.TryParse(options["update-on-timer"], out enableUpdateOnTimer)) |
315 | { | 315 | { |
316 | m_scene.UpdateOnTimer = enableUpdateOnTimer; | 316 | // m_scene.UpdateOnTimer = enableUpdateOnTimer; |
317 | m_scene.Active = false; | 317 | m_scene.Active = false; |
318 | 318 | ||
319 | while (m_scene.IsRunning) | 319 | while (m_scene.IsRunning) |
diff --git a/OpenSim/Region/Physics/ChOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/ChOdePlugin/ODECharacter.cs index ec717d7..e7a39eb 100644 --- a/OpenSim/Region/Physics/ChOdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/ChOdePlugin/ODECharacter.cs | |||
@@ -1288,7 +1288,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1288 | } | 1288 | } |
1289 | 1289 | ||
1290 | public override Vector3 PIDTarget { set { return; } } | 1290 | public override Vector3 PIDTarget { set { return; } } |
1291 | public override bool PIDActive { set { return; } } | 1291 | public override bool PIDActive { get { return m_pidControllerActive; } set { return; } } |
1292 | public override float PIDTau { set { return; } } | 1292 | public override float PIDTau { set { return; } } |
1293 | 1293 | ||
1294 | public override float PIDHoverHeight { set { return; } } | 1294 | public override float PIDHoverHeight { set { return; } } |
diff --git a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs index ba24aa7..b283152 100644 --- a/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/ChOdePlugin/ODEPrim.cs | |||
@@ -748,7 +748,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
748 | m_log.Warn("[PHYSICS]: Got NaN PIDTarget from Scene on Object"); | 748 | m_log.Warn("[PHYSICS]: Got NaN PIDTarget from Scene on Object"); |
749 | } | 749 | } |
750 | } | 750 | } |
751 | public override bool PIDActive { set { m_usePID = value; } } | 751 | public override bool PIDActive { get { return m_usePID; } set { m_usePID = value; } } |
752 | public override float PIDTau { set { m_PIDTau = value; } } | 752 | public override float PIDTau { set { m_PIDTau = value; } } |
753 | 753 | ||
754 | // For RotLookAt | 754 | // For RotLookAt |
diff --git a/OpenSim/Region/Physics/ChOdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/ChOdePlugin/OdePlugin.cs index 00f5122..00baa21 100644 --- a/OpenSim/Region/Physics/ChOdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/ChOdePlugin/OdePlugin.cs | |||
@@ -1667,6 +1667,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1667 | 1667 | ||
1668 | #region Add/Remove Entities | 1668 | #region Add/Remove Entities |
1669 | 1669 | ||
1670 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | ||
1671 | { | ||
1672 | return AddAvatar(avName, position, size, isFlying); | ||
1673 | } | ||
1674 | |||
1670 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 1675 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) |
1671 | { | 1676 | { |
1672 | Vector3 pos; | 1677 | Vector3 pos; |
diff --git a/OpenSim/Region/Physics/Manager/PhysicsScene.cs b/OpenSim/Region/Physics/Manager/PhysicsScene.cs index 96ef0a6..eb7e8fc 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsScene.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsScene.cs | |||
@@ -152,16 +152,16 @@ namespace OpenSim.Region.Physics.Manager | |||
152 | /// <param name="size"></param> | 152 | /// <param name="size"></param> |
153 | /// <param name="isFlying"></param> | 153 | /// <param name="isFlying"></param> |
154 | /// <returns></returns> | 154 | /// <returns></returns> |
155 | <<<<<<< HEAD | 155 | |
156 | public abstract PhysicsActor AddAvatar( | 156 | public abstract PhysicsActor AddAvatar( |
157 | string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying); | 157 | string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying); |
158 | 158 | ||
159 | ======= | 159 | |
160 | public virtual PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | 160 | public virtual PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) |
161 | { | 161 | { |
162 | return null; | 162 | return null; |
163 | } | 163 | } |
164 | >>>>>>> avn/ubitvar | 164 | |
165 | /// <summary> | 165 | /// <summary> |
166 | /// Add an avatar | 166 | /// Add an avatar |
167 | /// </summary> | 167 | /// </summary> |
@@ -177,13 +177,25 @@ namespace OpenSim.Region.Physics.Manager | |||
177 | { | 177 | { |
178 | PhysicsActor ret = AddAvatar(avName, position, velocity, size, isFlying); | 178 | PhysicsActor ret = AddAvatar(avName, position, velocity, size, isFlying); |
179 | 179 | ||
180 | if (ret != null) | 180 | if (ret != null) |
181 | ret.LocalID = localID; | ||
182 | |||
183 | return ret; | ||
184 | } | ||
185 | |||
186 | public virtual PhysicsActor AddAvatar( | ||
187 | uint localID, string avName, Vector3 position, Vector3 size, bool isFlying) | ||
188 | { | ||
189 | PhysicsActor ret = AddAvatar(avName, position, size, isFlying); | ||
190 | |||
191 | if (ret != null) | ||
181 | ret.LocalID = localID; | 192 | ret.LocalID = localID; |
182 | 193 | ||
183 | return ret; | 194 | return ret; |
184 | } | 195 | } |
185 | 196 | ||
186 | public virtual PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying) | 197 | public virtual PhysicsActor AddAvatar( |
198 | uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying) | ||
187 | { | 199 | { |
188 | PhysicsActor ret = AddAvatar(localID, avName, position, size, isFlying); | 200 | PhysicsActor ret = AddAvatar(localID, avName, position, size, isFlying); |
189 | return ret; | 201 | return ret; |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 9203169..05eaf2a 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs | |||
@@ -1251,12 +1251,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1251 | public override Vector3 PIDTarget { set { return; } } | 1251 | public override Vector3 PIDTarget { set { return; } } |
1252 | public override bool PIDActive | 1252 | public override bool PIDActive |
1253 | { | 1253 | { |
1254 | <<<<<<< HEAD | ||
1255 | get { return false; } | 1254 | get { return false; } |
1256 | ======= | ||
1257 | // os version | ||
1258 | // get { return false; } | ||
1259 | >>>>>>> avn/ubitvar | ||
1260 | set { return; } | 1255 | set { return; } |
1261 | } | 1256 | } |
1262 | public override float PIDTau { set { return; } } | 1257 | public override float PIDTau { set { return; } } |
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 6363422..0a99e30 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | |||
@@ -2955,14 +2955,8 @@ Console.WriteLine(" JointCreateFixed"); | |||
2955 | m_log.WarnFormat("[PHYSICS]: Got NaN PIDTarget from Scene on Object {0}", Name); | 2955 | m_log.WarnFormat("[PHYSICS]: Got NaN PIDTarget from Scene on Object {0}", Name); |
2956 | } | 2956 | } |
2957 | } | 2957 | } |
2958 | <<<<<<< HEAD | ||
2959 | public override bool PIDActive { get; set; } | ||
2960 | ======= | ||
2961 | // os version | ||
2962 | //public override bool PIDActive {get { return m_usePID; } set { m_usePID = value; } } | ||
2963 | public override bool PIDActive { set { m_usePID = value; } } | ||
2964 | 2958 | ||
2965 | >>>>>>> avn/ubitvar | 2959 | public override bool PIDActive { get; set; } |
2966 | public override float PIDTau { set { m_PIDTau = value; } } | 2960 | public override float PIDTau { set { m_PIDTau = value; } } |
2967 | 2961 | ||
2968 | public override float PIDHoverHeight { set { m_PIDHoverHeight = value; ; } } | 2962 | public override float PIDHoverHeight { set { m_PIDHoverHeight = value; ; } } |
@@ -3359,14 +3353,7 @@ Console.WriteLine(" JointCreateFixed"); | |||
3359 | RequestAssetDelegate assetProvider = _parent_scene.RequestAssetMethod; | 3353 | RequestAssetDelegate assetProvider = _parent_scene.RequestAssetMethod; |
3360 | if (assetProvider != null) | 3354 | if (assetProvider != null) |
3361 | assetProvider(_pbs.SculptTexture, MeshAssetReceived); | 3355 | assetProvider(_pbs.SculptTexture, MeshAssetReceived); |
3362 | <<<<<<< HEAD | ||
3363 | }, null, "ODEPrim.CheckMeshAsset"); | 3356 | }, null, "ODEPrim.CheckMeshAsset"); |
3364 | ======= | ||
3365 | // os version | ||
3366 | //}, null, "ODEPrim.CheckMeshAsset"); | ||
3367 | // avn | ||
3368 | }); | ||
3369 | >>>>>>> avn/ubitvar | ||
3370 | } | 3357 | } |
3371 | } | 3358 | } |
3372 | 3359 | ||
diff --git a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs index 7f4a809..3776ac9 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdeScene.cs | |||
@@ -2020,35 +2020,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
2020 | 2020 | ||
2021 | #region Add/Remove Entities | 2021 | #region Add/Remove Entities |
2022 | 2022 | ||
2023 | <<<<<<< HEAD | ||
2024 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | 2023 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) |
2025 | { | 2024 | { |
2026 | OdeCharacter newAv | 2025 | OdeCharacter newAv |
2027 | = new OdeCharacter( | 2026 | = new OdeCharacter( |
2028 | avName, this, position, velocity, size, avPIDD, avPIDP, | 2027 | avName, this, position, velocity, size, avPIDD, avPIDP, |
2029 | ======= | ||
2030 | /* core version | ||
2031 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | ||
2032 | { | ||
2033 | OdeCharacter newAv | ||
2034 | = new OdeCharacter( | ||
2035 | avName, this, position, velocity, size, avPIDD, avPIDP, | ||
2036 | avCapRadius, avStandupTensor, avDensity, | ||
2037 | avMovementDivisorWalk, avMovementDivisorRun); | ||
2038 | |||
2039 | newAv.Flying = isFlying; | ||
2040 | newAv.MinimumGroundFlightOffset = minimumGroundFlightOffset; | ||
2041 | newAv.m_avatarplanted = avplanted; | ||
2042 | |||
2043 | return newAv; | ||
2044 | } | ||
2045 | */ | ||
2046 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 size, bool isFlying) | ||
2047 | { | ||
2048 | OdeCharacter newAv | ||
2049 | = new OdeCharacter( | ||
2050 | avName, this, position, Vector3.Zero, size, avPIDD, avPIDP, | ||
2051 | >>>>>>> avn/ubitvar | ||
2052 | avCapRadius, avStandupTensor, avDensity, | 2028 | avCapRadius, avStandupTensor, avDensity, |
2053 | avMovementDivisorWalk, avMovementDivisorRun); | 2029 | avMovementDivisorWalk, avMovementDivisorRun); |
2054 | 2030 | ||
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs index 1c38246..0e2cbd2 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODECharacter.cs | |||
@@ -1415,7 +1415,7 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1415 | } | 1415 | } |
1416 | 1416 | ||
1417 | public override Vector3 PIDTarget { set { return; } } | 1417 | public override Vector3 PIDTarget { set { return; } } |
1418 | public override bool PIDActive { set { return; } } | 1418 | public override bool PIDActive {get {return m_pidControllerActive;} set { return; } } |
1419 | public override float PIDTau { set { return; } } | 1419 | public override float PIDTau { set { return; } } |
1420 | 1420 | ||
1421 | public override float PIDHoverHeight { set { return; } } | 1421 | public override float PIDHoverHeight { set { return; } } |
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs index b13f601..8bcdd89 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/ODEPrim.cs | |||
@@ -716,6 +716,10 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
716 | 716 | ||
717 | public override bool PIDActive | 717 | public override bool PIDActive |
718 | { | 718 | { |
719 | get | ||
720 | { | ||
721 | return m_usePID; | ||
722 | } | ||
719 | set | 723 | set |
720 | { | 724 | { |
721 | AddChange(changes.PIDActive,value); | 725 | AddChange(changes.PIDActive,value); |
diff --git a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs index dafd3a3..26e8e54 100644 --- a/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs +++ b/OpenSim/Region/Physics/UbitOdePlugin/OdeScene.cs | |||
@@ -1222,6 +1222,11 @@ namespace OpenSim.Region.Physics.OdePlugin | |||
1222 | 1222 | ||
1223 | #region Add/Remove Entities | 1223 | #region Add/Remove Entities |
1224 | 1224 | ||
1225 | public override PhysicsActor AddAvatar(string avName, Vector3 position, Vector3 velocity, Vector3 size, bool isFlying) | ||
1226 | { | ||
1227 | return AddAvatar(avName, position, size, isFlying); | ||
1228 | } | ||
1229 | |||
1225 | public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying) | 1230 | public override PhysicsActor AddAvatar(uint localID, string avName, Vector3 position, Vector3 size, float feetOffset, bool isFlying) |
1226 | { | 1231 | { |
1227 | Vector3 pos; | 1232 | Vector3 pos; |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index df1bd8b..84d44a1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs | |||
@@ -387,28 +387,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
387 | } | 387 | } |
388 | } | 388 | } |
389 | 389 | ||
390 | public static void StateChange(IScriptEngine engine, uint localID, UUID itemID) | 390 | |
391 | { | ||
392 | // Remove a specific script | ||
393 | |||
394 | // Remove dataserver events | ||
395 | m_Dataserver[engine].RemoveEvents(localID, itemID); | ||
396 | |||
397 | IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>(); | ||
398 | if (comms != null) | ||
399 | comms.DeleteListener(itemID); | ||
400 | |||
401 | IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>(); | ||
402 | if (xmlrpc != null) | ||
403 | { | ||
404 | xmlrpc.DeleteChannels(itemID); | ||
405 | xmlrpc.CancelSRDRequests(itemID); | ||
406 | } | ||
407 | |||
408 | // Remove Sensors | ||
409 | m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID); | ||
410 | |||
411 | } | ||
412 | 391 | ||
413 | public static Object[] GetSerializationData(IScriptEngine engine, UUID itemID) | 392 | public static Object[] GetSerializationData(IScriptEngine engine, UUID itemID) |
414 | { | 393 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index f637a1d..f27a122 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -28,13 +28,9 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | <<<<<<< HEAD | ||
32 | using System.Diagnostics; | 31 | using System.Diagnostics; |
33 | using System.Drawing; | 32 | using System.Drawing; |
34 | using System.Drawing.Imaging; | 33 | using System.Drawing.Imaging; |
35 | ======= | ||
36 | using System.Diagnostics; //for [DebuggerNonUserCode] | ||
37 | >>>>>>> avn/ubitvar | ||
38 | using System.Runtime.Remoting.Lifetime; | 34 | using System.Runtime.Remoting.Lifetime; |
39 | using System.Text; | 35 | using System.Text; |
40 | using System.Threading; | 36 | using System.Threading; |
@@ -43,11 +39,8 @@ using System.Timers; | |||
43 | using Nini.Config; | 39 | using Nini.Config; |
44 | using log4net; | 40 | using log4net; |
45 | using OpenMetaverse; | 41 | using OpenMetaverse; |
46 | <<<<<<< HEAD | ||
47 | using OpenMetaverse.Assets; | 42 | using OpenMetaverse.Assets; |
48 | ======= | ||
49 | using OpenMetaverse.StructuredData; | 43 | using OpenMetaverse.StructuredData; |
50 | >>>>>>> avn/ubitvar | ||
51 | using OpenMetaverse.Packets; | 44 | using OpenMetaverse.Packets; |
52 | using OpenMetaverse.Rendering; | 45 | using OpenMetaverse.Rendering; |
53 | using OpenSim; | 46 | using OpenSim; |
@@ -133,7 +126,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
133 | protected bool m_scriptConsoleChannelEnabled = false; | 126 | protected bool m_scriptConsoleChannelEnabled = false; |
134 | protected bool m_debuggerSafe = false; | 127 | protected bool m_debuggerSafe = false; |
135 | protected IUrlModule m_UrlModule = null; | 128 | protected IUrlModule m_UrlModule = null; |
136 | <<<<<<< HEAD | 129 | |
137 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>(); | 130 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = new Dictionary<UUID, UserInfoCacheEntry>(); |
138 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. | 131 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. |
139 | protected int m_sleepMsOnSetTexture = 200; | 132 | protected int m_sleepMsOnSetTexture = 200; |
@@ -254,11 +247,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
254 | protected static List<CastRayCall> m_castRayCalls = new List<CastRayCall>(); | 247 | protected static List<CastRayCall> m_castRayCalls = new List<CastRayCall>(); |
255 | protected bool m_useMeshCacheInCastRay = true; | 248 | protected bool m_useMeshCacheInCastRay = true; |
256 | protected static Dictionary<ulong, FacetedMesh> m_cachedMeshes = new Dictionary<ulong, FacetedMesh>(); | 249 | protected static Dictionary<ulong, FacetedMesh> m_cachedMeshes = new Dictionary<ulong, FacetedMesh>(); |
257 | ======= | ||
258 | protected Dictionary<UUID, UserInfoCacheEntry> m_userInfoCache = | ||
259 | new Dictionary<UUID, UserInfoCacheEntry>(); | ||
260 | protected int EMAIL_PAUSE_TIME = 20; // documented delay value for smtp. | ||
261 | protected ISoundModule m_SoundModule = null; | ||
262 | 250 | ||
263 | // protected Timer m_ShoutSayTimer; | 251 | // protected Timer m_ShoutSayTimer; |
264 | protected int m_SayShoutCount = 0; | 252 | protected int m_SayShoutCount = 0; |
@@ -288,7 +276,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
288 | {"TURNRIGHT", "Turning Right"}, | 276 | {"TURNRIGHT", "Turning Right"}, |
289 | {"WALK", "Walking"} | 277 | {"WALK", "Walking"} |
290 | }; | 278 | }; |
291 | >>>>>>> avn/ubitvar | ||
292 | 279 | ||
293 | //An array of HTTP/1.1 headers that are not allowed to be used | 280 | //An array of HTTP/1.1 headers that are not allowed to be used |
294 | //as custom headers by llHTTPRequest. | 281 | //as custom headers by llHTTPRequest. |
@@ -315,12 +302,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
315 | m_ScriptEngine = scriptEngine; | 302 | m_ScriptEngine = scriptEngine; |
316 | m_host = host; | 303 | m_host = host; |
317 | m_item = item; | 304 | m_item = item; |
318 | <<<<<<< HEAD | ||
319 | ======= | ||
320 | m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false); | 305 | m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false); |
321 | m_coopSleepHandle = coopSleepHandle; | 306 | |
322 | >>>>>>> avn/ubitvar | ||
323 | |||
324 | LoadConfig(); | 307 | LoadConfig(); |
325 | 308 | ||
326 | m_TransferModule = | 309 | m_TransferModule = |
@@ -634,7 +617,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
634 | } | 617 | } |
635 | 618 | ||
636 | int actualPrimCount = part.ParentGroup.PrimCount; | 619 | int actualPrimCount = part.ParentGroup.PrimCount; |
637 | List<ScenePresence> sittingAvatars = part.ParentGroup.GetSittingAvatars(); | 620 | List<UUID> sittingAvatars = part.ParentGroup.GetSittingAvatars(); |
638 | int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; | 621 | int adjustedPrimCount = actualPrimCount + sittingAvatars.Count; |
639 | 622 | ||
640 | // Special case for a single prim. In this case the linknum is zero. However, this will not match a single | 623 | // Special case for a single prim. In this case the linknum is zero. However, this will not match a single |
@@ -663,7 +646,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
663 | } | 646 | } |
664 | else | 647 | else |
665 | { | 648 | { |
666 | return sittingAvatars[linknum - actualPrimCount - 1]; | 649 | ScenePresence sp = World.GetScenePresence(sittingAvatars[linknum - actualPrimCount - 1]); |
650 | if (sp != null) | ||
651 | return sp; | ||
652 | else | ||
653 | return null; | ||
667 | } | 654 | } |
668 | } | 655 | } |
669 | else | 656 | else |
@@ -1316,8 +1303,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
1316 | 1303 | ||
1317 | IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); | 1304 | IWorldComm wComm = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>(); |
1318 | if (wComm != null) | 1305 | if (wComm != null) |
1319 | if (!wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg, out error)) | 1306 | if (!wComm.DeliverMessageTo(TargetID, channel, m_host.AbsolutePosition, m_host.Name, m_host.UUID, msg, out error)); |
1320 | LSLError(error); | ||
1321 | } | 1307 | } |
1322 | 1308 | ||
1323 | public LSL_Integer llListen(int channelID, string name, string ID, string msg) | 1309 | public LSL_Integer llListen(int channelID, string name, string ID, string msg) |
@@ -2373,13 +2359,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2373 | m_host.AddScriptLPS(1); | 2359 | m_host.AddScriptLPS(1); |
2374 | 2360 | ||
2375 | List<SceneObjectPart> parts = GetLinkParts(linknumber); | 2361 | List<SceneObjectPart> parts = GetLinkParts(linknumber); |
2376 | <<<<<<< HEAD | ||
2377 | |||
2378 | foreach (SceneObjectPart part in parts) | ||
2379 | SetTexture(part, texture, face); | ||
2380 | |||
2381 | ScriptSleep(m_sleepMsOnSetLinkTexture); | ||
2382 | ======= | ||
2383 | if (parts.Count > 0) | 2362 | if (parts.Count > 0) |
2384 | { | 2363 | { |
2385 | try | 2364 | try |
@@ -2391,8 +2370,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2391 | { | 2370 | { |
2392 | } | 2371 | } |
2393 | } | 2372 | } |
2394 | ScriptSleep(200); | 2373 | ScriptSleep(m_sleepMsOnSetLinkTexture); |
2395 | >>>>>>> avn/ubitvar | ||
2396 | } | 2374 | } |
2397 | 2375 | ||
2398 | protected void SetTexture(SceneObjectPart part, string texture, int face) | 2376 | protected void SetTexture(SceneObjectPart part, string texture, int face) |
@@ -3038,12 +3016,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3038 | if (m_host.ParentGroup.IsAttachment) | 3016 | if (m_host.ParentGroup.IsAttachment) |
3039 | { | 3017 | { |
3040 | ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); | 3018 | ScenePresence avatar = m_host.ParentGroup.Scene.GetScenePresence(m_host.ParentGroup.AttachedAvatar); |
3041 | <<<<<<< HEAD | ||
3042 | vel = avatar.GetWorldVelocity(); | ||
3043 | ======= | ||
3044 | if (avatar != null) | 3019 | if (avatar != null) |
3045 | vel = avatar.Velocity; | 3020 | vel = avatar.GetWorldVelocity(); |
3046 | >>>>>>> avn/ubitvar | ||
3047 | } | 3021 | } |
3048 | else | 3022 | else |
3049 | { | 3023 | { |
@@ -3463,15 +3437,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3463 | 3437 | ||
3464 | string reason; | 3438 | string reason; |
3465 | money.ObjectGiveMoney( | 3439 | money.ObjectGiveMoney( |
3466 | <<<<<<< HEAD | 3440 | |
3467 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); | ||
3468 | }, null, "LSL_Api.llGiveMoney"); | ||
3469 | ======= | ||
3470 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason); | 3441 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount,UUID.Zero, out reason); |
3471 | }); | 3442 | }, null, "LSL_Api.llGiveMoney"); |
3472 | 3443 | ||
3473 | return 0; | 3444 | return 0; |
3474 | >>>>>>> avn/ubitvar | ||
3475 | } | 3445 | } |
3476 | 3446 | ||
3477 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) | 3447 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) |
@@ -3574,12 +3544,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3574 | } | 3544 | } |
3575 | // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) | 3545 | // Variable script delay? (see (http://wiki.secondlife.com/wiki/LSL_Delay) |
3576 | } | 3546 | } |
3577 | <<<<<<< HEAD | 3547 | |
3578 | }, null, "LSL_Api.llRezAtRoot"); | 3548 | }, null, "LSL_Api.llRezAtRoot"); |
3579 | ======= | ||
3580 | return; | ||
3581 | }); | ||
3582 | >>>>>>> avn/ubitvar | ||
3583 | 3549 | ||
3584 | //ScriptSleep((int)((groupmass * velmag) / 10)); | 3550 | //ScriptSleep((int)((groupmass * velmag) / 10)); |
3585 | ScriptSleep(m_sleepMsOnRezAtRoot); | 3551 | ScriptSleep(m_sleepMsOnRezAtRoot); |
@@ -3594,25 +3560,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3594 | { | 3560 | { |
3595 | m_host.AddScriptLPS(1); | 3561 | m_host.AddScriptLPS(1); |
3596 | 3562 | ||
3597 | <<<<<<< HEAD | ||
3598 | // normalized direction to target | ||
3599 | LSL_Vector dir = llVecNorm(target - from); | ||
3600 | // use vertical to help compute left axis | ||
3601 | LSL_Vector up = new LSL_Vector(0.0, 0.0, 1.0); | ||
3602 | // find normalized left axis parallel to horizon | ||
3603 | LSL_Vector left = llVecNorm(LSL_Vector.Cross(up, dir)); | ||
3604 | // make up orthogonal to left and dir | ||
3605 | up = LSL_Vector.Cross(dir, left); | ||
3606 | |||
3607 | // compute rotation based on orthogonal axes | ||
3608 | LSL_Rotation rot = new LSL_Rotation(0.0, 0.707107, 0.0, 0.707107) * llAxes2Rot(dir, left, up); | ||
3609 | |||
3610 | // Per discussion with Melanie, for non-physical objects llLookAt appears to simply | ||
3611 | // set the rotation of the object, copy that behavior | ||
3612 | PhysicsActor pa = m_host.PhysActor; | ||
3613 | |||
3614 | if (m_host.ParentGroup.IsAttachment || strength == 0 || pa == null || !pa.IsPhysical) | ||
3615 | ======= | ||
3616 | // Get the normalized vector to the target | 3563 | // Get the normalized vector to the target |
3617 | LSL_Vector d1 = llVecNorm(target - llGetPos()); | 3564 | LSL_Vector d1 = llVecNorm(target - llGetPos()); |
3618 | 3565 | ||
@@ -3629,7 +3576,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3629 | LSL_Rotation r3 = new LSL_Rotation(0.000000, 0.707107, 0.000000, 0.707107); | 3576 | LSL_Rotation r3 = new LSL_Rotation(0.000000, 0.707107, 0.000000, 0.707107); |
3630 | 3577 | ||
3631 | if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical) | 3578 | if (m_host.PhysActor == null || !m_host.PhysActor.IsPhysical) |
3632 | >>>>>>> avn/ubitvar | ||
3633 | { | 3579 | { |
3634 | // Do nothing if either value is 0 (this has been checked in SL) | 3580 | // Do nothing if either value is 0 (this has been checked in SL) |
3635 | if (strength <= 0.0 || damping <= 0.0) | 3581 | if (strength <= 0.0 || damping <= 0.0) |
@@ -3703,18 +3649,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3703 | } | 3649 | } |
3704 | } | 3650 | } |
3705 | 3651 | ||
3706 | <<<<<<< HEAD | ||
3707 | public LSL_Float llGetMassMKS() | ||
3708 | { | ||
3709 | // this is what the wiki says it does! | ||
3710 | // http://wiki.secondlife.com/wiki/LlGetMassMKS | ||
3711 | return llGetMass() * 100.0; | ||
3712 | ======= | ||
3713 | |||
3714 | public LSL_Float llGetMassMKS() | 3652 | public LSL_Float llGetMassMKS() |
3715 | { | 3653 | { |
3716 | return 100f * llGetMass(); | 3654 | return 100f * llGetMass(); |
3717 | >>>>>>> avn/ubitvar | ||
3718 | } | 3655 | } |
3719 | 3656 | ||
3720 | public void llCollisionFilter(string name, string id, int accept) | 3657 | public void llCollisionFilter(string name, string id, int accept) |
@@ -3863,17 +3800,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3863 | 3800 | ||
3864 | public void llInstantMessage(string user, string message) | 3801 | public void llInstantMessage(string user, string message) |
3865 | { | 3802 | { |
3803 | m_host.AddScriptLPS(1); | ||
3866 | UUID result; | 3804 | UUID result; |
3867 | if (!UUID.TryParse(user, out result) || result == UUID.Zero) | 3805 | if (!UUID.TryParse(user, out result) || result == UUID.Zero) |
3868 | { | 3806 | { |
3869 | ShoutError("An invalid key was passed to llInstantMessage"); | 3807 | Error("llInstantMessage","An invalid key was passed to llInstantMessage"); |
3870 | ScriptSleep(2000); | 3808 | ScriptSleep(2000); |
3871 | return; | 3809 | return; |
3872 | } | 3810 | } |
3873 | 3811 | ||
3874 | |||
3875 | m_host.AddScriptLPS(1); | ||
3876 | |||
3877 | // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. | 3812 | // We may be able to use ClientView.SendInstantMessage here, but we need a client instance. |
3878 | // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, | 3813 | // InstantMessageModule.OnInstantMessage searches through a list of scenes for a client matching the toAgent, |
3879 | // but I don't think we have a list of scenes available from here. | 3814 | // but I don't think we have a list of scenes available from here. |
@@ -3883,50 +3818,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3883 | 3818 | ||
3884 | // TODO: figure out values for client, fromSession, and imSessionID | 3819 | // TODO: figure out values for client, fromSession, and imSessionID |
3885 | // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); | 3820 | // client.SendInstantMessage(m_host.UUID, fromSession, message, user, imSessionID, m_host.Name, AgentManager.InstantMessageDialog.MessageFromAgent, (uint)Util.UnixTimeSinceEpoch()); |
3886 | <<<<<<< HEAD | ||
3887 | |||
3888 | ======= | ||
3889 | UUID friendTransactionID = UUID.Random(); | 3821 | UUID friendTransactionID = UUID.Random(); |
3890 | 3822 | ||
3891 | //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); | 3823 | //m_pendingFriendRequests.Add(friendTransactionID, fromAgentID); |
3892 | 3824 | ||
3893 | >>>>>>> avn/ubitvar | ||
3894 | GridInstantMessage msg = new GridInstantMessage(); | 3825 | GridInstantMessage msg = new GridInstantMessage(); |
3895 | msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid; | 3826 | msg.fromAgentID = new Guid(m_host.OwnerID.ToString()); // fromAgentID.Guid; |
3896 | msg.toAgentID = new Guid(user); // toAgentID.Guid; | 3827 | msg.toAgentID = new Guid(user); // toAgentID.Guid; |
3897 | msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here | 3828 | msg.imSessionID = new Guid(m_host.UUID.ToString()); // This is the item we're mucking with here |
3898 | // m_log.Debug("[Scripting IM]: From:" + msg.fromAgentID.ToString() + " To: " + msg.toAgentID.ToString() + " Session:" + msg.imSessionID.ToString() + " Message:" + message); | ||
3899 | // m_log.Debug("[Scripting IM]: Filling Session: " + msg.imSessionID.ToString()); | ||
3900 | // DateTime dt = DateTime.UtcNow; | ||
3901 | // | ||
3902 | // // Ticks from UtcNow, but make it look like local. Evil, huh? | ||
3903 | // dt = DateTime.SpecifyKind(dt, DateTimeKind.Local); | ||
3904 | // | ||
3905 | // try | ||
3906 | // { | ||
3907 | // // Convert that to the PST timezone | ||
3908 | // TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("America/Los_Angeles"); | ||
3909 | // dt = TimeZoneInfo.ConvertTime(dt, timeZoneInfo); | ||
3910 | // } | ||
3911 | // catch | ||
3912 | // { | ||
3913 | // // No logging here, as it could be VERY spammy | ||
3914 | // } | ||
3915 | // | ||
3916 | // // And make it look local again to fool the unix time util | ||
3917 | // dt = DateTime.SpecifyKind(dt, DateTimeKind.Utc); | ||
3918 | |||
3919 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 3829 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
3830 | msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName; | ||
3920 | 3831 | ||
3921 | //if (client != null) | ||
3922 | //{ | ||
3923 | msg.fromAgentName = m_host.Name;//client.FirstName + " " + client.LastName;// fromAgentName; | ||
3924 | //} | ||
3925 | //else | ||
3926 | //{ | ||
3927 | // msg.fromAgentName = "(hippos)";// Added for posterity. This means that we can't figure out who sent it | ||
3928 | //} | ||
3929 | // Cap the message length at 1024. | ||
3930 | if (message != null && message.Length > 1024) | 3832 | if (message != null && message.Length > 1024) |
3931 | msg.message = message.Substring(0, 1024); | 3833 | msg.message = message.Substring(0, 1024); |
3932 | else | 3834 | else |
@@ -4237,17 +4139,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4237 | ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | | 4139 | ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
4238 | ScriptBaseClass.PERMISSION_CONTROL_CAMERA | | 4140 | ScriptBaseClass.PERMISSION_CONTROL_CAMERA | |
4239 | ScriptBaseClass.PERMISSION_TRACK_CAMERA | | 4141 | ScriptBaseClass.PERMISSION_TRACK_CAMERA | |
4240 | <<<<<<< HEAD | ||
4241 | ScriptBaseClass.PERMISSION_ATTACH; | ||
4242 | ======= | ||
4243 | ScriptBaseClass.PERMISSION_ATTACH | | 4142 | ScriptBaseClass.PERMISSION_ATTACH | |
4244 | ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS; | 4143 | ScriptBaseClass.PERMISSION_OVERRIDE_ANIMATIONS; |
4245 | |||
4246 | >>>>>>> avn/ubitvar | ||
4247 | } | 4144 | } |
4248 | else | 4145 | else |
4249 | { | 4146 | { |
4250 | if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(sp => sp.UUID == agentID) != null) | 4147 | if (m_host.ParentGroup.GetSittingAvatars().SingleOrDefault(id => id == agentID) != null) |
4251 | { | 4148 | { |
4252 | // When agent is sitting, certain permissions are implicit if requested from sitting agent | 4149 | // When agent is sitting, certain permissions are implicit if requested from sitting agent |
4253 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | | 4150 | implicitPerms = ScriptBaseClass.PERMISSION_TRIGGER_ANIMATION | |
@@ -4409,14 +4306,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4409 | public void llCreateLink(string target, int parent) | 4306 | public void llCreateLink(string target, int parent) |
4410 | { | 4307 | { |
4411 | m_host.AddScriptLPS(1); | 4308 | m_host.AddScriptLPS(1); |
4412 | <<<<<<< HEAD | ||
4413 | ======= | ||
4414 | 4309 | ||
4415 | UUID targetID; | 4310 | UUID targetID; |
4416 | 4311 | ||
4417 | if (!UUID.TryParse(target, out targetID)) | 4312 | if (!UUID.TryParse(target, out targetID)) |
4418 | return; | 4313 | return; |
4419 | >>>>>>> avn/ubitvar | ||
4420 | 4314 | ||
4421 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | 4315 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 |
4422 | && !m_automaticLinkPermission) | 4316 | && !m_automaticLinkPermission) |
@@ -4589,30 +4483,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4589 | { | 4483 | { |
4590 | m_host.AddScriptLPS(1); | 4484 | m_host.AddScriptLPS(1); |
4591 | 4485 | ||
4592 | <<<<<<< HEAD | 4486 | TaskInventoryItem item = m_item; |
4593 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | 4487 | |
4488 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | ||
4594 | && !m_automaticLinkPermission) | 4489 | && !m_automaticLinkPermission) |
4595 | { | 4490 | { |
4596 | Error("llBreakAllLinks", "PERMISSION_CHANGE_LINKS permission not set"); | 4491 | Error("llBreakAllLinks","Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); |
4597 | return; | 4492 | return; |
4598 | } | 4493 | } |
4599 | |||
4600 | BreakAllLinks(); | 4494 | BreakAllLinks(); |
4601 | } | 4495 | } |
4602 | 4496 | ||
4603 | public void BreakAllLinks() | 4497 | public void BreakAllLinks() |
4604 | { | 4498 | { |
4605 | ======= | ||
4606 | TaskInventoryItem item = m_item; | ||
4607 | |||
4608 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | ||
4609 | && !m_automaticLinkPermission) | ||
4610 | { | ||
4611 | ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); | ||
4612 | return; | ||
4613 | } | ||
4614 | |||
4615 | >>>>>>> avn/ubitvar | ||
4616 | SceneObjectGroup parentPrim = m_host.ParentGroup; | 4499 | SceneObjectGroup parentPrim = m_host.ParentGroup; |
4617 | if (parentPrim.AttachmentPoint != 0) | 4500 | if (parentPrim.AttachmentPoint != 0) |
4618 | return; // Fail silently if attached | 4501 | return; // Fail silently if attached |
@@ -4643,12 +4526,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4643 | { | 4526 | { |
4644 | linknum -= (m_host.ParentGroup.PrimCount) + 1; | 4527 | linknum -= (m_host.ParentGroup.PrimCount) + 1; |
4645 | 4528 | ||
4646 | <<<<<<< HEAD | ||
4647 | ISceneEntity entity = GetLinkEntity(m_host, linknum); | ||
4648 | ======= | ||
4649 | if (linknum < 0) | 4529 | if (linknum < 0) |
4650 | return UUID.Zero.ToString(); | 4530 | return UUID.Zero.ToString(); |
4651 | >>>>>>> avn/ubitvar | ||
4652 | 4531 | ||
4653 | List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET); | 4532 | List<ScenePresence> avatars = GetLinkAvatars(ScriptBaseClass.LINK_SET); |
4654 | if (avatars.Count > linknum) | 4533 | if (avatars.Count > linknum) |
@@ -4779,14 +4658,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4779 | 4658 | ||
4780 | if (item == null) | 4659 | if (item == null) |
4781 | { | 4660 | { |
4782 | <<<<<<< HEAD | ||
4783 | Error("llGiveInventory", "Can't find inventory object '" + inventory + "'"); | 4661 | Error("llGiveInventory", "Can't find inventory object '" + inventory + "'"); |
4784 | return; | 4662 | return; |
4785 | ======= | ||
4786 | llSay(0, String.Format("Could not find object '{0}'", inventory)); | ||
4787 | return; | ||
4788 | // throw new Exception(String.Format("The inventory object '{0}' could not be found", inventory)); | ||
4789 | >>>>>>> avn/ubitvar | ||
4790 | } | 4663 | } |
4791 | 4664 | ||
4792 | UUID objId = item.ItemID; | 4665 | UUID objId = item.ItemID; |
@@ -4845,9 +4718,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4845 | 4718 | ||
4846 | ScenePresence sp; | 4719 | ScenePresence sp; |
4847 | 4720 | ||
4848 | <<<<<<< HEAD | ||
4849 | ScriptSleep(m_sleepMsOnGiveInventory); | ||
4850 | ======= | ||
4851 | if (World.TryGetScenePresence(destId, out sp)) | 4721 | if (World.TryGetScenePresence(destId, out sp)) |
4852 | { | 4722 | { |
4853 | sp.ControllingClient.SendInstantMessage(msg); | 4723 | sp.ControllingClient.SendInstantMessage(msg); |
@@ -4859,8 +4729,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4859 | } | 4729 | } |
4860 | 4730 | ||
4861 | //This delay should only occur when giving inventory to avatars. | 4731 | //This delay should only occur when giving inventory to avatars. |
4862 | ScriptSleep(3000); | 4732 | ScriptSleep(m_sleepMsOnGiveInventory); |
4863 | >>>>>>> avn/ubitvar | ||
4864 | } | 4733 | } |
4865 | } | 4734 | } |
4866 | 4735 | ||
@@ -4919,16 +4788,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4919 | { | 4788 | { |
4920 | m_host.AddScriptLPS(1); | 4789 | m_host.AddScriptLPS(1); |
4921 | 4790 | ||
4922 | <<<<<<< HEAD | ||
4923 | UUID uuid = (UUID)id; | ||
4924 | PresenceInfo pinfo = null; | ||
4925 | UserAccount account; | ||
4926 | |||
4927 | UserInfoCacheEntry ce; | ||
4928 | |||
4929 | lock (m_userInfoCache) | ||
4930 | { | ||
4931 | ======= | ||
4932 | UUID uuid; | 4791 | UUID uuid; |
4933 | if (UUID.TryParse(id, out uuid)) | 4792 | if (UUID.TryParse(id, out uuid)) |
4934 | { | 4793 | { |
@@ -4936,7 +4795,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4936 | UserAccount account; | 4795 | UserAccount account; |
4937 | 4796 | ||
4938 | UserInfoCacheEntry ce; | 4797 | UserInfoCacheEntry ce; |
4939 | >>>>>>> avn/ubitvar | ||
4940 | if (!m_userInfoCache.TryGetValue(uuid, out ce)) | 4798 | if (!m_userInfoCache.TryGetValue(uuid, out ce)) |
4941 | { | 4799 | { |
4942 | account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); | 4800 | account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, uuid); |
@@ -4945,10 +4803,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4945 | m_userInfoCache[uuid] = null; // Cache negative | 4803 | m_userInfoCache[uuid] = null; // Cache negative |
4946 | return UUID.Zero.ToString(); | 4804 | return UUID.Zero.ToString(); |
4947 | } | 4805 | } |
4948 | <<<<<<< HEAD | ||
4949 | ======= | ||
4950 | |||
4951 | >>>>>>> avn/ubitvar | ||
4952 | 4806 | ||
4953 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); | 4807 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); |
4954 | if (pinfos != null && pinfos.Length > 0) | 4808 | if (pinfos != null && pinfos.Length > 0) |
@@ -4961,40 +4815,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
4961 | } | 4815 | } |
4962 | } | 4816 | } |
4963 | } | 4817 | } |
4964 | <<<<<<< HEAD | ||
4965 | |||
4966 | ce = new UserInfoCacheEntry(); | ||
4967 | ce.time = Util.EnvironmentTickCount(); | ||
4968 | ce.account = account; | ||
4969 | ce.pinfo = pinfo; | ||
4970 | |||
4971 | m_userInfoCache[uuid] = ce; | ||
4972 | } | ||
4973 | else | ||
4974 | { | ||
4975 | if (ce == null) | ||
4976 | return UUID.Zero.ToString(); | ||
4977 | |||
4978 | account = ce.account; | ||
4979 | |||
4980 | if (Util.EnvironmentTickCount() < ce.time || (Util.EnvironmentTickCount() - ce.time) | ||
4981 | >= LlRequestAgentDataCacheTimeoutMs) | ||
4982 | { | ||
4983 | PresenceInfo[] pinfos = World.PresenceService.GetAgents(new string[] { uuid.ToString() }); | ||
4984 | if (pinfos != null && pinfos.Length > 0) | ||
4985 | { | ||
4986 | foreach (PresenceInfo p in pinfos) | ||
4987 | { | ||
4988 | if (p.RegionID != UUID.Zero) | ||
4989 | { | ||
4990 | pinfo = p; | ||
4991 | } | ||
4992 | } | ||
4993 | } | ||
4994 | else | ||
4995 | { | ||
4996 | pinfo = null; | ||
4997 | ======= | ||
4998 | 4818 | ||
4999 | ce = new UserInfoCacheEntry(); | 4819 | ce = new UserInfoCacheEntry(); |
5000 | ce.time = Util.EnvironmentTickCount(); | 4820 | ce.time = Util.EnvironmentTickCount(); |
@@ -5022,60 +4842,17 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5022 | { | 4842 | { |
5023 | pinfo = p; | 4843 | pinfo = p; |
5024 | } | 4844 | } |
5025 | >>>>>>> avn/ubitvar | ||
5026 | } | 4845 | } |
5027 | |||
5028 | ce.time = Util.EnvironmentTickCount(); | ||
5029 | ce.pinfo = pinfo; | ||
5030 | } | ||
5031 | else | ||
5032 | { | ||
5033 | pinfo = ce.pinfo; | ||
5034 | } | 4846 | } |
5035 | <<<<<<< HEAD | ||
5036 | } | ||
5037 | } | ||
5038 | ======= | ||
5039 | else | 4847 | else |
5040 | pinfo = null; | 4848 | pinfo = null; |
5041 | 4849 | ||
5042 | ce.time = Util.EnvironmentTickCount(); | 4850 | ce.time = Util.EnvironmentTickCount(); |
5043 | ce.pinfo = pinfo; | 4851 | ce.pinfo = pinfo; |
5044 | } | 4852 | } |
5045 | >>>>>>> avn/ubitvar | ||
5046 | 4853 | ||
5047 | string reply = String.Empty; | 4854 | string reply = String.Empty; |
5048 | 4855 | ||
5049 | <<<<<<< HEAD | ||
5050 | switch (data) | ||
5051 | { | ||
5052 | case ScriptBaseClass.DATA_ONLINE: | ||
5053 | if (pinfo != null && pinfo.RegionID != UUID.Zero) | ||
5054 | reply = "1"; | ||
5055 | else | ||
5056 | reply = "0"; | ||
5057 | break; | ||
5058 | case ScriptBaseClass.DATA_NAME: // (First Last) | ||
5059 | reply = account.FirstName + " " + account.LastName; | ||
5060 | break; | ||
5061 | case ScriptBaseClass.DATA_BORN: // (YYYY-MM-DD) | ||
5062 | DateTime born = new DateTime(1970, 1, 1, 0, 0, 0, 0); | ||
5063 | born = born.AddSeconds(account.Created); | ||
5064 | reply = born.ToString("yyyy-MM-dd"); | ||
5065 | break; | ||
5066 | case ScriptBaseClass.DATA_RATING: // (0,0,0,0,0,0) | ||
5067 | reply = "0,0,0,0,0,0"; | ||
5068 | break; | ||
5069 | case 7: // DATA_USERLEVEL (integer). This is not available in LL and so has no constant. | ||
5070 | reply = account.UserLevel.ToString(); | ||
5071 | break; | ||
5072 | case ScriptBaseClass.DATA_PAYINFO: // (0|1|2|3) | ||
5073 | reply = "0"; | ||
5074 | break; | ||
5075 | default: | ||
5076 | return UUID.Zero.ToString(); // Raise no event | ||
5077 | } | ||
5078 | ======= | ||
5079 | switch (data) | 4856 | switch (data) |
5080 | { | 4857 | { |
5081 | case 1: // DATA_ONLINE (0|1) | 4858 | case 1: // DATA_ONLINE (0|1) |
@@ -5101,7 +4878,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5101 | default: | 4878 | default: |
5102 | return UUID.Zero.ToString(); // Raise no event | 4879 | return UUID.Zero.ToString(); // Raise no event |
5103 | } | 4880 | } |
5104 | >>>>>>> avn/ubitvar | ||
5105 | 4881 | ||
5106 | UUID rq = UUID.Random(); | 4882 | UUID rq = UUID.Random(); |
5107 | 4883 | ||
@@ -5112,19 +4888,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5112 | AsyncCommands. | 4888 | AsyncCommands. |
5113 | DataserverPlugin.DataserverReply(rq.ToString(), reply); | 4889 | DataserverPlugin.DataserverReply(rq.ToString(), reply); |
5114 | 4890 | ||
5115 | <<<<<<< HEAD | 4891 | ScriptSleep(m_sleepMsOnRequestAgentData); |
5116 | ScriptSleep(m_sleepMsOnRequestAgentData); | ||
5117 | return tid.ToString(); | ||
5118 | ======= | ||
5119 | ScriptSleep(100); | ||
5120 | return tid.ToString(); | 4892 | return tid.ToString(); |
5121 | } | 4893 | } |
5122 | else | 4894 | else |
5123 | { | 4895 | { |
5124 | ShoutError("Invalid UUID passed to llRequestAgentData."); | 4896 | Error("llRequestAgentData","Invalid UUID passed to llRequestAgentData."); |
5125 | } | 4897 | } |
5126 | return ""; | 4898 | return ""; |
5127 | >>>>>>> avn/ubitvar | ||
5128 | } | 4899 | } |
5129 | 4900 | ||
5130 | public LSL_String llRequestInventoryData(string name) | 4901 | public LSL_String llRequestInventoryData(string name) |
@@ -5252,11 +5023,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
5252 | m_host.AddScriptLPS(1); | 5023 | m_host.AddScriptLPS(1); |
5253 | UUID agentId = new UUID(); | 5024 | UUID agentId = new UUID(); |
5254 | 5025 | ||
5255 | <<<<<<< HEAD | ||
5256 | ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y); | 5026 | ulong regionHandle = Util.RegionWorldLocToHandle((uint)global_coords.x, (uint)global_coords.y); |
5257 | ======= | ||
5258 | ulong regionHandle = Utils.UIntsToLong((uint)(global_coords.x / 256) * 256, (uint)(global_coords.y / 256) * 256); | ||
5259 | >>>>>>> avn/ubitvar | ||
5260 | 5027 | ||
5261 | if (UUID.TryParse(agent, out agentId)) | 5028 | if (UUID.TryParse(agent, out agentId)) |
5262 | { | 5029 | { |
@@ -6057,13 +5824,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6057 | // NOTE: 3rd case is needed because a NULL_KEY comes through as | 5824 | // NOTE: 3rd case is needed because a NULL_KEY comes through as |
6058 | // type 'obj' and wrongly returns "" | 5825 | // type 'obj' and wrongly returns "" |
6059 | else if (!(src.Data[index] is LSL_String || | 5826 | else if (!(src.Data[index] is LSL_String || |
6060 | <<<<<<< HEAD | ||
6061 | src.Data[index] is LSL_Key || | 5827 | src.Data[index] is LSL_Key || |
6062 | src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) | 5828 | src.Data[index].ToString() == "00000000-0000-0000-0000-000000000000")) |
6063 | ======= | ||
6064 | src.Data[index] is LSL_Key || | ||
6065 | src.Data[index] is String)) | ||
6066 | >>>>>>> avn/ubitvar | ||
6067 | { | 5829 | { |
6068 | return ""; | 5830 | return ""; |
6069 | } | 5831 | } |
@@ -6443,7 +6205,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6443 | { | 6205 | { |
6444 | m_host.AddScriptLPS(1); | 6206 | m_host.AddScriptLPS(1); |
6445 | return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); | 6207 | return new LSL_Vector(World.RegionInfo.WorldLocX, World.RegionInfo.WorldLocY, 0); |
6446 | <<<<<<< HEAD | ||
6447 | } | 6208 | } |
6448 | 6209 | ||
6449 | public LSL_String llGetEnv(LSL_String name) | 6210 | public LSL_String llGetEnv(LSL_String name) |
@@ -6509,8 +6270,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6509 | { | 6270 | { |
6510 | return ""; | 6271 | return ""; |
6511 | } | 6272 | } |
6512 | ======= | 6273 | |
6513 | >>>>>>> avn/ubitvar | ||
6514 | } | 6274 | } |
6515 | 6275 | ||
6516 | /// <summary> | 6276 | /// <summary> |
@@ -7153,11 +6913,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
7153 | if (UUID.TryParse(id, out key)) | 6913 | if (UUID.TryParse(id, out key)) |
7154 | { | 6914 | { |
7155 | ScenePresence av = World.GetScenePresence(key); | 6915 | ScenePresence av = World.GetScenePresence(key); |
7156 | List<ScenePresence> sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); | 6916 | List<UUID> sittingAvatars = m_host.ParentGroup.GetSittingAvatars(); |
7157 | 6917 | ||
7158 | if (av != null) | 6918 | if (av != null) |
7159 | { | 6919 | { |
7160 | if (sittingAvatars.Contains(av)) | 6920 | if (sittingAvatars.Contains(key)) |
7161 | { | 6921 | { |
7162 | // if the avatar is sitting on this object, then | 6922 | // if the avatar is sitting on this object, then |
7163 | // we can unsit them. We don't want random scripts unsitting random people | 6923 | // we can unsit them. We don't want random scripts unsitting random people |
@@ -8152,16 +7912,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8152 | UUID av = new UUID(); | 7912 | UUID av = new UUID(); |
8153 | if (!UUID.TryParse(avatar,out av)) | 7913 | if (!UUID.TryParse(avatar,out av)) |
8154 | { | 7914 | { |
8155 | <<<<<<< HEAD | ||
8156 | Error("llDialog", "First parameter must be a key"); | 7915 | Error("llDialog", "First parameter must be a key"); |
8157 | ======= | ||
8158 | //LSLError("First parameter to llDialog needs to be a key"); | ||
8159 | >>>>>>> avn/ubitvar | ||
8160 | return; | 7916 | return; |
8161 | } | 7917 | } |
8162 | if (buttons.Length < 1) | 7918 | if (buttons.Length < 1) |
8163 | { | 7919 | { |
8164 | <<<<<<< HEAD | ||
8165 | Error("llDialog", "At least 1 button must be shown"); | 7920 | Error("llDialog", "At least 1 button must be shown"); |
8166 | return; | 7921 | return; |
8167 | } | 7922 | } |
@@ -8169,13 +7924,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8169 | { | 7924 | { |
8170 | Error("llDialog", "No more than 12 buttons can be shown"); | 7925 | Error("llDialog", "No more than 12 buttons can be shown"); |
8171 | return; | 7926 | return; |
8172 | ======= | ||
8173 | buttons.Add("OK"); | ||
8174 | } | ||
8175 | if (buttons.Length > 12) | ||
8176 | { | ||
8177 | ShoutError("button list too long, must be 12 or fewer entries"); | ||
8178 | >>>>>>> avn/ubitvar | ||
8179 | } | 7927 | } |
8180 | int length = buttons.Length; | 7928 | int length = buttons.Length; |
8181 | if (length > 12) | 7929 | if (length > 12) |
@@ -8186,20 +7934,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8186 | { | 7934 | { |
8187 | if (buttons.Data[i].ToString() == String.Empty) | 7935 | if (buttons.Data[i].ToString() == String.Empty) |
8188 | { | 7936 | { |
8189 | <<<<<<< HEAD | ||
8190 | Error("llDialog", "Button label cannot be blank"); | 7937 | Error("llDialog", "Button label cannot be blank"); |
8191 | ======= | ||
8192 | ShoutError("button label cannot be blank"); | ||
8193 | >>>>>>> avn/ubitvar | ||
8194 | return; | 7938 | return; |
8195 | } | 7939 | } |
8196 | if (buttons.Data[i].ToString().Length > 24) | 7940 | if (buttons.Data[i].ToString().Length > 24) |
8197 | { | 7941 | { |
8198 | <<<<<<< HEAD | ||
8199 | Error("llDialog", "Button label cannot be longer than 24 characters"); | 7942 | Error("llDialog", "Button label cannot be longer than 24 characters"); |
8200 | ======= | ||
8201 | ShoutError("button label cannot be longer than 24 characters"); | ||
8202 | >>>>>>> avn/ubitvar | ||
8203 | return; | 7943 | return; |
8204 | } | 7944 | } |
8205 | buts[i] = buttons.Data[i].ToString(); | 7945 | buts[i] = buttons.Data[i].ToString(); |
@@ -8750,7 +8490,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8750 | ScriptSleep(m_sleepMsOnSetPrimitiveParams); | 8490 | ScriptSleep(m_sleepMsOnSetPrimitiveParams); |
8751 | } | 8491 | } |
8752 | 8492 | ||
8753 | <<<<<<< HEAD | ||
8754 | public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) | 8493 | public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) |
8755 | { | 8494 | { |
8756 | m_host.AddScriptLPS(1); | 8495 | m_host.AddScriptLPS(1); |
@@ -8760,8 +8499,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8760 | ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); | 8499 | ScriptSleep(m_sleepMsOnSetLinkPrimitiveParams); |
8761 | } | 8500 | } |
8762 | 8501 | ||
8763 | ======= | ||
8764 | >>>>>>> avn/ubitvar | ||
8765 | public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) | 8502 | public void llSetLinkPrimitiveParamsFast(int linknumber, LSL_List rules) |
8766 | { | 8503 | { |
8767 | m_host.AddScriptLPS(1); | 8504 | m_host.AddScriptLPS(1); |
@@ -8769,13 +8506,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8769 | SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); | 8506 | SetLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParamsFast"); |
8770 | } | 8507 | } |
8771 | 8508 | ||
8772 | <<<<<<< HEAD | 8509 | private void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc) |
8773 | protected void SetLinkPrimParams(int linknumber, LSL_List rules, string originFunc) | ||
8774 | { | ||
8775 | SetEntityParams(GetLinkEntities(linknumber), rules, originFunc); | ||
8776 | } | ||
8777 | ======= | ||
8778 | private void setLinkPrimParams(int linknumber, LSL_List rules, string originFunc) | ||
8779 | { | 8510 | { |
8780 | List<object> parts = new List<object>(); | 8511 | List<object> parts = new List<object>(); |
8781 | List<SceneObjectPart> prims = GetLinkParts(linknumber); | 8512 | List<SceneObjectPart> prims = GetLinkParts(linknumber); |
@@ -8784,14 +8515,49 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8784 | parts.Add(p); | 8515 | parts.Add(p); |
8785 | foreach (ScenePresence p in avatars) | 8516 | foreach (ScenePresence p in avatars) |
8786 | parts.Add(p); | 8517 | parts.Add(p); |
8787 | >>>>>>> avn/ubitvar | 8518 | |
8519 | LSL_List remaining = new LSL_List(); | ||
8520 | uint rulesParsed = 0; | ||
8521 | |||
8522 | if (parts.Count > 0) | ||
8523 | { | ||
8524 | foreach (object part in parts) | ||
8525 | { | ||
8526 | if (part is SceneObjectPart) | ||
8527 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8528 | else | ||
8529 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8530 | } | ||
8531 | |||
8532 | while (remaining.Length > 2) | ||
8533 | { | ||
8534 | linknumber = remaining.GetLSLIntegerItem(0); | ||
8535 | rules = remaining.GetSublist(1, -1); | ||
8536 | parts.Clear(); | ||
8537 | prims = GetLinkParts(linknumber); | ||
8538 | avatars = GetLinkAvatars(linknumber); | ||
8539 | foreach (SceneObjectPart p in prims) | ||
8540 | parts.Add(p); | ||
8541 | foreach (ScenePresence p in avatars) | ||
8542 | parts.Add(p); | ||
8543 | |||
8544 | remaining = new LSL_List(); | ||
8545 | foreach (object part in parts) | ||
8546 | { | ||
8547 | if (part is SceneObjectPart) | ||
8548 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8549 | else | ||
8550 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8551 | } | ||
8552 | } | ||
8553 | } | ||
8554 | } | ||
8788 | 8555 | ||
8789 | protected void SetEntityParams(List<ISceneEntity> entities, LSL_List rules, string originFunc) | 8556 | protected void SetEntityParams(List<ISceneEntity> entities, LSL_List rules, string originFunc) |
8790 | { | 8557 | { |
8791 | LSL_List remaining = new LSL_List(); | 8558 | LSL_List remaining = new LSL_List(); |
8792 | uint rulesParsed = 0; | 8559 | uint rulesParsed = 0; |
8793 | 8560 | ||
8794 | <<<<<<< HEAD | ||
8795 | foreach (ISceneEntity entity in entities) | 8561 | foreach (ISceneEntity entity in entities) |
8796 | { | 8562 | { |
8797 | if (entity is SceneObjectPart) | 8563 | if (entity is SceneObjectPart) |
@@ -8826,51 +8592,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8826 | } | 8592 | } |
8827 | } | 8593 | } |
8828 | 8594 | ||
8829 | public void llSetKeyframedMotion(LSL_List frames, LSL_List options) | ||
8830 | { | ||
8831 | SceneObjectGroup group = m_host.ParentGroup; | ||
8832 | |||
8833 | if (group.RootPart.PhysActor != null && group.RootPart.PhysActor.IsPhysical) | ||
8834 | return; | ||
8835 | if (group.IsAttachment) | ||
8836 | return; | ||
8837 | |||
8838 | if (frames.Data.Length > 0) // We are getting a new motion | ||
8839 | ======= | ||
8840 | if (parts.Count > 0) | ||
8841 | >>>>>>> avn/ubitvar | ||
8842 | { | ||
8843 | foreach (object part in parts) | ||
8844 | { | ||
8845 | if (part is SceneObjectPart) | ||
8846 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8847 | else | ||
8848 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8849 | } | ||
8850 | |||
8851 | while ((object)remaining != null && remaining.Length > 2) | ||
8852 | { | ||
8853 | linknumber = remaining.GetLSLIntegerItem(0); | ||
8854 | rules = remaining.GetSublist(1, -1); | ||
8855 | parts.Clear(); | ||
8856 | prims = GetLinkParts(linknumber); | ||
8857 | avatars = GetLinkAvatars(linknumber); | ||
8858 | foreach (SceneObjectPart p in prims) | ||
8859 | parts.Add(p); | ||
8860 | foreach (ScenePresence p in avatars) | ||
8861 | parts.Add(p); | ||
8862 | |||
8863 | remaining = null; | ||
8864 | foreach (object part in parts) | ||
8865 | { | ||
8866 | if (part is SceneObjectPart) | ||
8867 | remaining = SetPrimParams((SceneObjectPart)part, rules, originFunc, ref rulesParsed); | ||
8868 | else | ||
8869 | remaining = SetPrimParams((ScenePresence)part, rules, originFunc, ref rulesParsed); | ||
8870 | } | ||
8871 | } | ||
8872 | } | ||
8873 | } | ||
8874 | 8595 | ||
8875 | public LSL_List llGetPhysicsMaterial() | 8596 | public LSL_List llGetPhysicsMaterial() |
8876 | { | 8597 | { |
@@ -8914,13 +8635,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8914 | SetPhysicsMaterial(m_host, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier); | 8635 | SetPhysicsMaterial(m_host, material_bits, material_density, material_friction, material_restitution, material_gravity_modifier); |
8915 | } | 8636 | } |
8916 | 8637 | ||
8917 | public void llSetLinkPrimitiveParams(int linknumber, LSL_List rules) | ||
8918 | { | ||
8919 | setLinkPrimParams(linknumber, rules, "llSetLinkPrimitiveParams"); | ||
8920 | llSetLinkPrimitiveParamsFast(linknumber, rules); | ||
8921 | ScriptSleep(200); | ||
8922 | } | ||
8923 | |||
8924 | // vector up using libomv (c&p from sop ) | 8638 | // vector up using libomv (c&p from sop ) |
8925 | // vector up rotated by r | 8639 | // vector up rotated by r |
8926 | private Vector3 Zrot(Quaternion r) | 8640 | private Vector3 Zrot(Quaternion r) |
@@ -8947,7 +8661,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8947 | protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed) | 8661 | protected LSL_List SetPrimParams(SceneObjectPart part, LSL_List rules, string originFunc, ref uint rulesParsed) |
8948 | { | 8662 | { |
8949 | if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) | 8663 | if (part == null || part.ParentGroup == null || part.ParentGroup.IsDeleted) |
8950 | return null; | 8664 | return new LSL_List(); |
8951 | 8665 | ||
8952 | int idx = 0; | 8666 | int idx = 0; |
8953 | int idxStart = 0; | 8667 | int idxStart = 0; |
@@ -8977,26 +8691,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
8977 | if (remain < 1) | 8691 | if (remain < 1) |
8978 | return new LSL_List(); | 8692 | return new LSL_List(); |
8979 | 8693 | ||
8980 | <<<<<<< HEAD | ||
8981 | try | ||
8982 | { | ||
8983 | v = rules.GetVector3Item(idx++); | ||
8984 | } | ||
8985 | catch(InvalidCastException) | ||
8986 | { | ||
8987 | if(code == ScriptBaseClass.PRIM_POSITION) | ||
8988 | Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POSITION: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); | ||
8989 | else | ||
8990 | Error(originFunc, string.Format("Error running rule #{0} -> PRIM_POS_LOCAL: arg #{1} - parameter 1 must be vector", rulesParsed, idx - idxStart - 1)); | ||
8991 | return new LSL_List(); | ||
8992 | } | ||
8993 | ======= | ||
8994 | v=rules.GetVector3Item(idx++); | 8694 | v=rules.GetVector3Item(idx++); |
8995 | if (part.IsRoot && !part.ParentGroup.IsAttachment) | 8695 | if (part.IsRoot && !part.ParentGroup.IsAttachment) |
8996 | currentPosition = GetSetPosTarget(part, v, currentPosition, true); | 8696 | currentPosition = GetSetPosTarget(part, v, currentPosition, true); |
8997 | else | 8697 | else |
8998 | currentPosition = GetSetPosTarget(part, v, currentPosition, false); | 8698 | currentPosition = GetSetPosTarget(part, v, currentPosition, false); |
8999 | >>>>>>> avn/ubitvar | ||
9000 | positionChanged = true; | 8699 | positionChanged = true; |
9001 | 8700 | ||
9002 | break; | 8701 | break; |
@@ -10023,12 +9722,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10023 | 9722 | ||
10024 | break; | 9723 | break; |
10025 | 9724 | ||
10026 | <<<<<<< HEAD | ||
10027 | case ScriptBaseClass.PRIM_TEMP_ON_REZ: | ||
10028 | ======= | ||
10029 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: | 9725 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: |
10030 | if (remain < 5) | 9726 | if (remain < 5) |
10031 | return null; | 9727 | return new LSL_List(); |
10032 | 9728 | ||
10033 | int material_bits = rules.GetLSLIntegerItem(idx++); | 9729 | int material_bits = rules.GetLSLIntegerItem(idx++); |
10034 | float material_density = (float)rules.GetLSLFloatItem(idx++); | 9730 | float material_density = (float)rules.GetLSLFloatItem(idx++); |
@@ -10041,7 +9737,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10041 | break; | 9737 | break; |
10042 | 9738 | ||
10043 | case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: | 9739 | case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: |
10044 | >>>>>>> avn/ubitvar | ||
10045 | if (remain < 1) | 9740 | if (remain < 1) |
10046 | return new LSL_List(); | 9741 | return new LSL_List(); |
10047 | string temp = rules.Data[idx++].ToString(); | 9742 | string temp = rules.Data[idx++].ToString(); |
@@ -10397,12 +10092,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10397 | 10092 | ||
10398 | public LSL_String llXorBase64Strings(string str1, string str2) | 10093 | public LSL_String llXorBase64Strings(string str1, string str2) |
10399 | { | 10094 | { |
10400 | <<<<<<< HEAD | ||
10401 | m_host.AddScriptLPS(1); | ||
10402 | Deprecated("llXorBase64Strings", "Use llXorBase64 instead"); | ||
10403 | ScriptSleep(m_sleepMsOnXorBase64Strings); | ||
10404 | return String.Empty; | ||
10405 | ======= | ||
10406 | int padding = 0; | 10095 | int padding = 0; |
10407 | 10096 | ||
10408 | string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | 10097 | string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
@@ -10501,7 +10190,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10501 | output += "="; | 10190 | output += "="; |
10502 | 10191 | ||
10503 | return output; | 10192 | return output; |
10504 | >>>>>>> avn/ubitvar | ||
10505 | } | 10193 | } |
10506 | 10194 | ||
10507 | public void llRemoteDataSetRegion() | 10195 | public void llRemoteDataSetRegion() |
@@ -10645,173 +10333,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10645 | public LSL_List llGetBoundingBox(string obj) | 10333 | public LSL_List llGetBoundingBox(string obj) |
10646 | { | 10334 | { |
10647 | m_host.AddScriptLPS(1); | 10335 | m_host.AddScriptLPS(1); |
10648 | |||
10649 | // Get target avatar if non-seated avatar or attachment, or prim and object | ||
10650 | UUID objID = UUID.Zero; | 10336 | UUID objID = UUID.Zero; |
10651 | UUID.TryParse(obj, out objID); | ||
10652 | ScenePresence agent = World.GetScenePresence(objID); | ||
10653 | if (agent != null) | ||
10654 | { | ||
10655 | if (agent.ParentPart != null) | ||
10656 | { | ||
10657 | objID = agent.ParentPart.UUID; | ||
10658 | agent = null; | ||
10659 | } | ||
10660 | } | ||
10661 | SceneObjectGroup group = null; | ||
10662 | SceneObjectPart target = World.GetSceneObjectPart(objID); | ||
10663 | if (target != null) | ||
10664 | { | ||
10665 | group = target.ParentGroup; | ||
10666 | if (group.IsAttachment) { | ||
10667 | objID = group.AttachedAvatar; | ||
10668 | agent = World.GetScenePresence(objID); | ||
10669 | group = null; | ||
10670 | target = null; | ||
10671 | } | ||
10672 | } | ||
10673 | |||
10674 | // Initialize but break if no target | ||
10675 | LSL_List result = new LSL_List(); | 10337 | LSL_List result = new LSL_List(); |
10676 | <<<<<<< HEAD | ||
10677 | int groupCount = 0; | ||
10678 | int partCount = 0; | ||
10679 | int vertexCount = 0; | ||
10680 | if (target == null && agent == null) | ||
10681 | ======= | ||
10682 | 10338 | ||
10683 | // If the ID is not valid, return null result | 10339 | // If the ID is not valid, return null result |
10684 | if (!UUID.TryParse(obj, out objID)) | 10340 | if (!UUID.TryParse(obj, out objID)) |
10685 | >>>>>>> avn/ubitvar | ||
10686 | { | 10341 | { |
10687 | result.Add(new LSL_Vector()); | 10342 | result.Add(new LSL_Vector()); |
10688 | result.Add(new LSL_Vector()); | 10343 | result.Add(new LSL_Vector()); |
10689 | if (m_addStatsInGetBoundingBox) | ||
10690 | result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); | ||
10691 | return result; | 10344 | return result; |
10692 | } | 10345 | } |
10693 | <<<<<<< HEAD | ||
10694 | Vector3 minPosition = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); | ||
10695 | Vector3 maxPosition = new Vector3(float.MinValue, float.MinValue, float.MinValue); | ||
10696 | |||
10697 | // Try to get a mesher | ||
10698 | IRendering primMesher = null; | ||
10699 | List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); | ||
10700 | if (renderers.Count > 0) | ||
10701 | primMesher = RenderingLoader.LoadRenderer(renderers[0]); | ||
10702 | |||
10703 | // Get bounding box of just avatar, seated or not | ||
10704 | if (agent != null) | ||
10705 | { | ||
10706 | bool hasParent = false; | ||
10707 | Vector3 lower; | ||
10708 | Vector3 upper; | ||
10709 | BoundingBoxOfScenePresence(agent, out lower, out upper); | ||
10710 | Vector3 offset = Vector3.Zero; | ||
10711 | |||
10712 | // Since local bounding box unrotated and untilted, keep it simple | ||
10713 | AddBoundingBoxOfSimpleBox(lower, upper, offset, agent.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10714 | partCount++; | ||
10715 | groupCount++; | ||
10716 | |||
10717 | // Return lower and upper bounding box corners | ||
10718 | result.Add(new LSL_Vector(minPosition)); | ||
10719 | result.Add(new LSL_Vector(maxPosition)); | ||
10720 | if (m_addStatsInGetBoundingBox) | ||
10721 | result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); | ||
10722 | return result; | ||
10723 | } | ||
10724 | // Get bounding box of object including seated avatars | ||
10725 | else if (group != null) | ||
10726 | { | ||
10727 | // Merge bounding boxes of all parts (prims and mesh) | ||
10728 | foreach (SceneObjectPart part in group.Parts) | ||
10729 | { | ||
10730 | bool hasParent = (!part.IsRoot); | ||
10731 | // When requested or if no mesher, keep it simple | ||
10732 | if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) | ||
10733 | { | ||
10734 | AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10735 | } | ||
10736 | // Do the full mounty | ||
10737 | else | ||
10738 | { | ||
10739 | Primitive omvPrim = part.Shape.ToOmvPrimitive(part.OffsetPosition, part.RotationOffset); | ||
10740 | byte[] sculptAsset = null; | ||
10741 | if (omvPrim.Sculpt != null) | ||
10742 | sculptAsset = World.AssetService.GetData(omvPrim.Sculpt.SculptTexture.ToString()); | ||
10743 | |||
10744 | // When part is mesh | ||
10745 | // Quirk: Only imports as incompletely populated faceted mesh object, so needs an own handler. | ||
10746 | if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type == SculptType.Mesh && sculptAsset != null) | ||
10747 | { | ||
10748 | AssetMesh meshAsset = new AssetMesh(omvPrim.Sculpt.SculptTexture, sculptAsset); | ||
10749 | FacetedMesh mesh = null; | ||
10750 | FacetedMesh.TryDecodeFromAsset(omvPrim, meshAsset, DetailLevel.Highest, out mesh); | ||
10751 | meshAsset = null; | ||
10752 | if (mesh != null) | ||
10753 | { | ||
10754 | AddBoundingBoxOfFacetedMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10755 | mesh = null; | ||
10756 | } | ||
10757 | } | ||
10758 | |||
10759 | // When part is sculpt | ||
10760 | // Quirk: Generated sculpt mesh is about 2.8% smaller in X and Y than visual sculpt. | ||
10761 | else if (omvPrim.Sculpt != null && omvPrim.Sculpt.Type != SculptType.Mesh && sculptAsset != null) | ||
10762 | { | ||
10763 | IJ2KDecoder imgDecoder = World.RequestModuleInterface<IJ2KDecoder>(); | ||
10764 | if (imgDecoder != null) | ||
10765 | { | ||
10766 | Image sculpt = imgDecoder.DecodeToImage(sculptAsset); | ||
10767 | if (sculpt != null) | ||
10768 | { | ||
10769 | SimpleMesh mesh = primMesher.GenerateSimpleSculptMesh(omvPrim, (Bitmap)sculpt, DetailLevel.Medium); | ||
10770 | sculpt.Dispose(); | ||
10771 | if (mesh != null) | ||
10772 | { | ||
10773 | AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10774 | mesh = null; | ||
10775 | } | ||
10776 | } | ||
10777 | } | ||
10778 | } | ||
10779 | |||
10780 | // When part is prim | ||
10781 | else if (omvPrim.Sculpt == null) | ||
10782 | { | ||
10783 | SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); | ||
10784 | if (mesh != null) | ||
10785 | { | ||
10786 | AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10787 | mesh = null; | ||
10788 | } | ||
10789 | } | ||
10790 | |||
10791 | // When all else fails, try fallback to simple box | ||
10792 | else | ||
10793 | { | ||
10794 | AddBoundingBoxOfSimpleBox(part.Scale * -0.5f, part.Scale * 0.5f, part.OffsetPosition, part.RotationOffset, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10795 | } | ||
10796 | } | ||
10797 | partCount++; | ||
10798 | } | ||
10799 | } | ||
10800 | |||
10801 | // Merge bounding boxes of seated avatars | ||
10802 | foreach (ScenePresence sp in group.GetSittingAvatars()) | ||
10803 | { | ||
10804 | Vector3 lower; | ||
10805 | Vector3 upper; | ||
10806 | BoundingBoxOfScenePresence(sp, out lower, out upper); | ||
10807 | Vector3 offset = sp.OffsetPosition; | ||
10808 | |||
10809 | bool hasParent = true; | ||
10810 | // When requested or if no mesher, keep it simple | ||
10811 | if (m_useSimpleBoxesInGetBoundingBox || primMesher == null) | ||
10812 | { | ||
10813 | AddBoundingBoxOfSimpleBox(lower, upper, offset, sp.Rotation, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10814 | ======= | ||
10815 | 10346 | ||
10816 | // Check if this is an attached prim. If so, replace | 10347 | // Check if this is an attached prim. If so, replace |
10817 | // the UUID with the avatar UUID and report it's bounding box | 10348 | // the UUID with the avatar UUID and report it's bounding box |
@@ -10855,68 +10386,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10855 | // This is for ground sitting avatars TODO! | 10386 | // This is for ground sitting avatars TODO! |
10856 | lower = new LSL_Vector(-box.X - 0.1125, -box.Y, box.Z * -1.0f); | 10387 | lower = new LSL_Vector(-box.X - 0.1125, -box.Y, box.Z * -1.0f); |
10857 | upper = new LSL_Vector(box.X + 0.1125, box.Y, box.Z * -1.0f); | 10388 | upper = new LSL_Vector(box.X + 0.1125, box.Y, box.Z * -1.0f); |
10858 | >>>>>>> avn/ubitvar | ||
10859 | } | 10389 | } |
10860 | // Do the full mounty | ||
10861 | else | 10390 | else |
10862 | { | 10391 | { |
10863 | <<<<<<< HEAD | ||
10864 | // Prim shapes don't do center offsets, so add it here. | ||
10865 | offset = offset + (lower + upper) * 0.5f * sp.Rotation; | ||
10866 | Primitive omvPrim = MakeOpenMetaversePrim(upper - lower, offset, sp.Rotation, ScriptBaseClass.PRIM_TYPE_SPHERE); | ||
10867 | SimpleMesh mesh = primMesher.GenerateSimpleMesh(omvPrim, DetailLevel.Medium); | ||
10868 | AddBoundingBoxOfSimpleMesh(mesh, omvPrim, hasParent, ref minPosition, ref maxPosition, ref vertexCount); | ||
10869 | mesh = null; | ||
10870 | } | ||
10871 | partCount++; | ||
10872 | } | ||
10873 | |||
10874 | groupCount++; | ||
10875 | |||
10876 | // Return lower and upper bounding box corners | ||
10877 | result.Add(new LSL_Vector(minPosition)); | ||
10878 | result.Add(new LSL_Vector(maxPosition)); | ||
10879 | if (m_addStatsInGetBoundingBox) | ||
10880 | result.Add(new LSL_Vector((float)groupCount, (float)partCount, (float)vertexCount)); | ||
10881 | |||
10882 | primMesher = null; | ||
10883 | return result; | ||
10884 | } | ||
10885 | |||
10886 | /// <summary> | ||
10887 | /// Helper to calculate bounding box of an avatar. | ||
10888 | /// </summary> | ||
10889 | private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper) | ||
10890 | { | ||
10891 | // Adjust from OS model | ||
10892 | // avatar height = visual height - 0.2, bounding box height = visual height | ||
10893 | // to SL model | ||
10894 | // avatar height = visual height, bounding box height = visual height + 0.2 | ||
10895 | float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection; | ||
10896 | |||
10897 | // According to avatar bounding box in SL 2015-04-18: | ||
10898 | // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h> | ||
10899 | // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5> | ||
10900 | // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h> | ||
10901 | |||
10902 | // When avatar is sitting | ||
10903 | if (sp.ParentPart != null) | ||
10904 | { | ||
10905 | lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height); | ||
10906 | upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height); | ||
10907 | } | ||
10908 | // When avatar is groundsitting | ||
10909 | else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) | ||
10910 | { | ||
10911 | lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height); | ||
10912 | upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height); | ||
10913 | } | ||
10914 | // When avatar is standing or flying | ||
10915 | else | ||
10916 | { | ||
10917 | lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height); | ||
10918 | upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height); | ||
10919 | ======= | ||
10920 | // This is for standing/flying avatars | 10392 | // This is for standing/flying avatars |
10921 | lower = new LSL_Vector(-box.X, -box.Y, -box.Z); | 10393 | lower = new LSL_Vector(-box.X, -box.Y, -box.Z); |
10922 | upper = new LSL_Vector(box.X, box.Y, box.Z); | 10394 | upper = new LSL_Vector(box.X, box.Y, box.Z); |
@@ -10974,230 +10446,22 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
10974 | result.Add(lower); | 10446 | result.Add(lower); |
10975 | result.Add(upper); | 10447 | result.Add(upper); |
10976 | return result; | 10448 | return result; |
10977 | >>>>>>> avn/ubitvar | ||
10978 | } | ||
10979 | } | ||
10980 | |||
10981 | /// <summary> | ||
10982 | /// Helper to approximate a part with a simple box. | ||
10983 | /// </summary> | ||
10984 | private void AddBoundingBoxOfSimpleBox(Vector3 corner1, Vector3 corner2, Vector3 offset, Quaternion rotation, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) | ||
10985 | { | ||
10986 | // Parse the 8 box corners | ||
10987 | for (int i = 0; i < 8; i++) | ||
10988 | { | ||
10989 | // Calculate each box corner | ||
10990 | Vector3 position = corner1; | ||
10991 | if ((i & 1) != 0) | ||
10992 | position.X = corner2.X; | ||
10993 | if ((i & 2) != 0) | ||
10994 | position.Y = corner2.Y; | ||
10995 | if ((i & 4) != 0) | ||
10996 | position.Z = corner2.Z; | ||
10997 | // Rotate part unless part is root | ||
10998 | if (hasParent) | ||
10999 | position = position * rotation; | ||
11000 | position = position + offset; | ||
11001 | // Adjust lower and upper bounding box corners if needed | ||
11002 | lower = Vector3.Min(lower, position); | ||
11003 | upper = Vector3.Max(upper, position); | ||
11004 | count++; | ||
11005 | } | ||
11006 | } | ||
11007 | |||
11008 | /// <summary> | ||
11009 | /// Helper to parse a meshed prim and needed especially | ||
11010 | /// for accuracy with tortured prims and sculpts. | ||
11011 | /// </summary> | ||
11012 | private void AddBoundingBoxOfSimpleMesh(SimpleMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) | ||
11013 | { | ||
11014 | // Quirk: A meshed box contains 10 instead of the 8 necessary vertices. | ||
11015 | if (mesh != null) | ||
11016 | { | ||
11017 | // Parse each vertex in mesh | ||
11018 | foreach (Vertex vertex in mesh.Vertices) | ||
11019 | { | ||
11020 | Vector3 position = vertex.Position; | ||
11021 | position = position * prim.Scale; | ||
11022 | // Rotate part unless part is root | ||
11023 | if (hasParent) | ||
11024 | position = position * prim.Rotation; | ||
11025 | position = position + prim.Position; | ||
11026 | // Adjust lower and upper bounding box corners if needed | ||
11027 | lower = Vector3.Min(lower, position); | ||
11028 | upper = Vector3.Max(upper, position); | ||
11029 | count++; | ||
11030 | } | ||
11031 | } | ||
11032 | } | ||
11033 | |||
11034 | /// <summary> | ||
11035 | /// Helper to parse mesh because no method exists | ||
11036 | /// to parse mesh assets to SimpleMesh. | ||
11037 | /// </summary> | ||
11038 | private void AddBoundingBoxOfFacetedMesh(FacetedMesh mesh, Primitive prim, bool hasParent, ref Vector3 lower, ref Vector3 upper, ref int count) | ||
11039 | { | ||
11040 | if (mesh != null) | ||
11041 | { | ||
11042 | // Parse each face in mesh | ||
11043 | // since vertex array isn't populated. | ||
11044 | // This parses each unique vertex 3-6 times. | ||
11045 | foreach (Face face in mesh.Faces) | ||
11046 | { | ||
11047 | // Parse each vertex in face | ||
11048 | foreach (Vertex vertex in face.Vertices) | ||
11049 | { | ||
11050 | Vector3 position = vertex.Position; | ||
11051 | position = position * prim.Scale; | ||
11052 | // Rotate part unless part is root | ||
11053 | if (hasParent) | ||
11054 | position = position * prim.Rotation; | ||
11055 | position = position + prim.Position; | ||
11056 | // Adjust lower and upper bounding box corners if needed | ||
11057 | lower = Vector3.Min(lower, position); | ||
11058 | upper = Vector3.Max(upper, position); | ||
11059 | count++; | ||
11060 | } | ||
11061 | } | ||
11062 | } | 10449 | } |
11063 | } | ||
11064 | 10450 | ||
11065 | /// <summary> | 10451 | // Not found so return empty values |
11066 | /// Helper to make up an OpenMetaverse prim | 10452 | result.Add(new LSL_Vector()); |
11067 | /// needed to create mesh from parts. | 10453 | result.Add(new LSL_Vector()); |
11068 | /// </summary> | 10454 | return result; |
11069 | private Primitive MakeOpenMetaversePrim(Vector3 scale, Vector3 position, Quaternion rotation, int primType) | ||
11070 | { | ||
11071 | // Initialize and set common parameters | ||
11072 | Primitive prim = new OpenMetaverse.Primitive(); | ||
11073 | prim.Scale = scale; | ||
11074 | prim.Position = position; | ||
11075 | prim.Rotation = rotation; | ||
11076 | prim.PrimData.PathShearX = 0.0f; | ||
11077 | prim.PrimData.PathShearY = 0.0f; | ||
11078 | prim.PrimData.PathBegin = 0.0f; | ||
11079 | prim.PrimData.PathEnd = 1.0f; | ||
11080 | prim.PrimData.PathScaleX = 1.0f; | ||
11081 | prim.PrimData.PathScaleY = 1.0f; | ||
11082 | prim.PrimData.PathTaperX = 0.0f; | ||
11083 | prim.PrimData.PathTaperY = 0.0f; | ||
11084 | prim.PrimData.PathTwistBegin = 0.0f; | ||
11085 | prim.PrimData.PathTwist = 0.0f; | ||
11086 | prim.PrimData.ProfileBegin = 0.0f; | ||
11087 | prim.PrimData.ProfileEnd = 1.0f; | ||
11088 | prim.PrimData.ProfileHollow = 0.0f; | ||
11089 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11090 | prim.PrimData.ProfileHole = (HoleType)0; | ||
11091 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11092 | prim.PrimData.PathRadiusOffset = 0.0f; | ||
11093 | prim.PrimData.PathRevolutions = 1.0f; | ||
11094 | prim.PrimData.PathSkew = 0.0f; | ||
11095 | prim.PrimData.PCode = OpenMetaverse.PCode.Prim; | ||
11096 | prim.PrimData.State = (byte)0; | ||
11097 | |||
11098 | // Set type specific parameters | ||
11099 | switch (primType) | ||
11100 | { | ||
11101 | // Set specific parameters for box | ||
11102 | case ScriptBaseClass.PRIM_TYPE_BOX: | ||
11103 | prim.PrimData.PathScaleY = 1.0f; | ||
11104 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11105 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11106 | break; | ||
11107 | // Set specific parameters for cylinder | ||
11108 | case ScriptBaseClass.PRIM_TYPE_CYLINDER: | ||
11109 | prim.PrimData.PathScaleY = 1.0f; | ||
11110 | prim.PrimData.ProfileCurve = (ProfileCurve)0; | ||
11111 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11112 | break; | ||
11113 | // Set specific parameters for prism | ||
11114 | case ScriptBaseClass.PRIM_TYPE_PRISM: | ||
11115 | prim.PrimData.PathScaleY = 1.0f; | ||
11116 | prim.PrimData.ProfileCurve = (ProfileCurve)3; | ||
11117 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11118 | break; | ||
11119 | // Set specific parameters for sphere | ||
11120 | case ScriptBaseClass.PRIM_TYPE_SPHERE: | ||
11121 | prim.PrimData.PathScaleY = 1.0f; | ||
11122 | prim.PrimData.ProfileCurve = (ProfileCurve)5; | ||
11123 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11124 | break; | ||
11125 | // Set specific parameters for torus | ||
11126 | case ScriptBaseClass.PRIM_TYPE_TORUS: | ||
11127 | prim.PrimData.PathScaleY = 0.5f; | ||
11128 | prim.PrimData.ProfileCurve = (ProfileCurve)0; | ||
11129 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11130 | break; | ||
11131 | // Set specific parameters for tube | ||
11132 | case ScriptBaseClass.PRIM_TYPE_TUBE: | ||
11133 | prim.PrimData.PathScaleY = 0.5f; | ||
11134 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11135 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11136 | break; | ||
11137 | // Set specific parameters for ring | ||
11138 | case ScriptBaseClass.PRIM_TYPE_RING: | ||
11139 | prim.PrimData.PathScaleY = 0.5f; | ||
11140 | prim.PrimData.ProfileCurve = (ProfileCurve)3; | ||
11141 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11142 | break; | ||
11143 | // Set specific parameters for sculpt | ||
11144 | case ScriptBaseClass.PRIM_TYPE_SCULPT: | ||
11145 | prim.PrimData.PathScaleY = 1.0f; | ||
11146 | prim.PrimData.ProfileCurve = (ProfileCurve)5; | ||
11147 | prim.PrimData.PathCurve = (PathCurve)32; | ||
11148 | break; | ||
11149 | // Default to specific parameters for box | ||
11150 | default: | ||
11151 | prim.PrimData.PathScaleY = 1.0f; | ||
11152 | prim.PrimData.ProfileCurve = (ProfileCurve)1; | ||
11153 | prim.PrimData.PathCurve = (PathCurve)16; | ||
11154 | break; | ||
11155 | } | ||
11156 | |||
11157 | return prim; | ||
11158 | } | 10455 | } |
11159 | 10456 | ||
11160 | /// <summary> | ||
11161 | /// Implementation of llGetGeometricCenter according to SL 2015-04-30. | ||
11162 | /// http://wiki.secondlife.com/wiki/LlGetGeometricCenter | ||
11163 | /// Returns the average position offset of all linked parts, | ||
11164 | /// including the root prim and seated avatars, | ||
11165 | /// relative to the root prim in local coordinates. | ||
11166 | /// </summary> | ||
11167 | public LSL_Vector llGetGeometricCenter() | 10457 | public LSL_Vector llGetGeometricCenter() |
11168 | { | 10458 | { |
11169 | // Subtract whatever position the root prim has to make it zero | 10459 | return new LSL_Vector(m_host.GetGeometricCenter()); |
11170 | Vector3 offset = m_host.ParentGroup.RootPart.OffsetPosition * -1.0f; | ||
11171 | |||
11172 | // Add all prim/part position offsets | ||
11173 | foreach (SceneObjectPart part in m_host.ParentGroup.Parts) | ||
11174 | offset = offset + part.OffsetPosition; | ||
11175 | // Add all avatar/scene presence position offsets | ||
11176 | foreach (ScenePresence sp in m_host.ParentGroup.GetSittingAvatars()) | ||
11177 | offset = offset + sp.OffsetPosition; | ||
11178 | |||
11179 | // Calculate and return the average offset | ||
11180 | offset = offset / (float)(m_host.ParentGroup.PrimCount + m_host.ParentGroup.GetSittingAvatarsCount()); | ||
11181 | return new LSL_Vector(offset); | ||
11182 | } | 10460 | } |
11183 | 10461 | ||
11184 | public LSL_List llGetPrimitiveParams(LSL_List rules) | 10462 | public LSL_List llGetPrimitiveParams(LSL_List rules) |
11185 | { | 10463 | { |
11186 | <<<<<<< HEAD | ||
11187 | LSL_List result = new LSL_List(); | ||
11188 | LSL_List remaining; | ||
11189 | |||
11190 | while (true) | ||
11191 | { | ||
11192 | // m_log.DebugFormat( | ||
11193 | // "[LSL API]: GetEntityParams has {0} rules with scene entity named {1}", | ||
11194 | // rules.Length, entity != null ? entity.Name : "NULL"); | ||
11195 | |||
11196 | if (entity == null) | ||
11197 | return result; | ||
11198 | ======= | ||
11199 | m_host.AddScriptLPS(1); | 10464 | m_host.AddScriptLPS(1); |
11200 | >>>>>>> avn/ubitvar | ||
11201 | 10465 | ||
11202 | LSL_List result = new LSL_List(); | 10466 | LSL_List result = new LSL_List(); |
11203 | 10467 | ||
@@ -11207,13 +10471,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11207 | { | 10471 | { |
11208 | int linknumber = remaining.GetLSLIntegerItem(0); | 10472 | int linknumber = remaining.GetLSLIntegerItem(0); |
11209 | rules = remaining.GetSublist(1, -1); | 10473 | rules = remaining.GetSublist(1, -1); |
11210 | <<<<<<< HEAD | ||
11211 | entity = GetLinkEntity(m_host, linknumber); | ||
11212 | } | ||
11213 | } | ||
11214 | ======= | ||
11215 | List<SceneObjectPart> parts = GetLinkParts(linknumber); | 10474 | List<SceneObjectPart> parts = GetLinkParts(linknumber); |
11216 | >>>>>>> avn/ubitvar | ||
11217 | 10475 | ||
11218 | foreach (SceneObjectPart part in parts) | 10476 | foreach (SceneObjectPart part in parts) |
11219 | remaining = GetPrimParams(part, rules, ref result); | 10477 | remaining = GetPrimParams(part, rules, ref result); |
@@ -11226,185 +10484,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11226 | { | 10484 | { |
11227 | m_host.AddScriptLPS(1); | 10485 | m_host.AddScriptLPS(1); |
11228 | 10486 | ||
11229 | <<<<<<< HEAD | ||
11230 | return GetEntityParams(GetLinkEntity(m_host, linknumber), rules); | ||
11231 | } | ||
11232 | ======= | ||
11233 | // acording to SL wiki this must indicate a single link number or link_root or link_this. | 10487 | // acording to SL wiki this must indicate a single link number or link_root or link_this. |
11234 | // keep other options as before | 10488 | // keep other options as before |
11235 | >>>>>>> avn/ubitvar | ||
11236 | 10489 | ||
11237 | List<SceneObjectPart> parts; | 10490 | List<SceneObjectPart> parts; |
11238 | List<ScenePresence> avatars; | 10491 | List<ScenePresence> avatars; |
11239 | 10492 | ||
11240 | LSL_List res = new LSL_List(); | 10493 | LSL_List res = new LSL_List(); |
11241 | LSL_List remaining = null; | 10494 | LSL_List remaining = new LSL_List(); |
11242 | 10495 | ||
11243 | while (rules.Length > 0) | 10496 | while (rules.Length > 0) |
11244 | { | 10497 | { |
11245 | parts = GetLinkParts(linknumber); | 10498 | parts = GetLinkParts(linknumber); |
11246 | avatars = GetLinkAvatars(linknumber); | 10499 | avatars = GetLinkAvatars(linknumber); |
11247 | 10500 | ||
11248 | remaining = null; | 10501 | remaining = new LSL_List(); |
11249 | foreach (SceneObjectPart part in parts) | 10502 | foreach (SceneObjectPart part in parts) |
11250 | { | 10503 | { |
11251 | <<<<<<< HEAD | ||
11252 | case (int)ScriptBaseClass.PRIM_MATERIAL: | ||
11253 | res.Add(new LSL_Integer(ScriptBaseClass.PRIM_MATERIAL_FLESH)); | ||
11254 | break; | ||
11255 | |||
11256 | case (int)ScriptBaseClass.PRIM_PHYSICS: | ||
11257 | res.Add(ScriptBaseClass.FALSE); | ||
11258 | break; | ||
11259 | |||
11260 | case (int)ScriptBaseClass.PRIM_TEMP_ON_REZ: | ||
11261 | res.Add(ScriptBaseClass.FALSE); | ||
11262 | break; | ||
11263 | |||
11264 | case (int)ScriptBaseClass.PRIM_PHANTOM: | ||
11265 | res.Add(ScriptBaseClass.FALSE); | ||
11266 | break; | ||
11267 | |||
11268 | case (int)ScriptBaseClass.PRIM_POSITION: | ||
11269 | res.Add(new LSL_Vector(sp.AbsolutePosition)); | ||
11270 | break; | ||
11271 | |||
11272 | case (int)ScriptBaseClass.PRIM_SIZE: | ||
11273 | res.Add(GetAgentSize(sp)); | ||
11274 | break; | ||
11275 | |||
11276 | case (int)ScriptBaseClass.PRIM_ROTATION: | ||
11277 | res.Add(sp.GetWorldRotation()); | ||
11278 | break; | ||
11279 | |||
11280 | case (int)ScriptBaseClass.PRIM_TYPE: | ||
11281 | res.Add(new LSL_Integer(ScriptBaseClass.PRIM_TYPE_BOX)); | ||
11282 | res.Add(new LSL_Integer(ScriptBaseClass.PRIM_HOLE_DEFAULT)); | ||
11283 | res.Add(new LSL_Vector(0, 1, 0)); | ||
11284 | res.Add(new LSL_Float(0)); | ||
11285 | res.Add(new LSL_Vector(0, 0, 0)); | ||
11286 | res.Add(new LSL_Vector(1, 1, 0)); | ||
11287 | res.Add(new LSL_Vector(0, 0, 0)); | ||
11288 | break; | ||
11289 | |||
11290 | case (int)ScriptBaseClass.PRIM_TEXTURE: | ||
11291 | if (remain < 1) | ||
11292 | return new LSL_List(); | ||
11293 | |||
11294 | int face = (int)rules.GetLSLIntegerItem(idx++); | ||
11295 | if (face > 21) | ||
11296 | break; | ||
11297 | |||
11298 | res.Add(new LSL_String("")); | ||
11299 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11300 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11301 | res.Add(new LSL_Float(0)); | ||
11302 | break; | ||
11303 | |||
11304 | case (int)ScriptBaseClass.PRIM_COLOR: | ||
11305 | if (remain < 1) | ||
11306 | return new LSL_List(); | ||
11307 | |||
11308 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11309 | if (face > 21) | ||
11310 | break; | ||
11311 | |||
11312 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11313 | res.Add(new LSL_Float(0)); | ||
11314 | break; | ||
11315 | |||
11316 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | ||
11317 | if (remain < 1) | ||
11318 | return new LSL_List(); | ||
11319 | |||
11320 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11321 | if (face > 21) | ||
11322 | break; | ||
11323 | |||
11324 | res.Add(ScriptBaseClass.PRIM_SHINY_NONE); | ||
11325 | res.Add(ScriptBaseClass.PRIM_BUMP_NONE); | ||
11326 | break; | ||
11327 | |||
11328 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | ||
11329 | if (remain < 1) | ||
11330 | return new LSL_List(); | ||
11331 | |||
11332 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11333 | if (face > 21) | ||
11334 | break; | ||
11335 | |||
11336 | res.Add(ScriptBaseClass.FALSE); | ||
11337 | break; | ||
11338 | |||
11339 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: | ||
11340 | res.Add(ScriptBaseClass.FALSE); | ||
11341 | res.Add(new LSL_Integer(0)); | ||
11342 | res.Add(new LSL_Float(0)); | ||
11343 | res.Add(new LSL_Float(0)); | ||
11344 | res.Add(new LSL_Float(0)); | ||
11345 | res.Add(new LSL_Float(0)); | ||
11346 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11347 | break; | ||
11348 | |||
11349 | case (int)ScriptBaseClass.PRIM_TEXGEN: | ||
11350 | if (remain < 1) | ||
11351 | return new LSL_List(); | ||
11352 | |||
11353 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11354 | if (face > 21) | ||
11355 | break; | ||
11356 | |||
11357 | res.Add(ScriptBaseClass.PRIM_TEXGEN_DEFAULT); | ||
11358 | break; | ||
11359 | |||
11360 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: | ||
11361 | res.Add(ScriptBaseClass.FALSE); | ||
11362 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11363 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11364 | break; | ||
11365 | |||
11366 | case (int)ScriptBaseClass.PRIM_GLOW: | ||
11367 | if (remain < 1) | ||
11368 | return new LSL_List(); | ||
11369 | |||
11370 | face = (int)rules.GetLSLIntegerItem(idx++); | ||
11371 | if (face > 21) | ||
11372 | break; | ||
11373 | |||
11374 | res.Add(new LSL_Float(0)); | ||
11375 | break; | ||
11376 | |||
11377 | case (int)ScriptBaseClass.PRIM_TEXT: | ||
11378 | res.Add(new LSL_String("")); | ||
11379 | res.Add(ScriptBaseClass.ZERO_VECTOR); | ||
11380 | res.Add(new LSL_Float(1)); | ||
11381 | break; | ||
11382 | |||
11383 | case (int)ScriptBaseClass.PRIM_ROT_LOCAL: | ||
11384 | res.Add(new LSL_Rotation(sp.Rotation)); | ||
11385 | break; | ||
11386 | |||
11387 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: | ||
11388 | res.Add(new LSL_Vector(sp.OffsetPosition)); | ||
11389 | break; | ||
11390 | |||
11391 | case (int)ScriptBaseClass.PRIM_SLICE: | ||
11392 | res.Add(new LSL_Vector(0, 1, 0)); | ||
11393 | break; | ||
11394 | |||
11395 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: | ||
11396 | if(remain < 3) | ||
11397 | return new LSL_List(); | ||
11398 | ======= | ||
11399 | remaining = GetPrimParams(part, rules, ref res); | 10504 | remaining = GetPrimParams(part, rules, ref res); |
11400 | } | 10505 | } |
11401 | foreach (ScenePresence avatar in avatars) | 10506 | foreach (ScenePresence avatar in avatars) |
11402 | { | 10507 | { |
11403 | remaining = GetPrimParams(avatar, rules, ref res); | 10508 | remaining = GetPrimParams(avatar, rules, ref res); |
11404 | } | 10509 | } |
11405 | >>>>>>> avn/ubitvar | ||
11406 | 10510 | ||
11407 | if ((object)remaining != null && remaining.Length > 0) | 10511 | if (remaining.Length > 0) |
11408 | { | 10512 | { |
11409 | linknumber = remaining.GetLSLIntegerItem(0); | 10513 | linknumber = remaining.GetLSLIntegerItem(0); |
11410 | rules = remaining.GetSublist(1, -1); | 10514 | rules = remaining.GetSublist(1, -1); |
@@ -11413,16 +10517,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11413 | break; | 10517 | break; |
11414 | } | 10518 | } |
11415 | 10519 | ||
11416 | <<<<<<< HEAD | ||
11417 | return new LSL_List(); | ||
11418 | ======= | ||
11419 | return res; | 10520 | return res; |
11420 | >>>>>>> avn/ubitvar | ||
11421 | } | 10521 | } |
11422 | 10522 | ||
11423 | public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) | 10523 | public LSL_List GetPrimParams(SceneObjectPart part, LSL_List rules, ref LSL_List res) |
11424 | { | 10524 | { |
11425 | int idx=0; | 10525 | int idx = 0; |
11426 | while (idx < rules.Length) | 10526 | while (idx < rules.Length) |
11427 | { | 10527 | { |
11428 | int code = (int)rules.GetLSLIntegerItem(idx++); | 10528 | int code = (int)rules.GetLSLIntegerItem(idx++); |
@@ -11470,10 +10570,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11470 | res.Add(GetPartRot(part)); | 10570 | res.Add(GetPartRot(part)); |
11471 | break; | 10571 | break; |
11472 | 10572 | ||
11473 | case (int)ScriptBaseClass.PRIM_PHYSICS_SHAPE_TYPE: | ||
11474 | res.Add(new LSL_Integer((int)part.PhysicsShapeType)); | ||
11475 | break; | ||
11476 | |||
11477 | case (int)ScriptBaseClass.PRIM_TYPE: | 10573 | case (int)ScriptBaseClass.PRIM_TYPE: |
11478 | // implementing box | 10574 | // implementing box |
11479 | PrimitiveBaseShape Shape = part.Shape; | 10575 | PrimitiveBaseShape Shape = part.Shape; |
@@ -11567,7 +10663,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11567 | Primitive.TextureEntry tex = part.Shape.Textures; | 10663 | Primitive.TextureEntry tex = part.Shape.Textures; |
11568 | if (face == ScriptBaseClass.ALL_SIDES) | 10664 | if (face == ScriptBaseClass.ALL_SIDES) |
11569 | { | 10665 | { |
11570 | for (face = 0 ; face < GetNumberOfSides(part); face++) | 10666 | for (face = 0; face < GetNumberOfSides(part); face++) |
11571 | { | 10667 | { |
11572 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); | 10668 | Primitive.TextureEntryFace texface = tex.GetFace((uint)face); |
11573 | 10669 | ||
@@ -11603,13 +10699,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11603 | if (remain < 1) | 10699 | if (remain < 1) |
11604 | return new LSL_List(); | 10700 | return new LSL_List(); |
11605 | 10701 | ||
11606 | face=(int)rules.GetLSLIntegerItem(idx++); | 10702 | face = (int)rules.GetLSLIntegerItem(idx++); |
11607 | 10703 | ||
11608 | tex = part.Shape.Textures; | 10704 | tex = part.Shape.Textures; |
11609 | Color4 texcolor; | 10705 | Color4 texcolor; |
11610 | if (face == ScriptBaseClass.ALL_SIDES) | 10706 | if (face == ScriptBaseClass.ALL_SIDES) |
11611 | { | 10707 | { |
11612 | for (face = 0 ; face < GetNumberOfSides(part); face++) | 10708 | for (face = 0; face < GetNumberOfSides(part); face++) |
11613 | { | 10709 | { |
11614 | texcolor = tex.GetFace((uint)face).RGBA; | 10710 | texcolor = tex.GetFace((uint)face).RGBA; |
11615 | res.Add(new LSL_Vector(texcolor.R, | 10711 | res.Add(new LSL_Vector(texcolor.R, |
@@ -11666,7 +10762,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11666 | Shininess shinyness = tex.GetFace((uint)face).Shiny; | 10762 | Shininess shinyness = tex.GetFace((uint)face).Shiny; |
11667 | if (shinyness == Shininess.High) | 10763 | if (shinyness == Shininess.High) |
11668 | { | 10764 | { |
11669 | shiny = ScriptBaseClass.PRIM_SHINY_HIGH; | 10765 | shiny = ScriptBaseClass.PRIM_SHINY_HIGH; |
11670 | } | 10766 | } |
11671 | else if (shinyness == Shininess.Medium) | 10767 | else if (shinyness == Shininess.Medium) |
11672 | { | 10768 | { |
@@ -11818,7 +10914,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11818 | res.Add(new LSL_Vector(textColor.R, | 10914 | res.Add(new LSL_Vector(textColor.R, |
11819 | textColor.G, | 10915 | textColor.G, |
11820 | textColor.B)); | 10916 | textColor.B)); |
11821 | res.Add(new LSL_Float(1.0 - textColor.A)); | 10917 | res.Add(new LSL_Float(textColor.A)); |
11822 | break; | 10918 | break; |
11823 | 10919 | ||
11824 | case (int)ScriptBaseClass.PRIM_NAME: | 10920 | case (int)ScriptBaseClass.PRIM_NAME: |
@@ -11857,6 +10953,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11857 | return new LSL_List(); | 10953 | return new LSL_List(); |
11858 | } | 10954 | } |
11859 | 10955 | ||
10956 | |||
11860 | public LSL_List llGetPrimMediaParams(int face, LSL_List rules) | 10957 | public LSL_List llGetPrimMediaParams(int face, LSL_List rules) |
11861 | { | 10958 | { |
11862 | m_host.AddScriptLPS(1); | 10959 | m_host.AddScriptLPS(1); |
@@ -13316,16 +12413,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13316 | 12413 | ||
13317 | if (quick_pay_buttons.Data.Length < 4) | 12414 | if (quick_pay_buttons.Data.Length < 4) |
13318 | { | 12415 | { |
13319 | <<<<<<< HEAD | ||
13320 | Error("llSetPayPrice", "List must have at least 4 elements"); | ||
13321 | return; | ||
13322 | ======= | ||
13323 | int x; | 12416 | int x; |
13324 | for (x=quick_pay_buttons.Data.Length; x<= 4; x++) | 12417 | for (x=quick_pay_buttons.Data.Length; x<= 4; x++) |
13325 | { | 12418 | { |
13326 | quick_pay_buttons.Add(ScriptBaseClass.PAY_HIDE); | 12419 | quick_pay_buttons.Add(ScriptBaseClass.PAY_HIDE); |
13327 | } | 12420 | } |
13328 | >>>>>>> avn/ubitvar | ||
13329 | } | 12421 | } |
13330 | int[] nPrice = new int[5]; | 12422 | int[] nPrice = new int[5]; |
13331 | nPrice[0] = price; | 12423 | nPrice[0] = price; |
@@ -13447,12 +12539,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13447 | avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, | 12539 | avatar.ControllingClient.SendScriptTeleportRequest(m_host.Name, |
13448 | simname, pos, lookAt); | 12540 | simname, pos, lookAt); |
13449 | } | 12541 | } |
13450 | <<<<<<< HEAD | ||
13451 | ScriptSleep(m_sleepMsOnMapDestination); | 12542 | ScriptSleep(m_sleepMsOnMapDestination); |
13452 | ======= | ||
13453 | |||
13454 | ScriptSleep(1000); | ||
13455 | >>>>>>> avn/ubitvar | ||
13456 | } | 12543 | } |
13457 | 12544 | ||
13458 | public void llAddToLandBanList(string avatar, double hours) | 12545 | public void llAddToLandBanList(string avatar, double hours) |
@@ -13577,7 +12664,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13577 | object[] data = rules.Data; | 12664 | object[] data = rules.Data; |
13578 | for (int i = 0; i < data.Length; ++i) | 12665 | for (int i = 0; i < data.Length; ++i) |
13579 | { | 12666 | { |
13580 | <<<<<<< HEAD | ||
13581 | int type; | 12667 | int type; |
13582 | try | 12668 | try |
13583 | { | 12669 | { |
@@ -13588,9 +12674,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
13588 | Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1])); | 12674 | Error("llSetCameraParams", string.Format("Invalid camera param type {0}", data[i - 1])); |
13589 | return; | 12675 | return; |
13590 | } | 12676 | } |
13591 | ======= | ||
13592 | int type = Convert.ToInt32(data[i++].ToString()); | ||
13593 | >>>>>>> avn/ubitvar | ||
13594 | if (i >= data.Length) break; // odd number of entries => ignore the last | 12677 | if (i >= data.Length) break; // odd number of entries => ignore the last |
13595 | 12678 | ||
13596 | // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) | 12679 | // some special cases: Vector parameters are split into 3 float parameters (with type+1, type+2, type+3) |
@@ -14242,12 +13325,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
14242 | ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W)); | 13325 | ret.Add(new LSL_Rotation((double)avrot.X, (double)avrot.Y, (double)avrot.Z, (double)avrot.W)); |
14243 | break; | 13326 | break; |
14244 | case ScriptBaseClass.OBJECT_VELOCITY: | 13327 | case ScriptBaseClass.OBJECT_VELOCITY: |
14245 | <<<<<<< HEAD | 13328 | Vector3 avvel = av.GetWorldVelocity(); |
14246 | ret.Add(new LSL_Vector(av.GetWorldVelocity())); | ||
14247 | ======= | ||
14248 | Vector3 avvel = av.Velocity; | ||
14249 | ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); | 13329 | ret.Add(new LSL_Vector((double)avvel.X, (double)avvel.Y, (double)avvel.Z)); |
14250 | >>>>>>> avn/ubitvar | ||
14251 | break; | 13330 | break; |
14252 | case ScriptBaseClass.OBJECT_OWNER: | 13331 | case ScriptBaseClass.OBJECT_OWNER: |
14253 | ret.Add(new LSL_String(id)); | 13332 | ret.Add(new LSL_String(id)); |
@@ -14724,12 +13803,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
14724 | 13803 | ||
14725 | public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) | 13804 | public LSL_List GetPrimitiveParamsEx(LSL_Key prim, LSL_List rules) |
14726 | { | 13805 | { |
14727 | SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); | 13806 | SceneObjectPart obj = World.GetSceneObjectPart(new UUID(prim)); |
13807 | |||
13808 | LSL_List result = new LSL_List(); | ||
14728 | 13809 | ||
14729 | if (obj != null && obj.OwnerID == m_host.OwnerID) | 13810 | if (obj != null && obj.OwnerID == m_host.OwnerID) |
14730 | return GetEntityParams(obj, rules); | 13811 | { |
13812 | LSL_List remaining = GetPrimParams(obj, rules, ref result); | ||
14731 | 13813 | ||
14732 | return new LSL_List(); | 13814 | while (remaining.Length > 2) |
13815 | { | ||
13816 | int linknumber = remaining.GetLSLIntegerItem(0); | ||
13817 | rules = remaining.GetSublist(1, -1); | ||
13818 | List<SceneObjectPart> parts = GetLinkParts(linknumber); | ||
13819 | |||
13820 | foreach (SceneObjectPart part in parts) | ||
13821 | remaining = GetPrimParams(part, rules, ref result); | ||
13822 | } | ||
13823 | } | ||
13824 | |||
13825 | return result; | ||
14733 | } | 13826 | } |
14734 | 13827 | ||
14735 | public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) | 13828 | public LSL_Integer llGetLinkNumberOfSides(LSL_Integer link) |
@@ -15303,6 +14396,43 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
15303 | } | 14396 | } |
15304 | 14397 | ||
15305 | /// <summary> | 14398 | /// <summary> |
14399 | /// Helper to calculate bounding box of an avatar. | ||
14400 | /// </summary> | ||
14401 | private void BoundingBoxOfScenePresence(ScenePresence sp, out Vector3 lower, out Vector3 upper) | ||
14402 | { | ||
14403 | // Adjust from OS model | ||
14404 | // avatar height = visual height - 0.2, bounding box height = visual height | ||
14405 | // to SL model | ||
14406 | // avatar height = visual height, bounding box height = visual height + 0.2 | ||
14407 | float height = sp.Appearance.AvatarHeight + m_avatarHeightCorrection; | ||
14408 | |||
14409 | // According to avatar bounding box in SL 2015-04-18: | ||
14410 | // standing = <-0.275,-0.35,-0.1-0.5*h> : <0.275,0.35,0.1+0.5*h> | ||
14411 | // groundsitting = <-0.3875,-0.5,-0.05-0.375*h> : <0.3875,0.5,0.5> | ||
14412 | // sitting = <-0.5875,-0.35,-0.35-0.375*h> : <0.1875,0.35,-0.25+0.25*h> | ||
14413 | |||
14414 | // When avatar is sitting | ||
14415 | if (sp.ParentPart != null) | ||
14416 | { | ||
14417 | lower = new Vector3(m_lABB1SitX0, m_lABB1SitY0, m_lABB1SitZ0 + m_lABB1SitZ1 * height); | ||
14418 | upper = new Vector3(m_lABB2SitX0, m_lABB2SitY0, m_lABB2SitZ0 + m_lABB2SitZ1 * height); | ||
14419 | } | ||
14420 | // When avatar is groundsitting | ||
14421 | else if (sp.Animator.Animations.ImplicitDefaultAnimation.AnimID == DefaultAvatarAnimations.AnimsUUID["SIT_GROUND_CONSTRAINED"]) | ||
14422 | { | ||
14423 | lower = new Vector3(m_lABB1GrsX0, m_lABB1GrsY0, m_lABB1GrsZ0 + m_lABB1GrsZ1 * height); | ||
14424 | upper = new Vector3(m_lABB2GrsX0, m_lABB2GrsY0, m_lABB2GrsZ0 + m_lABB2GrsZ1 * height); | ||
14425 | } | ||
14426 | // When avatar is standing or flying | ||
14427 | else | ||
14428 | { | ||
14429 | lower = new Vector3(m_lABB1StdX0, m_lABB1StdY0, m_lABB1StdZ0 + m_lABB1StdZ1 * height); | ||
14430 | upper = new Vector3(m_lABB2StdX0, m_lABB2StdY0, m_lABB2StdZ0 + m_lABB2StdZ1 * height); | ||
14431 | } | ||
14432 | } | ||
14433 | |||
14434 | |||
14435 | /// <summary> | ||
15306 | /// Implementation of llCastRay similar to SL 2015-04-21. | 14436 | /// Implementation of llCastRay similar to SL 2015-04-21. |
15307 | /// http://wiki.secondlife.com/wiki/LlCastRay | 14437 | /// http://wiki.secondlife.com/wiki/LlCastRay |
15308 | /// Uses pure geometry, bounding shapes, meshing and no physics | 14438 | /// Uses pure geometry, bounding shapes, meshing and no physics |
@@ -16589,7 +15719,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16589 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: | 15719 | case (int)ScriptBaseClass.PRIM_POS_LOCAL: |
16590 | { | 15720 | { |
16591 | if (remain < 1) | 15721 | if (remain < 1) |
16592 | return null; | 15722 | return new LSL_List(); |
16593 | 15723 | ||
16594 | LSL_Vector v; | 15724 | LSL_Vector v; |
16595 | v = rules.GetVector3Item(idx++); | 15725 | v = rules.GetVector3Item(idx++); |
@@ -16608,7 +15738,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16608 | case (int)ScriptBaseClass.PRIM_ROTATION: | 15738 | case (int)ScriptBaseClass.PRIM_ROTATION: |
16609 | { | 15739 | { |
16610 | if (remain < 1) | 15740 | if (remain < 1) |
16611 | return null; | 15741 | return new LSL_List(); |
16612 | 15742 | ||
16613 | LSL_Rotation r; | 15743 | LSL_Rotation r; |
16614 | r = rules.GetQuaternionItem(idx++); | 15744 | r = rules.GetQuaternionItem(idx++); |
@@ -16628,7 +15758,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16628 | case (int)ScriptBaseClass.PRIM_NAME: | 15758 | case (int)ScriptBaseClass.PRIM_NAME: |
16629 | case (int)ScriptBaseClass.PRIM_DESC: | 15759 | case (int)ScriptBaseClass.PRIM_DESC: |
16630 | if (remain < 1) | 15760 | if (remain < 1) |
16631 | return null; | 15761 | return new LSL_List(); |
16632 | idx++; | 15762 | idx++; |
16633 | break; | 15763 | break; |
16634 | 15764 | ||
@@ -16636,13 +15766,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16636 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | 15766 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: |
16637 | case (int)ScriptBaseClass.PRIM_TEXGEN: | 15767 | case (int)ScriptBaseClass.PRIM_TEXGEN: |
16638 | if (remain < 2) | 15768 | if (remain < 2) |
16639 | return null; | 15769 | return new LSL_List(); |
16640 | idx += 2; | 15770 | idx += 2; |
16641 | break; | 15771 | break; |
16642 | 15772 | ||
16643 | case (int)ScriptBaseClass.PRIM_TYPE: | 15773 | case (int)ScriptBaseClass.PRIM_TYPE: |
16644 | if (remain < 3) | 15774 | if (remain < 3) |
16645 | return null; | 15775 | return new LSL_List(); |
16646 | code = (int)rules.GetLSLIntegerItem(idx++); | 15776 | code = (int)rules.GetLSLIntegerItem(idx++); |
16647 | remain = rules.Length - idx; | 15777 | remain = rules.Length - idx; |
16648 | switch (code) | 15778 | switch (code) |
@@ -16651,13 +15781,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16651 | case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: | 15781 | case (int)ScriptBaseClass.PRIM_TYPE_CYLINDER: |
16652 | case (int)ScriptBaseClass.PRIM_TYPE_PRISM: | 15782 | case (int)ScriptBaseClass.PRIM_TYPE_PRISM: |
16653 | if (remain < 6) | 15783 | if (remain < 6) |
16654 | return null; | 15784 | return new LSL_List(); |
16655 | idx += 6; | 15785 | idx += 6; |
16656 | break; | 15786 | break; |
16657 | 15787 | ||
16658 | case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: | 15788 | case (int)ScriptBaseClass.PRIM_TYPE_SPHERE: |
16659 | if (remain < 5) | 15789 | if (remain < 5) |
16660 | return null; | 15790 | return new LSL_List(); |
16661 | idx += 5; | 15791 | idx += 5; |
16662 | break; | 15792 | break; |
16663 | 15793 | ||
@@ -16665,13 +15795,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16665 | case (int)ScriptBaseClass.PRIM_TYPE_TUBE: | 15795 | case (int)ScriptBaseClass.PRIM_TYPE_TUBE: |
16666 | case (int)ScriptBaseClass.PRIM_TYPE_RING: | 15796 | case (int)ScriptBaseClass.PRIM_TYPE_RING: |
16667 | if (remain < 11) | 15797 | if (remain < 11) |
16668 | return null; | 15798 | return new LSL_List(); |
16669 | idx += 11; | 15799 | idx += 11; |
16670 | break; | 15800 | break; |
16671 | 15801 | ||
16672 | case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: | 15802 | case (int)ScriptBaseClass.PRIM_TYPE_SCULPT: |
16673 | if (remain < 2) | 15803 | if (remain < 2) |
16674 | return null; | 15804 | return new LSL_List(); |
16675 | idx += 2; | 15805 | idx += 2; |
16676 | break; | 15806 | break; |
16677 | } | 15807 | } |
@@ -16682,7 +15812,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16682 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | 15812 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: |
16683 | case (int)ScriptBaseClass.PRIM_OMEGA: | 15813 | case (int)ScriptBaseClass.PRIM_OMEGA: |
16684 | if (remain < 3) | 15814 | if (remain < 3) |
16685 | return null; | 15815 | return new LSL_List(); |
16686 | idx += 3; | 15816 | idx += 3; |
16687 | break; | 15817 | break; |
16688 | 15818 | ||
@@ -16690,20 +15820,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16690 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: | 15820 | case (int)ScriptBaseClass.PRIM_POINT_LIGHT: |
16691 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: | 15821 | case (int)ScriptBaseClass.PRIM_PHYSICS_MATERIAL: |
16692 | if (remain < 5) | 15822 | if (remain < 5) |
16693 | return null; | 15823 | return new LSL_List(); |
16694 | idx += 5; | 15824 | idx += 5; |
16695 | break; | 15825 | break; |
16696 | 15826 | ||
16697 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: | 15827 | case (int)ScriptBaseClass.PRIM_FLEXIBLE: |
16698 | if (remain < 7) | 15828 | if (remain < 7) |
16699 | return null; | 15829 | return new LSL_List(); |
16700 | 15830 | ||
16701 | idx += 7; | 15831 | idx += 7; |
16702 | break; | 15832 | break; |
16703 | 15833 | ||
16704 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: | 15834 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: |
16705 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. | 15835 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. |
16706 | return null; | 15836 | return new LSL_List(); |
16707 | 15837 | ||
16708 | return rules.GetSublist(idx, -1); | 15838 | return rules.GetSublist(idx, -1); |
16709 | } | 15839 | } |
@@ -16711,9 +15841,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16711 | } | 15841 | } |
16712 | catch (InvalidCastException e) | 15842 | catch (InvalidCastException e) |
16713 | { | 15843 | { |
16714 | ShoutError(string.Format( | 15844 | Error(originFunc,string.Format( |
16715 | "{0} error running rule #{1}: arg #{2} ", | 15845 | " error running rule #{1}: arg #{2} ", |
16716 | originFunc, rulesParsed, idx - idxStart) + e.Message); | 15846 | rulesParsed, idx - idxStart) + e.Message); |
16717 | } | 15847 | } |
16718 | finally | 15848 | finally |
16719 | { | 15849 | { |
@@ -16725,7 +15855,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16725 | positionChanged = false; | 15855 | positionChanged = false; |
16726 | } | 15856 | } |
16727 | } | 15857 | } |
16728 | return null; | 15858 | return new LSL_List(); |
16729 | } | 15859 | } |
16730 | 15860 | ||
16731 | public LSL_List GetPrimParams(ScenePresence avatar, LSL_List rules, ref LSL_List res) | 15861 | public LSL_List GetPrimParams(ScenePresence avatar, LSL_List rules, ref LSL_List res) |
@@ -16794,7 +15924,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16794 | 15924 | ||
16795 | case (int)ScriptBaseClass.PRIM_TEXTURE: | 15925 | case (int)ScriptBaseClass.PRIM_TEXTURE: |
16796 | if (remain < 1) | 15926 | if (remain < 1) |
16797 | return null; | 15927 | return new LSL_List(); |
16798 | 15928 | ||
16799 | int face = (int)rules.GetLSLIntegerItem(idx++); | 15929 | int face = (int)rules.GetLSLIntegerItem(idx++); |
16800 | if (face == ScriptBaseClass.ALL_SIDES) | 15930 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16821,7 +15951,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16821 | 15951 | ||
16822 | case (int)ScriptBaseClass.PRIM_COLOR: | 15952 | case (int)ScriptBaseClass.PRIM_COLOR: |
16823 | if (remain < 1) | 15953 | if (remain < 1) |
16824 | return null; | 15954 | return new LSL_List(); |
16825 | 15955 | ||
16826 | face = (int)rules.GetLSLIntegerItem(idx++); | 15956 | face = (int)rules.GetLSLIntegerItem(idx++); |
16827 | 15957 | ||
@@ -16842,7 +15972,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16842 | 15972 | ||
16843 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: | 15973 | case (int)ScriptBaseClass.PRIM_BUMP_SHINY: |
16844 | if (remain < 1) | 15974 | if (remain < 1) |
16845 | return null; | 15975 | return new LSL_List(); |
16846 | face = (int)rules.GetLSLIntegerItem(idx++); | 15976 | face = (int)rules.GetLSLIntegerItem(idx++); |
16847 | 15977 | ||
16848 | if (face == ScriptBaseClass.ALL_SIDES) | 15978 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16862,7 +15992,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16862 | 15992 | ||
16863 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: | 15993 | case (int)ScriptBaseClass.PRIM_FULLBRIGHT: |
16864 | if (remain < 1) | 15994 | if (remain < 1) |
16865 | return null; | 15995 | return new LSL_List(); |
16866 | face = (int)rules.GetLSLIntegerItem(idx++); | 15996 | face = (int)rules.GetLSLIntegerItem(idx++); |
16867 | 15997 | ||
16868 | if (face == ScriptBaseClass.ALL_SIDES) | 15998 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16891,7 +16021,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16891 | case (int)ScriptBaseClass.PRIM_TEXGEN: | 16021 | case (int)ScriptBaseClass.PRIM_TEXGEN: |
16892 | // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR) | 16022 | // (PRIM_TEXGEN_DEFAULT, PRIM_TEXGEN_PLANAR) |
16893 | if (remain < 1) | 16023 | if (remain < 1) |
16894 | return null; | 16024 | return new LSL_List(); |
16895 | face = (int)rules.GetLSLIntegerItem(idx++); | 16025 | face = (int)rules.GetLSLIntegerItem(idx++); |
16896 | 16026 | ||
16897 | if (face == ScriptBaseClass.ALL_SIDES) | 16027 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16917,7 +16047,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16917 | 16047 | ||
16918 | case (int)ScriptBaseClass.PRIM_GLOW: | 16048 | case (int)ScriptBaseClass.PRIM_GLOW: |
16919 | if (remain < 1) | 16049 | if (remain < 1) |
16920 | return null; | 16050 | return new LSL_List(); |
16921 | face = (int)rules.GetLSLIntegerItem(idx++); | 16051 | face = (int)rules.GetLSLIntegerItem(idx++); |
16922 | 16052 | ||
16923 | if (face == ScriptBaseClass.ALL_SIDES) | 16053 | if (face == ScriptBaseClass.ALL_SIDES) |
@@ -16971,13 +16101,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
16971 | 16101 | ||
16972 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: | 16102 | case (int)ScriptBaseClass.PRIM_LINK_TARGET: |
16973 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. | 16103 | if (remain < 3) // setting to 3 on the basis that parsing any usage of PRIM_LINK_TARGET that has nothing following it is pointless. |
16974 | return null; | 16104 | return new LSL_List(); |
16975 | 16105 | ||
16976 | return rules.GetSublist(idx, -1); | 16106 | return rules.GetSublist(idx, -1); |
16977 | } | 16107 | } |
16978 | } | 16108 | } |
16979 | 16109 | ||
16980 | return null; | 16110 | return new LSL_List(); |
16981 | } | 16111 | } |
16982 | 16112 | ||
16983 | public void llSetContentType(LSL_Key id, LSL_Integer content_type) | 16113 | public void llSetContentType(LSL_Key id, LSL_Integer content_type) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 5d8f0f6..a87ee73 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs | |||
@@ -829,10 +829,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
829 | private void TeleportAgent(string agent, int regionX, int regionY, | 829 | private void TeleportAgent(string agent, int regionX, int regionY, |
830 | LSL_Types.Vector3 position, LSL_Types.Vector3 lookat, bool relaxRestrictions) | 830 | LSL_Types.Vector3 position, LSL_Types.Vector3 lookat, bool relaxRestrictions) |
831 | { | 831 | { |
832 | <<<<<<< HEAD | ||
833 | // ulong regionHandle = Util.UIntsToLong(((uint)regionX * (uint)Constants.RegionSize), ((uint)regionY * (uint)Constants.RegionSize)); | ||
834 | ======= | ||
835 | >>>>>>> avn/ubitvar | ||
836 | ulong regionHandle = Util.RegionLocToHandle((uint)regionX, (uint)regionY); | 832 | ulong regionHandle = Util.RegionLocToHandle((uint)regionX, (uint)regionY); |
837 | 833 | ||
838 | m_host.AddScriptLPS(1); | 834 | m_host.AddScriptLPS(1); |
@@ -3265,15 +3261,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
3265 | } | 3261 | } |
3266 | else | 3262 | else |
3267 | { | 3263 | { |
3268 | <<<<<<< HEAD | ||
3269 | Scene scene = m_ScriptEngine.World; | 3264 | Scene scene = m_ScriptEngine.World; |
3270 | GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID); | 3265 | GridRegion region = scene.GridService.GetRegionByUUID(UUID.Zero, World.RegionInfo.RegionID); |
3271 | return new LSL_Vector((float)region.RegionSizeX, (float)region.RegionSizeX, Constants.RegionHeight); | 3266 | return new LSL_Vector(region.RegionSizeX, region.RegionSizeY, Constants.RegionHeight); |
3272 | ======= | ||
3273 | return new LSL_Vector((float)World.RegionInfo.RegionSizeX, | ||
3274 | (float)World.RegionInfo.RegionSizeY, | ||
3275 | (float)World.RegionInfo.RegionSizeZ ); | ||
3276 | >>>>>>> avn/ubitvar | ||
3277 | } | 3267 | } |
3278 | } | 3268 | } |
3279 | 3269 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs index 5fdbf9d..6e8a96d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/OSSL_Stub.cs | |||
@@ -739,11 +739,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
739 | if (Position.y > ((int)Constants.RegionSize - 1)) | 739 | if (Position.y > ((int)Constants.RegionSize - 1)) |
740 | Position.y = ((int)Constants.RegionSize - 1); | 740 | Position.y = ((int)Constants.RegionSize - 1); |
741 | */ | 741 | */ |
742 | <<<<<<< HEAD | ||
743 | if (Position.z > Constants.RegionHeight) | 742 | if (Position.z > Constants.RegionHeight) |
744 | Position.z = Constants.RegionHeight; | 743 | Position.z = Constants.RegionHeight; |
745 | ======= | ||
746 | >>>>>>> avn/ubitvar | ||
747 | if (Position.x < 0) | 744 | if (Position.x < 0) |
748 | Position.x = 0; | 745 | Position.x = 0; |
749 | if (Position.y < 0) | 746 | if (Position.y < 0) |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 49df5e7..2633f30 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -654,7 +654,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
654 | if (state == State) | 654 | if (state == State) |
655 | return; | 655 | return; |
656 | 656 | ||
657 | <<<<<<< HEAD | ||
658 | EventParams lastTimerEv = null; | 657 | EventParams lastTimerEv = null; |
659 | 658 | ||
660 | lock (EventQueue) | 659 | lock (EventQueue) |
@@ -682,15 +681,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
682 | m_StateChangeInProgress = true; | 681 | m_StateChangeInProgress = true; |
683 | } | 682 | } |
684 | 683 | ||
685 | ======= | ||
686 | PostEvent(new EventParams("state_exit", new Object[0], | ||
687 | new DetectParams[0])); | ||
688 | PostEvent(new EventParams("state", new Object[] { state }, | ||
689 | new DetectParams[0])); | ||
690 | PostEvent(new EventParams("state_entry", new Object[0], | ||
691 | new DetectParams[0])); | ||
692 | |||
693 | >>>>>>> avn/ubitvar | ||
694 | throw new EventAbortException(); | 684 | throw new EventAbortException(); |
695 | } | 685 | } |
696 | 686 | ||
@@ -789,9 +779,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
789 | if (!Running) | 779 | if (!Running) |
790 | return 0; | 780 | return 0; |
791 | 781 | ||
782 | lock (m_Script) | ||
783 | { | ||
792 | // m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName); | 784 | // m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName); |
793 | 785 | ||
794 | <<<<<<< HEAD | ||
795 | if (Suspended) | 786 | if (Suspended) |
796 | return 0; | 787 | return 0; |
797 | 788 | ||
@@ -817,14 +808,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
817 | lock (EventQueue) | 808 | lock (EventQueue) |
818 | { | 809 | { |
819 | data = (EventParams)EventQueue.Dequeue(); | 810 | data = (EventParams)EventQueue.Dequeue(); |
820 | ======= | ||
821 | if (Suspended) | ||
822 | return 0; | ||
823 | |||
824 | lock (EventQueue) | ||
825 | { | ||
826 | data = (EventParams) EventQueue.Dequeue(); | ||
827 | >>>>>>> avn/ubitvar | ||
828 | if (data == null) // Shouldn't happen | 811 | if (data == null) // Shouldn't happen |
829 | { | 812 | { |
830 | if (EventQueue.Count > 0 && Running && !ShuttingDown) | 813 | if (EventQueue.Count > 0 && Running && !ShuttingDown) |
@@ -849,7 +832,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
849 | m_CollisionInQueue = false; | 832 | m_CollisionInQueue = false; |
850 | } | 833 | } |
851 | 834 | ||
852 | <<<<<<< HEAD | ||
853 | if (DebugLevel >= 2) | 835 | if (DebugLevel >= 2) |
854 | m_log.DebugFormat( | 836 | m_log.DebugFormat( |
855 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | 837 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", |
@@ -879,26 +861,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
879 | Part.ParentGroup.UUID, | 861 | Part.ParentGroup.UUID, |
880 | Part.AbsolutePosition, | 862 | Part.AbsolutePosition, |
881 | Part.ParentGroup.Scene.Name); | 863 | Part.ParentGroup.Scene.Name); |
882 | ======= | ||
883 | lock(m_Script) | ||
884 | { | ||
885 | |||
886 | // m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this); | ||
887 | SceneObjectPart part = Engine.World.GetSceneObjectPart(LocalID); | ||
888 | |||
889 | if (DebugLevel >= 2) | ||
890 | m_log.DebugFormat( | ||
891 | "[SCRIPT INSTANCE]: Processing event {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | ||
892 | data.EventName, | ||
893 | ScriptName, | ||
894 | part.Name, | ||
895 | part.LocalId, | ||
896 | part.ParentGroup.Name, | ||
897 | part.ParentGroup.UUID, | ||
898 | part.AbsolutePosition, | ||
899 | part.ParentGroup.Scene.Name); | ||
900 | >>>>>>> avn/ubitvar | ||
901 | |||
902 | AsyncCommandManager.StateChange(Engine, | 864 | AsyncCommandManager.StateChange(Engine, |
903 | LocalID, ItemID); | 865 | LocalID, ItemID); |
904 | // we are effectively in the new state now, so we can resume queueing | 866 | // we are effectively in the new state now, so we can resume queueing |
@@ -915,35 +877,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
915 | // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", | 877 | // m_log.DebugFormat("[Script] Delivered event {2} in state {3} to {0}.{1}", |
916 | // PrimName, ScriptName, data.EventName, State); | 878 | // PrimName, ScriptName, data.EventName, State); |
917 | 879 | ||
918 | <<<<<<< HEAD | 880 | |
919 | try | 881 | try |
920 | ======= | ||
921 | if (DebugLevel >= 1) | ||
922 | m_log.DebugFormat( | ||
923 | "[SCRIPT INSTANCE]: Changing state to {0} for {1}/{2}({3})/{4}({5}) @ {6}/{7}", | ||
924 | State, | ||
925 | ScriptName, | ||
926 | part.Name, | ||
927 | part.LocalId, | ||
928 | part.ParentGroup.Name, | ||
929 | part.ParentGroup.UUID, | ||
930 | part.AbsolutePosition, | ||
931 | part.ParentGroup.Scene.Name); | ||
932 | |||
933 | AsyncCommandManager.RemoveScript(Engine, | ||
934 | LocalID, ItemID); | ||
935 | |||
936 | if (part != null) | ||
937 | { | ||
938 | part.SetScriptEvents(ItemID, | ||
939 | (int)m_Script.GetStateEventFlags(State)); | ||
940 | } | ||
941 | } | ||
942 | else | ||
943 | { | ||
944 | if (Engine.World.PipeEventsForScript(LocalID) || | ||
945 | data.EventName == "control") // Don't freeze avies! | ||
946 | >>>>>>> avn/ubitvar | ||
947 | { | 882 | { |
948 | m_CurrentEvent = data.EventName; | 883 | m_CurrentEvent = data.EventName; |
949 | m_EventStart = DateTime.Now; | 884 | m_EventStart = DateTime.Now; |
@@ -981,7 +916,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
981 | && !(e.InnerException is ScriptCoopStopException))) | 916 | && !(e.InnerException is ScriptCoopStopException))) |
982 | && !(e is ThreadAbortException)) | 917 | && !(e is ThreadAbortException)) |
983 | { | 918 | { |
984 | <<<<<<< HEAD | ||
985 | try | 919 | try |
986 | { | 920 | { |
987 | // DISPLAY ERROR INWORLD | 921 | // DISPLAY ERROR INWORLD |
@@ -1004,88 +938,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
1004 | Part.AbsolutePosition, | 938 | Part.AbsolutePosition, |
1005 | Part.ParentGroup.Scene.Name), | 939 | Part.ParentGroup.Scene.Name), |
1006 | e); | 940 | e); |
1007 | ======= | ||
1008 | // m_log.DebugFormat( | ||
1009 | // "[SCRIPT] Exception in script {0} {1}: {2}{3}", | ||
1010 | // ScriptName, ItemID, e.Message, e.StackTrace); | ||
1011 | |||
1012 | m_InEvent = false; | ||
1013 | m_CurrentEvent = String.Empty; | ||
1014 | |||
1015 | if ((!(e is TargetInvocationException) | ||
1016 | || (!(e.InnerException is SelfDeleteException) | ||
1017 | && !(e.InnerException is ScriptDeleteException) | ||
1018 | && !(e.InnerException is ScriptCoopStopException))) | ||
1019 | && !(e is ThreadAbortException)) | ||
1020 | { | ||
1021 | try | ||
1022 | { | ||
1023 | // DISPLAY ERROR INWORLD | ||
1024 | string text = FormatException(e); | ||
1025 | |||
1026 | if (text.Length > 1000) | ||
1027 | text = text.Substring(0, 1000); | ||
1028 | Engine.World.SimChat(Utils.StringToBytes(text), | ||
1029 | ChatTypeEnum.DebugChannel, 2147483647, | ||
1030 | part.AbsolutePosition, | ||
1031 | part.Name, part.UUID, false); | ||
1032 | |||
1033 | |||
1034 | m_log.DebugFormat( | ||
1035 | "[SCRIPT INSTANCE]: Runtime error in script {0}, part {1} {2} at {3} in {4}, displayed error {5}, actual exception {6}", | ||
1036 | ScriptName, | ||
1037 | PrimName, | ||
1038 | part.UUID, | ||
1039 | part.AbsolutePosition, | ||
1040 | part.ParentGroup.Scene.Name, | ||
1041 | text.Replace("\n", "\\n"), | ||
1042 | e.InnerException); | ||
1043 | } | ||
1044 | catch (Exception) | ||
1045 | { | ||
1046 | } | ||
1047 | // catch (Exception e2) // LEGIT: User Scripting | ||
1048 | // { | ||
1049 | // m_log.Error("[SCRIPT]: "+ | ||
1050 | // "Error displaying error in-world: " + | ||
1051 | // e2.ToString()); | ||
1052 | // m_log.Error("[SCRIPT]: " + | ||
1053 | // "Errormessage: Error compiling script:\r\n" + | ||
1054 | // e.ToString()); | ||
1055 | // } | ||
1056 | } | ||
1057 | else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) | ||
1058 | { | ||
1059 | m_InSelfDelete = true; | ||
1060 | if (part != null) | ||
1061 | Engine.World.DeleteSceneObject(part.ParentGroup, false); | ||
1062 | >>>>>>> avn/ubitvar | ||
1063 | } | 941 | } |
1064 | catch (Exception) | 942 | catch (Exception) |
1065 | { | 943 | { |
1066 | <<<<<<< HEAD | ||
1067 | ======= | ||
1068 | m_InSelfDelete = true; | ||
1069 | if (part != null) | ||
1070 | part.Inventory.RemoveInventoryItem(ItemID); | ||
1071 | } | ||
1072 | else if ((e is TargetInvocationException) && (e.InnerException is ScriptCoopStopException)) | ||
1073 | { | ||
1074 | if (DebugLevel >= 1) | ||
1075 | m_log.DebugFormat( | ||
1076 | "[SCRIPT INSTANCE]: Script {0}.{1} in event {2}, state {3} stopped co-operatively.", | ||
1077 | PrimName, ScriptName, data.EventName, State); | ||
1078 | >>>>>>> avn/ubitvar | ||
1079 | } | 944 | } |
1080 | // catch (Exception e2) // LEGIT: User Scripting | ||
1081 | // { | ||
1082 | // m_log.Error("[SCRIPT]: "+ | ||
1083 | // "Error displaying error in-world: " + | ||
1084 | // e2.ToString()); | ||
1085 | // m_log.Error("[SCRIPT]: " + | ||
1086 | // "Errormessage: Error compiling script:\r\n" + | ||
1087 | // e.ToString()); | ||
1088 | // } | ||
1089 | } | 945 | } |
1090 | else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) | 946 | else if ((e is TargetInvocationException) && (e.InnerException is SelfDeleteException)) |
1091 | { | 947 | { |
diff --git a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs index 885559a..5fce15c 100644 --- a/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs +++ b/OpenSim/Region/ScriptEngine/Shared/LSL_Types.cs | |||
@@ -102,31 +102,19 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
102 | 102 | ||
103 | public override string ToString() | 103 | public override string ToString() |
104 | { | 104 | { |
105 | <<<<<<< HEAD | ||
106 | string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", x, y, z); | ||
107 | ======= | ||
108 | string s = String.Format(Culture.FormatProvider, "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", x, y, z); | 105 | string s = String.Format(Culture.FormatProvider, "<{0:0.000000}, {1:0.000000}, {2:0.000000}>", x, y, z); |
109 | >>>>>>> avn/ubitvar | ||
110 | return s; | 106 | return s; |
111 | } | 107 | } |
112 | 108 | ||
113 | public static explicit operator LSLString(Vector3 vec) | 109 | public static explicit operator LSLString(Vector3 vec) |
114 | { | 110 | { |
115 | <<<<<<< HEAD | ||
116 | string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z); | ||
117 | ======= | ||
118 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); | 111 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); |
119 | >>>>>>> avn/ubitvar | ||
120 | return new LSLString(s); | 112 | return new LSLString(s); |
121 | } | 113 | } |
122 | 114 | ||
123 | public static explicit operator string(Vector3 vec) | 115 | public static explicit operator string(Vector3 vec) |
124 | { | 116 | { |
125 | <<<<<<< HEAD | ||
126 | string s=String.Format(Culture.FormatProvider,"<{0:0.000000},{1:0.000000},{2:0.000000}>", vec.x, vec.y, vec.z); | ||
127 | ======= | ||
128 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); | 117 | string s = String.Format("<{0:0.000000}, {1:0.000000}, {2:0.000000}>", vec.x, vec.y, vec.z); |
129 | >>>>>>> avn/ubitvar | ||
130 | return s; | 118 | return s; |
131 | } | 119 | } |
132 | 120 | ||
@@ -727,17 +715,10 @@ namespace OpenSim.Region.ScriptEngine.Shared | |||
727 | private void ExtendAndAdd(object o) | 715 | private void ExtendAndAdd(object o) |
728 | { | 716 | { |
729 | object[] tmp; | 717 | object[] tmp; |
730 | <<<<<<< HEAD | ||
731 | tmp = new object[Data.Length + 1]; | 718 | tmp = new object[Data.Length + 1]; |
732 | Data.CopyTo(tmp, 0); | 719 | Data.CopyTo(tmp, 0); |
733 | tmp.SetValue(o, tmp.Length - 1); | 720 | tmp.SetValue(o, tmp.Length - 1); |
734 | Data = tmp; | 721 | Data = tmp; |
735 | ======= | ||
736 | tmp = new object[m_data.Length + 1]; | ||
737 | m_data.CopyTo(tmp, 0); | ||
738 | tmp.SetValue(o, tmp.Length - 1); | ||
739 | m_data = tmp; | ||
740 | >>>>>>> avn/ubitvar | ||
741 | } | 722 | } |
742 | 723 | ||
743 | public static list operator +(list a, LSLString s) | 724 | public static list operator +(list a, LSLString s) |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs index 2ef4058..07470d6 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/Tests/XEnginePersistenceTests.cs | |||
@@ -43,6 +43,7 @@ using OpenSim.Tests.Common; | |||
43 | 43 | ||
44 | namespace OpenSim.Region.ScriptEngine.Tests | 44 | namespace OpenSim.Region.ScriptEngine.Tests |
45 | { | 45 | { |
46 | /* | ||
46 | [TestFixture] | 47 | [TestFixture] |
47 | public class XEnginePersistenceTests : OpenSimTestCase | 48 | public class XEnginePersistenceTests : OpenSimTestCase |
48 | { | 49 | { |
@@ -149,4 +150,5 @@ namespace OpenSim.Region.ScriptEngine.Tests | |||
149 | scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); | 150 | scene.AttachmentsModule.DetachSingleAttachmentToInv(sp, rezzedSo); |
150 | } | 151 | } |
151 | } | 152 | } |
153 | */ | ||
152 | } \ No newline at end of file | 154 | } \ No newline at end of file |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 466c190..78d4ee9 100755 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -28,7 +28,6 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Diagnostics; //for [DebuggerNonUserCode] | ||
32 | using System.Globalization; | 31 | using System.Globalization; |
33 | using System.IO; | 32 | using System.IO; |
34 | using System.Linq; | 33 | using System.Linq; |
@@ -162,8 +161,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
162 | private Dictionary<UUID, IScriptInstance> m_Scripts = | 161 | private Dictionary<UUID, IScriptInstance> m_Scripts = |
163 | new Dictionary<UUID, IScriptInstance>(); | 162 | new Dictionary<UUID, IScriptInstance>(); |
164 | 163 | ||
165 | private OpenMetaverse.ReaderWriterLockSlim m_scriptsLock = new OpenMetaverse.ReaderWriterLockSlim(); | ||
166 | |||
167 | // Maps the asset ID to the assembly | 164 | // Maps the asset ID to the assembly |
168 | 165 | ||
169 | private Dictionary<UUID, string> m_Assemblies = | 166 | private Dictionary<UUID, string> m_Assemblies = |
@@ -186,71 +183,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
186 | IWorkItemResult m_CurrentCompile = null; | 183 | IWorkItemResult m_CurrentCompile = null; |
187 | private Dictionary<UUID, int> m_CompileDict = new Dictionary<UUID, int>(); | 184 | private Dictionary<UUID, int> m_CompileDict = new Dictionary<UUID, int>(); |
188 | 185 | ||
189 | private void lockScriptsForRead(bool locked) | ||
190 | { | ||
191 | if (locked) | ||
192 | { | ||
193 | if (m_scriptsLock.RecursiveReadCount > 0) | ||
194 | { | ||
195 | m_log.Error("[XEngine.m_Scripts] Recursive read lock requested. This should not happen and means something needs to be fixed. For now though, it's safe to continue."); | ||
196 | m_scriptsLock.ExitReadLock(); | ||
197 | } | ||
198 | if (m_scriptsLock.RecursiveWriteCount > 0) | ||
199 | { | ||
200 | m_log.Error("[XEngine.m_Scripts] Recursive write lock requested. This should not happen and means something needs to be fixed."); | ||
201 | m_scriptsLock.ExitWriteLock(); | ||
202 | } | ||
203 | |||
204 | while (!m_scriptsLock.TryEnterReadLock(60000)) | ||
205 | { | ||
206 | m_log.Error("[XEngine.m_Scripts] Thread lock detected while trying to aquire READ lock of m_scripts in XEngine. I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed."); | ||
207 | if (m_scriptsLock.IsWriteLockHeld) | ||
208 | { | ||
209 | m_scriptsLock = new OpenMetaverse.ReaderWriterLockSlim(); | ||
210 | } | ||
211 | } | ||
212 | } | ||
213 | else | ||
214 | { | ||
215 | if (m_scriptsLock.RecursiveReadCount > 0) | ||
216 | { | ||
217 | m_scriptsLock.ExitReadLock(); | ||
218 | } | ||
219 | } | ||
220 | } | ||
221 | private void lockScriptsForWrite(bool locked) | ||
222 | { | ||
223 | if (locked) | ||
224 | { | ||
225 | if (m_scriptsLock.RecursiveReadCount > 0) | ||
226 | { | ||
227 | m_log.Error("[XEngine.m_Scripts] Recursive read lock requested. This should not happen and means something needs to be fixed. For now though, it's safe to continue."); | ||
228 | m_scriptsLock.ExitReadLock(); | ||
229 | } | ||
230 | if (m_scriptsLock.RecursiveWriteCount > 0) | ||
231 | { | ||
232 | m_log.Error("[XEngine.m_Scripts] Recursive write lock requested. This should not happen and means something needs to be fixed."); | ||
233 | m_scriptsLock.ExitWriteLock(); | ||
234 | } | ||
235 | |||
236 | while (!m_scriptsLock.TryEnterWriteLock(60000)) | ||
237 | { | ||
238 | m_log.Error("[XEngine.m_Scripts] Thread lock detected while trying to aquire WRITE lock of m_scripts in XEngine. I'm going to try to solve the thread lock automatically to preserve region stability, but this needs to be fixed."); | ||
239 | if (m_scriptsLock.IsWriteLockHeld) | ||
240 | { | ||
241 | m_scriptsLock = new OpenMetaverse.ReaderWriterLockSlim(); | ||
242 | } | ||
243 | } | ||
244 | } | ||
245 | else | ||
246 | { | ||
247 | if (m_scriptsLock.RecursiveWriteCount > 0) | ||
248 | { | ||
249 | m_scriptsLock.ExitWriteLock(); | ||
250 | } | ||
251 | } | ||
252 | } | ||
253 | |||
254 | private ScriptEngineConsoleCommands m_consoleCommands; | 186 | private ScriptEngineConsoleCommands m_consoleCommands; |
255 | 187 | ||
256 | public string ScriptEngineName | 188 | public string ScriptEngineName |
@@ -782,31 +714,20 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
782 | { | 714 | { |
783 | if (!m_Enabled) | 715 | if (!m_Enabled) |
784 | return; | 716 | return; |
785 | lockScriptsForRead(true); | ||
786 | |||
787 | List<IScriptInstance> instancesToDel = new List<IScriptInstance>(m_Scripts.Values); | ||
788 | 717 | ||
789 | // foreach (IScriptInstance instance in m_Scripts.Values) | 718 | lock (m_Scripts) |
790 | foreach (IScriptInstance instance in instancesToDel) | ||
791 | { | 719 | { |
792 | // Force a final state save | 720 | m_log.InfoFormat( |
793 | // | 721 | "[XEngine]: Shutting down {0} scripts in {1}", m_Scripts.Count, m_Scene.RegionInfo.RegionName); |
794 | if (m_Assemblies.ContainsKey(instance.AssetID)) | 722 | |
723 | foreach (IScriptInstance instance in m_Scripts.Values) | ||
795 | { | 724 | { |
796 | <<<<<<< HEAD | ||
797 | // Force a final state save | 725 | // Force a final state save |
798 | // | 726 | // |
799 | try | 727 | try |
800 | { | 728 | { |
801 | if (instance.StatePersistedHere) | 729 | if (instance.StatePersistedHere) |
802 | instance.SaveState(); | 730 | instance.SaveState(); |
803 | ======= | ||
804 | string assembly = m_Assemblies[instance.AssetID]; | ||
805 | |||
806 | try | ||
807 | { | ||
808 | instance.SaveState(assembly); | ||
809 | >>>>>>> avn/ubitvar | ||
810 | } | 731 | } |
811 | catch (Exception e) | 732 | catch (Exception e) |
812 | { | 733 | { |
@@ -816,50 +737,36 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
816 | instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, World.Name) | 737 | instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, World.Name) |
817 | , e); | 738 | , e); |
818 | } | 739 | } |
819 | } | ||
820 | 740 | ||
821 | <<<<<<< HEAD | ||
822 | // Clear the event queue and abort the instance thread | 741 | // Clear the event queue and abort the instance thread |
823 | // | 742 | // |
824 | instance.Stop(0, true); | 743 | instance.Stop(0, true); |
825 | ======= | ||
826 | // Clear the event queue and abort the instance thread | ||
827 | // | ||
828 | instance.ClearQueue(); | ||
829 | instance.Stop(0); | ||
830 | >>>>>>> avn/ubitvar | ||
831 | |||
832 | // Release events, timer, etc | ||
833 | // | ||
834 | instance.DestroyScriptInstance(); | ||
835 | 744 | ||
836 | // Unload scripts and app domains | 745 | // Release events, timer, etc |
837 | // Must be done explicitly because they have infinite | 746 | // |
838 | // lifetime | 747 | instance.DestroyScriptInstance(); |
839 | // | 748 | |
840 | // if (!m_SimulatorShuttingDown) | 749 | // Unload scripts and app domains. |
841 | { | 750 | // Must be done explicitly because they have infinite |
842 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); | 751 | // lifetime. |
843 | if (m_DomainScripts[instance.AppDomain].Count == 0) | 752 | // However, don't bother to do this if the simulator is shutting |
753 | // down since it takes a long time with many scripts. | ||
754 | if (!m_SimulatorShuttingDown) | ||
844 | { | 755 | { |
845 | m_DomainScripts.Remove(instance.AppDomain); | 756 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); |
846 | UnloadAppDomain(instance.AppDomain); | 757 | if (m_DomainScripts[instance.AppDomain].Count == 0) |
758 | { | ||
759 | m_DomainScripts.Remove(instance.AppDomain); | ||
760 | UnloadAppDomain(instance.AppDomain); | ||
761 | } | ||
847 | } | 762 | } |
848 | } | 763 | } |
849 | 764 | ||
850 | // m_Scripts.Clear(); | 765 | m_Scripts.Clear(); |
851 | // m_PrimObjects.Clear(); | 766 | m_PrimObjects.Clear(); |
852 | // m_Assemblies.Clear(); | 767 | m_Assemblies.Clear(); |
853 | // m_DomainScripts.Clear(); | 768 | m_DomainScripts.Clear(); |
854 | } | 769 | } |
855 | lockScriptsForRead(false); | ||
856 | lockScriptsForWrite(true); | ||
857 | m_Scripts.Clear(); | ||
858 | lockScriptsForWrite(false); | ||
859 | m_PrimObjects.Clear(); | ||
860 | m_Assemblies.Clear(); | ||
861 | m_DomainScripts.Clear(); | ||
862 | |||
863 | lock (m_ScriptEngines) | 770 | lock (m_ScriptEngines) |
864 | { | 771 | { |
865 | m_ScriptEngines.Remove(this); | 772 | m_ScriptEngines.Remove(this); |
@@ -928,7 +835,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
928 | 835 | ||
929 | List<IScriptInstance> instances = new List<IScriptInstance>(); | 836 | List<IScriptInstance> instances = new List<IScriptInstance>(); |
930 | 837 | ||
931 | <<<<<<< HEAD | ||
932 | lock (m_Scripts) | 838 | lock (m_Scripts) |
933 | { | 839 | { |
934 | foreach (IScriptInstance instance in m_Scripts.Values) | 840 | foreach (IScriptInstance instance in m_Scripts.Values) |
@@ -946,23 +852,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
946 | 852 | ||
947 | foreach (IScriptInstance i in instances) | 853 | foreach (IScriptInstance i in instances) |
948 | { | 854 | { |
949 | ======= | ||
950 | lockScriptsForRead(true); | ||
951 | foreach (IScriptInstance instance in m_Scripts.Values) | ||
952 | instances.Add(instance); | ||
953 | lockScriptsForRead(false); | ||
954 | |||
955 | foreach (IScriptInstance i in instances) | ||
956 | { | ||
957 | string assembly = String.Empty; | ||
958 | |||
959 | |||
960 | if (!m_Assemblies.ContainsKey(i.AssetID)) | ||
961 | continue; | ||
962 | assembly = m_Assemblies[i.AssetID]; | ||
963 | |||
964 | |||
965 | >>>>>>> avn/ubitvar | ||
966 | try | 855 | try |
967 | { | 856 | { |
968 | i.SaveState(); | 857 | i.SaveState(); |
@@ -1393,79 +1282,58 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1393 | } | 1282 | } |
1394 | 1283 | ||
1395 | ScriptInstance instance = null; | 1284 | ScriptInstance instance = null; |
1396 | // Create the object record | 1285 | lock (m_Scripts) |
1397 | UUID appDomain = assetID; | ||
1398 | |||
1399 | |||
1400 | |||
1401 | lockScriptsForRead(true); | ||
1402 | if ((!m_Scripts.ContainsKey(itemID)) || | ||
1403 | (m_Scripts[itemID].AssetID != assetID)) | ||
1404 | { | 1286 | { |
1405 | lockScriptsForRead(false); | 1287 | // Create the object record |
1406 | instance = new ScriptInstance(this, part, | 1288 | if ((!m_Scripts.ContainsKey(itemID)) || |
1407 | item, | 1289 | (m_Scripts[itemID].AssetID != assetID)) |
1408 | startParam, postOnRez, | 1290 | { |
1409 | m_MaxScriptQueue); | 1291 | UUID appDomain = assetID; |
1410 | 1292 | ||
1411 | if (part.ParentGroup.IsAttachment) | 1293 | if (part.ParentGroup.IsAttachment) |
1412 | appDomain = part.ParentGroup.RootPart.UUID; | 1294 | appDomain = part.ParentGroup.RootPart.UUID; |
1413 | 1295 | ||
1414 | if (!m_AppDomains.ContainsKey(appDomain)) | 1296 | if (!m_AppDomains.ContainsKey(appDomain)) |
1415 | { | ||
1416 | try | ||
1417 | { | 1297 | { |
1418 | AppDomainSetup appSetup = new AppDomainSetup(); | 1298 | try |
1419 | appSetup.PrivateBinPath = Path.Combine( | 1299 | { |
1420 | m_ScriptEnginesPath, | 1300 | AppDomainSetup appSetup = new AppDomainSetup(); |
1421 | m_Scene.RegionInfo.RegionID.ToString()); | 1301 | appSetup.PrivateBinPath = Path.Combine( |
1302 | m_ScriptEnginesPath, | ||
1303 | m_Scene.RegionInfo.RegionID.ToString()); | ||
1422 | 1304 | ||
1423 | Evidence baseEvidence = AppDomain.CurrentDomain.Evidence; | 1305 | Evidence baseEvidence = AppDomain.CurrentDomain.Evidence; |
1424 | Evidence evidence = new Evidence(baseEvidence); | 1306 | Evidence evidence = new Evidence(baseEvidence); |
1425 | 1307 | ||
1426 | AppDomain sandbox; | 1308 | AppDomain sandbox; |
1427 | if (m_AppDomainLoading) | 1309 | if (m_AppDomainLoading) |
1428 | { | ||
1429 | sandbox = AppDomain.CreateDomain( | ||
1430 | m_Scene.RegionInfo.RegionID.ToString(), | ||
1431 | evidence, appSetup); | ||
1432 | if (m_AppDomains.ContainsKey(appDomain)) | ||
1433 | { | 1310 | { |
1434 | m_AppDomains[appDomain].AssemblyResolve += | 1311 | sandbox = AppDomain.CreateDomain( |
1312 | m_Scene.RegionInfo.RegionID.ToString(), | ||
1313 | evidence, appSetup); | ||
1314 | sandbox.AssemblyResolve += | ||
1435 | new ResolveEventHandler( | 1315 | new ResolveEventHandler( |
1436 | AssemblyResolver.OnAssemblyResolve); | 1316 | AssemblyResolver.OnAssemblyResolve); |
1437 | if (m_DomainScripts.ContainsKey(appDomain)) | ||
1438 | { | ||
1439 | m_DomainScripts[appDomain].Add(itemID); | ||
1440 | } | ||
1441 | else | ||
1442 | { | ||
1443 | m_DomainScripts.Add(appDomain, new List<UUID>()); | ||
1444 | m_DomainScripts[appDomain].Add(itemID); | ||
1445 | } | ||
1446 | } | 1317 | } |
1447 | else | 1318 | else |
1448 | { | 1319 | { |
1449 | m_AppDomains.Add(appDomain, sandbox); | 1320 | sandbox = AppDomain.CurrentDomain; |
1450 | m_AppDomains[appDomain].AssemblyResolve += | ||
1451 | new ResolveEventHandler( | ||
1452 | AssemblyResolver.OnAssemblyResolve); | ||
1453 | if (m_DomainScripts.ContainsKey(appDomain)) | ||
1454 | { | ||
1455 | m_DomainScripts[appDomain].Add(itemID); | ||
1456 | } | ||
1457 | else | ||
1458 | { | ||
1459 | m_DomainScripts.Add(appDomain, new List<UUID>()); | ||
1460 | m_DomainScripts[appDomain].Add(itemID); | ||
1461 | } | ||
1462 | |||
1463 | } | 1321 | } |
1322 | |||
1323 | //PolicyLevel sandboxPolicy = PolicyLevel.CreateAppDomainLevel(); | ||
1324 | //AllMembershipCondition sandboxMembershipCondition = new AllMembershipCondition(); | ||
1325 | //PermissionSet sandboxPermissionSet = sandboxPolicy.GetNamedPermissionSet("Internet"); | ||
1326 | //PolicyStatement sandboxPolicyStatement = new PolicyStatement(sandboxPermissionSet); | ||
1327 | //CodeGroup sandboxCodeGroup = new UnionCodeGroup(sandboxMembershipCondition, sandboxPolicyStatement); | ||
1328 | //sandboxPolicy.RootCodeGroup = sandboxCodeGroup; | ||
1329 | //sandbox.SetAppDomainPolicy(sandboxPolicy); | ||
1330 | |||
1331 | m_AppDomains[appDomain] = sandbox; | ||
1464 | 1332 | ||
1333 | m_DomainScripts[appDomain] = new List<UUID>(); | ||
1465 | } | 1334 | } |
1466 | else | 1335 | catch (Exception e) |
1467 | { | 1336 | { |
1468 | <<<<<<< HEAD | ||
1469 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); | 1337 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); |
1470 | m_ScriptErrorMessage += "Exception creating app domain:\n"; | 1338 | m_ScriptErrorMessage += "Exception creating app domain:\n"; |
1471 | m_ScriptFailCount++; | 1339 | m_ScriptFailCount++; |
@@ -1474,12 +1342,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1474 | m_AddingAssemblies[assemblyPath]--; | 1342 | m_AddingAssemblies[assemblyPath]--; |
1475 | } | 1343 | } |
1476 | return false; | 1344 | return false; |
1477 | ======= | ||
1478 | sandbox = AppDomain.CurrentDomain; | ||
1479 | >>>>>>> avn/ubitvar | ||
1480 | } | 1345 | } |
1346 | } | ||
1347 | m_DomainScripts[appDomain].Add(itemID); | ||
1481 | 1348 | ||
1482 | <<<<<<< HEAD | ||
1483 | IScript scriptObj = null; | 1349 | IScript scriptObj = null; |
1484 | EventWaitHandle coopSleepHandle; | 1350 | EventWaitHandle coopSleepHandle; |
1485 | bool coopTerminationForThisScript; | 1351 | bool coopTerminationForThisScript; |
@@ -1611,52 +1477,26 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1611 | scriptObj, coopSleepHandle, assemblyPath, | 1477 | scriptObj, coopSleepHandle, assemblyPath, |
1612 | Path.Combine(ScriptEnginePath, World.RegionInfo.RegionID.ToString()), stateSource, coopTerminationForThisScript)) | 1478 | Path.Combine(ScriptEnginePath, World.RegionInfo.RegionID.ToString()), stateSource, coopTerminationForThisScript)) |
1613 | return false; | 1479 | return false; |
1614 | ======= | ||
1615 | // if (!instance.Load(m_AppDomains[appDomain], assembly, stateSource)) | ||
1616 | // return false; | ||
1617 | >>>>>>> avn/ubitvar | ||
1618 | 1480 | ||
1619 | m_AppDomains[appDomain] = sandbox; | 1481 | // if (DebugLevel >= 1) |
1482 | // m_log.DebugFormat( | ||
1483 | // "[XEngine] Loaded script {0}.{1}, item UUID {2}, prim UUID {3} @ {4}.{5}", | ||
1484 | // part.ParentGroup.RootPart.Name, item.Name, itemID, part.UUID, | ||
1485 | // part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName); | ||
1620 | 1486 | ||
1621 | m_DomainScripts[appDomain] = new List<UUID>(); | 1487 | if (presence != null) |
1622 | } | ||
1623 | catch (Exception e) | ||
1624 | { | 1488 | { |
1625 | m_log.ErrorFormat("[XEngine] Exception creating app domain:\n {0}", e.ToString()); | 1489 | ShowScriptSaveResponse(item.OwnerID, |
1626 | m_ScriptErrorMessage += "Exception creating app domain:\n"; | 1490 | assetID, "Compile successful", true); |
1627 | m_ScriptFailCount++; | ||
1628 | lock (m_AddingAssemblies) | ||
1629 | { | ||
1630 | m_AddingAssemblies[assembly]--; | ||
1631 | } | ||
1632 | return false; | ||
1633 | } | 1491 | } |
1634 | } | ||
1635 | 1492 | ||
1493 | instance.AppDomain = appDomain; | ||
1494 | instance.LineMap = linemap; | ||
1636 | 1495 | ||
1637 | if (!instance.Load(m_AppDomains[appDomain], assembly, stateSource)) | 1496 | m_Scripts[itemID] = instance; |
1638 | return false; | ||
1639 | // m_log.DebugFormat( | ||
1640 | // "[XEngine] Loaded script {0}.{1}, script UUID {2}, prim UUID {3} @ {4}.{5}", | ||
1641 | // part.ParentGroup.RootPart.Name, item.Name, assetID, part.UUID, | ||
1642 | // part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName); | ||
1643 | |||
1644 | if (presence != null) | ||
1645 | { | ||
1646 | ShowScriptSaveResponse(item.OwnerID, | ||
1647 | assetID, "Compile successful", true); | ||
1648 | } | 1497 | } |
1649 | |||
1650 | instance.AppDomain = appDomain; | ||
1651 | instance.LineMap = linemap; | ||
1652 | lockScriptsForWrite(true); | ||
1653 | m_Scripts[itemID] = instance; | ||
1654 | lockScriptsForWrite(false); | ||
1655 | } | ||
1656 | else | ||
1657 | { | ||
1658 | lockScriptsForRead(false); | ||
1659 | } | 1498 | } |
1499 | |||
1660 | lock (m_PrimObjects) | 1500 | lock (m_PrimObjects) |
1661 | { | 1501 | { |
1662 | if (!m_PrimObjects.ContainsKey(localID)) | 1502 | if (!m_PrimObjects.ContainsKey(localID)) |
@@ -1674,7 +1514,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1674 | m_AddingAssemblies[assemblyPath]--; | 1514 | m_AddingAssemblies[assemblyPath]--; |
1675 | } | 1515 | } |
1676 | 1516 | ||
1677 | if (instance!=null) | 1517 | if (instance != null) |
1678 | instance.Init(); | 1518 | instance.Init(); |
1679 | 1519 | ||
1680 | bool runIt; | 1520 | bool runIt; |
@@ -1697,28 +1537,19 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1697 | m_CompileDict.Remove(itemID); | 1537 | m_CompileDict.Remove(itemID); |
1698 | } | 1538 | } |
1699 | 1539 | ||
1700 | lockScriptsForRead(true); | 1540 | IScriptInstance instance = null; |
1701 | // Do we even have it? | ||
1702 | if (!m_Scripts.ContainsKey(itemID)) | ||
1703 | { | ||
1704 | lockScriptsForRead(false); | ||
1705 | return; | ||
1706 | } | ||
1707 | 1541 | ||
1708 | <<<<<<< HEAD | 1542 | lock (m_Scripts) |
1709 | instance.Stop(m_WaitForEventCompletionOnScriptStop, true); | 1543 | { |
1710 | ======= | 1544 | // Do we even have it? |
1711 | IScriptInstance instance=m_Scripts[itemID]; | 1545 | if (!m_Scripts.ContainsKey(itemID)) |
1712 | lockScriptsForRead(false); | 1546 | return; |
1713 | lockScriptsForWrite(true); | ||
1714 | m_Scripts.Remove(itemID); | ||
1715 | lockScriptsForWrite(false); | ||
1716 | instance.ClearQueue(); | ||
1717 | 1547 | ||
1718 | instance.Stop(m_WaitForEventCompletionOnScriptStop); | 1548 | instance = m_Scripts[itemID]; |
1549 | m_Scripts.Remove(itemID); | ||
1550 | } | ||
1719 | 1551 | ||
1720 | // bool objectRemoved = false; | 1552 | instance.Stop(m_WaitForEventCompletionOnScriptStop, true); |
1721 | >>>>>>> avn/ubitvar | ||
1722 | 1553 | ||
1723 | lock (m_PrimObjects) | 1554 | lock (m_PrimObjects) |
1724 | { | 1555 | { |
@@ -1740,26 +1571,17 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
1740 | 1571 | ||
1741 | instance.DestroyScriptInstance(); | 1572 | instance.DestroyScriptInstance(); |
1742 | 1573 | ||
1743 | if (m_DomainScripts.ContainsKey(instance.AppDomain)) | 1574 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); |
1575 | if (m_DomainScripts[instance.AppDomain].Count == 0) | ||
1744 | { | 1576 | { |
1745 | m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); | 1577 | m_DomainScripts.Remove(instance.AppDomain); |
1746 | if (m_DomainScripts[instance.AppDomain].Count == 0) | 1578 | UnloadAppDomain(instance.AppDomain); |
1747 | { | ||
1748 | m_DomainScripts.Remove(instance.AppDomain); | ||
1749 | UnloadAppDomain(instance.AppDomain); | ||
1750 | } | ||
1751 | } | 1579 | } |
1752 | 1580 | ||
1753 | ObjectRemoved handlerObjectRemoved = OnObjectRemoved; | 1581 | ObjectRemoved handlerObjectRemoved = OnObjectRemoved; |
1754 | if (handlerObjectRemoved != null) | 1582 | if (handlerObjectRemoved != null) |
1755 | { | 1583 | handlerObjectRemoved(instance.ObjectID); |
1756 | SceneObjectPart part = m_Scene.GetSceneObjectPart(localID); | ||
1757 | if (part != null) | ||
1758 | handlerObjectRemoved(part.UUID); | ||
1759 | } | ||
1760 | 1584 | ||
1761 | CleanAssemblies(); | ||
1762 | |||
1763 | ScriptRemoved handlerScriptRemoved = OnScriptRemoved; | 1585 | ScriptRemoved handlerScriptRemoved = OnScriptRemoved; |
1764 | if (handlerScriptRemoved != null) | 1586 | if (handlerScriptRemoved != null) |
1765 | handlerScriptRemoved(itemID); | 1587 | handlerScriptRemoved(itemID); |
@@ -2020,14 +1842,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2020 | private IScriptInstance GetInstance(UUID itemID) | 1842 | private IScriptInstance GetInstance(UUID itemID) |
2021 | { | 1843 | { |
2022 | IScriptInstance instance; | 1844 | IScriptInstance instance; |
2023 | lockScriptsForRead(true); | 1845 | lock (m_Scripts) |
2024 | if (!m_Scripts.ContainsKey(itemID)) | ||
2025 | { | 1846 | { |
2026 | lockScriptsForRead(false); | 1847 | if (!m_Scripts.ContainsKey(itemID)) |
2027 | return null; | 1848 | return null; |
1849 | instance = m_Scripts[itemID]; | ||
2028 | } | 1850 | } |
2029 | instance = m_Scripts[itemID]; | ||
2030 | lockScriptsForRead(false); | ||
2031 | return instance; | 1851 | return instance; |
2032 | } | 1852 | } |
2033 | 1853 | ||
@@ -2049,7 +1869,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2049 | return instance != null && instance.Running; | 1869 | return instance != null && instance.Running; |
2050 | } | 1870 | } |
2051 | 1871 | ||
2052 | [DebuggerNonUserCode] | ||
2053 | public void ApiResetScript(UUID itemID) | 1872 | public void ApiResetScript(UUID itemID) |
2054 | { | 1873 | { |
2055 | IScriptInstance instance = GetInstance(itemID); | 1874 | IScriptInstance instance = GetInstance(itemID); |
@@ -2134,7 +1953,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2134 | return instance != null ? instance.GetDetectID(idx) : UUID.Zero; | 1953 | return instance != null ? instance.GetDetectID(idx) : UUID.Zero; |
2135 | } | 1954 | } |
2136 | 1955 | ||
2137 | [DebuggerNonUserCode] | ||
2138 | public void SetState(UUID itemID, string newState) | 1956 | public void SetState(UUID itemID, string newState) |
2139 | { | 1957 | { |
2140 | IScriptInstance instance = GetInstance(itemID); | 1958 | IScriptInstance instance = GetInstance(itemID); |
@@ -2155,10 +1973,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2155 | 1973 | ||
2156 | List<IScriptInstance> instances = new List<IScriptInstance>(); | 1974 | List<IScriptInstance> instances = new List<IScriptInstance>(); |
2157 | 1975 | ||
2158 | lockScriptsForRead(true); | 1976 | lock (m_Scripts) |
2159 | foreach (IScriptInstance instance in m_Scripts.Values) | 1977 | { |
1978 | foreach (IScriptInstance instance in m_Scripts.Values) | ||
2160 | instances.Add(instance); | 1979 | instances.Add(instance); |
2161 | lockScriptsForRead(false); | 1980 | } |
2162 | 1981 | ||
2163 | foreach (IScriptInstance i in instances) | 1982 | foreach (IScriptInstance i in instances) |
2164 | { | 1983 | { |