aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework/EntityTransfer
diff options
context:
space:
mode:
authorMelanie2012-05-02 01:37:51 +0100
committerMelanie2012-05-02 01:37:51 +0100
commitbf630fb808420c15abc100f11b993b9e6e1113c2 (patch)
tree11a10a97e78725e96807c01a656123f934acb04a /OpenSim/Region/CoreModules/Framework/EntityTransfer
parentMerge branch 'avination' (diff)
parentComment out the five second sleep in etm.DoTeleport() if the old agent needs ... (diff)
downloadopensim-SC-bf630fb808420c15abc100f11b993b9e6e1113c2.zip
opensim-SC-bf630fb808420c15abc100f11b993b9e6e1113c2.tar.gz
opensim-SC-bf630fb808420c15abc100f11b993b9e6e1113c2.tar.bz2
opensim-SC-bf630fb808420c15abc100f11b993b9e6e1113c2.tar.xz
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs OpenSim/Region/Framework/Interfaces/IEntityTransferModule.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs318
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs13
2 files changed, 195 insertions, 136 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 07ea35e..a31e0aa 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -51,15 +51,20 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
51 { 51 {
52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 52 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53 53
54 public const int DefaultMaxTransferDistance = 4095;
55 public const bool EnableWaitForCallbackFromTeleportDestDefault = true;
56
57
54 /// <summary> 58 /// <summary>
55 /// The maximum distance, in standard region units (256m) that an agent is allowed to transfer. 59 /// The maximum distance, in standard region units (256m) that an agent is allowed to transfer.
56 /// </summary> 60 /// </summary>
57 private int m_MaxTransferDistance = 4095; 61 public int MaxTransferDistance { get; set; }
58 public int MaxTransferDistance 62
59 { 63 /// <summary>
60 get { return m_MaxTransferDistance; } 64 /// If true then on a teleport, the source region waits for a callback from the destination region. If
61 set { m_MaxTransferDistance = value; } 65 /// a callback fails to arrive within a set time then the user is pulled back into the source region.
62 } 66 /// </summary>
67 public bool EnableWaitForCallbackFromTeleportDest { get; set; }
63 68
64 protected bool m_Enabled = false; 69 protected bool m_Enabled = false;
65 protected Scene m_aScene; 70 protected Scene m_aScene;
@@ -103,7 +108,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
103 IConfig transferConfig = source.Configs["EntityTransfer"]; 108 IConfig transferConfig = source.Configs["EntityTransfer"];
104 if (transferConfig != null) 109 if (transferConfig != null)
105 { 110 {
106 MaxTransferDistance = transferConfig.GetInt("max_distance", 4095); 111 EnableWaitForCallbackFromTeleportDest
112 = transferConfig.GetBoolean("wait_for_callback", EnableWaitForCallbackFromTeleportDestDefault);
113
114 MaxTransferDistance = transferConfig.GetInt("max_distance", DefaultMaxTransferDistance);
115 }
116 else
117 {
118 MaxTransferDistance = DefaultMaxTransferDistance;
107 } 119 }
108 120
109 m_agentsInTransit = new List<UUID>(); 121 m_agentsInTransit = new List<UUID>();
@@ -170,8 +182,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
170 if (!sp.Scene.Permissions.CanTeleport(sp.UUID)) 182 if (!sp.Scene.Permissions.CanTeleport(sp.UUID))
171 return; 183 return;
172 184
173 IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>();
174
175 // Reset animations; the viewer does that in teleports. 185 // Reset animations; the viewer does that in teleports.
176 sp.Animator.ResetAnimations(); 186 sp.Animator.ResetAnimations();
177 187
@@ -183,146 +193,194 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
183 { 193 {
184 destinationRegionName = sp.Scene.RegionInfo.RegionName; 194 destinationRegionName = sp.Scene.RegionInfo.RegionName;
185 195
186 m_log.DebugFormat( 196 TeleportAgentWithinRegion(sp, position, lookAt, teleportFlags);
187 "[ENTITY TRANSFER MODULE]: Teleport for {0} to {1} within {2}", 197 }
188 sp.Name, position, destinationRegionName); 198 else // Another region possibly in another simulator
199 {
200 GridRegion finalDestination;
201 TeleportAgentToDifferentRegion(
202 sp, regionHandle, position, lookAt, teleportFlags, out finalDestination);
189 203
190 // Teleport within the same region 204 if (finalDestination != null)
191 if (IsOutsideRegion(sp.Scene, position) || position.Z < 0) 205 destinationRegionName = finalDestination.RegionName;
192 { 206 }
193 Vector3 emergencyPos = new Vector3(128, 128, 128); 207 }
208 catch (Exception e)
209 {
210 m_log.ErrorFormat(
211 "[ENTITY TRANSFER MODULE]: Exception on teleport of {0} from {1}@{2} to {3}@{4}: {5}{6}",
212 sp.Name, sp.AbsolutePosition, sp.Scene.RegionInfo.RegionName, position, destinationRegionName,
213 e.Message, e.StackTrace);
194 214
195 m_log.WarnFormat( 215 sp.ControllingClient.SendTeleportFailed("Internal error");
196 "[ENTITY TRANSFER MODULE]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", 216 }
197 position, sp.Name, sp.UUID, emergencyPos); 217 }
198 218
199 position = emergencyPos; 219 /// <summary>
200 } 220 /// Teleports the agent within its current region.
221 /// </summary>
222 /// <param name="sp"></param>
223 /// <param name="position"></param>
224 /// <param name="lookAt"></param>
225 /// <param name="teleportFlags"></param
226 private void TeleportAgentWithinRegion(ScenePresence sp, Vector3 position, Vector3 lookAt, uint teleportFlags)
227 {
228 m_log.DebugFormat(
229 "[ENTITY TRANSFER MODULE]: Teleport for {0} to {1} within {2}",
230 sp.Name, position, sp.Scene.RegionInfo.RegionName);
201 231
202 // TODO: Get proper AVG Height 232 // Teleport within the same region
203 float localAVHeight = 1.56f; 233 if (IsOutsideRegion(sp.Scene, position) || position.Z < 0)
204 float posZLimit = 22; 234 {
235 Vector3 emergencyPos = new Vector3(128, 128, 128);
205 236
206 // TODO: Check other Scene HeightField 237 m_log.WarnFormat(
207 if (position.X > 0 && position.X <= (int)Constants.RegionSize && position.Y > 0 && position.Y <= (int)Constants.RegionSize) 238 "[ENTITY TRANSFER MODULE]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}",
208 { 239 position, sp.Name, sp.UUID, emergencyPos);
209 posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y];
210 }
211 240
212 float newPosZ = posZLimit + localAVHeight; 241 position = emergencyPos;
213 if (posZLimit >= (position.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ))) 242 }
214 {
215 position.Z = newPosZ;
216 }
217 243
218 sp.ControllingClient.SendTeleportStart(teleportFlags); 244 // TODO: Get proper AVG Height
245 float localAVHeight = 1.56f;
246 float posZLimit = 22;
219 247
220 sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); 248 // TODO: Check other Scene HeightField
221 sp.TeleportFlags = (Constants.TeleportFlags)teleportFlags; 249 if (position.X > 0 && position.X <= (int)Constants.RegionSize && position.Y > 0 && position.Y <= (int)Constants.RegionSize)
222 sp.Velocity = Vector3.Zero; 250 {
223 sp.Teleport(position); 251 posZLimit = (float)sp.Scene.Heightmap[(int)position.X, (int)position.Y];
252 }
224 253
225 foreach (SceneObjectGroup grp in sp.GetAttachments()) 254 float newPosZ = posZLimit + localAVHeight;
226 { 255 if (posZLimit >= (position.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ)))
227 sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT); 256 {
228 } 257 position.Z = newPosZ;
258 }
259
260 sp.ControllingClient.SendTeleportStart(teleportFlags);
261
262 sp.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
263 sp.TeleportFlags = (Constants.TeleportFlags)teleportFlags;
264 sp.Velocity = Vector3.Zero;
265 sp.Teleport(position);
266
267 foreach (SceneObjectGroup grp in sp.GetAttachments())
268 {
269 sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT);
270 }
271 }
272
273 /// <summary>
274 /// Teleports the agent to a different region.
275 /// </summary>
276 /// <param name='sp'></param>
277 /// <param name='regionHandle'>/param>
278 /// <param name='position'></param>
279 /// <param name='lookAt'></param>
280 /// <param name='teleportFlags'></param>
281 /// <param name='finalDestination'></param>
282 private void TeleportAgentToDifferentRegion(
283 ScenePresence sp, ulong regionHandle, Vector3 position,
284 Vector3 lookAt, uint teleportFlags, out GridRegion finalDestination)
285 {
286 uint x = 0, y = 0;
287 Utils.LongToUInts(regionHandle, out x, out y);
288 GridRegion reg = m_aScene.GridService.GetRegionByPosition(sp.Scene.RegionInfo.ScopeID, (int)x, (int)y);
289
290 if (reg != null)
291 {
292 finalDestination = GetFinalDestination(reg);
293
294 if (finalDestination == null)
295 {
296 m_log.WarnFormat(
297 "[ENTITY TRANSFER MODULE]: Final destination is having problems. Unable to teleport {0} {1}",
298 sp.Name, sp.UUID);
299
300 sp.ControllingClient.SendTeleportFailed("Problem at destination");
301 return;
229 } 302 }
230 else // Another region possibly in another simulator 303
304 // Check that these are not the same coordinates
305 if (finalDestination.RegionLocX == sp.Scene.RegionInfo.RegionLocX &&
306 finalDestination.RegionLocY == sp.Scene.RegionInfo.RegionLocY)
231 { 307 {
232 uint x = 0, y = 0; 308 // Can't do. Viewer crashes
233 Utils.LongToUInts(regionHandle, out x, out y); 309 sp.ControllingClient.SendTeleportFailed("Space warp! You would crash. Move to a different region and try again.");
234 GridRegion reg = m_aScene.GridService.GetRegionByPosition(sp.Scene.RegionInfo.ScopeID, (int)x, (int)y); 310 return;
311 }
235 312
236 if (reg != null) 313 //
237 { 314 // This is it
238 GridRegion finalDestination = GetFinalDestination(reg); 315 //
239 if (finalDestination == null) 316 DoTeleport(sp, reg, finalDestination, position, lookAt, teleportFlags);
240 { 317 //
241 m_log.WarnFormat( 318 //
242 "[ENTITY TRANSFER MODULE]: Final destination is having problems. Unable to teleport {0} {1}", 319 //
243 sp.Name, sp.UUID); 320 }
321 else
322 {
323 finalDestination = null;
244 324
245 sp.ControllingClient.SendTeleportFailed("Problem at destination"); 325 // TP to a place that doesn't exist (anymore)
246 return; 326 // Inform the viewer about that
247 } 327 sp.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore");
248 328
249 destinationRegionName = finalDestination.RegionName; 329 // and set the map-tile to '(Offline)'
330 uint regX, regY;
331 Utils.LongToUInts(regionHandle, out regX, out regY);
332
333 MapBlockData block = new MapBlockData();
334 block.X = (ushort)(regX / Constants.RegionSize);
335 block.Y = (ushort)(regY / Constants.RegionSize);
336 block.Access = 254; // == not there
250 337
251 uint curX = 0, curY = 0; 338 List<MapBlockData> blocks = new List<MapBlockData>();
252 Utils.LongToUInts(sp.Scene.RegionInfo.RegionHandle, out curX, out curY); 339 blocks.Add(block);
253 int curCellX = (int)(curX / Constants.RegionSize); 340 sp.ControllingClient.SendMapBlock(blocks, 0);
254 int curCellY = (int)(curY / Constants.RegionSize); 341 }
255 int destCellX = (int)(finalDestination.RegionLocX / Constants.RegionSize); 342 }
256 int destCellY = (int)(finalDestination.RegionLocY / Constants.RegionSize);
257 343
344 /// <summary>
345 /// Determines whether this instance is within the max transfer distance.
346 /// </summary>
347 /// <param name="sourceRegion"></param>
348 /// <param name="destRegion"></param>
349 /// <returns>
350 /// <c>true</c> if this instance is within max transfer distance; otherwise, <c>false</c>.
351 /// </returns>
352 private bool IsWithinMaxTeleportDistance(RegionInfo sourceRegion, GridRegion destRegion)
353 {
258// m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Source co-ords are x={0} y={1}", curRegionX, curRegionY); 354// m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Source co-ords are x={0} y={1}", curRegionX, curRegionY);
259// 355//
260// m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Final dest is x={0} y={1} {2}@{3}", 356// m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Final dest is x={0} y={1} {2}@{3}",
261// destRegionX, destRegionY, finalDestination.RegionID, finalDestination.ServerURI); 357// destRegionX, destRegionY, finalDestination.RegionID, finalDestination.ServerURI);
262 358
263 // Check that these are not the same coordinates 359 // Insanely, RegionLoc on RegionInfo is the 256m map co-ord whilst GridRegion.RegionLoc is the raw meters position.
264 if (finalDestination.RegionLocX == sp.Scene.RegionInfo.RegionLocX && 360 return Math.Abs(sourceRegion.RegionLocX - destRegion.RegionCoordX) <= MaxTransferDistance
265 finalDestination.RegionLocY == sp.Scene.RegionInfo.RegionLocY) 361 && Math.Abs(sourceRegion.RegionLocY - destRegion.RegionCoordY) <= MaxTransferDistance;
266 { 362 }
267 // Can't do. Viewer crashes
268 sp.ControllingClient.SendTeleportFailed("Space warp! You would crash. Move to a different region and try again.");
269 return;
270 }
271 363
272 if (Math.Abs(curCellX - destCellX) > MaxTransferDistance || Math.Abs(curCellY - destCellY) > MaxTransferDistance) 364 public void DoTeleport(
273 { 365 ScenePresence sp, GridRegion reg, GridRegion finalDestination,
274 sp.ControllingClient.SendTeleportFailed( 366 Vector3 position, Vector3 lookAt, uint teleportFlags)
275 string.Format( 367 {
276 "Can't teleport to {0} ({1},{2}) from {3} ({4},{5}), destination is more than {6} regions way", 368 RegionInfo sourceRegion = sp.Scene.RegionInfo;
277 finalDestination.RegionName, destCellX, destCellY,
278 sp.Scene.RegionInfo.RegionName, curCellX, curCellY,
279 MaxTransferDistance));
280
281 return;
282 }
283 369
284 // 370 if (!IsWithinMaxTeleportDistance(sourceRegion, finalDestination))
285 // This is it
286 //
287 DoTeleport(sp, reg, finalDestination, position, lookAt, teleportFlags, eq);
288 //
289 //
290 //
291 }
292 else
293 {
294 // TP to a place that doesn't exist (anymore)
295 // Inform the viewer about that
296 sp.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore");
297
298 // and set the map-tile to '(Offline)'
299 uint regX, regY;
300 Utils.LongToUInts(regionHandle, out regX, out regY);
301
302 MapBlockData block = new MapBlockData();
303 block.X = (ushort)(regX / Constants.RegionSize);
304 block.Y = (ushort)(regY / Constants.RegionSize);
305 block.Access = 254; // == not there
306
307 List<MapBlockData> blocks = new List<MapBlockData>();
308 blocks.Add(block);
309 sp.ControllingClient.SendMapBlock(blocks, 0);
310 }
311 }
312 }
313 catch (Exception e)
314 { 371 {
315 m_log.ErrorFormat( 372 sp.ControllingClient.SendTeleportFailed(
316 "[ENTITY TRANSFER MODULE]: Exception on teleport of {0} from {1}@{2} to {3}@{4}: {5}{6}", 373 string.Format(
317 sp.Name, sp.AbsolutePosition, sp.Scene.RegionInfo.RegionName, position, destinationRegionName, 374 "Can't teleport to {0} ({1},{2}) from {3} ({4},{5}), destination is more than {6} regions way",
318 e.Message, e.StackTrace); 375 finalDestination.RegionName, finalDestination.RegionCoordX, finalDestination.RegionCoordY,
376 sourceRegion.RegionName, sourceRegion.RegionLocX, sourceRegion.RegionLocY,
377 MaxTransferDistance));
319 378
320 sp.ControllingClient.SendTeleportFailed("Internal error"); 379 return;
321 } 380 }
322 }
323 381
324 public void DoTeleport(ScenePresence sp, GridRegion reg, GridRegion finalDestination, Vector3 position, Vector3 lookAt, uint teleportFlags, IEventQueue eq) 382 IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>();
325 { 383
326 if (reg == null || finalDestination == null) 384 if (reg == null || finalDestination == null)
327 { 385 {
328 sp.ControllingClient.SendTeleportFailed("Unable to locate destination"); 386 sp.ControllingClient.SendTeleportFailed("Unable to locate destination");
@@ -485,7 +543,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
485 sp.ControllingClient.SendTeleportProgress(teleportFlags | (uint)TeleportFlags.DisableCancel, "sending_dest"); 543 sp.ControllingClient.SendTeleportProgress(teleportFlags | (uint)TeleportFlags.DisableCancel, "sending_dest");
486 544
487 m_log.DebugFormat( 545 m_log.DebugFormat(
488 "[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} to client {1}", capsPath, sp.UUID); 546 "[ENTITY TRANSFER MODULE]: Sending new CAPS seed url {0} from {1} to {2}",
547 capsPath, sp.Scene.RegionInfo.RegionName, sp.Name);
489 548
490 if (eq != null) 549 if (eq != null)
491 { 550 {
@@ -504,7 +563,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
504 // TeleportFinish makes the client send CompleteMovementIntoRegion (at the destination), which 563 // TeleportFinish makes the client send CompleteMovementIntoRegion (at the destination), which
505 // trigers a whole shebang of things there, including MakeRoot. So let's wait for confirmation 564 // trigers a whole shebang of things there, including MakeRoot. So let's wait for confirmation
506 // that the client contacted the destination before we close things here. 565 // that the client contacted the destination before we close things here.
507 if (!WaitForCallback(sp.UUID)) 566 if (EnableWaitForCallbackFromTeleportDest && !WaitForCallback(sp.UUID))
508 { 567 {
509 m_log.WarnFormat( 568 m_log.WarnFormat(
510 "[ENTITY TRANSFER MODULE]: Teleport of {0} to {1} failed due to no callback from destination region. Returning avatar to source region.", 569 "[ENTITY TRANSFER MODULE]: Teleport of {0} to {1} failed due to no callback from destination region. Returning avatar to source region.",
@@ -537,7 +596,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
537 596
538 if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg)) 597 if (NeedsClosing(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, reg))
539 { 598 {
540 Thread.Sleep(5000); 599// Thread.Sleep(5000);
541 sp.Close(); 600 sp.Close();
542 sp.Scene.IncomingCloseAgent(sp.UUID); 601 sp.Scene.IncomingCloseAgent(sp.UUID);
543 } 602 }
@@ -630,7 +689,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
630 689
631 protected virtual bool IsOutsideRegion(Scene s, Vector3 pos) 690 protected virtual bool IsOutsideRegion(Scene s, Vector3 pos)
632 { 691 {
633
634 if (s.TestBorderCross(pos, Cardinals.N)) 692 if (s.TestBorderCross(pos, Cardinals.N))
635 return true; 693 return true;
636 if (s.TestBorderCross(pos, Cardinals.S)) 694 if (s.TestBorderCross(pos, Cardinals.S))
@@ -752,7 +810,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
752 810
753 neighbourx--; 811 neighbourx--;
754 newpos.X = Constants.RegionSize - enterDistance; 812 newpos.X = Constants.RegionSize - enterDistance;
755
756 } 813 }
757 else if (scene.TestBorderCross(pos + eastCross, Cardinals.E)) 814 else if (scene.TestBorderCross(pos + eastCross, Cardinals.E))
758 { 815 {
@@ -1202,7 +1259,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1202 { 1259 {
1203 if (neighbour.RegionHandle != sp.Scene.RegionInfo.RegionHandle) 1260 if (neighbour.RegionHandle != sp.Scene.RegionInfo.RegionHandle)
1204 { 1261 {
1205
1206 AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode); 1262 AgentCircuitData currentAgentCircuit = sp.Scene.AuthenticateHandler.GetAgentCircuitData(sp.ControllingClient.CircuitCode);
1207 AgentCircuitData agent = sp.ControllingClient.RequestClientInfo(); 1263 AgentCircuitData agent = sp.ControllingClient.RequestClientInfo();
1208 agent.BaseFolder = UUID.Zero; 1264 agent.BaseFolder = UUID.Zero;
@@ -1227,7 +1283,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1227 seeds.Add(neighbour.RegionHandle, agent.CapsPath); 1283 seeds.Add(neighbour.RegionHandle, agent.CapsPath);
1228 } 1284 }
1229 else 1285 else
1286 {
1230 agent.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, neighbour.RegionHandle); 1287 agent.CapsPath = sp.Scene.CapsModule.GetChildSeed(sp.UUID, neighbour.RegionHandle);
1288 }
1231 1289
1232 cagents.Add(agent); 1290 cagents.Add(agent);
1233 } 1291 }
@@ -1851,7 +1909,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1851 int count = 200; 1909 int count = 200;
1852 while (m_agentsInTransit.Contains(id) && count-- > 0) 1910 while (m_agentsInTransit.Contains(id) && count-- > 0)
1853 { 1911 {
1854 //m_log.Debug(" >>> Waiting... " + count); 1912// m_log.Debug(" >>> Waiting... " + count);
1855 Thread.Sleep(100); 1913 Thread.Sleep(100);
1856 } 1914 }
1857 1915
@@ -1859,6 +1917,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1859 return true; 1917 return true;
1860 else 1918 else
1861 return false; 1919 return false;
1920
1921 return true;
1862 } 1922 }
1863 1923
1864 protected void SetInTransit(UUID id) 1924 protected void SetInTransit(UUID id)
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
index a9ffd8f..6e27299 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs
@@ -246,13 +246,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
246 return false; 246 return false;
247 } 247 }
248 248
249 IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>();
250 GridRegion homeGatekeeper = MakeRegion(aCircuit); 249 GridRegion homeGatekeeper = MakeRegion(aCircuit);
251 250
252 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: teleporting user {0} {1} home to {2} via {3}:{4}", 251 m_log.DebugFormat("[HG ENTITY TRANSFER MODULE]: teleporting user {0} {1} home to {2} via {3}:{4}",
253 aCircuit.firstname, aCircuit.lastname, finalDestination.RegionName, homeGatekeeper.ServerURI, homeGatekeeper.RegionName); 252 aCircuit.firstname, aCircuit.lastname, finalDestination.RegionName, homeGatekeeper.ServerURI, homeGatekeeper.RegionName);
254 253
255 DoTeleport(sp, homeGatekeeper, finalDestination, position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome), eq); 254 DoTeleport(sp, homeGatekeeper, finalDestination, position, lookAt, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaHome));
256 return true; 255 return true;
257 } 256 }
258 257
@@ -293,17 +292,17 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
293 { 292 {
294 ScenePresence sp = scene.GetScenePresence(remoteClient.AgentId); 293 ScenePresence sp = scene.GetScenePresence(remoteClient.AgentId);
295 IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>(); 294 IEntityTransferModule transferMod = scene.RequestModuleInterface<IEntityTransferModule>();
296 IEventQueue eq = sp.Scene.RequestModuleInterface<IEventQueue>(); 295
297 if (transferMod != null && sp != null && eq != null) 296 if (transferMod != null && sp != null)
298 transferMod.DoTeleport(sp, gatekeeper, finalDestination, lm.Position, 297 transferMod.DoTeleport(
299 Vector3.UnitX, (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark), eq); 298 sp, gatekeeper, finalDestination, lm.Position, Vector3.UnitX,
299 (uint)(Constants.TeleportFlags.SetLastToTarget | Constants.TeleportFlags.ViaLandmark));
300 } 300 }
301 301
302 } 302 }
303 303
304 // can't find the region: Tell viewer and abort 304 // can't find the region: Tell viewer and abort
305 remoteClient.SendTeleportFailed("The teleport destination could not be found."); 305 remoteClient.SendTeleportFailed("The teleport destination could not be found.");
306
307 } 306 }
308 307
309 #endregion 308 #endregion