aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml1
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionCombinerClientEventForwarder.cs94
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs125
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs163
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs963
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionCombinerPermissionModule.cs275
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionConnections.cs65
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionCourseLocation.cs43
-rw-r--r--OpenSim/Region/CoreModules/World/Land/RegionData.cs39
9 files changed, 0 insertions, 1768 deletions
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
index 8f82718..9757072 100644
--- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
+++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
@@ -13,7 +13,6 @@
13 <RegionModule id="ArchiverModule" type="OpenSim.Region.CoreModules.World.Archiver.ArchiverModule" /> 13 <RegionModule id="ArchiverModule" type="OpenSim.Region.CoreModules.World.Archiver.ArchiverModule" />
14 <RegionModule id="CapabilitiesModule" type="OpenSim.Region.CoreModules.Agent.Capabilities.CapabilitiesModule" /> 14 <RegionModule id="CapabilitiesModule" type="OpenSim.Region.CoreModules.Agent.Capabilities.CapabilitiesModule" />
15 <RegionModule id="TerrainModule" type="OpenSim.Region.CoreModules.World.Terrain.TerrainModule" /> 15 <RegionModule id="TerrainModule" type="OpenSim.Region.CoreModules.World.Terrain.TerrainModule" />
16 <RegionModule id="RegionCombinerModule" type="OpenSim.Region.CoreModules.World.Land.RegionCombinerModule" />
17 <RegionModule id="WorldMapModule" type="OpenSim.Region.CoreModules.World.WorldMap.WorldMapModule" /> 16 <RegionModule id="WorldMapModule" type="OpenSim.Region.CoreModules.World.WorldMap.WorldMapModule" />
18 <RegionModule id="HGWorldMapModule" type="OpenSim.Region.CoreModules.Hypergrid.HGWorldMapModule" /> 17 <RegionModule id="HGWorldMapModule" type="OpenSim.Region.CoreModules.Hypergrid.HGWorldMapModule" />
19 <RegionModule id="UrlModule" type="OpenSim.Region.CoreModules.Scripting.LSLHttp.UrlModule" /> 18 <RegionModule id="UrlModule" type="OpenSim.Region.CoreModules.Scripting.LSLHttp.UrlModule" />
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerClientEventForwarder.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerClientEventForwarder.cs
deleted file mode 100644
index 70d6de3..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerClientEventForwarder.cs
+++ /dev/null
@@ -1,94 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using OpenSim.Region.Framework.Scenes;
32
33namespace OpenSim.Region.CoreModules.World.Land
34{
35public class RegionCombinerClientEventForwarder
36 {
37 private Scene m_rootScene;
38 private Dictionary<UUID, Scene> m_virtScene = new Dictionary<UUID, Scene>();
39 private Dictionary<UUID,RegionCombinerIndividualEventForwarder> m_forwarders = new Dictionary<UUID,
40 RegionCombinerIndividualEventForwarder>();
41
42 public RegionCombinerClientEventForwarder(RegionConnections rootScene)
43 {
44 m_rootScene = rootScene.RegionScene;
45 }
46
47 public void AddSceneToEventForwarding(Scene virtualScene)
48 {
49 lock (m_virtScene)
50 {
51 if (m_virtScene.ContainsKey(virtualScene.RegionInfo.originRegionID))
52 {
53 m_virtScene[virtualScene.RegionInfo.originRegionID] = virtualScene;
54 }
55 else
56 {
57 m_virtScene.Add(virtualScene.RegionInfo.originRegionID, virtualScene);
58 }
59 }
60
61 lock (m_forwarders)
62 {
63 // TODO: Fix this to unregister if this happens
64 if (m_forwarders.ContainsKey(virtualScene.RegionInfo.originRegionID))
65 m_forwarders.Remove(virtualScene.RegionInfo.originRegionID);
66
67 RegionCombinerIndividualEventForwarder forwarder =
68 new RegionCombinerIndividualEventForwarder(m_rootScene, virtualScene);
69 m_forwarders.Add(virtualScene.RegionInfo.originRegionID, forwarder);
70
71 virtualScene.EventManager.OnNewClient += forwarder.ClientConnect;
72 virtualScene.EventManager.OnClientClosed += forwarder.ClientClosed;
73 }
74 }
75
76 public void RemoveSceneFromEventForwarding (Scene virtualScene)
77 {
78 lock (m_forwarders)
79 {
80 RegionCombinerIndividualEventForwarder forwarder = m_forwarders[virtualScene.RegionInfo.originRegionID];
81 virtualScene.EventManager.OnNewClient -= forwarder.ClientConnect;
82 virtualScene.EventManager.OnClientClosed -= forwarder.ClientClosed;
83 m_forwarders.Remove(virtualScene.RegionInfo.originRegionID);
84 }
85 lock (m_virtScene)
86 {
87 if (m_virtScene.ContainsKey(virtualScene.RegionInfo.originRegionID))
88 {
89 m_virtScene.Remove(virtualScene.RegionInfo.originRegionID);
90 }
91 }
92 }
93 }
94} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs
deleted file mode 100644
index 2cbaf96..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerIndividualEventForwarder.cs
+++ /dev/null
@@ -1,125 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using OpenMetaverse;
30using OpenSim.Framework;
31using OpenSim.Region.Framework.Scenes;
32
33namespace OpenSim.Region.CoreModules.World.Land
34{
35 public class RegionCombinerIndividualEventForwarder
36 {
37 private Scene m_rootScene;
38 private Scene m_virtScene;
39
40 public RegionCombinerIndividualEventForwarder(Scene rootScene, Scene virtScene)
41 {
42 m_rootScene = rootScene;
43 m_virtScene = virtScene;
44 }
45
46 public void ClientConnect(IClientAPI client)
47 {
48 m_virtScene.UnSubscribeToClientPrimEvents(client);
49 m_virtScene.UnSubscribeToClientPrimRezEvents(client);
50 m_virtScene.UnSubscribeToClientInventoryEvents(client);
51 m_virtScene.UnSubscribeToClientAttachmentEvents(client);
52 //m_virtScene.UnSubscribeToClientTeleportEvents(client);
53 m_virtScene.UnSubscribeToClientScriptEvents(client);
54 m_virtScene.UnSubscribeToClientGodEvents(client);
55 m_virtScene.UnSubscribeToClientNetworkEvents(client);
56
57 m_rootScene.SubscribeToClientPrimEvents(client);
58 client.OnAddPrim += LocalAddNewPrim;
59 client.OnRezObject += LocalRezObject;
60 m_rootScene.SubscribeToClientInventoryEvents(client);
61 m_rootScene.SubscribeToClientAttachmentEvents(client);
62 //m_rootScene.SubscribeToClientTeleportEvents(client);
63 m_rootScene.SubscribeToClientScriptEvents(client);
64 m_rootScene.SubscribeToClientGodEvents(client);
65 m_rootScene.SubscribeToClientNetworkEvents(client);
66 }
67
68 public void ClientClosed(UUID clientid, Scene scene)
69 {
70 }
71
72 /// <summary>
73 /// Fixes position based on the region the Rez event came in on
74 /// </summary>
75 /// <param name="remoteclient"></param>
76 /// <param name="itemid"></param>
77 /// <param name="rayend"></param>
78 /// <param name="raystart"></param>
79 /// <param name="raytargetid"></param>
80 /// <param name="bypassraycast"></param>
81 /// <param name="rayendisintersection"></param>
82 /// <param name="rezselected"></param>
83 /// <param name="removeitem"></param>
84 /// <param name="fromtaskid"></param>
85 private void LocalRezObject(IClientAPI remoteclient, UUID itemid, Vector3 rayend, Vector3 raystart,
86 UUID raytargetid, byte bypassraycast, bool rayendisintersection, bool rezselected, bool removeitem,
87 UUID fromtaskid)
88 {
89 int differenceX = (int)m_virtScene.RegionInfo.RegionLocX - (int)m_rootScene.RegionInfo.RegionLocX;
90 int differenceY = (int)m_virtScene.RegionInfo.RegionLocY - (int)m_rootScene.RegionInfo.RegionLocY;
91 rayend.X += differenceX * (int)Constants.RegionSize;
92 rayend.Y += differenceY * (int)Constants.RegionSize;
93 raystart.X += differenceX * (int)Constants.RegionSize;
94 raystart.Y += differenceY * (int)Constants.RegionSize;
95
96 m_rootScene.RezObject(remoteclient, itemid, rayend, raystart, raytargetid, bypassraycast,
97 rayendisintersection, rezselected, removeitem, fromtaskid);
98 }
99 /// <summary>
100 /// Fixes position based on the region the AddPrimShape event came in on
101 /// </summary>
102 /// <param name="ownerid"></param>
103 /// <param name="groupid"></param>
104 /// <param name="rayend"></param>
105 /// <param name="rot"></param>
106 /// <param name="shape"></param>
107 /// <param name="bypassraycast"></param>
108 /// <param name="raystart"></param>
109 /// <param name="raytargetid"></param>
110 /// <param name="rayendisintersection"></param>
111 private void LocalAddNewPrim(UUID ownerid, UUID groupid, Vector3 rayend, Quaternion rot,
112 PrimitiveBaseShape shape, byte bypassraycast, Vector3 raystart, UUID raytargetid,
113 byte rayendisintersection)
114 {
115 int differenceX = (int)m_virtScene.RegionInfo.RegionLocX - (int)m_rootScene.RegionInfo.RegionLocX;
116 int differenceY = (int)m_virtScene.RegionInfo.RegionLocY - (int)m_rootScene.RegionInfo.RegionLocY;
117 rayend.X += differenceX * (int)Constants.RegionSize;
118 rayend.Y += differenceY * (int)Constants.RegionSize;
119 raystart.X += differenceX * (int)Constants.RegionSize;
120 raystart.Y += differenceY * (int)Constants.RegionSize;
121 m_rootScene.AddNewPrim(ownerid, groupid, rayend, rot, shape, bypassraycast, raystart, raytargetid,
122 rayendisintersection);
123 }
124 }
125} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs
deleted file mode 100644
index 7df836c..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerLargeLandChannel.cs
+++ /dev/null
@@ -1,163 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using OpenSim.Framework;
32using OpenSim.Region.Framework.Interfaces;
33
34namespace OpenSim.Region.CoreModules.World.Land
35{
36public class RegionCombinerLargeLandChannel : ILandChannel
37 {
38 // private static readonly ILog m_log =
39 // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
40 private RegionData RegData;
41 private ILandChannel RootRegionLandChannel;
42 private readonly List<RegionData> RegionConnections;
43
44 #region ILandChannel Members
45
46 public RegionCombinerLargeLandChannel(RegionData regData, ILandChannel rootRegionLandChannel,
47 List<RegionData> regionConnections)
48 {
49 RegData = regData;
50 RootRegionLandChannel = rootRegionLandChannel;
51 RegionConnections = regionConnections;
52 }
53
54 public List<ILandObject> ParcelsNearPoint(Vector3 position)
55 {
56 //m_log.DebugFormat("[LANDPARCELNEARPOINT]: {0}>", position);
57 return RootRegionLandChannel.ParcelsNearPoint(position - RegData.Offset);
58 }
59
60 public List<ILandObject> AllParcels()
61 {
62 return RootRegionLandChannel.AllParcels();
63 }
64
65 public ILandObject GetLandObject(int x, int y)
66 {
67 //m_log.DebugFormat("[BIGLANDTESTINT]: <{0},{1}>", x, y);
68
69 if (x > 0 && x <= (int)Constants.RegionSize && y > 0 && y <= (int)Constants.RegionSize)
70 {
71 return RootRegionLandChannel.GetLandObject(x, y);
72 }
73 else
74 {
75 int offsetX = (x / (int)Constants.RegionSize);
76 int offsetY = (y / (int)Constants.RegionSize);
77 offsetX *= (int)Constants.RegionSize;
78 offsetY *= (int)Constants.RegionSize;
79
80 foreach (RegionData regionData in RegionConnections)
81 {
82 if (regionData.Offset.X == offsetX && regionData.Offset.Y == offsetY)
83 {
84 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY);
85 }
86 }
87 ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene);
88 obj.LandData.Name = "NO LAND";
89 return obj;
90 }
91 }
92
93 public ILandObject GetLandObject(int localID)
94 {
95 return RootRegionLandChannel.GetLandObject(localID);
96 }
97
98 public ILandObject GetLandObject(float x, float y)
99 {
100 //m_log.DebugFormat("[BIGLANDTESTFLOAT]: <{0},{1}>", x, y);
101
102 if (x > 0 && x <= (int)Constants.RegionSize && y > 0 && y <= (int)Constants.RegionSize)
103 {
104 return RootRegionLandChannel.GetLandObject(x, y);
105 }
106 else
107 {
108 int offsetX = (int)(x/(int) Constants.RegionSize);
109 int offsetY = (int)(y/(int) Constants.RegionSize);
110 offsetX *= (int) Constants.RegionSize;
111 offsetY *= (int) Constants.RegionSize;
112
113 foreach (RegionData regionData in RegionConnections)
114 {
115 if (regionData.Offset.X == offsetX && regionData.Offset.Y == offsetY)
116 {
117 return regionData.RegionScene.LandChannel.GetLandObject(x - offsetX, y - offsetY);
118 }
119 }
120 ILandObject obj = new LandObject(UUID.Zero, false, RegData.RegionScene);
121 obj.LandData.Name = "NO LAND";
122 return obj;
123 }
124 }
125
126 public bool IsLandPrimCountTainted()
127 {
128 return RootRegionLandChannel.IsLandPrimCountTainted();
129 }
130
131 public bool IsForcefulBansAllowed()
132 {
133 return RootRegionLandChannel.IsForcefulBansAllowed();
134 }
135
136 public void UpdateLandObject(int localID, LandData data)
137 {
138 RootRegionLandChannel.UpdateLandObject(localID, data);
139 }
140
141 public void ReturnObjectsInParcel(int localID, uint returnType, UUID[] agentIDs, UUID[] taskIDs, IClientAPI remoteClient)
142 {
143 RootRegionLandChannel.ReturnObjectsInParcel(localID, returnType, agentIDs, taskIDs, remoteClient);
144 }
145
146 public void setParcelObjectMaxOverride(overrideParcelMaxPrimCountDelegate overrideDel)
147 {
148 RootRegionLandChannel.setParcelObjectMaxOverride(overrideDel);
149 }
150
151 public void setSimulatorObjectMaxOverride(overrideSimulatorMaxPrimCountDelegate overrideDel)
152 {
153 RootRegionLandChannel.setSimulatorObjectMaxOverride(overrideDel);
154 }
155
156 public void SetParcelOtherCleanTime(IClientAPI remoteClient, int localID, int otherCleanTime)
157 {
158 RootRegionLandChannel.SetParcelOtherCleanTime(remoteClient, localID, otherCleanTime);
159 }
160
161 #endregion
162 }
163} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs
deleted file mode 100644
index ebd8ee7..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs
+++ /dev/null
@@ -1,963 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using System.Reflection;
31using log4net;
32using Nini.Config;
33using OpenMetaverse;
34using OpenSim.Framework;
35using OpenSim.Framework.Client;
36using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes;
38using OpenSim.Framework.Console;
39
40namespace OpenSim.Region.CoreModules.World.Land
41{
42 public class RegionCombinerModule : ISharedRegionModule
43 {
44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45
46 public string Name
47 {
48 get { return "RegionCombinerModule"; }
49 }
50
51 public Type ReplaceableInterface
52 {
53 get { return null; }
54 }
55
56 private Dictionary<UUID, RegionConnections> m_regions = new Dictionary<UUID, RegionConnections>();
57 private bool enabledYN = false;
58 private Dictionary<UUID, Scene> m_startingScenes = new Dictionary<UUID, Scene>();
59
60 public void Initialise(IConfigSource source)
61 {
62 IConfig myConfig = source.Configs["Startup"];
63 enabledYN = myConfig.GetBoolean("CombineContiguousRegions", false);
64 //enabledYN = true;
65 if (enabledYN)
66 MainConsole.Instance.Commands.AddCommand("RegionCombinerModule", false, "fix-phantoms",
67 "Fix phantom objects", "Fixes phantom objects after an import to megaregions", FixPhantoms);
68 }
69
70 public void Close()
71 {
72 }
73
74 public void AddRegion(Scene scene)
75 {
76 }
77
78 public void RemoveRegion(Scene scene)
79 {
80 }
81
82 public void RegionLoaded(Scene scene)
83 {
84 if (enabledYN)
85 RegionLoadedDoWork(scene);
86 }
87
88 private void RegionLoadedDoWork(Scene scene)
89 {
90/*
91 // For testing on a single instance
92 if (scene.RegionInfo.RegionLocX == 1004 && scene.RegionInfo.RegionLocY == 1000)
93 return;
94 //
95*/
96 lock (m_startingScenes)
97 m_startingScenes.Add(scene.RegionInfo.originRegionID, scene);
98
99 // Give each region a standard set of non-infinite borders
100 Border northBorder = new Border();
101 northBorder.BorderLine = new Vector3(0, (int)Constants.RegionSize, (int)Constants.RegionSize); //<---
102 northBorder.CrossDirection = Cardinals.N;
103 scene.NorthBorders[0] = northBorder;
104
105 Border southBorder = new Border();
106 southBorder.BorderLine = new Vector3(0, (int)Constants.RegionSize, 0); //--->
107 southBorder.CrossDirection = Cardinals.S;
108 scene.SouthBorders[0] = southBorder;
109
110 Border eastBorder = new Border();
111 eastBorder.BorderLine = new Vector3(0, (int)Constants.RegionSize, (int)Constants.RegionSize); //<---
112 eastBorder.CrossDirection = Cardinals.E;
113 scene.EastBorders[0] = eastBorder;
114
115 Border westBorder = new Border();
116 westBorder.BorderLine = new Vector3(0, (int)Constants.RegionSize, 0); //--->
117 westBorder.CrossDirection = Cardinals.W;
118 scene.WestBorders[0] = westBorder;
119
120
121
122 RegionConnections regionConnections = new RegionConnections();
123 regionConnections.ConnectedRegions = new List<RegionData>();
124 regionConnections.RegionScene = scene;
125 regionConnections.RegionLandChannel = scene.LandChannel;
126 regionConnections.RegionId = scene.RegionInfo.originRegionID;
127 regionConnections.X = scene.RegionInfo.RegionLocX;
128 regionConnections.Y = scene.RegionInfo.RegionLocY;
129 regionConnections.XEnd = (int)Constants.RegionSize;
130 regionConnections.YEnd = (int)Constants.RegionSize;
131
132
133 lock (m_regions)
134 {
135 bool connectedYN = false;
136
137 foreach (RegionConnections conn in m_regions.Values)
138 {
139 #region commented
140 /*
141 // If we're one region over +x +y
142 //xxy
143 //xxx
144 //xxx
145 if ((((int)conn.X * (int)Constants.RegionSize) + conn.XEnd
146 == (regionConnections.X * (int)Constants.RegionSize))
147 && (((int)conn.Y * (int)Constants.RegionSize) - conn.YEnd
148 == (regionConnections.Y * (int)Constants.RegionSize)))
149 {
150 Vector3 offset = Vector3.Zero;
151 offset.X = (((regionConnections.X * (int) Constants.RegionSize)) -
152 ((conn.X * (int) Constants.RegionSize)));
153 offset.Y = (((regionConnections.Y * (int) Constants.RegionSize)) -
154 ((conn.Y * (int) Constants.RegionSize)));
155
156 Vector3 extents = Vector3.Zero;
157 extents.Y = regionConnections.YEnd + conn.YEnd;
158 extents.X = conn.XEnd + conn.XEnd;
159
160 m_log.DebugFormat("Scene: {0} to the northwest of Scene{1}. Offset: {2}. Extents:{3}",
161 conn.RegionScene.RegionInfo.RegionName,
162 regionConnections.RegionScene.RegionInfo.RegionName,
163 offset, extents);
164
165 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents);
166
167 connectedYN = true;
168 break;
169 }
170 */
171
172 /*
173 //If we're one region over x +y
174 //xxx
175 //xxx
176 //xyx
177 if ((((int)conn.X * (int)Constants.RegionSize)
178 == (regionConnections.X * (int)Constants.RegionSize))
179 && (((int)conn.Y * (int)Constants.RegionSize) - conn.YEnd
180 == (regionConnections.Y * (int)Constants.RegionSize)))
181 {
182 Vector3 offset = Vector3.Zero;
183 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
184 ((conn.X * (int)Constants.RegionSize)));
185 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
186 ((conn.Y * (int)Constants.RegionSize)));
187
188 Vector3 extents = Vector3.Zero;
189 extents.Y = regionConnections.YEnd + conn.YEnd;
190 extents.X = conn.XEnd;
191
192 m_log.DebugFormat("Scene: {0} to the north of Scene{1}. Offset: {2}. Extents:{3}",
193 conn.RegionScene.RegionInfo.RegionName,
194 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
195
196 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents);
197 connectedYN = true;
198 break;
199 }
200 */
201
202 /*
203 // If we're one region over -x +y
204 //xxx
205 //xxx
206 //yxx
207 if ((((int)conn.X * (int)Constants.RegionSize) - conn.XEnd
208 == (regionConnections.X * (int)Constants.RegionSize))
209 && (((int)conn.Y * (int)Constants.RegionSize) - conn.YEnd
210 == (regionConnections.Y * (int)Constants.RegionSize)))
211 {
212 Vector3 offset = Vector3.Zero;
213 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
214 ((conn.X * (int)Constants.RegionSize)));
215 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
216 ((conn.Y * (int)Constants.RegionSize)));
217
218 Vector3 extents = Vector3.Zero;
219 extents.Y = regionConnections.YEnd + conn.YEnd;
220 extents.X = conn.XEnd + conn.XEnd;
221
222 m_log.DebugFormat("Scene: {0} to the northeast of Scene. Offset: {2}. Extents:{3}",
223 conn.RegionScene.RegionInfo.RegionName,
224 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
225
226 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents);
227
228
229 connectedYN = true;
230 break;
231 }
232 */
233
234 /*
235 // If we're one region over -x y
236 //xxx
237 //yxx
238 //xxx
239 if ((((int)conn.X * (int)Constants.RegionSize) - conn.XEnd
240 == (regionConnections.X * (int)Constants.RegionSize))
241 && (((int)conn.Y * (int)Constants.RegionSize)
242 == (regionConnections.Y * (int)Constants.RegionSize)))
243 {
244 Vector3 offset = Vector3.Zero;
245 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
246 ((conn.X * (int)Constants.RegionSize)));
247 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
248 ((conn.Y * (int)Constants.RegionSize)));
249
250 Vector3 extents = Vector3.Zero;
251 extents.Y = regionConnections.YEnd;
252 extents.X = conn.XEnd + conn.XEnd;
253
254 m_log.DebugFormat("Scene: {0} to the east of Scene{1} Offset: {2}. Extents:{3}",
255 conn.RegionScene.RegionInfo.RegionName,
256 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
257
258 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents);
259
260 connectedYN = true;
261 break;
262 }
263 */
264
265 /*
266 // If we're one region over -x -y
267 //yxx
268 //xxx
269 //xxx
270 if ((((int)conn.X * (int)Constants.RegionSize) - conn.XEnd
271 == (regionConnections.X * (int)Constants.RegionSize))
272 && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd
273 == (regionConnections.Y * (int)Constants.RegionSize)))
274 {
275 Vector3 offset = Vector3.Zero;
276 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
277 ((conn.X * (int)Constants.RegionSize)));
278 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
279 ((conn.Y * (int)Constants.RegionSize)));
280
281 Vector3 extents = Vector3.Zero;
282 extents.Y = regionConnections.YEnd + conn.YEnd;
283 extents.X = conn.XEnd + conn.XEnd;
284
285 m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}",
286 conn.RegionScene.RegionInfo.RegionName,
287 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
288
289 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, extents);
290
291 connectedYN = true;
292 break;
293 }
294 */
295 #endregion
296
297 // If we're one region over +x y
298 //xxx
299 //xxy
300 //xxx
301
302
303 if ((((int)conn.X * (int)Constants.RegionSize) + conn.XEnd
304 >= (regionConnections.X * (int)Constants.RegionSize))
305 && (((int)conn.Y * (int)Constants.RegionSize)
306 >= (regionConnections.Y * (int)Constants.RegionSize)))
307 {
308 connectedYN = DoWorkForOneRegionOverPlusXY(conn, regionConnections, scene);
309 break;
310 }
311
312 // If we're one region over x +y
313 //xyx
314 //xxx
315 //xxx
316 if ((((int)conn.X * (int)Constants.RegionSize)
317 >= (regionConnections.X * (int)Constants.RegionSize))
318 && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd
319 >= (regionConnections.Y * (int)Constants.RegionSize)))
320 {
321 connectedYN = DoWorkForOneRegionOverXPlusY(conn, regionConnections, scene);
322 break;
323 }
324
325 // If we're one region over +x +y
326 //xxy
327 //xxx
328 //xxx
329 if ((((int)conn.X * (int)Constants.RegionSize) + conn.YEnd
330 >= (regionConnections.X * (int)Constants.RegionSize))
331 && (((int)conn.Y * (int)Constants.RegionSize) + conn.YEnd
332 >= (regionConnections.Y * (int)Constants.RegionSize)))
333 {
334 connectedYN = DoWorkForOneRegionOverPlusXPlusY(conn, regionConnections, scene);
335 break;
336
337 }
338 }
339
340 // If !connectYN means that this region is a root region
341 if (!connectedYN)
342 {
343 DoWorkForRootRegion(regionConnections, scene);
344
345 }
346 }
347 // Set up infinite borders around the entire AABB of the combined ConnectedRegions
348 AdjustLargeRegionBounds();
349 }
350
351 private bool DoWorkForOneRegionOverPlusXY(RegionConnections conn, RegionConnections regionConnections, Scene scene)
352 {
353 Vector3 offset = Vector3.Zero;
354 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
355 ((conn.X * (int)Constants.RegionSize)));
356 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
357 ((conn.Y * (int)Constants.RegionSize)));
358
359 Vector3 extents = Vector3.Zero;
360 extents.Y = conn.YEnd;
361 extents.X = conn.XEnd + regionConnections.XEnd;
362
363 conn.UpdateExtents(extents);
364
365 m_log.DebugFormat("Scene: {0} to the west of Scene{1} Offset: {2}. Extents:{3}",
366 conn.RegionScene.RegionInfo.RegionName,
367 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
368
369 scene.BordersLocked = true;
370 conn.RegionScene.BordersLocked = true;
371
372 RegionData ConnectedRegion = new RegionData();
373 ConnectedRegion.Offset = offset;
374 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID;
375 ConnectedRegion.RegionScene = scene;
376 conn.ConnectedRegions.Add(ConnectedRegion);
377
378 // Inform root region Physics about the extents of this region
379 conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents);
380
381 // Inform Child region that it needs to forward it's terrain to the root region
382 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero);
383
384 // Extend the borders as appropriate
385 lock (conn.RegionScene.EastBorders)
386 conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize;
387
388 lock (conn.RegionScene.NorthBorders)
389 conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
390
391 lock (conn.RegionScene.SouthBorders)
392 conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
393
394 lock (scene.WestBorders)
395 {
396
397
398 scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - conn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
399
400 // Trigger auto teleport to root region
401 scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
402 scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
403 }
404
405 // Reset Terrain.. since terrain loads before we get here, we need to load
406 // it again so it loads in the root region
407
408 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised());
409
410 // Unlock borders
411 conn.RegionScene.BordersLocked = false;
412 scene.BordersLocked = false;
413
414 // Create a client event forwarder and add this region's events to the root region.
415 if (conn.ClientEventForwarder != null)
416 conn.ClientEventForwarder.AddSceneToEventForwarding(scene);
417
418 return true;
419 }
420
421 private bool DoWorkForOneRegionOverXPlusY(RegionConnections conn, RegionConnections regionConnections, Scene scene)
422 {
423 Vector3 offset = Vector3.Zero;
424 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
425 ((conn.X * (int)Constants.RegionSize)));
426 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
427 ((conn.Y * (int)Constants.RegionSize)));
428
429 Vector3 extents = Vector3.Zero;
430 extents.Y = regionConnections.YEnd + conn.YEnd;
431 extents.X = conn.XEnd;
432 conn.UpdateExtents(extents);
433
434 scene.BordersLocked = true;
435 conn.RegionScene.BordersLocked = true;
436
437 RegionData ConnectedRegion = new RegionData();
438 ConnectedRegion.Offset = offset;
439 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID;
440 ConnectedRegion.RegionScene = scene;
441 conn.ConnectedRegions.Add(ConnectedRegion);
442
443 m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}",
444 conn.RegionScene.RegionInfo.RegionName,
445 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
446
447 conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents);
448 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero);
449
450 lock (conn.RegionScene.NorthBorders)
451 conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize;
452 lock (conn.RegionScene.EastBorders)
453 conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize;
454 lock (conn.RegionScene.WestBorders)
455 conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
456 lock (scene.SouthBorders)
457 {
458 scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - conn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south
459 scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
460 scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
461 }
462
463 // Reset Terrain.. since terrain normally loads first.
464 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised());
465 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised());
466 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised());
467
468 scene.BordersLocked = false;
469 conn.RegionScene.BordersLocked = false;
470 if (conn.ClientEventForwarder != null)
471 conn.ClientEventForwarder.AddSceneToEventForwarding(scene);
472 return true;
473 }
474
475 private bool DoWorkForOneRegionOverPlusXPlusY(RegionConnections conn, RegionConnections regionConnections, Scene scene)
476 {
477 Vector3 offset = Vector3.Zero;
478 offset.X = (((regionConnections.X * (int)Constants.RegionSize)) -
479 ((conn.X * (int)Constants.RegionSize)));
480 offset.Y = (((regionConnections.Y * (int)Constants.RegionSize)) -
481 ((conn.Y * (int)Constants.RegionSize)));
482
483 Vector3 extents = Vector3.Zero;
484 extents.Y = regionConnections.YEnd + conn.YEnd;
485 extents.X = regionConnections.XEnd + conn.XEnd;
486 conn.UpdateExtents(extents);
487
488 scene.BordersLocked = true;
489 conn.RegionScene.BordersLocked = true;
490
491 RegionData ConnectedRegion = new RegionData();
492 ConnectedRegion.Offset = offset;
493 ConnectedRegion.RegionId = scene.RegionInfo.originRegionID;
494 ConnectedRegion.RegionScene = scene;
495
496 conn.ConnectedRegions.Add(ConnectedRegion);
497
498 m_log.DebugFormat("Scene: {0} to the NorthEast of Scene{1} Offset: {2}. Extents:{3}",
499 conn.RegionScene.RegionInfo.RegionName,
500 regionConnections.RegionScene.RegionInfo.RegionName, offset, extents);
501
502 conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents);
503 scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero);
504 lock (conn.RegionScene.NorthBorders)
505 {
506 if (conn.RegionScene.NorthBorders.Count == 1)// && 2)
507 {
508 //compound border
509 // already locked above
510 conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize;
511
512 lock (conn.RegionScene.EastBorders)
513 conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize;
514 lock (conn.RegionScene.WestBorders)
515 conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
516 }
517 }
518
519 lock (scene.SouthBorders)
520 {
521 scene.SouthBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocY - conn.RegionScene.RegionInfo.RegionLocY) * (int)Constants.RegionSize); //auto teleport south
522 scene.SouthBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
523 scene.SouthBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
524 }
525
526 lock (conn.RegionScene.EastBorders)
527 {
528 if (conn.RegionScene.EastBorders.Count == 1)// && conn.RegionScene.EastBorders.Count == 2)
529 {
530
531 conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize;
532 lock (conn.RegionScene.NorthBorders)
533 conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
534 lock (conn.RegionScene.SouthBorders)
535 conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize;
536
537
538 }
539 }
540
541 lock (scene.WestBorders)
542 {
543 scene.WestBorders[0].BorderLine.Z = (int)((scene.RegionInfo.RegionLocX - conn.RegionScene.RegionInfo.RegionLocX) * (int)Constants.RegionSize); //auto teleport West
544 scene.WestBorders[0].TriggerRegionX = conn.RegionScene.RegionInfo.RegionLocX;
545 scene.WestBorders[0].TriggerRegionY = conn.RegionScene.RegionInfo.RegionLocY;
546 }
547
548 /*
549 else
550 {
551 conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize;
552 conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize;
553 conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize;
554 scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south
555 }
556 */
557
558
559 // Reset Terrain.. since terrain normally loads first.
560 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised());
561 scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised());
562 //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised());
563 scene.BordersLocked = false;
564 conn.RegionScene.BordersLocked = false;
565
566 if (conn.ClientEventForwarder != null)
567 conn.ClientEventForwarder.AddSceneToEventForwarding(scene);
568
569 return true;
570
571 //scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset,extents);
572
573 }
574
575 private void DoWorkForRootRegion(RegionConnections regionConnections, Scene scene)
576 {
577 RegionData rdata = new RegionData();
578 rdata.Offset = Vector3.Zero;
579 rdata.RegionId = scene.RegionInfo.originRegionID;
580 rdata.RegionScene = scene;
581 // save it's land channel
582 regionConnections.RegionLandChannel = scene.LandChannel;
583
584 // Substitue our landchannel
585 RegionCombinerLargeLandChannel lnd = new RegionCombinerLargeLandChannel(rdata, scene.LandChannel,
586 regionConnections.ConnectedRegions);
587 scene.LandChannel = lnd;
588 // Forward the permissions modules of each of the connected regions to the root region
589 lock (m_regions)
590 {
591 foreach (RegionData r in regionConnections.ConnectedRegions)
592 {
593 ForwardPermissionRequests(regionConnections, r.RegionScene);
594 }
595 }
596 // Create the root region's Client Event Forwarder
597 regionConnections.ClientEventForwarder = new RegionCombinerClientEventForwarder(regionConnections);
598
599 // Sets up the CoarseLocationUpdate forwarder for this root region
600 scene.EventManager.OnNewPresence += SetCourseLocationDelegate;
601
602 // Adds this root region to a dictionary of regions that are connectable
603 m_regions.Add(scene.RegionInfo.originRegionID, regionConnections);
604 }
605
606 private void SetCourseLocationDelegate(ScenePresence presence)
607 {
608 presence.SetSendCourseLocationMethod(SendCourseLocationUpdates);
609 }
610
611 private void SendCourseLocationUpdates(UUID sceneId, ScenePresence presence)
612 {
613 RegionConnections connectiondata = null;
614 lock (m_regions)
615 {
616 if (m_regions.ContainsKey(sceneId))
617 connectiondata = m_regions[sceneId];
618 else
619 return;
620 }
621
622 List<ScenePresence> avatars = connectiondata.RegionScene.GetAvatars();
623 List<Vector3> CoarseLocations = new List<Vector3>();
624 List<UUID> AvatarUUIDs = new List<UUID>();
625 for (int i = 0; i < avatars.Count; i++)
626 {
627 if (avatars[i].UUID != presence.UUID)
628 {
629 if (avatars[i].ParentID != 0)
630 {
631 // sitting avatar
632 SceneObjectPart sop = connectiondata.RegionScene.GetSceneObjectPart(avatars[i].ParentID);
633 if (sop != null)
634 {
635 CoarseLocations.Add(sop.AbsolutePosition + avatars[i].AbsolutePosition);
636 AvatarUUIDs.Add(avatars[i].UUID);
637 }
638 else
639 {
640 // we can't find the parent.. ! arg!
641 CoarseLocations.Add(avatars[i].AbsolutePosition);
642 AvatarUUIDs.Add(avatars[i].UUID);
643 }
644 }
645 else
646 {
647 CoarseLocations.Add(avatars[i].AbsolutePosition);
648 AvatarUUIDs.Add(avatars[i].UUID);
649 }
650 }
651 }
652 DistributeCourseLocationUpdates(CoarseLocations, AvatarUUIDs, connectiondata, presence);
653 }
654
655 private void DistributeCourseLocationUpdates(List<Vector3> locations, List<UUID> uuids,
656 RegionConnections connectiondata, ScenePresence rootPresence)
657 {
658 RegionData[] rdata = connectiondata.ConnectedRegions.ToArray();
659 //List<IClientAPI> clients = new List<IClientAPI>();
660 Dictionary<Vector2, RegionCourseLocationStruct> updates = new Dictionary<Vector2, RegionCourseLocationStruct>();
661
662 // Root Region entry
663 RegionCourseLocationStruct rootupdatedata = new RegionCourseLocationStruct();
664 rootupdatedata.Locations = new List<Vector3>();
665 rootupdatedata.Uuids = new List<UUID>();
666 rootupdatedata.Offset = Vector2.Zero;
667
668 rootupdatedata.UserAPI = rootPresence.ControllingClient;
669
670 if (rootupdatedata.UserAPI != null)
671 updates.Add(Vector2.Zero, rootupdatedata);
672
673 //Each Region needs an entry or we will end up with dead minimap dots
674 foreach (RegionData regiondata in rdata)
675 {
676 Vector2 offset = new Vector2(regiondata.Offset.X, regiondata.Offset.Y);
677 RegionCourseLocationStruct updatedata = new RegionCourseLocationStruct();
678 updatedata.Locations = new List<Vector3>();
679 updatedata.Uuids = new List<UUID>();
680 updatedata.Offset = offset;
681
682 if (offset == Vector2.Zero)
683 updatedata.UserAPI = rootPresence.ControllingClient;
684 else
685 updatedata.UserAPI = LocateUsersChildAgentIClientAPI(offset, rootPresence.UUID, rdata);
686
687 if (updatedata.UserAPI != null)
688 updates.Add(offset, updatedata);
689 }
690
691 // go over the locations and assign them to an IClientAPI
692 for (int i = 0; i < locations.Count; i++)
693 //{locations[i]/(int) Constants.RegionSize;
694 {
695 Vector3 pPosition = new Vector3((int)locations[i].X / (int)Constants.RegionSize,
696 (int)locations[i].Y / (int)Constants.RegionSize, locations[i].Z);
697 Vector2 offset = new Vector2(pPosition.X*(int) Constants.RegionSize,
698 pPosition.Y*(int) Constants.RegionSize);
699
700 if (!updates.ContainsKey(offset))
701 {
702 // This shouldn't happen
703 RegionCourseLocationStruct updatedata = new RegionCourseLocationStruct();
704 updatedata.Locations = new List<Vector3>();
705 updatedata.Uuids = new List<UUID>();
706 updatedata.Offset = offset;
707
708 if (offset == Vector2.Zero)
709 updatedata.UserAPI = rootPresence.ControllingClient;
710 else
711 updatedata.UserAPI = LocateUsersChildAgentIClientAPI(offset, rootPresence.UUID, rdata);
712
713 updates.Add(offset,updatedata);
714 }
715
716 updates[offset].Locations.Add(locations[i]);
717 updates[offset].Uuids.Add(uuids[i]);
718 }
719
720 // Send out the CoarseLocationupdates from their respective client connection based on where the avatar is
721 foreach (Vector2 offset in updates.Keys)
722 {
723 if (updates[offset].UserAPI != null)
724 {
725 updates[offset].UserAPI.SendCoarseLocationUpdate(updates[offset].Uuids,updates[offset].Locations);
726 }
727 }
728 }
729
730 /// <summary>
731 /// Locates a the Client of a particular region in an Array of RegionData based on offset
732 /// </summary>
733 /// <param name="offset"></param>
734 /// <param name="uUID"></param>
735 /// <param name="rdata"></param>
736 /// <returns>IClientAPI or null</returns>
737 private IClientAPI LocateUsersChildAgentIClientAPI(Vector2 offset, UUID uUID, RegionData[] rdata)
738 {
739 IClientAPI returnclient = null;
740 foreach (RegionData r in rdata)
741 {
742 if (r.Offset.X == offset.X && r.Offset.Y == offset.Y)
743 {
744 return r.RegionScene.SceneGraph.GetControllingClient(uUID);
745 }
746 }
747
748 return returnclient;
749 }
750
751 public void PostInitialise()
752 {
753 }
754
755 /// <summary>
756 /// TODO:
757 /// </summary>
758 /// <param name="rdata"></param>
759 public void UnCombineRegion(RegionData rdata)
760 {
761 lock (m_regions)
762 {
763 if (m_regions.ContainsKey(rdata.RegionId))
764 {
765 // uncombine root region and virtual regions
766 }
767 else
768 {
769 foreach (RegionConnections r in m_regions.Values)
770 {
771 foreach (RegionData rd in r.ConnectedRegions)
772 {
773 if (rd.RegionId == rdata.RegionId)
774 {
775 // uncombine virtual region
776 }
777 }
778 }
779 }
780 }
781 }
782
783 // Create a set of infinite borders around the whole aabb of the combined island.
784 private void AdjustLargeRegionBounds()
785 {
786 lock (m_regions)
787 {
788 foreach (RegionConnections rconn in m_regions.Values)
789 {
790 Vector3 offset = Vector3.Zero;
791 rconn.RegionScene.BordersLocked = true;
792 foreach (RegionData rdata in rconn.ConnectedRegions)
793 {
794 if (rdata.Offset.X > offset.X) offset.X = rdata.Offset.X;
795 if (rdata.Offset.Y > offset.Y) offset.Y = rdata.Offset.Y;
796 }
797
798 lock (rconn.RegionScene.NorthBorders)
799 {
800 Border northBorder = null;
801 // If we don't already have an infinite border, create one.
802 if (!TryGetInfiniteBorder(rconn.RegionScene.NorthBorders, out northBorder))
803 {
804 northBorder = new Border();
805 rconn.RegionScene.NorthBorders.Add(northBorder);
806 }
807
808 northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue,
809 offset.Y + (int) Constants.RegionSize); //<---
810 northBorder.CrossDirection = Cardinals.N;
811 }
812
813 lock (rconn.RegionScene.SouthBorders)
814 {
815 Border southBorder = null;
816 // If we don't already have an infinite border, create one.
817 if (!TryGetInfiniteBorder(rconn.RegionScene.SouthBorders, out southBorder))
818 {
819 southBorder = new Border();
820 rconn.RegionScene.SouthBorders.Add(southBorder);
821 }
822 southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, 0); //--->
823 southBorder.CrossDirection = Cardinals.S;
824 }
825
826 lock (rconn.RegionScene.EastBorders)
827 {
828 Border eastBorder = null;
829 // If we don't already have an infinite border, create one.
830 if (!TryGetInfiniteBorder(rconn.RegionScene.EastBorders, out eastBorder))
831 {
832 eastBorder = new Border();
833 rconn.RegionScene.EastBorders.Add(eastBorder);
834 }
835 eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, offset.X + (int)Constants.RegionSize);
836 //<---
837 eastBorder.CrossDirection = Cardinals.E;
838 }
839
840 lock (rconn.RegionScene.WestBorders)
841 {
842 Border westBorder = null;
843 // If we don't already have an infinite border, create one.
844 if (!TryGetInfiniteBorder(rconn.RegionScene.WestBorders, out westBorder))
845 {
846 westBorder = new Border();
847 rconn.RegionScene.WestBorders.Add(westBorder);
848
849 }
850 westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, 0); //--->
851 westBorder.CrossDirection = Cardinals.W;
852 }
853
854 rconn.RegionScene.BordersLocked = false;
855 }
856 }
857 }
858
859 /// <summary>
860 /// Try and get an Infinite border out of a listT of borders
861 /// </summary>
862 /// <param name="borders"></param>
863 /// <param name="oborder"></param>
864 /// <returns></returns>
865 public static bool TryGetInfiniteBorder(List<Border> borders, out Border oborder)
866 {
867 // Warning! Should be locked before getting here!
868 foreach (Border b in borders)
869 {
870 if (b.BorderLine.X == float.MinValue && b.BorderLine.Y == float.MaxValue)
871 {
872 oborder = b;
873 return true;
874 }
875 }
876 oborder = null;
877 return false;
878 }
879
880 public RegionData GetRegionFromPosition(Vector3 pPosition)
881 {
882 pPosition = pPosition/(int) Constants.RegionSize;
883 int OffsetX = (int) pPosition.X;
884 int OffsetY = (int) pPosition.Y;
885 foreach (RegionConnections regConn in m_regions.Values)
886 {
887 foreach (RegionData reg in regConn.ConnectedRegions)
888 {
889 if (reg.Offset.X == OffsetX && reg.Offset.Y == OffsetY)
890 return reg;
891 }
892 }
893 return new RegionData();
894 }
895
896 public void ForwardPermissionRequests(RegionConnections BigRegion, Scene VirtualRegion)
897 {
898 if (BigRegion.PermissionModule == null)
899 BigRegion.PermissionModule = new RegionCombinerPermissionModule(BigRegion.RegionScene);
900
901 VirtualRegion.Permissions.OnBypassPermissions += BigRegion.PermissionModule.BypassPermissions;
902 VirtualRegion.Permissions.OnSetBypassPermissions += BigRegion.PermissionModule.SetBypassPermissions;
903 VirtualRegion.Permissions.OnPropagatePermissions += BigRegion.PermissionModule.PropagatePermissions;
904 VirtualRegion.Permissions.OnGenerateClientFlags += BigRegion.PermissionModule.GenerateClientFlags;
905 VirtualRegion.Permissions.OnAbandonParcel += BigRegion.PermissionModule.CanAbandonParcel;
906 VirtualRegion.Permissions.OnReclaimParcel += BigRegion.PermissionModule.CanReclaimParcel;
907 VirtualRegion.Permissions.OnDeedParcel += BigRegion.PermissionModule.CanDeedParcel;
908 VirtualRegion.Permissions.OnDeedObject += BigRegion.PermissionModule.CanDeedObject;
909 VirtualRegion.Permissions.OnIsGod += BigRegion.PermissionModule.IsGod;
910 VirtualRegion.Permissions.OnDuplicateObject += BigRegion.PermissionModule.CanDuplicateObject;
911 VirtualRegion.Permissions.OnDeleteObject += BigRegion.PermissionModule.CanDeleteObject; //MAYBE FULLY IMPLEMENTED
912 VirtualRegion.Permissions.OnEditObject += BigRegion.PermissionModule.CanEditObject; //MAYBE FULLY IMPLEMENTED
913 VirtualRegion.Permissions.OnEditParcel += BigRegion.PermissionModule.CanEditParcel; //MAYBE FULLY IMPLEMENTED
914 VirtualRegion.Permissions.OnInstantMessage += BigRegion.PermissionModule.CanInstantMessage;
915 VirtualRegion.Permissions.OnInventoryTransfer += BigRegion.PermissionModule.CanInventoryTransfer; //NOT YET IMPLEMENTED
916 VirtualRegion.Permissions.OnIssueEstateCommand += BigRegion.PermissionModule.CanIssueEstateCommand; //FULLY IMPLEMENTED
917 VirtualRegion.Permissions.OnMoveObject += BigRegion.PermissionModule.CanMoveObject; //MAYBE FULLY IMPLEMENTED
918 VirtualRegion.Permissions.OnObjectEntry += BigRegion.PermissionModule.CanObjectEntry;
919 VirtualRegion.Permissions.OnReturnObject += BigRegion.PermissionModule.CanReturnObject; //NOT YET IMPLEMENTED
920 VirtualRegion.Permissions.OnRezObject += BigRegion.PermissionModule.CanRezObject; //MAYBE FULLY IMPLEMENTED
921 VirtualRegion.Permissions.OnRunConsoleCommand += BigRegion.PermissionModule.CanRunConsoleCommand;
922 VirtualRegion.Permissions.OnRunScript += BigRegion.PermissionModule.CanRunScript; //NOT YET IMPLEMENTED
923 VirtualRegion.Permissions.OnCompileScript += BigRegion.PermissionModule.CanCompileScript;
924 VirtualRegion.Permissions.OnSellParcel += BigRegion.PermissionModule.CanSellParcel;
925 VirtualRegion.Permissions.OnTakeObject += BigRegion.PermissionModule.CanTakeObject;
926 VirtualRegion.Permissions.OnTakeCopyObject += BigRegion.PermissionModule.CanTakeCopyObject;
927 VirtualRegion.Permissions.OnTerraformLand += BigRegion.PermissionModule.CanTerraformLand;
928 VirtualRegion.Permissions.OnLinkObject += BigRegion.PermissionModule.CanLinkObject; //NOT YET IMPLEMENTED
929 VirtualRegion.Permissions.OnDelinkObject += BigRegion.PermissionModule.CanDelinkObject; //NOT YET IMPLEMENTED
930 VirtualRegion.Permissions.OnBuyLand += BigRegion.PermissionModule.CanBuyLand; //NOT YET IMPLEMENTED
931 VirtualRegion.Permissions.OnViewNotecard += BigRegion.PermissionModule.CanViewNotecard; //NOT YET IMPLEMENTED
932 VirtualRegion.Permissions.OnViewScript += BigRegion.PermissionModule.CanViewScript; //NOT YET IMPLEMENTED
933 VirtualRegion.Permissions.OnEditNotecard += BigRegion.PermissionModule.CanEditNotecard; //NOT YET IMPLEMENTED
934 VirtualRegion.Permissions.OnEditScript += BigRegion.PermissionModule.CanEditScript; //NOT YET IMPLEMENTED
935 VirtualRegion.Permissions.OnCreateObjectInventory += BigRegion.PermissionModule.CanCreateObjectInventory; //NOT IMPLEMENTED HERE
936 VirtualRegion.Permissions.OnEditObjectInventory += BigRegion.PermissionModule.CanEditObjectInventory;//MAYBE FULLY IMPLEMENTED
937 VirtualRegion.Permissions.OnCopyObjectInventory += BigRegion.PermissionModule.CanCopyObjectInventory; //NOT YET IMPLEMENTED
938 VirtualRegion.Permissions.OnDeleteObjectInventory += BigRegion.PermissionModule.CanDeleteObjectInventory; //NOT YET IMPLEMENTED
939 VirtualRegion.Permissions.OnResetScript += BigRegion.PermissionModule.CanResetScript;
940 VirtualRegion.Permissions.OnCreateUserInventory += BigRegion.PermissionModule.CanCreateUserInventory; //NOT YET IMPLEMENTED
941 VirtualRegion.Permissions.OnCopyUserInventory += BigRegion.PermissionModule.CanCopyUserInventory; //NOT YET IMPLEMENTED
942 VirtualRegion.Permissions.OnEditUserInventory += BigRegion.PermissionModule.CanEditUserInventory; //NOT YET IMPLEMENTED
943 VirtualRegion.Permissions.OnDeleteUserInventory += BigRegion.PermissionModule.CanDeleteUserInventory; //NOT YET IMPLEMENTED
944 VirtualRegion.Permissions.OnTeleport += BigRegion.PermissionModule.CanTeleport; //NOT YET IMPLEMENTED
945 VirtualRegion.Permissions.OnUseObjectReturn += BigRegion.PermissionModule.CanUseObjectReturn; //NOT YET IMPLEMENTED
946 }
947
948 #region console commands
949 public void FixPhantoms(string module, string[] cmdparams)
950 {
951 List<Scene> scenes = new List<Scene>(m_startingScenes.Values);
952 foreach (Scene s in scenes)
953 {
954 s.ForEachSOG(delegate(SceneObjectGroup e)
955 {
956 e.AbsolutePosition = e.AbsolutePosition;
957 }
958 );
959 }
960 }
961 #endregion
962 }
963}
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerPermissionModule.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerPermissionModule.cs
deleted file mode 100644
index 76ca5e3..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerPermissionModule.cs
+++ /dev/null
@@ -1,275 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using OpenSim.Framework;
32using OpenSim.Region.Framework.Interfaces;
33using OpenSim.Region.Framework.Scenes;
34
35namespace OpenSim.Region.CoreModules.World.Land
36{
37 public class RegionCombinerPermissionModule
38 {
39 private Scene m_rootScene;
40
41 public RegionCombinerPermissionModule(Scene RootScene)
42 {
43 m_rootScene = RootScene;
44 }
45
46 #region Permission Override
47
48 public bool BypassPermissions()
49 {
50 return m_rootScene.Permissions.BypassPermissions();
51 }
52
53 public void SetBypassPermissions(bool value)
54 {
55 m_rootScene.Permissions.SetBypassPermissions(value);
56 }
57
58 public bool PropagatePermissions()
59 {
60 return m_rootScene.Permissions.PropagatePermissions();
61 }
62
63 public uint GenerateClientFlags(UUID userid, UUID objectidid)
64 {
65 return m_rootScene.Permissions.GenerateClientFlags(userid,objectidid);
66 }
67
68 public bool CanAbandonParcel(UUID user, ILandObject parcel, Scene scene)
69 {
70 return m_rootScene.Permissions.CanAbandonParcel(user,parcel);
71 }
72
73 public bool CanReclaimParcel(UUID user, ILandObject parcel, Scene scene)
74 {
75 return m_rootScene.Permissions.CanReclaimParcel(user, parcel);
76 }
77
78 public bool CanDeedParcel(UUID user, ILandObject parcel, Scene scene)
79 {
80 return m_rootScene.Permissions.CanDeedParcel(user, parcel);
81 }
82
83 public bool CanDeedObject(UUID user, UUID @group, Scene scene)
84 {
85 return m_rootScene.Permissions.CanDeedObject(user,@group);
86 }
87
88 public bool IsGod(UUID user, Scene requestfromscene)
89 {
90 return m_rootScene.Permissions.IsGod(user);
91 }
92
93 public bool CanDuplicateObject(int objectcount, UUID objectid, UUID owner, Scene scene, Vector3 objectposition)
94 {
95 return m_rootScene.Permissions.CanDuplicateObject(objectcount, objectid, owner, objectposition);
96 }
97
98 public bool CanDeleteObject(UUID objectid, UUID deleter, Scene scene)
99 {
100 return m_rootScene.Permissions.CanDeleteObject(objectid, deleter);
101 }
102
103 public bool CanEditObject(UUID objectid, UUID editorid, Scene scene)
104 {
105 return m_rootScene.Permissions.CanEditObject(objectid, editorid);
106 }
107
108 public bool CanEditParcel(UUID user, ILandObject parcel, Scene scene)
109 {
110 return m_rootScene.Permissions.CanEditParcel(user, parcel);
111 }
112
113 public bool CanInstantMessage(UUID user, UUID target, Scene startscene)
114 {
115 return m_rootScene.Permissions.CanInstantMessage(user, target);
116 }
117
118 public bool CanInventoryTransfer(UUID user, UUID target, Scene startscene)
119 {
120 return m_rootScene.Permissions.CanInventoryTransfer(user, target);
121 }
122
123 public bool CanIssueEstateCommand(UUID user, Scene requestfromscene, bool ownercommand)
124 {
125 return m_rootScene.Permissions.CanIssueEstateCommand(user, ownercommand);
126 }
127
128 public bool CanMoveObject(UUID objectid, UUID moverid, Scene scene)
129 {
130 return m_rootScene.Permissions.CanMoveObject(objectid, moverid);
131 }
132
133 public bool CanObjectEntry(UUID objectid, bool enteringregion, Vector3 newpoint, Scene scene)
134 {
135 return m_rootScene.Permissions.CanObjectEntry(objectid, enteringregion, newpoint);
136 }
137
138 public bool CanReturnObject(UUID objectid, UUID returnerid, Scene scene)
139 {
140 return m_rootScene.Permissions.CanReturnObject(objectid, returnerid);
141 }
142
143 public bool CanRezObject(int objectcount, UUID owner, Vector3 objectposition, Scene scene)
144 {
145 return m_rootScene.Permissions.CanRezObject(objectcount, owner, objectposition);
146 }
147
148 public bool CanRunConsoleCommand(UUID user, Scene requestfromscene)
149 {
150 return m_rootScene.Permissions.CanRunConsoleCommand(user);
151 }
152
153 public bool CanRunScript(UUID script, UUID objectid, UUID user, Scene scene)
154 {
155 return m_rootScene.Permissions.CanRunScript(script, objectid, user);
156 }
157
158 public bool CanCompileScript(UUID owneruuid, int scripttype, Scene scene)
159 {
160 return m_rootScene.Permissions.CanCompileScript(owneruuid, scripttype);
161 }
162
163 public bool CanSellParcel(UUID user, ILandObject parcel, Scene scene)
164 {
165 return m_rootScene.Permissions.CanSellParcel(user, parcel);
166 }
167
168 public bool CanTakeObject(UUID objectid, UUID stealer, Scene scene)
169 {
170 return m_rootScene.Permissions.CanTakeObject(objectid, stealer);
171 }
172
173 public bool CanTakeCopyObject(UUID objectid, UUID userid, Scene inscene)
174 {
175 return m_rootScene.Permissions.CanTakeObject(objectid, userid);
176 }
177
178 public bool CanTerraformLand(UUID user, Vector3 position, Scene requestfromscene)
179 {
180 return m_rootScene.Permissions.CanTerraformLand(user, position);
181 }
182
183 public bool CanLinkObject(UUID user, UUID objectid)
184 {
185 return m_rootScene.Permissions.CanLinkObject(user, objectid);
186 }
187
188 public bool CanDelinkObject(UUID user, UUID objectid)
189 {
190 return m_rootScene.Permissions.CanDelinkObject(user, objectid);
191 }
192
193 public bool CanBuyLand(UUID user, ILandObject parcel, Scene scene)
194 {
195 return m_rootScene.Permissions.CanBuyLand(user, parcel);
196 }
197
198 public bool CanViewNotecard(UUID script, UUID objectid, UUID user, Scene scene)
199 {
200 return m_rootScene.Permissions.CanViewNotecard(script, objectid, user);
201 }
202
203 public bool CanViewScript(UUID script, UUID objectid, UUID user, Scene scene)
204 {
205 return m_rootScene.Permissions.CanViewScript(script, objectid, user);
206 }
207
208 public bool CanEditNotecard(UUID notecard, UUID objectid, UUID user, Scene scene)
209 {
210 return m_rootScene.Permissions.CanEditNotecard(notecard, objectid, user);
211 }
212
213 public bool CanEditScript(UUID script, UUID objectid, UUID user, Scene scene)
214 {
215 return m_rootScene.Permissions.CanEditScript(script, objectid, user);
216 }
217
218 public bool CanCreateObjectInventory(int invtype, UUID objectid, UUID userid)
219 {
220 return m_rootScene.Permissions.CanCreateObjectInventory(invtype, objectid, userid);
221 }
222
223 public bool CanEditObjectInventory(UUID objectid, UUID editorid, Scene scene)
224 {
225 return m_rootScene.Permissions.CanEditObjectInventory(objectid, editorid);
226 }
227
228 public bool CanCopyObjectInventory(UUID itemid, UUID objectid, UUID userid)
229 {
230 return m_rootScene.Permissions.CanCopyObjectInventory(itemid, objectid, userid);
231 }
232
233 public bool CanDeleteObjectInventory(UUID itemid, UUID objectid, UUID userid)
234 {
235 return m_rootScene.Permissions.CanDeleteObjectInventory(itemid, objectid, userid);
236 }
237
238 public bool CanResetScript(UUID prim, UUID script, UUID user, Scene scene)
239 {
240 return m_rootScene.Permissions.CanResetScript(prim, script, user);
241 }
242
243 public bool CanCreateUserInventory(int invtype, UUID userid)
244 {
245 return m_rootScene.Permissions.CanCreateUserInventory(invtype, userid);
246 }
247
248 public bool CanCopyUserInventory(UUID itemid, UUID userid)
249 {
250 return m_rootScene.Permissions.CanCopyUserInventory(itemid, userid);
251 }
252
253 public bool CanEditUserInventory(UUID itemid, UUID userid)
254 {
255 return m_rootScene.Permissions.CanEditUserInventory(itemid, userid);
256 }
257
258 public bool CanDeleteUserInventory(UUID itemid, UUID userid)
259 {
260 return m_rootScene.Permissions.CanDeleteUserInventory(itemid, userid);
261 }
262
263 public bool CanTeleport(UUID userid, Scene scene)
264 {
265 return m_rootScene.Permissions.CanTeleport(userid);
266 }
267
268 public bool CanUseObjectReturn(ILandObject landdata, uint type, IClientAPI client, List<SceneObjectGroup> retlist, Scene scene)
269 {
270 return m_rootScene.Permissions.CanUseObjectReturn(landdata, type, client, retlist);
271 }
272
273 #endregion
274 }
275} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionConnections.cs b/OpenSim/Region/CoreModules/World/Land/RegionConnections.cs
deleted file mode 100644
index 419ed74..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionConnections.cs
+++ /dev/null
@@ -1,65 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using OpenSim.Region.Framework.Interfaces;
32using OpenSim.Region.Framework.Scenes;
33
34namespace OpenSim.Region.CoreModules.World.Land
35{
36 public class RegionConnections
37 {
38 /// <summary>
39 /// Root Region ID
40 /// </summary>
41 public UUID RegionId;
42
43 /// <summary>
44 /// Root Region Scene
45 /// </summary>
46 public Scene RegionScene;
47
48 /// <summary>
49 /// LargeLandChannel for combined region
50 /// </summary>
51 public ILandChannel RegionLandChannel;
52 public uint X;
53 public uint Y;
54 public int XEnd;
55 public int YEnd;
56 public List<RegionData> ConnectedRegions;
57 public RegionCombinerPermissionModule PermissionModule;
58 public RegionCombinerClientEventForwarder ClientEventForwarder;
59 public void UpdateExtents(Vector3 extents)
60 {
61 XEnd = (int)extents.X;
62 YEnd = (int)extents.Y;
63 }
64 }
65} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCourseLocation.cs b/OpenSim/Region/CoreModules/World/Land/RegionCourseLocation.cs
deleted file mode 100644
index 175ca89..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionCourseLocation.cs
+++ /dev/null
@@ -1,43 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using OpenSim.Framework;
32
33namespace OpenSim.Region.CoreModules.World.Land
34{
35
36 struct RegionCourseLocationStruct
37 {
38 public List<Vector3> Locations;
39 public List<UUID> Uuids;
40 public IClientAPI UserAPI;
41 public Vector2 Offset;
42 }
43} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionData.cs b/OpenSim/Region/CoreModules/World/Land/RegionData.cs
deleted file mode 100644
index 3383527..0000000
--- a/OpenSim/Region/CoreModules/World/Land/RegionData.cs
+++ /dev/null
@@ -1,39 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using OpenMetaverse;
29using OpenSim.Region.Framework.Scenes;
30
31namespace OpenSim.Region.CoreModules.World.Land
32{
33 public class RegionData
34 {
35 public UUID RegionId;
36 public Scene RegionScene;
37 public Vector3 Offset;
38 }
39} \ No newline at end of file