more on tps and crossings
parent
ecfd442c9b
commit
0edffae7e4
|
@ -675,17 +675,26 @@ namespace OpenSim.Framework
|
||||||
/// <param name="oldy">Old region y-coord</param>
|
/// <param name="oldy">Old region y-coord</param>
|
||||||
/// <param name="newy">New region y-coord</param>
|
/// <param name="newy">New region y-coord</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static bool IsOutsideView(float drawdist, uint oldx, uint newx, uint oldy, uint newy)
|
public static bool IsOutsideView(float drawdist, uint oldx, uint newx, uint oldy, uint newy,
|
||||||
|
int oldsizex, int oldsizey, int newsizex, int newsizey)
|
||||||
{
|
{
|
||||||
int dd = (int)((drawdist + Constants.RegionSize - 1) / Constants.RegionSize);
|
// we still need to make sure we see new region 1stNeighbors
|
||||||
|
|
||||||
int startX = (int)oldx - dd;
|
oldx *= Constants.RegionSize;
|
||||||
int startY = (int)oldy - dd;
|
newx *= Constants.RegionSize;
|
||||||
|
if (oldx + oldsizex + drawdist < newx)
|
||||||
|
return true;
|
||||||
|
if (newx + newsizex + drawdist < oldx)
|
||||||
|
return true;
|
||||||
|
|
||||||
int endX = (int)oldx + dd;
|
oldy *= Constants.RegionSize;
|
||||||
int endY = (int)oldy + dd;
|
newy *= Constants.RegionSize;
|
||||||
|
if (oldy + oldsizey + drawdist < newy)
|
||||||
|
return true;
|
||||||
|
if (newy + newsizey + drawdist< oldy)
|
||||||
|
return true;
|
||||||
|
|
||||||
return (newx < startX || endX < newx || newy < startY || endY < newy);
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string FieldToString(byte[] bytes)
|
public static string FieldToString(byte[] bytes)
|
||||||
|
|
|
@ -724,10 +724,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint newRegionX, newRegionY, oldRegionX, oldRegionY;
|
|
||||||
Util.RegionHandleToRegionLoc(reg.RegionHandle, out newRegionX, out newRegionY);
|
|
||||||
Util.RegionHandleToRegionLoc(sp.Scene.RegionInfo.RegionHandle, out oldRegionX, out oldRegionY);
|
|
||||||
|
|
||||||
ulong destinationHandle = finalDestination.RegionHandle;
|
ulong destinationHandle = finalDestination.RegionHandle;
|
||||||
|
|
||||||
// Let's do DNS resolution only once in this process, please!
|
// Let's do DNS resolution only once in this process, please!
|
||||||
|
@ -815,7 +811,19 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
}
|
}
|
||||||
|
|
||||||
IClientIPEndpoint ipepClient;
|
IClientIPEndpoint ipepClient;
|
||||||
if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY))
|
|
||||||
|
uint newRegionX, newRegionY, oldRegionX, oldRegionY;
|
||||||
|
Util.RegionHandleToRegionLoc(destinationHandle, out newRegionX, out newRegionY);
|
||||||
|
Util.RegionHandleToRegionLoc(sourceRegion.RegionHandle, out oldRegionX, out oldRegionY);
|
||||||
|
int oldSizeX = (int)sourceRegion.RegionSizeX;
|
||||||
|
int oldSizeY = (int)sourceRegion.RegionSizeY;
|
||||||
|
int newSizeX = finalDestination.RegionSizeX;
|
||||||
|
int newSizeY = finalDestination.RegionSizeY;
|
||||||
|
|
||||||
|
bool OutSideViewRange = NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
||||||
|
oldSizeX, oldSizeY, newSizeX, newSizeY);
|
||||||
|
|
||||||
|
if (OutSideViewRange)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}",
|
"[ENTITY TRANSFER MODULE]: Determined that region {0} at {1},{2} needs new child agent for agent {3} from {4}",
|
||||||
|
@ -846,13 +854,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
float.TryParse(versionComponents[1], out versionNumber);
|
float.TryParse(versionComponents[1], out versionNumber);
|
||||||
|
|
||||||
if (versionNumber >= 0.2f && MaxOutgoingTransferVersion >= versionNumber)
|
if (versionNumber >= 0.2f && MaxOutgoingTransferVersion >= versionNumber)
|
||||||
TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason);
|
TransferAgent_V2(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange , version, out reason);
|
||||||
else
|
else
|
||||||
TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, oldRegionX, newRegionX, oldRegionY, newRegionY, version, out reason);
|
TransferAgent_V1(sp, agentCircuit, reg, finalDestination, endPoint, teleportFlags, OutSideViewRange, version, out reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TransferAgent_V1(ScenePresence sp, AgentCircuitData agentCircuit, GridRegion reg, GridRegion finalDestination,
|
private void TransferAgent_V1(ScenePresence sp, AgentCircuitData agentCircuit, GridRegion reg, GridRegion finalDestination,
|
||||||
IPEndPoint endPoint, uint teleportFlags, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, string version, out string reason)
|
IPEndPoint endPoint, uint teleportFlags, bool OutSideViewRange, string version, out string reason)
|
||||||
{
|
{
|
||||||
ulong destinationHandle = finalDestination.RegionHandle;
|
ulong destinationHandle = finalDestination.RegionHandle;
|
||||||
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
||||||
|
@ -906,7 +914,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// OK, it got this agent. Let's close some child agents
|
// OK, it got this agent. Let's close some child agents
|
||||||
|
|
||||||
|
|
||||||
if (NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY))
|
if (OutSideViewRange)
|
||||||
{
|
{
|
||||||
if (m_eqModule != null)
|
if (m_eqModule != null)
|
||||||
{
|
{
|
||||||
|
@ -1065,17 +1073,16 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// Well, this is it. The agent is over there.
|
// Well, this is it. The agent is over there.
|
||||||
// KillEntity(sp.Scene, sp.LocalId);
|
// KillEntity(sp.Scene, sp.LocalId);
|
||||||
|
|
||||||
bool l_needsclosing = NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg);
|
sp.HasMovedAway(!OutSideViewRange);
|
||||||
sp.HasMovedAway(!l_needsclosing);
|
|
||||||
|
|
||||||
sp.CloseChildAgents(newRegionX, newRegionY);
|
sp.CloseChildAgents(destinationHandle,finalDestination.RegionSizeX,finalDestination.RegionSizeY);
|
||||||
|
|
||||||
// Now let's make it officially a child agent
|
// Now let's make it officially a child agent
|
||||||
sp.MakeChildAgent(destinationHandle);
|
sp.MakeChildAgent(destinationHandle);
|
||||||
|
|
||||||
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
||||||
|
|
||||||
if (l_needsclosing)
|
if (OutSideViewRange)
|
||||||
{
|
{
|
||||||
if (!sp.Scene.IncomingPreCloseClient(sp))
|
if (!sp.Scene.IncomingPreCloseClient(sp))
|
||||||
return;
|
return;
|
||||||
|
@ -1090,17 +1097,10 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
sp.Scene.CloseAgent(sp.UUID, false);
|
sp.Scene.CloseAgent(sp.UUID, false);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// now we have a child agent in this region.
|
|
||||||
sp.Reset();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TransferAgent_V2(ScenePresence sp, AgentCircuitData agentCircuit, GridRegion reg, GridRegion finalDestination,
|
private void TransferAgent_V2(ScenePresence sp, AgentCircuitData agentCircuit, GridRegion reg, GridRegion finalDestination,
|
||||||
IPEndPoint endPoint, uint teleportFlags, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, string version, out string reason)
|
IPEndPoint endPoint, uint teleportFlags, bool OutSideViewRange, string version, out string reason)
|
||||||
{
|
{
|
||||||
ulong destinationHandle = finalDestination.RegionHandle;
|
ulong destinationHandle = finalDestination.RegionHandle;
|
||||||
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
|
||||||
|
@ -1207,8 +1207,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp);
|
m_entityTransferStateMachine.UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp);
|
||||||
|
|
||||||
bool l_needsclosing = NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg);
|
sp.HasMovedAway(!OutSideViewRange);
|
||||||
sp.HasMovedAway(!l_needsclosing);
|
|
||||||
|
|
||||||
// Need to signal neighbours whether child agents may need closing irrespective of whether this
|
// Need to signal neighbours whether child agents may need closing irrespective of whether this
|
||||||
// one needed closing. We also need to close child agents as quickly as possible to avoid complicated
|
// one needed closing. We also need to close child agents as quickly as possible to avoid complicated
|
||||||
|
@ -1216,7 +1215,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// to a neighbour A2 then off to a non-neighbour C). Closing child agents any later requires complex
|
// to a neighbour A2 then off to a non-neighbour C). Closing child agents any later requires complex
|
||||||
// distributed checks to avoid problems in rapid reteleporting scenarios and where child agents are
|
// distributed checks to avoid problems in rapid reteleporting scenarios and where child agents are
|
||||||
// abandoned without proper close by viewer but then re-used by an incoming connection.
|
// abandoned without proper close by viewer but then re-used by an incoming connection.
|
||||||
sp.CloseChildAgents(newRegionX, newRegionY);
|
sp.CloseChildAgents(destinationHandle, finalDestination.RegionSizeX, finalDestination.RegionSizeY);
|
||||||
|
|
||||||
// AgentHasMovedAway(sp, true);
|
// AgentHasMovedAway(sp, true);
|
||||||
// Well, this is it. The agent is over there.
|
// Well, this is it. The agent is over there.
|
||||||
|
@ -1226,7 +1225,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
sp.MakeChildAgent(destinationHandle);
|
sp.MakeChildAgent(destinationHandle);
|
||||||
|
|
||||||
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
// Finally, let's close this previously-known-as-root agent, when the jump is outside the view zone
|
||||||
if (l_needsclosing)
|
if (OutSideViewRange)
|
||||||
{
|
{
|
||||||
if (!sp.Scene.IncomingPreCloseClient(sp))
|
if (!sp.Scene.IncomingPreCloseClient(sp))
|
||||||
return;
|
return;
|
||||||
|
@ -1350,7 +1349,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// This returns 'true' if the new region already has a child agent for our
|
// This returns 'true' if the new region already has a child agent for our
|
||||||
// incoming agent. The implication is that, if 'false', we have to create the
|
// incoming agent. The implication is that, if 'false', we have to create the
|
||||||
// child and then teleport into the region.
|
// child and then teleport into the region.
|
||||||
protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY)
|
protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
||||||
|
int oldsizeX, int oldsizeY, int newsizeX, int newsizeY)
|
||||||
{
|
{
|
||||||
if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
||||||
{
|
{
|
||||||
|
@ -1363,17 +1363,19 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
return !(newRegionX >= swCorner.X && newRegionX <= neCorner.X && newRegionY >= swCorner.Y && newRegionY <= neCorner.Y);
|
return !(newRegionX >= swCorner.X && newRegionX <= neCorner.X && newRegionY >= swCorner.Y && newRegionY <= neCorner.Y);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg)
|
return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
||||||
|
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
protected virtual bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY,
|
||||||
|
uint oldsizeX, uint oldsizeY, uint newsizeX, uint newsizeY, GridRegion reg)
|
||||||
{
|
{
|
||||||
return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY,
|
||||||
|
oldsizeX, oldsizeY, newsizeX, newsizeY);
|
||||||
|
}
|
||||||
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Landmark Teleport
|
#region Landmark Teleport
|
||||||
|
@ -1830,9 +1832,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// this may need the attachments
|
// this may need the attachments
|
||||||
|
|
||||||
agent.HasMovedAway(true);
|
agent.HasMovedAway(true);
|
||||||
// agent.parcelRegionCross();
|
|
||||||
|
|
||||||
// AgentHasMovedAway(agent, true);
|
|
||||||
|
|
||||||
agent.MakeChildAgent(neighbourRegion.RegionHandle);
|
agent.MakeChildAgent(neighbourRegion.RegionHandle);
|
||||||
|
|
||||||
|
@ -1840,19 +1839,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// but not sure yet what the side effects would be.
|
// but not sure yet what the side effects would be.
|
||||||
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
m_entityTransferStateMachine.ResetFromTransit(agent.UUID);
|
||||||
|
|
||||||
// now we have a child agent in this region. Request all interesting data about other (root) agents
|
agent.CloseChildAgents(neighbourRegion.RegionHandle, neighbourRegion.RegionSizeX, neighbourRegion.RegionSizeY);
|
||||||
|
|
||||||
// why do that? we either where a root having all that or we are leaving the area
|
|
||||||
|
|
||||||
// agent.SendOtherAgentsAvatarDataToMe();
|
|
||||||
// agent.SendOtherAgentsAppearanceToMe();
|
|
||||||
|
|
||||||
// Next, let's close the child agent connections that are too far away.
|
|
||||||
uint neighbourx;
|
|
||||||
uint neighboury;
|
|
||||||
Util.RegionHandleToRegionLoc(neighbourRegion.RegionHandle, out neighbourx, out neighboury);
|
|
||||||
|
|
||||||
agent.CloseChildAgents(neighbourx, neighboury);
|
|
||||||
|
|
||||||
// the user may change their profile information in other region,
|
// the user may change their profile information in other region,
|
||||||
// so the userinfo in UserProfileCache is not reliable any more, delete it
|
// so the userinfo in UserProfileCache is not reliable any more, delete it
|
||||||
|
@ -1908,12 +1896,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
if (seeds.ContainsKey(regionhandler))
|
if (seeds.ContainsKey(regionhandler))
|
||||||
seeds.Remove(regionhandler);
|
seeds.Remove(regionhandler);
|
||||||
|
/*
|
||||||
List<ulong> oldregions = new List<ulong>(seeds.Keys);
|
List<ulong> oldregions = new List<ulong>(seeds.Keys);
|
||||||
|
|
||||||
if (oldregions.Contains(currentRegionHandler))
|
if (oldregions.Contains(currentRegionHandler))
|
||||||
oldregions.Remove(currentRegionHandler);
|
oldregions.Remove(currentRegionHandler);
|
||||||
|
*/
|
||||||
if (!seeds.ContainsKey(currentRegionHandler))
|
if (!seeds.ContainsKey(currentRegionHandler))
|
||||||
seeds.Add(currentRegionHandler, sp.ControllingClient.RequestClientInfo().CapsPath);
|
seeds.Add(currentRegionHandler, sp.ControllingClient.RequestClientInfo().CapsPath);
|
||||||
|
|
||||||
|
@ -1927,6 +1915,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
agent.Appearance.AvatarHeight = sp.Appearance.AvatarHeight;
|
agent.Appearance.AvatarHeight = sp.Appearance.AvatarHeight;
|
||||||
|
|
||||||
agent.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
agent.CapsPath = CapsUtil.GetRandomCapsObjectPath();
|
||||||
|
|
||||||
seeds.Add(regionhandler, agent.CapsPath);
|
seeds.Add(regionhandler, agent.CapsPath);
|
||||||
|
|
||||||
// agent.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds);
|
// agent.ChildrenCapSeeds = new Dictionary<ulong, string>(seeds);
|
||||||
|
@ -1936,7 +1925,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
sp.Scene.CapsModule.SetChildrenSeed(sp.UUID, seeds);
|
sp.Scene.CapsModule.SetChildrenSeed(sp.UUID, seeds);
|
||||||
}
|
}
|
||||||
|
|
||||||
sp.KnownRegions = seeds;
|
sp.KnownRegions = seeds;
|
||||||
|
sp.AddNeighbourRegionSizeInfo(region);
|
||||||
|
|
||||||
if (currentAgentCircuit != null)
|
if (currentAgentCircuit != null)
|
||||||
{
|
{
|
||||||
|
@ -2012,7 +2003,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
if (m_regionInfo != null)
|
if (m_regionInfo != null)
|
||||||
{
|
{
|
||||||
neighbours = GetNeighbours(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
neighbours = GetNeighbors(sp, m_regionInfo.RegionLocX, m_regionInfo.RegionLocY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2096,13 +2087,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
seeds.Remove(handler);
|
seeds.Remove(handler);
|
||||||
|
|
||||||
/// 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);
|
||||||
|
|
||||||
sp.KnownRegions = seeds;
|
sp.KnownRegions = seeds;
|
||||||
|
sp.SetNeighbourRegionSizeInfo(neighbours);
|
||||||
|
|
||||||
AgentPosition agentpos = new AgentPosition();
|
AgentPosition agentpos = new AgentPosition();
|
||||||
agentpos.AgentID = new UUID(sp.UUID.Guid);
|
agentpos.AgentID = new UUID(sp.UUID.Guid);
|
||||||
|
@ -2114,59 +2106,56 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
agentpos.Velocity = sp.Velocity;
|
agentpos.Velocity = sp.Velocity;
|
||||||
agentpos.RegionHandle = currentRegionHandler;
|
agentpos.RegionHandle = currentRegionHandler;
|
||||||
agentpos.Throttles = spClient.GetThrottlesPacked(1);
|
agentpos.Throttles = spClient.GetThrottlesPacked(1);
|
||||||
// agentpos.ChildrenCapSeeds = seeds;
|
// agentpos.ChildrenCapSeeds = seeds;
|
||||||
|
|
||||||
if (neighbours.Count - previousRegionNeighbourHandles.Count > 0)
|
Util.FireAndForget(delegate
|
||||||
{
|
{
|
||||||
Util.FireAndForget(delegate
|
Thread.Sleep(200); // the original delay that was at InformClientOfNeighbourAsync start
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
foreach (GridRegion neighbour in neighbours)
|
||||||
{
|
{
|
||||||
Thread.Sleep(200); // the original delay that was at InformClientOfNeighbourAsync start
|
ulong handler = neighbour.RegionHandle;
|
||||||
int count = 0;
|
try
|
||||||
|
|
||||||
foreach (GridRegion neighbour in neighbours)
|
|
||||||
{
|
{
|
||||||
ulong handler = neighbour.RegionHandle;
|
if (newneighbours.Contains(handler))
|
||||||
try
|
|
||||||
{
|
{
|
||||||
if (newneighbours.Contains(handler))
|
InformClientOfNeighbourAsync(sp, cagents[count], neighbour,
|
||||||
{
|
neighbour.ExternalEndPoint, true);
|
||||||
InformClientOfNeighbourAsync(sp, cagents[count], neighbour,
|
count++;
|
||||||
neighbour.ExternalEndPoint, true);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
else if(!previousRegionNeighbourHandles.Contains(handler))
|
|
||||||
{
|
|
||||||
spScene.SimulationService.UpdateAgent(neighbour, agentpos);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (ArgumentOutOfRangeException)
|
else if (!previousRegionNeighbourHandles.Contains(handler))
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat(
|
spScene.SimulationService.UpdateAgent(neighbour, agentpos);
|
||||||
"[ENTITY TRANSFER MODULE]: Neighbour Regions response included the current region in the neighbour list. The following region will not display to the client: {0} for region {1} ({2}, {3}).",
|
|
||||||
neighbour.ExternalHostName,
|
|
||||||
neighbour.RegionHandle,
|
|
||||||
neighbour.RegionLocX,
|
|
||||||
neighbour.RegionLocY);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.ErrorFormat(
|
|
||||||
"[ENTITY TRANSFER MODULE]: Could not resolve external hostname {0} for region {1} ({2}, {3}). {4}",
|
|
||||||
neighbour.ExternalHostName,
|
|
||||||
neighbour.RegionHandle,
|
|
||||||
neighbour.RegionLocX,
|
|
||||||
neighbour.RegionLocY,
|
|
||||||
e);
|
|
||||||
|
|
||||||
// FIXME: Okay, even though we've failed, we're still going to throw the exception on,
|
|
||||||
// since I don't know what will happen if we just let the client continue
|
|
||||||
|
|
||||||
// XXX: Well, decided to swallow the exception instead for now. Let us see how that goes.
|
|
||||||
// throw e;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
catch (ArgumentOutOfRangeException)
|
||||||
}
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ENTITY TRANSFER MODULE]: Neighbour Regions response included the current region in the neighbour list. The following region will not display to the client: {0} for region {1} ({2}, {3}).",
|
||||||
|
neighbour.ExternalHostName,
|
||||||
|
neighbour.RegionHandle,
|
||||||
|
neighbour.RegionLocX,
|
||||||
|
neighbour.RegionLocY);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.ErrorFormat(
|
||||||
|
"[ENTITY TRANSFER MODULE]: Could not resolve external hostname {0} for region {1} ({2}, {3}). {4}",
|
||||||
|
neighbour.ExternalHostName,
|
||||||
|
neighbour.RegionHandle,
|
||||||
|
neighbour.RegionLocX,
|
||||||
|
neighbour.RegionLocY,
|
||||||
|
e);
|
||||||
|
|
||||||
|
// FIXME: Okay, even though we've failed, we're still going to throw the exception on,
|
||||||
|
// since I don't know what will happen if we just let the client continue
|
||||||
|
|
||||||
|
// XXX: Well, decided to swallow the exception instead for now. Let us see how that goes.
|
||||||
|
// throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Computes the difference between two region bases.
|
// Computes the difference between two region bases.
|
||||||
|
@ -2179,12 +2168,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
0f);
|
0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py)
|
|
||||||
{
|
|
||||||
// Since we don't know how big the regions could be, we have to search a very large area
|
|
||||||
// to find possible regions.
|
|
||||||
return GetRegionContainingWorldLocation(pGridService, pScopeID, px, py, Constants.MaximumRegionSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region NotFoundLocationCache class
|
#region NotFoundLocationCache class
|
||||||
// A collection of not found locations to make future lookups 'not found' lookups quick.
|
// A collection of not found locations to make future lookups 'not found' lookups quick.
|
||||||
|
@ -2269,6 +2252,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
#endregion // NotFoundLocationCache class
|
#endregion // NotFoundLocationCache class
|
||||||
private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache();
|
private NotFoundLocationCache m_notFoundLocationCache = new NotFoundLocationCache();
|
||||||
|
|
||||||
|
// needed for current OSG or old grid code
|
||||||
|
|
||||||
|
public GridRegion GetRegionContainingWorldLocation(IGridService pGridService, UUID pScopeID, double px, double py)
|
||||||
|
{
|
||||||
|
// Since we don't know how big the regions could be, we have to search a very large area
|
||||||
|
// to find possible regions.
|
||||||
|
return GetRegionContainingWorldLocation(pGridService, pScopeID, px, py, Constants.MaximumRegionSize);
|
||||||
|
}
|
||||||
|
|
||||||
// Given a world position, get the GridRegion info for
|
// Given a world position, get the GridRegion info for
|
||||||
// the region containing that point.
|
// the region containing that point.
|
||||||
// Someday this should be a method on GridService.
|
// Someday this should be a method on GridService.
|
||||||
|
@ -2457,7 +2449,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
/// <param name="pRegionLocX"></param>
|
/// <param name="pRegionLocX"></param>
|
||||||
/// <param name="pRegionLocY"></param>
|
/// <param name="pRegionLocY"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected List<GridRegion> GetNeighbours(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
protected List<GridRegion> GetNeighbors(ScenePresence avatar, uint pRegionLocX, uint pRegionLocY)
|
||||||
{
|
{
|
||||||
Scene pScene = avatar.Scene;
|
Scene pScene = avatar.Scene;
|
||||||
RegionInfo m_regionInfo = pScene.RegionInfo;
|
RegionInfo m_regionInfo = pScene.RegionInfo;
|
||||||
|
@ -2468,23 +2460,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
// view to include everything in the megaregion
|
// view to include everything in the megaregion
|
||||||
if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID))
|
||||||
{
|
{
|
||||||
// The area to check is as big as the current region.
|
uint dd = (uint)avatar.DrawDistance;
|
||||||
// We presume all adjacent regions are the same size as this region.
|
|
||||||
// this needs to be reduced a lot
|
|
||||||
// and updated in avatar CheckForSignificantMovement (larger than current 64m?)
|
|
||||||
// and draw distance changes
|
|
||||||
// sending client the necessary information
|
|
||||||
uint dd = Math.Max((uint)avatar.DrawDistance, Constants.RegionSize);
|
|
||||||
|
|
||||||
dd--;
|
// until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors
|
||||||
uint ddX = Math.Max(dd, Scene.RegionInfo.RegionSizeX);
|
uint ddX = Math.Max(dd, Constants.RegionSize);
|
||||||
uint ddY = Math.Max(dd, Scene.RegionInfo.RegionSizeY);
|
uint ddY = Math.Max(dd, Constants.RegionSize);
|
||||||
|
|
||||||
// region center. Should be avatar position
|
ddX--;
|
||||||
uint startX = Util.RegionToWorldLoc(pRegionLocX) + m_regionInfo.RegionSizeX / 2;
|
ddY--;
|
||||||
uint endX = startX;
|
|
||||||
uint startY = Util.RegionToWorldLoc(pRegionLocY) + m_regionInfo.RegionSizeY / 2;
|
// reference to region edges. Should be avatar position
|
||||||
uint endY = startY;
|
uint startX = Util.RegionToWorldLoc(pRegionLocX);
|
||||||
|
uint endX = startX + m_regionInfo.RegionSizeX;
|
||||||
|
uint startY = Util.RegionToWorldLoc(pRegionLocY);
|
||||||
|
uint endY = startY + m_regionInfo.RegionSizeY;
|
||||||
|
|
||||||
startX -= ddX;
|
startX -= ddX;
|
||||||
startY -= ddY;
|
startY -= ddY;
|
||||||
|
|
|
@ -243,19 +243,19 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
|
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
/* NEEDFIX
|
||||||
protected override bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg)
|
protected override bool NeedsClosing(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, GridRegion reg)
|
||||||
{
|
{
|
||||||
if (base.NeedsClosing(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
|
if (base.NeedsClosing(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
int flags = Scene.GridService.GetRegionFlags(Scene.RegionInfo.ScopeID, reg.RegionID);
|
int flags = Scene.GridService.GetRegionFlags(Scene.RegionInfo.ScopeID, reg.RegionID);
|
||||||
if (flags == -1 /* no region in DB */ || (flags & (int)OpenSim.Framework.RegionFlags.Hyperlink) != 0)
|
if (flags == -1 || (flags & (int)OpenSim.Framework.RegionFlags.Hyperlink) != 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
protected override void AgentHasMovedAway(ScenePresence sp, bool logout)
|
protected override void AgentHasMovedAway(ScenePresence sp, bool logout)
|
||||||
{
|
{
|
||||||
base.AgentHasMovedAway(sp, logout);
|
base.AgentHasMovedAway(sp, logout);
|
||||||
|
|
|
@ -838,22 +838,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
else
|
else
|
||||||
seeds = new Dictionary<ulong, string>();
|
seeds = new Dictionary<ulong, string>();
|
||||||
|
|
||||||
|
/* we can't do this anymore
|
||||||
List<ulong> old = new List<ulong>();
|
List<ulong> old = new List<ulong>();
|
||||||
foreach (ulong handle in seeds.Keys)
|
foreach (ulong handle in seeds.Keys)
|
||||||
{
|
{
|
||||||
uint x, y;
|
uint x, y;
|
||||||
Util.RegionHandleToRegionLoc(handle, out x, out y);
|
Util.RegionHandleToRegionLoc(handle, out x, out y);
|
||||||
|
no information to check this
|
||||||
if (Util.IsOutsideView(DrawDistance, x, Scene.RegionInfo.RegionLocX, y, Scene.RegionInfo.RegionLocY))
|
// if (Util.IsOutsideView(DrawDistance, x, Scene.RegionInfo.RegionLocX, y, Scene.RegionInfo.RegionLocY,))
|
||||||
{
|
{
|
||||||
old.Add(handle);
|
old.Add(handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DropOldNeighbours(old);
|
DropOldNeighbours(old);
|
||||||
|
|
||||||
if (Scene.CapsModule != null)
|
if (Scene.CapsModule != null)
|
||||||
Scene.CapsModule.SetChildrenSeed(UUID, seeds);
|
Scene.CapsModule.SetChildrenSeed(UUID, seeds);
|
||||||
|
*/
|
||||||
KnownRegions = seeds;
|
KnownRegions = seeds;
|
||||||
//m_log.Debug(" ++++++++++AFTER+++++++++++++ ");
|
//m_log.Debug(" ++++++++++AFTER+++++++++++++ ");
|
||||||
//DumpKnownRegions();
|
//DumpKnownRegions();
|
||||||
|
@ -1517,15 +1519,46 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// holds the seed cap for the child agent in that region
|
// holds the seed cap for the child agent in that region
|
||||||
private Dictionary<ulong, string> m_knownChildRegions = new Dictionary<ulong, string>();
|
private Dictionary<ulong, string> m_knownChildRegions = new Dictionary<ulong, string>();
|
||||||
|
|
||||||
public void AddNeighbourRegion(ulong regionHandle, string cap)
|
struct spRegionSizeInfo
|
||||||
|
{
|
||||||
|
public int sizeX;
|
||||||
|
public int sizeY;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Dictionary<ulong, spRegionSizeInfo> m_knownChildRegionsSizeInfo = new Dictionary<ulong, spRegionSizeInfo>();
|
||||||
|
|
||||||
|
|
||||||
|
public void AddNeighbourRegionSizeInfo(GridRegion region)
|
||||||
{
|
{
|
||||||
lock (m_knownChildRegions)
|
lock (m_knownChildRegions)
|
||||||
{
|
{
|
||||||
if (!m_knownChildRegions.ContainsKey(regionHandle))
|
spRegionSizeInfo sizeInfo = new spRegionSizeInfo();
|
||||||
|
sizeInfo.sizeX = region.RegionSizeX;
|
||||||
|
sizeInfo.sizeY = region.RegionSizeY;
|
||||||
|
ulong regionHandle = region.RegionHandle;
|
||||||
|
|
||||||
|
if (!m_knownChildRegionsSizeInfo.ContainsKey(regionHandle))
|
||||||
{
|
{
|
||||||
uint x, y;
|
m_knownChildRegionsSizeInfo.Add(regionHandle, sizeInfo);
|
||||||
Utils.LongToUInts(regionHandle, out x, out y);
|
|
||||||
m_knownChildRegions.Add(regionHandle, cap);
|
}
|
||||||
|
else
|
||||||
|
m_knownChildRegionsSizeInfo[regionHandle] = sizeInfo;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetNeighbourRegionSizeInfo(List<GridRegion> regionsList)
|
||||||
|
{
|
||||||
|
lock (m_knownChildRegions)
|
||||||
|
{
|
||||||
|
m_knownChildRegionsSizeInfo.Clear();
|
||||||
|
foreach (GridRegion region in regionsList)
|
||||||
|
{
|
||||||
|
spRegionSizeInfo sizeInfo = new spRegionSizeInfo();
|
||||||
|
sizeInfo.sizeX = region.RegionSizeX;
|
||||||
|
sizeInfo.sizeY = region.RegionSizeY;
|
||||||
|
ulong regionHandle = region.RegionHandle;
|
||||||
|
m_knownChildRegionsSizeInfo.Add(regionHandle, sizeInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1539,6 +1572,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//if (m_knownChildRegions.ContainsKey(regionHandle))
|
//if (m_knownChildRegions.ContainsKey(regionHandle))
|
||||||
// m_log.DebugFormat(" !!! removing known region {0} in {1}. Count = {2}", regionHandle, Scene.RegionInfo.RegionName, m_knownChildRegions.Count);
|
// m_log.DebugFormat(" !!! removing known region {0} in {1}. Count = {2}", regionHandle, Scene.RegionInfo.RegionName, m_knownChildRegions.Count);
|
||||||
m_knownChildRegions.Remove(regionHandle);
|
m_knownChildRegions.Remove(regionHandle);
|
||||||
|
m_knownChildRegionsSizeInfo.Remove(regionHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1558,7 +1592,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Scene.CapsModule.DropChildSeed(UUID, handle);
|
Scene.CapsModule.DropChildSeed(UUID, handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Dictionary<ulong, string> KnownRegions
|
public Dictionary<ulong, string> KnownRegions
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -1804,7 +1837,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
bool haveAnims = (animIDs != null && animseqs != null && animsobjs != null);
|
bool haveAnims = (animIDs != null && animseqs != null && animsobjs != null);
|
||||||
|
|
||||||
if(haveAnims)
|
if (haveAnims)
|
||||||
SendAnimPackToAgent(this, animIDs, animseqs, animsobjs);
|
SendAnimPackToAgent(this, animIDs, animseqs, animsobjs);
|
||||||
|
|
||||||
// we should be able to receive updates, etc
|
// we should be able to receive updates, etc
|
||||||
|
@ -1837,13 +1870,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0)
|
if (isNPC || (TeleportFlags & TeleportFlags.ViaLogin) != 0)
|
||||||
{
|
{
|
||||||
if (Scene.AttachmentsModule != null)
|
if (Scene.AttachmentsModule != null)
|
||||||
// Util.FireAndForget(
|
// Util.FireAndForget(
|
||||||
// o =>
|
// o =>
|
||||||
// {
|
// {
|
||||||
if (!isNPC)
|
if (!isNPC)
|
||||||
Scene.AttachmentsModule.RezAttachments(this);
|
Scene.AttachmentsModule.RezAttachments(this);
|
||||||
else
|
else
|
||||||
Util.FireAndForget(x => {
|
Util.FireAndForget(x =>
|
||||||
|
{
|
||||||
Scene.AttachmentsModule.RezAttachments(this);
|
Scene.AttachmentsModule.RezAttachments(this);
|
||||||
});
|
});
|
||||||
// });
|
// });
|
||||||
|
@ -1855,7 +1889,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name);
|
"[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name);
|
||||||
|
|
||||||
foreach(SceneObjectGroup sog in m_attachments)
|
foreach (SceneObjectGroup sog in m_attachments)
|
||||||
{
|
{
|
||||||
sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource());
|
sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource());
|
||||||
sog.ResumeScripts();
|
sog.ResumeScripts();
|
||||||
|
@ -1880,10 +1914,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
m_log.DebugFormat("[CompleteMovement] attachments: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
m_log.DebugFormat("[CompleteMovement] attachments: {0}ms", Util.EnvironmentTickCountSubtract(ts));
|
||||||
|
|
||||||
// Create child agents in neighbouring regions
|
|
||||||
if (openChildAgents)
|
if (openChildAgents)
|
||||||
{
|
{
|
||||||
|
// Create child agents in neighbouring regions
|
||||||
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
|
||||||
if (m_agentTransfer != null)
|
if (m_agentTransfer != null)
|
||||||
{
|
{
|
||||||
|
@ -3955,8 +3988,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="newRegionX">The new region's x on the map</param>
|
/// <param name="newRegionX">The new region's x on the map</param>
|
||||||
/// <param name="newRegionY">The new region's y on the map</param>
|
/// <param name="newRegionY">The new region's y on the map</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public void CloseChildAgents(uint newRegionX, uint newRegionY)
|
public void CloseChildAgents(ulong newRegionHandle, int newRegionSizeX, int newRegionSizeY)
|
||||||
{
|
{
|
||||||
|
uint newRegionX, newRegionY;
|
||||||
List<ulong> byebyeRegions = new List<ulong>();
|
List<ulong> byebyeRegions = new List<ulong>();
|
||||||
List<ulong> knownRegions = KnownRegionHandles;
|
List<ulong> knownRegions = KnownRegionHandles;
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
|
@ -3964,19 +3998,35 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
knownRegions.Count, Scene.RegionInfo.RegionName);
|
knownRegions.Count, Scene.RegionInfo.RegionName);
|
||||||
//DumpKnownRegions();
|
//DumpKnownRegions();
|
||||||
|
|
||||||
|
Util.RegionHandleToRegionLoc(newRegionHandle, out newRegionX, out newRegionY);
|
||||||
|
|
||||||
|
uint x, y;
|
||||||
|
spRegionSizeInfo regInfo;
|
||||||
|
|
||||||
foreach (ulong handle in knownRegions)
|
foreach (ulong handle in knownRegions)
|
||||||
{
|
{
|
||||||
// Don't close the agent on this region yet
|
// Don't close the agent on this region yet
|
||||||
if (handle != Scene.RegionInfo.RegionHandle)
|
if (handle != Scene.RegionInfo.RegionHandle)
|
||||||
{
|
{
|
||||||
uint x, y;
|
|
||||||
Util.RegionHandleToRegionLoc(handle, out x, out y);
|
Util.RegionHandleToRegionLoc(handle, out x, out y);
|
||||||
|
if (m_knownChildRegionsSizeInfo.TryGetValue(handle, out regInfo))
|
||||||
// m_log.Debug("---> x: " + x + "; newx:" + newRegionX + "; Abs:" + (int)Math.Abs((int)(x - newRegionX)));
|
|
||||||
// m_log.Debug("---> y: " + y + "; newy:" + newRegionY + "; Abs:" + (int)Math.Abs((int)(y - newRegionY)));
|
|
||||||
if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY))
|
|
||||||
{
|
{
|
||||||
byebyeRegions.Add(handle);
|
|
||||||
|
// m_log.Debug("---> x: " + x + "; newx:" + newRegionX + "; Abs:" + (int)Math.Abs((int)(x - newRegionX)));
|
||||||
|
// m_log.Debug("---> y: " + y + "; newy:" + newRegionY + "; Abs:" + (int)Math.Abs((int)(y - newRegionY)));
|
||||||
|
if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY,
|
||||||
|
regInfo.sizeX, regInfo.sizeY, newRegionSizeX, newRegionSizeY))
|
||||||
|
{
|
||||||
|
byebyeRegions.Add(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY,
|
||||||
|
(int)Constants.RegionSize, (int)Constants.RegionSize, newRegionSizeX, newRegionSizeY))
|
||||||
|
{
|
||||||
|
byebyeRegions.Add(handle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5382,11 +5432,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SpawnPoint[] spawnPoints = m_scene.RegionInfo.RegionSettings.SpawnPoints().ToArray();
|
SpawnPoint[] spawnPoints = m_scene.RegionInfo.RegionSettings.SpawnPoints().ToArray();
|
||||||
if (spawnPoints.Length == 0)
|
if (spawnPoints.Length == 0)
|
||||||
{
|
{
|
||||||
if(m_scene.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_uuid))
|
pos.X = 128.0f;
|
||||||
{
|
pos.Y = 128.0f;
|
||||||
pos.X = 128.0f;
|
|
||||||
pos.Y = 128.0f;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue