Save the Telehub and its Spawn Points in the OAR
Signed-off-by: BlueWall <jamesh@bluewallgroup.com>0.7.4.1
parent
480216f50f
commit
b0b7b45b94
|
@ -29,6 +29,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace OpenSim.Framework
|
namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
|
@ -71,6 +72,32 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
return pos + offset;
|
return pos + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns a string representation of this SpawnPoint.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return string.Format("{0},{1},{2}", Yaw, Pitch, Distance);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate a SpawnPoint from a string
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="str"></param>
|
||||||
|
public static SpawnPoint Parse(string str)
|
||||||
|
{
|
||||||
|
string[] parts = str.Split(',');
|
||||||
|
if (parts.Length != 3)
|
||||||
|
throw new ArgumentException("Invalid string: " + str);
|
||||||
|
|
||||||
|
SpawnPoint sp = new SpawnPoint();
|
||||||
|
sp.Yaw = float.Parse(parts[0]);
|
||||||
|
sp.Pitch = float.Parse(parts[1]);
|
||||||
|
sp.Distance = float.Parse(parts[2]);
|
||||||
|
return sp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RegionSettings
|
public class RegionSettings
|
||||||
|
@ -456,7 +483,7 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connected Telehub object
|
// Connected Telehub object
|
||||||
private UUID m_TelehubObject;
|
private UUID m_TelehubObject = UUID.Zero;
|
||||||
public UUID TelehubObject
|
public UUID TelehubObject
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
@ -30,6 +30,8 @@ using System.Text;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
using log4net;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Serialization.External
|
namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
|
@ -188,6 +190,28 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xtr.ReadEndElement();
|
||||||
|
|
||||||
|
if (xtr.IsStartElement("Telehub"))
|
||||||
|
{
|
||||||
|
xtr.ReadStartElement("Telehub");
|
||||||
|
|
||||||
|
while (xtr.Read() && xtr.NodeType != XmlNodeType.EndElement)
|
||||||
|
{
|
||||||
|
switch (xtr.Name)
|
||||||
|
{
|
||||||
|
case "TelehubObject":
|
||||||
|
settings.TelehubObject = UUID.Parse(xtr.ReadElementContentAsString());
|
||||||
|
break;
|
||||||
|
case "SpawnPoint":
|
||||||
|
string str = xtr.ReadElementContentAsString();
|
||||||
|
SpawnPoint sp = SpawnPoint.Parse(str);
|
||||||
|
settings.AddSpawnPoint(sp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
xtr.Close();
|
xtr.Close();
|
||||||
sr.Close();
|
sr.Close();
|
||||||
|
|
||||||
|
@ -245,6 +269,15 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
// calculates it automatically according to the date and other factors.
|
// calculates it automatically according to the date and other factors.
|
||||||
xtw.WriteEndElement();
|
xtw.WriteEndElement();
|
||||||
|
|
||||||
|
xtw.WriteStartElement("Telehub");
|
||||||
|
if (settings.TelehubObject != UUID.Zero)
|
||||||
|
{
|
||||||
|
xtw.WriteElementString("TelehubObject", settings.TelehubObject.ToString());
|
||||||
|
foreach (SpawnPoint sp in settings.SpawnPoints())
|
||||||
|
xtw.WriteElementString("SpawnPoint", sp.ToString());
|
||||||
|
}
|
||||||
|
xtw.WriteEndElement();
|
||||||
|
|
||||||
xtw.WriteEndElement();
|
xtw.WriteEndElement();
|
||||||
|
|
||||||
xtw.Close();
|
xtw.Close();
|
||||||
|
|
|
@ -78,6 +78,10 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
<FixedSun>true</FixedSun>
|
<FixedSun>true</FixedSun>
|
||||||
<SunPosition>12</SunPosition>
|
<SunPosition>12</SunPosition>
|
||||||
</Terrain>
|
</Terrain>
|
||||||
|
<Telehub>
|
||||||
|
<TelehubObject>00000000-0000-0000-0000-111111111111</TelehubObject>
|
||||||
|
<SpawnPoint>1,-2,0.33</SpawnPoint>
|
||||||
|
</Telehub>
|
||||||
</RegionSettings>";
|
</RegionSettings>";
|
||||||
|
|
||||||
private RegionSettings m_rs;
|
private RegionSettings m_rs;
|
||||||
|
@ -116,6 +120,8 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
m_rs.TerrainTexture4 = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
m_rs.TerrainTexture4 = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
||||||
m_rs.UseEstateSun = true;
|
m_rs.UseEstateSun = true;
|
||||||
m_rs.WaterHeight = 23;
|
m_rs.WaterHeight = 23;
|
||||||
|
m_rs.TelehubObject = UUID.Parse("00000000-0000-0000-0000-111111111111");
|
||||||
|
m_rs.AddSpawnPoint(SpawnPoint.Parse("1,-2,0.33"));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
@ -129,6 +135,8 @@ namespace OpenSim.Framework.Serialization.Tests
|
||||||
Assert.That(deserRs.TerrainTexture2, Is.EqualTo(m_rs.TerrainTexture2));
|
Assert.That(deserRs.TerrainTexture2, Is.EqualTo(m_rs.TerrainTexture2));
|
||||||
Assert.That(deserRs.DisablePhysics, Is.EqualTo(m_rs.DisablePhysics));
|
Assert.That(deserRs.DisablePhysics, Is.EqualTo(m_rs.DisablePhysics));
|
||||||
Assert.That(deserRs.TerrainLowerLimit, Is.EqualTo(m_rs.TerrainLowerLimit));
|
Assert.That(deserRs.TerrainLowerLimit, Is.EqualTo(m_rs.TerrainLowerLimit));
|
||||||
|
Assert.That(deserRs.TelehubObject, Is.EqualTo(m_rs.TelehubObject));
|
||||||
|
Assert.That(deserRs.SpawnPoints()[0].ToString(), Is.EqualTo(m_rs.SpawnPoints()[0].ToString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,6 +245,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
// Reload serialized prims
|
// Reload serialized prims
|
||||||
m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count);
|
m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count);
|
||||||
|
|
||||||
|
UUID oldTelehubUUID = m_scene.RegionInfo.RegionSettings.TelehubObject;
|
||||||
|
|
||||||
IRegionSerialiserModule serialiser = m_scene.RequestModuleInterface<IRegionSerialiserModule>();
|
IRegionSerialiserModule serialiser = m_scene.RequestModuleInterface<IRegionSerialiserModule>();
|
||||||
int sceneObjectsLoadedCount = 0;
|
int sceneObjectsLoadedCount = 0;
|
||||||
|
|
||||||
|
@ -266,11 +268,21 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
SceneObjectGroup sceneObject = serialiser.DeserializeGroupFromXml2(serialisedSceneObject);
|
SceneObjectGroup sceneObject = serialiser.DeserializeGroupFromXml2(serialisedSceneObject);
|
||||||
|
|
||||||
|
bool isTelehub = (sceneObject.UUID == oldTelehubUUID);
|
||||||
|
|
||||||
// For now, give all incoming scene objects new uuids. This will allow scenes to be cloned
|
// For now, give all incoming scene objects new uuids. This will allow scenes to be cloned
|
||||||
// on the same region server and multiple examples a single object archive to be imported
|
// on the same region server and multiple examples a single object archive to be imported
|
||||||
// to the same scene (when this is possible).
|
// to the same scene (when this is possible).
|
||||||
sceneObject.ResetIDs();
|
sceneObject.ResetIDs();
|
||||||
|
|
||||||
|
if (isTelehub)
|
||||||
|
{
|
||||||
|
// Change the Telehub Object to the new UUID
|
||||||
|
m_scene.RegionInfo.RegionSettings.TelehubObject = sceneObject.UUID;
|
||||||
|
m_scene.RegionInfo.RegionSettings.Save();
|
||||||
|
oldTelehubUUID = UUID.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
// Try to retain the original creator/owner/lastowner if their uuid is present on this grid
|
// Try to retain the original creator/owner/lastowner if their uuid is present on this grid
|
||||||
// or creator data is present. Otherwise, use the estate owner instead.
|
// or creator data is present. Otherwise, use the estate owner instead.
|
||||||
foreach (SceneObjectPart part in sceneObject.Parts)
|
foreach (SceneObjectPart part in sceneObject.Parts)
|
||||||
|
@ -330,6 +342,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
|
|
||||||
if (ignoredObjects > 0)
|
if (ignoredObjects > 0)
|
||||||
m_log.WarnFormat("[ARCHIVER]: Ignored {0} scene objects that already existed in the scene", ignoredObjects);
|
m_log.WarnFormat("[ARCHIVER]: Ignored {0} scene objects that already existed in the scene", ignoredObjects);
|
||||||
|
|
||||||
|
if (oldTelehubUUID != UUID.Zero)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("Telehub object not found: {0}", oldTelehubUUID);
|
||||||
|
m_scene.RegionInfo.RegionSettings.TelehubObject = UUID.Zero;
|
||||||
|
m_scene.RegionInfo.RegionSettings.ClearSpawnPoints();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -505,6 +524,10 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
currentRegionSettings.TerrainTexture4 = loadedRegionSettings.TerrainTexture4;
|
currentRegionSettings.TerrainTexture4 = loadedRegionSettings.TerrainTexture4;
|
||||||
currentRegionSettings.UseEstateSun = loadedRegionSettings.UseEstateSun;
|
currentRegionSettings.UseEstateSun = loadedRegionSettings.UseEstateSun;
|
||||||
currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight;
|
currentRegionSettings.WaterHeight = loadedRegionSettings.WaterHeight;
|
||||||
|
currentRegionSettings.TelehubObject = loadedRegionSettings.TelehubObject;
|
||||||
|
currentRegionSettings.ClearSpawnPoints();
|
||||||
|
foreach (SpawnPoint sp in loadedRegionSettings.SpawnPoints())
|
||||||
|
currentRegionSettings.AddSpawnPoint(sp);
|
||||||
|
|
||||||
currentRegionSettings.Save();
|
currentRegionSettings.Save();
|
||||||
|
|
||||||
|
|
|
@ -328,7 +328,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public string CreateControlFile(Dictionary<string, object> options)
|
public string CreateControlFile(Dictionary<string, object> options)
|
||||||
{
|
{
|
||||||
int majorVersion = MAX_MAJOR_VERSION, minorVersion = 7;
|
int majorVersion = MAX_MAJOR_VERSION, minorVersion = 8;
|
||||||
//
|
//
|
||||||
// if (options.ContainsKey("version"))
|
// if (options.ContainsKey("version"))
|
||||||
// {
|
// {
|
||||||
|
|
|
@ -534,6 +534,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
rs.TerrainTexture4 = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
rs.TerrainTexture4 = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
||||||
rs.UseEstateSun = true;
|
rs.UseEstateSun = true;
|
||||||
rs.WaterHeight = 23;
|
rs.WaterHeight = 23;
|
||||||
|
rs.TelehubObject = UUID.Parse("00000000-0000-0000-0000-111111111111");
|
||||||
|
rs.AddSpawnPoint(SpawnPoint.Parse("1,-2,0.33"));
|
||||||
|
|
||||||
tar.WriteFile(ArchiveConstants.SETTINGS_PATH + "region1.xml", RegionSettingsSerializer.Serialize(rs));
|
tar.WriteFile(ArchiveConstants.SETTINGS_PATH + "region1.xml", RegionSettingsSerializer.Serialize(rs));
|
||||||
|
|
||||||
|
@ -580,6 +582,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
Assert.That(loadedRs.TerrainTexture4, Is.EqualTo(UUID.Parse("00000000-0000-0000-0000-000000000080")));
|
Assert.That(loadedRs.TerrainTexture4, Is.EqualTo(UUID.Parse("00000000-0000-0000-0000-000000000080")));
|
||||||
Assert.That(loadedRs.UseEstateSun, Is.True);
|
Assert.That(loadedRs.UseEstateSun, Is.True);
|
||||||
Assert.That(loadedRs.WaterHeight, Is.EqualTo(23));
|
Assert.That(loadedRs.WaterHeight, Is.EqualTo(23));
|
||||||
|
Assert.AreEqual(UUID.Zero, loadedRs.TelehubObject); // because no object was found with the original UUID
|
||||||
|
Assert.AreEqual(0, loadedRs.SpawnPoints().Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue