diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 4dbcb00379..fad89f2fb5 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1938,10 +1938,21 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
///
///
public void EnableChildAgent(ScenePresence sp, GridRegion region)
- {
+ {
+ int viewrange =(int) sp.RegionViewDistance;
+ Vector3 pos = sp.AbsolutePosition;
+ RegionInfo curregion = sp.Scene.RegionInfo;
+
+ int rtmp = region.RegionLocX - (int)Util.RegionToWorldLoc(curregion.RegionLocX) - (int)pos.X;
+ if (rtmp < -(viewrange + region.RegionSizeX) || rtmp > viewrange + curregion.RegionSizeX)
+ return;
+ rtmp = region.RegionLocY - (int)Util.RegionToWorldLoc(curregion.RegionLocY) - (int)pos.Y;
+ if (rtmp < -(viewrange + region.RegionSizeY) || rtmp > viewrange + curregion.RegionSizeY)
+ return;
+
m_log.DebugFormat("[ENTITY TRANSFER]: Enabling child agent in new neighbour {0}", region.RegionName);
- ulong currentRegionHandler = sp.Scene.RegionInfo.RegionHandle;
+ ulong currentRegionHandler = curregion.RegionHandle;
ulong regionhandler = region.RegionHandle;
Dictionary seeds = new Dictionary(sp.Scene.CapsModule.GetChildrenSeeds(sp.UUID));
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 3d9e10f5bc..780e96317d 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1377,22 +1377,29 @@ namespace OpenSim.Region.Framework.Scenes
{
// Let the grid service module know, so this can be cached
m_eventManager.TriggerOnRegionUp(otherRegion);
-
- try
+ if (EntityTransferModule != null)
{
- ForEachRootScenePresence(delegate(ScenePresence agent)
+ try
{
- List old = new List() {otherRegion.RegionHandle};
- agent.DropOldNeighbours(old);
- if (EntityTransferModule != null && agent.PresenceType != PresenceType.Npc)
+ List old = new List() { otherRegion.RegionHandle };
+ ForEachRootScenePresence(delegate(ScenePresence agent)
+ {
+ if(agent.IsNPC)
+ return;
+
+ agent.DropOldNeighbours(old);
+
+ if(agent.RegionViewDistance == 0)
+ return;
+
EntityTransferModule.EnableChildAgent(agent, otherRegion);
- });
- }
- catch (NullReferenceException)
- {
- // This means that we're not booted up completely yet.
- // This shouldn't happen too often anymore.
- m_log.Error("[SCENE]: Couldn't inform client of regionup because we got a null reference exception");
+ });
+ }
+ catch
+ {
+ m_log.Error("[SCENE]: Couldn't inform clients of regionup");
+
+ }
}
}
else
@@ -1408,12 +1415,12 @@ namespace OpenSim.Region.Framework.Scenes
{
int tmp = otherRegion.RegionLocX - (int)RegionInfo.WorldLocX;
- if (tmp < -otherRegion.RegionSizeX && tmp > RegionInfo.RegionSizeX)
+ if (tmp < -otherRegion.RegionSizeX || tmp > RegionInfo.RegionSizeX)
return false;
tmp = otherRegion.RegionLocY - (int)RegionInfo.WorldLocY;
- if (tmp < -otherRegion.RegionSizeY && tmp > RegionInfo.RegionSizeY)
+ if (tmp < -otherRegion.RegionSizeY || tmp > RegionInfo.RegionSizeY)
return false;
return true;
@@ -1484,21 +1491,24 @@ namespace OpenSim.Region.Framework.Scenes
m_restartWaitTimer.Stop();
lock (m_regionRestartNotifyList)
{
- foreach (RegionInfo region in m_regionRestartNotifyList)
+ if(EntityTransferModule != null)
{
- GridRegion r = new GridRegion(region);
- try
+ foreach (RegionInfo region in m_regionRestartNotifyList)
{
- ForEachRootScenePresence(delegate(ScenePresence agent)
+ GridRegion r = new GridRegion(region);
+ try
{
- if (EntityTransferModule != null && agent.PresenceType != PresenceType.Npc)
- EntityTransferModule.EnableChildAgent(agent, r);
- });
- }
- catch (NullReferenceException)
- {
- // This means that we're not booted up completely yet.
- // This shouldn't happen too often anymore.
+ ForEachRootScenePresence(delegate(ScenePresence agent)
+ {
+ if (!agent.IsNPC)
+ EntityTransferModule.EnableChildAgent(agent, r);
+ });
+ }
+ catch (NullReferenceException)
+ {
+ // This means that we're not booted up completely yet.
+ // This shouldn't happen too often anymore.
+ }
}
}
diff --git a/OpenSim/Server/Handlers/Base/Utils.cs b/OpenSim/Server/Handlers/Base/Utils.cs
index 3b1fb01612..dff049b52b 100644
--- a/OpenSim/Server/Handlers/Base/Utils.cs
+++ b/OpenSim/Server/Handlers/Base/Utils.cs
@@ -40,8 +40,9 @@ namespace OpenSim.Server.Handlers.Base
///
/// Extract the param from an uri.
///
- /// Something like this: /xxxx/uuid/ or /uuid/handle/release
- /// uuid on uuid field
+ /// Something like this: /xxxx/uuid/ or /xxxx/uuid/handle/release
+ /// uuid on uuid field
+ /// optional regionHandle
/// optional action
public static bool GetParams(string path, out UUID uuid, out ulong regionHandle, out string action)
{