From b8e8a33d60b98894671a34a19e8d982463fa4785 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 29 Nov 2008 13:49:20 +0000 Subject: Mantis #2584 Applying a patch from Diva. This patch introduces significant improvements in teleporting. Thank you, Diva. --- .../Environment/Scenes/SceneCommunicationService.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs') diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs index 64da9d4..54d4298 100644 --- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs @@ -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 -- cgit v1.1