fix HG tp detection
parent
04f44bcf99
commit
fc075c61ed
|
@ -534,52 +534,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// region inside a varregion.
|
// region inside a varregion.
|
||||||
GridRegion reg = GetTeleportDestinationRegion(sp.Scene.GridService, sp.Scene.RegionInfo.ScopeID, regionHandle, ref position);
|
GridRegion reg = GetTeleportDestinationRegion(sp.Scene.GridService, sp.Scene.RegionInfo.ScopeID, regionHandle, ref position);
|
||||||
|
|
||||||
if (reg != null)
|
if( reg == null)
|
||||||
{
|
|
||||||
string homeURI = Scene.GetAgentHomeURI(sp.ControllingClient.AgentId);
|
|
||||||
|
|
||||||
string reason = String.Empty;
|
|
||||||
finalDestination = GetFinalDestination(reg, sp.ControllingClient.AgentId, homeURI, out reason);
|
|
||||||
|
|
||||||
if (finalDestination == null)
|
|
||||||
{
|
|
||||||
m_log.WarnFormat( "{0} Final destination is having problems. Unable to teleport {1} {2}: {3}",
|
|
||||||
LogHeader, sp.Name, sp.UUID, reason);
|
|
||||||
|
|
||||||
sp.ControllingClient.SendTeleportFailed(reason);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check that these are not the same coordinates
|
|
||||||
if (finalDestination.RegionLocX == sp.Scene.RegionInfo.RegionLocX &&
|
|
||||||
finalDestination.RegionLocY == sp.Scene.RegionInfo.RegionLocY)
|
|
||||||
{
|
|
||||||
// Can't do. Viewer crashes
|
|
||||||
sp.ControllingClient.SendTeleportFailed("Space warp! You would crash. Move to a different region and try again.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ValidateGenericConditions(sp, reg, finalDestination, teleportFlags, out reason))
|
|
||||||
{
|
|
||||||
sp.ControllingClient.SendTeleportFailed(reason);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// This is it
|
|
||||||
//
|
|
||||||
DoTeleportInternal(sp, reg, finalDestination, position, lookAt, teleportFlags);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
finalDestination = null;
|
finalDestination = null;
|
||||||
|
|
||||||
// TP to a place that doesn't exist (anymore)
|
// TP to a place that doesn't exist (anymore)
|
||||||
// Inform the viewer about that
|
// Inform the viewer about that
|
||||||
sp.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore");
|
sp.ControllingClient.SendTeleportFailed("The region you tried to teleport to was not found");
|
||||||
|
|
||||||
// and set the map-tile to '(Offline)'
|
// and set the map-tile to '(Offline)'
|
||||||
uint regX, regY;
|
uint regX, regY;
|
||||||
|
@ -593,7 +554,42 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
List<MapBlockData> blocks = new List<MapBlockData>();
|
List<MapBlockData> blocks = new List<MapBlockData>();
|
||||||
blocks.Add(block);
|
blocks.Add(block);
|
||||||
sp.ControllingClient.SendMapBlock(blocks, 0);
|
sp.ControllingClient.SendMapBlock(blocks, 0);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string homeURI = Scene.GetAgentHomeURI(sp.ControllingClient.AgentId);
|
||||||
|
|
||||||
|
string reason = String.Empty;
|
||||||
|
finalDestination = GetFinalDestination(reg, sp.ControllingClient.AgentId, homeURI, out reason);
|
||||||
|
|
||||||
|
if (finalDestination == null)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat( "{0} Final destination is having problems. Unable to teleport {1} {2}: {3}",
|
||||||
|
LogHeader, sp.Name, sp.UUID, reason);
|
||||||
|
|
||||||
|
sp.ControllingClient.SendTeleportFailed(reason);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that these are not the same coordinates
|
||||||
|
if (finalDestination.RegionLocX == sp.Scene.RegionInfo.RegionLocX &&
|
||||||
|
finalDestination.RegionLocY == sp.Scene.RegionInfo.RegionLocY)
|
||||||
|
{
|
||||||
|
// Can't do. Viewer crashes
|
||||||
|
sp.ControllingClient.SendTeleportFailed("Space warp! You would crash. Move to a different region and try again.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ValidateGenericConditions(sp, reg, finalDestination, teleportFlags, out reason))
|
||||||
|
{
|
||||||
|
sp.ControllingClient.SendTeleportFailed(reason);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// This is it
|
||||||
|
//
|
||||||
|
DoTeleportInternal(sp, reg, finalDestination, position, lookAt, teleportFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The teleport address could be an address in a subregion of a larger varregion.
|
// The teleport address could be an address in a subregion of a larger varregion.
|
||||||
|
@ -781,7 +777,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
else if (sp.Flying)
|
else if (sp.Flying)
|
||||||
teleportFlags |= (uint)TeleportFlags.IsFlying;
|
teleportFlags |= (uint)TeleportFlags.IsFlying;
|
||||||
|
|
||||||
sp.IsInLocalTransit = finalDestination.RegionLocY != 0; // HG
|
sp.IsInLocalTransit = reg.RegionLocY != 0; // HG
|
||||||
sp.IsInTransit = true;
|
sp.IsInTransit = true;
|
||||||
|
|
||||||
|
|
||||||
|
@ -818,7 +814,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
int newSizeX = finalDestination.RegionSizeX;
|
int newSizeX = finalDestination.RegionSizeX;
|
||||||
int newSizeY = finalDestination.RegionSizeY;
|
int newSizeY = finalDestination.RegionSizeY;
|
||||||
|
|
||||||
bool OutSideViewRange = NeedsNewAgent(sp.RegionViewDistance, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
bool OutSideViewRange = !sp.IsInLocalTransit || NeedsNewAgent(sp.RegionViewDistance, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
||||||
oldSizeX, oldSizeY, newSizeX, newSizeY);
|
oldSizeX, oldSizeY, newSizeX, newSizeY);
|
||||||
|
|
||||||
if (OutSideViewRange)
|
if (OutSideViewRange)
|
||||||
|
@ -1046,17 +1042,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// TODO: This may be 0.6. Check if still needed
|
|
||||||
// For backwards compatibility
|
|
||||||
if (version == 0f)
|
|
||||||
{
|
|
||||||
// CrossAttachmentsIntoNewRegion is a synchronous call. We shouldn't need to wait after it
|
|
||||||
m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Old simulator, sending attachments one by one...");
|
|
||||||
CrossAttachmentsIntoNewRegion(finalDestination, sp, true);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp);
|
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp);
|
||||||
|
|
||||||
if(logout)
|
if(logout)
|
||||||
|
@ -1100,7 +1085,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
List<ulong> childRegionsToClose = null;
|
List<ulong> childRegionsToClose = null;
|
||||||
// HG needs a deeper change
|
// HG needs a deeper change
|
||||||
bool localclose = (ctx.OutboundVersion < 0.7f || ((teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0));
|
bool localclose = (ctx.OutboundVersion < 0.7f || !sp.IsInLocalTransit);
|
||||||
if (localclose)
|
if (localclose)
|
||||||
{
|
{
|
||||||
childRegionsToClose = sp.GetChildAgentsToClose(destinationHandle, finalDestination.RegionSizeX, finalDestination.RegionSizeY);
|
childRegionsToClose = sp.GetChildAgentsToClose(destinationHandle, finalDestination.RegionSizeX, finalDestination.RegionSizeY);
|
||||||
|
@ -2122,6 +2107,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
cagents.Add(agent);
|
cagents.Add(agent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<ulong> toclose;
|
||||||
// previousRegionNeighbourHandles now contains regions to forget
|
// previousRegionNeighbourHandles now contains regions to forget
|
||||||
if (previousRegionNeighbourHandles.Count > 0)
|
if (previousRegionNeighbourHandles.Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -2133,14 +2119,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
if(notHG) // does not work on HG
|
if(notHG) // does not work on HG
|
||||||
{
|
{
|
||||||
List<ulong> toclose = new List<ulong>(previousRegionNeighbourHandles);
|
toclose = new List<ulong>(previousRegionNeighbourHandles);
|
||||||
sp.CloseChildAgents(toclose);
|
// sp.CloseChildAgents(toclose);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
toclose = new List<ulong>();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
toclose = new List<ulong>();
|
||||||
/// Update all child agent with everyone's seeds
|
/// Update all child agent with everyone's seeds
|
||||||
// foreach (AgentCircuitData a in cagents)
|
// foreach (AgentCircuitData a in cagents)
|
||||||
// a.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds);
|
// a.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds);
|
||||||
|
|
||||||
if (capsModule != null)
|
if (capsModule != null)
|
||||||
capsModule.SetChildrenSeed(sp.UUID, seeds);
|
capsModule.SetChildrenSeed(sp.UUID, seeds);
|
||||||
|
@ -2148,7 +2137,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
sp.KnownRegions = seeds;
|
sp.KnownRegions = seeds;
|
||||||
sp.SetNeighbourRegionSizeInfo(neighbours);
|
sp.SetNeighbourRegionSizeInfo(neighbours);
|
||||||
|
|
||||||
if (neighbours.Count > 0)
|
if (neighbours.Count > 0 || toclose.Count > 0)
|
||||||
{
|
{
|
||||||
AgentPosition agentpos = new AgentPosition();
|
AgentPosition agentpos = new AgentPosition();
|
||||||
agentpos.AgentID = new UUID(sp.UUID.Guid);
|
agentpos.AgentID = new UUID(sp.UUID.Guid);
|
||||||
|
@ -2166,10 +2155,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
Util.FireAndForget(delegate
|
Util.FireAndForget(delegate
|
||||||
{
|
{
|
||||||
Thread.Sleep(200); // the original delay that was at InformClientOfNeighbourAsync start
|
Thread.Sleep(500); // the original delay that was at InformClientOfNeighbourAsync start
|
||||||
int count = 0;
|
int count = 0;
|
||||||
IPEndPoint ipe;
|
IPEndPoint ipe;
|
||||||
|
|
||||||
|
if(toclose.Count > 0)
|
||||||
|
sp.CloseChildAgents(toclose);
|
||||||
|
|
||||||
foreach (GridRegion neighbour in neighbours)
|
foreach (GridRegion neighbour in neighbours)
|
||||||
{
|
{
|
||||||
ulong handler = neighbour.RegionHandle;
|
ulong handler = neighbour.RegionHandle;
|
||||||
|
|
Loading…
Reference in New Issue