Applying a patch from Diva. This patch introduces significant improvements
in teleporting. Thank you, Diva.
This commit is contained in:
Melanie Thielker
2008-11-29 13:49:20 +00:00
parent 1b3a3ffc77
commit b8e8a33d60
3 changed files with 51 additions and 1 deletions

View File

@@ -662,6 +662,7 @@ namespace OpenSim.Region.Environment.Scenes
if (destRegionUp)
{
// Fixing a bug where teleporting while sitting results in the avatar ending up removed from
// both regions
if (avatar.ParentID != (uint)0)
@@ -681,6 +682,16 @@ namespace OpenSim.Region.Environment.Scenes
avatar.Scene.RemoveCapsHandler(avatar.UUID);
agent.child = false;
m_commsProvider.InterRegion.InformRegionOfChildAgent(reg.RegionHandle, agent);
if (eq != null)
{
OSD Item = EventQueueHelper.EnableSimulator(reg.RegionHandle, reg.ExternalEndPoint);
eq.Enqueue(Item, avatar.UUID);
}
else
{
avatar.ControllingClient.InformClientOfNeighbour(reg.RegionHandle, reg.ExternalEndPoint);
}
m_commsProvider.InterRegion.ExpectAvatarCrossing(reg.RegionHandle, avatar.ControllingClient.AgentId,
position, false);
@@ -724,8 +735,14 @@ namespace OpenSim.Region.Environment.Scenes
uint oldRegionY = (((uint)(m_regionInfo.RegionHandle)) >> 8);
if (Util.fast_distance2d((int)(newRegionX - oldRegionX), (int)(newRegionY - oldRegionY)) > 3)
{
SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
//SendCloseChildAgentConnections(avatar.UUID,avatar.GetKnownRegionList());
SendCloseChildAgentConnections(avatar.UUID, childRegions);
if (eq != null)
{
OSD Item = EventQueueHelper.DisableSimulator(m_regionInfo.RegionHandle);
eq.Enqueue(Item, avatar.UUID);
}
Thread.Sleep(2000);
CloseConnection(avatar.UUID);
}
// if (teleport success) // seems to be always success here