The map is seriously broken. This doesn't fix it, but at least provides one more piece of data that seems to be required -- agent flags, which seem to be different in Viewer 2. WARNING: changes IClientAPI.

bulletsim
Diva Canto 2011-05-08 22:50:04 -07:00
parent fd66903f74
commit c0a69bfaab
3 changed files with 6 additions and 7 deletions

View File

@ -77,7 +77,7 @@ namespace OpenSim.Framework
public delegate void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag);
public delegate void RequestMapName(IClientAPI remoteClient, string mapName);
public delegate void RequestMapName(IClientAPI remoteClient, string mapName, uint flags);
public delegate void TeleportLocationRequest(
IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags);

View File

@ -8264,13 +8264,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return true;
}
#endregion
string mapName = Util.UTF8.GetString(map.NameData.Name, 0,
map.NameData.Name.Length - 1);
RequestMapName handlerMapNameRequest = OnMapNameRequest;
if (handlerMapNameRequest != null)
{
handlerMapNameRequest(this, mapName);
handlerMapNameRequest(this, mapName, map.AgentData.Flags);
}
return true;
}

View File

@ -84,7 +84,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
client.OnMapNameRequest += OnMapNameRequest;
}
private void OnMapNameRequest(IClientAPI remoteClient, string mapName)
private void OnMapNameRequest(IClientAPI remoteClient, string mapName, uint flags)
{
if (mapName.Length < 3)
{
@ -139,9 +139,9 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
data.Y = 0;
blocks.Add(data);
// not sure what the flags do here, but seems to be necessary
// to set to "2" for viewer 2
remoteClient.SendMapBlock(blocks, 2);
// flags are agent flags sent from the viewer.
// they have different values depending on different viewers, apparently
remoteClient.SendMapBlock(blocks, flags);
}
// private Scene GetClientScene(IClientAPI client)