aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs47
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs32
4 files changed, 59 insertions, 27 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 221eb47..8af7514 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -145,6 +145,8 @@ namespace OpenSim.Region.Framework.Scenes
145 145
146 protected SceneCommunicationService m_sceneGridService; 146 protected SceneCommunicationService m_sceneGridService;
147 public bool LoginsDisabled = true; 147 public bool LoginsDisabled = true;
148 public bool LoadingPrims = false;
149 public bool CombineRegions = false;
148 150
149 public new float TimeDilation 151 public new float TimeDilation
150 { 152 {
@@ -655,6 +657,7 @@ namespace OpenSim.Region.Framework.Scenes
655 } 657 }
656 658
657 m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl); 659 m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl);
660 CombineRegions = startupConfig.GetBoolean("CombineContiguousRegions", false);
658 661
659 IConfig interest_management_config = m_config.Configs["InterestManagement"]; 662 IConfig interest_management_config = m_config.Configs["InterestManagement"];
660 if (interest_management_config != null) 663 if (interest_management_config != null)
@@ -1691,6 +1694,7 @@ namespace OpenSim.Region.Framework.Scenes
1691 /// </summary> 1694 /// </summary>
1692 public virtual void LoadPrimsFromStorage(UUID regionID) 1695 public virtual void LoadPrimsFromStorage(UUID regionID)
1693 { 1696 {
1697 LoadingPrims = true;
1694 m_log.Info("[SCENE]: Loading objects from datastore"); 1698 m_log.Info("[SCENE]: Loading objects from datastore");
1695 1699
1696 List<SceneObjectGroup> PrimsFromDB = m_storageManager.DataStore.LoadObjects(regionID); 1700 List<SceneObjectGroup> PrimsFromDB = m_storageManager.DataStore.LoadObjects(regionID);
@@ -1714,6 +1718,7 @@ namespace OpenSim.Region.Framework.Scenes
1714 } 1718 }
1715 1719
1716 m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)"); 1720 m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
1721 LoadingPrims = false;
1717 } 1722 }
1718 1723
1719 1724
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 5a1922a..1d126b6 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -226,30 +226,33 @@ namespace OpenSim.Region.Framework.Scenes
226 protected internal bool AddRestoredSceneObject( 226 protected internal bool AddRestoredSceneObject(
227 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates) 227 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted, bool sendClientUpdates)
228 { 228 {
229 // KF: Check for out-of-region, move inside and make static. 229 if (!m_parentScene.CombineRegions)
230 Vector3 npos = new Vector3(sceneObject.RootPart.GroupPosition.X, 230 {
231 sceneObject.RootPart.GroupPosition.Y, 231 // KF: Check for out-of-region, move inside and make static.
232 sceneObject.RootPart.GroupPosition.Z); 232 Vector3 npos = new Vector3(sceneObject.RootPart.GroupPosition.X,
233 if (!(((sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) && (sceneObject.RootPart.Shape.State != 0))) && (npos.X < 0.0 || npos.Y < 0.0 || npos.Z < 0.0 || 233 sceneObject.RootPart.GroupPosition.Y,
234 npos.X > Constants.RegionSize || 234 sceneObject.RootPart.GroupPosition.Z);
235 npos.Y > Constants.RegionSize)) 235 if (!(((sceneObject.RootPart.Shape.PCode == (byte)PCode.Prim) && (sceneObject.RootPart.Shape.State != 0))) && (npos.X < 0.0 || npos.Y < 0.0 || npos.Z < 0.0 ||
236 { 236 npos.X > Constants.RegionSize ||
237 if (npos.X < 0.0) npos.X = 1.0f; 237 npos.Y > Constants.RegionSize))
238 if (npos.Y < 0.0) npos.Y = 1.0f;
239 if (npos.Z < 0.0) npos.Z = 0.0f;
240 if (npos.X > Constants.RegionSize) npos.X = Constants.RegionSize - 1.0f;
241 if (npos.Y > Constants.RegionSize) npos.Y = Constants.RegionSize - 1.0f;
242
243 foreach (SceneObjectPart part in sceneObject.Children.Values)
244 { 238 {
245 part.GroupPosition = npos; 239 if (npos.X < 0.0) npos.X = 1.0f;
240 if (npos.Y < 0.0) npos.Y = 1.0f;
241 if (npos.Z < 0.0) npos.Z = 0.0f;
242 if (npos.X > Constants.RegionSize) npos.X = Constants.RegionSize - 1.0f;
243 if (npos.Y > Constants.RegionSize) npos.Y = Constants.RegionSize - 1.0f;
244
245 foreach (SceneObjectPart part in sceneObject.Children.Values)
246 {
247 part.GroupPosition = npos;
248 }
249 sceneObject.RootPart.Velocity = Vector3.Zero;
250 sceneObject.RootPart.AngularVelocity = Vector3.Zero;
251 sceneObject.RootPart.Acceleration = Vector3.Zero;
252 sceneObject.RootPart.Velocity = Vector3.Zero;
246 } 253 }
247 sceneObject.RootPart.Velocity = Vector3.Zero; 254 }
248 sceneObject.RootPart.AngularVelocity = Vector3.Zero; 255
249 sceneObject.RootPart.Acceleration = Vector3.Zero;
250 sceneObject.RootPart.Velocity = Vector3.Zero;
251 }
252
253 if (!alreadyPersisted) 256 if (!alreadyPersisted)
254 { 257 {
255 sceneObject.ForceInventoryPersistence(); 258 sceneObject.ForceInventoryPersistence();
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 93f45e0..54b27b2 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -404,7 +404,7 @@ namespace OpenSim.Region.Framework.Scenes
404 404
405 if ((m_scene.TestBorderCross(val - Vector3.UnitX, Cardinals.E) || m_scene.TestBorderCross(val + Vector3.UnitX, Cardinals.W) 405 if ((m_scene.TestBorderCross(val - Vector3.UnitX, Cardinals.E) || m_scene.TestBorderCross(val + Vector3.UnitX, Cardinals.W)
406 || m_scene.TestBorderCross(val - Vector3.UnitY, Cardinals.N) || m_scene.TestBorderCross(val + Vector3.UnitY, Cardinals.S)) 406 || m_scene.TestBorderCross(val - Vector3.UnitY, Cardinals.N) || m_scene.TestBorderCross(val + Vector3.UnitY, Cardinals.S))
407 && !IsAttachmentCheckFull()) 407 && !IsAttachmentCheckFull() && (!m_scene.LoadingPrims))
408 { 408 {
409 m_scene.CrossPrimGroupIntoNewRegion(val, this, true); 409 m_scene.CrossPrimGroupIntoNewRegion(val, this, true);
410 } 410 }
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 3bdbdfb..c8f6559 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1359,9 +1359,23 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1359 string xml = instance.GetXMLState(); 1359 string xml = instance.GetXMLState();
1360 1360
1361 XmlDocument sdoc = new XmlDocument(); 1361 XmlDocument sdoc = new XmlDocument();
1362 sdoc.LoadXml(xml); 1362 bool loadedState = true;
1363 XmlNodeList rootL = sdoc.GetElementsByTagName("ScriptState"); 1363 try
1364 XmlNode rootNode = rootL[0]; 1364 {
1365 sdoc.LoadXml(xml);
1366 }
1367 catch (System.Xml.XmlException e)
1368 {
1369 loadedState = false;
1370 }
1371
1372 XmlNodeList rootL = null;
1373 XmlNode rootNode = null;
1374 if (loadedState)
1375 {
1376 rootL = sdoc.GetElementsByTagName("ScriptState");
1377 rootNode = rootL[0];
1378 }
1365 1379
1366 // Create <State UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"> 1380 // Create <State UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
1367 XmlDocument doc = new XmlDocument(); 1381 XmlDocument doc = new XmlDocument();
@@ -1377,8 +1391,18 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1377 stateData.Attributes.Append(engineName); 1391 stateData.Attributes.Append(engineName);
1378 doc.AppendChild(stateData); 1392 doc.AppendChild(stateData);
1379 1393
1394 XmlNode xmlstate = null;
1395
1380 // Add <ScriptState>...</ScriptState> 1396 // Add <ScriptState>...</ScriptState>
1381 XmlNode xmlstate = doc.ImportNode(rootNode, true); 1397 if (loadedState)
1398 {
1399 xmlstate = doc.ImportNode(rootNode, true);
1400 }
1401 else
1402 {
1403 xmlstate = doc.CreateElement("", "ScriptState", "");
1404 }
1405
1382 stateData.AppendChild(xmlstate); 1406 stateData.AppendChild(xmlstate);
1383 1407
1384 string assemName = instance.GetAssemblyName(); 1408 string assemName = instance.GetAssemblyName();