Mantis #2142
Thank you, HomerHorwitz, for a patch that fixes landmark teleport and about landmarks with the new OMV types.0.6.0-stable
parent
0c7e87ee5e
commit
58d79b33ff
|
@ -53,7 +53,8 @@ namespace OpenSim.Framework
|
|||
string[] parts = temp.Split('\n');
|
||||
int.TryParse(parts[0].Substring(17, 1), out Version);
|
||||
UUID.TryParse(parts[1].Substring(10, 36), out RegionID);
|
||||
Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10), out Position);
|
||||
// the vector is stored with spaces as separators, not with commas ("10.3 32.5 43" instead of "10.3, 32.5, 43")
|
||||
Vector3.TryParse(parts[2].Substring(10, parts[2].Length - 10).Replace(" ", ","), out Position);
|
||||
ulong.TryParse(parts[3].Substring(14, parts[3].Length - 14), out RegionHandle);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -727,6 +727,21 @@ namespace OpenSim.Framework
|
|||
return client.Send(url, 6000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a byte array in big endian order into an ulong.
|
||||
/// </summary>
|
||||
/// <param name="bytes">
|
||||
/// The array of bytes
|
||||
/// </param>
|
||||
/// <returns>
|
||||
/// The extracted ulong
|
||||
/// </returns>
|
||||
public static ulong BytesToUInt64Big(byte[] bytes) {
|
||||
if(bytes.Length < 8) return 0;
|
||||
return ((ulong)bytes[0] << 56) | ((ulong)bytes[1] << 48) | ((ulong)bytes[2] << 40) | ((ulong)bytes[3] << 32) |
|
||||
((ulong)bytes[4] << 24) | ((ulong)bytes[5] << 16) | ((ulong)bytes[6] << 8) | (ulong)bytes[7];
|
||||
}
|
||||
|
||||
// used for RemoteParcelRequest (for "About Landmark")
|
||||
public static UUID BuildFakeParcelID(ulong regionHandle, uint x, uint y) {
|
||||
byte[] bytes = {
|
||||
|
|
|
@ -1674,10 +1674,11 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
IList paramList = new ArrayList();
|
||||
paramList.Add(hash);
|
||||
|
||||
try
|
||||
{
|
||||
// this might be cached, as we probably requested it just a moment ago...
|
||||
RegionInfo info = RequestNeighbourInfo(regionHandle);
|
||||
|
||||
try
|
||||
if (info != null) // just to be sure
|
||||
{
|
||||
XmlRpcRequest request = new XmlRpcRequest("land_data", paramList);
|
||||
string uri = "http://" + info.ExternalEndPoint.Address + ":" + info.HttpPort + "/";
|
||||
|
@ -1711,6 +1712,8 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
}
|
||||
}
|
||||
}
|
||||
else m_log.WarnFormat("[OGS1 GRID SERVICES] Couldn't find region with handle {0}", regionHandle);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat("[OGS1 GRID SERVICES] Couldn't contact region {0}: {1}", regionHandle, e);
|
||||
|
|
|
@ -1111,7 +1111,7 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
|||
{
|
||||
// if you do a "About Landmark" on a landmark a second time, the viewer sends the
|
||||
// region_handle it got earlier via RegionHandleRequest
|
||||
ulong regionHandle = Helpers.BytesToUInt64((byte[])hash["region_handle"]);
|
||||
ulong regionHandle = Util.BytesToUInt64Big((byte[])hash["region_handle"]);
|
||||
parcelID = Util.BuildFakeParcelID(regionHandle, x, y);
|
||||
}
|
||||
else if (regionID == m_scene.RegionInfo.RegionID)
|
||||
|
|
Loading…
Reference in New Issue