diff options
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs | 248 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 268 |
2 files changed, 434 insertions, 82 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs b/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs index 5c5f164..91d736b 100644 --- a/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/RegionCombinerModule.cs | |||
@@ -32,6 +32,7 @@ using log4net; | |||
32 | using Nini.Config; | 32 | using Nini.Config; |
33 | using OpenMetaverse; | 33 | using OpenMetaverse; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.Client; | ||
35 | using OpenSim.Region.Framework.Interfaces; | 36 | using OpenSim.Region.Framework.Interfaces; |
36 | using OpenSim.Region.Framework.Scenes; | 37 | using OpenSim.Region.Framework.Scenes; |
37 | 38 | ||
@@ -71,6 +72,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
71 | public void AddRegion(Scene scene) | 72 | public void AddRegion(Scene scene) |
72 | { | 73 | { |
73 | 74 | ||
75 | |||
76 | |||
77 | } | ||
78 | |||
79 | public void RemoveRegion(Scene scene) | ||
80 | { | ||
81 | |||
82 | |||
83 | } | ||
84 | |||
85 | public void RegionLoaded(Scene scene) | ||
86 | { | ||
74 | if (!enabledYN) | 87 | if (!enabledYN) |
75 | return; | 88 | return; |
76 | 89 | ||
@@ -295,8 +308,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
295 | m_log.DebugFormat("Scene: {0} to the west of Scene{1} Offset: {2}. Extents:{3}", | 308 | m_log.DebugFormat("Scene: {0} to the west of Scene{1} Offset: {2}. Extents:{3}", |
296 | conn.RegionScene.RegionInfo.RegionName, | 309 | conn.RegionScene.RegionInfo.RegionName, |
297 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | 310 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); |
298 | 311 | ||
299 | 312 | ||
300 | scene.BordersLocked = true; | 313 | scene.BordersLocked = true; |
301 | conn.RegionScene.BordersLocked = true; | 314 | conn.RegionScene.BordersLocked = true; |
302 | 315 | ||
@@ -325,9 +338,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
325 | // | 338 | // |
326 | scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); | 339 | scene.PhysicsScene.SetTerrain(scene.Heightmap.GetFloatsSerialised()); |
327 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); | 340 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); |
328 | 341 | ||
329 | conn.RegionScene.BordersLocked = false; | 342 | conn.RegionScene.BordersLocked = false; |
330 | scene.BordersLocked = false; | 343 | scene.BordersLocked = false; |
344 | if (conn.ClientEventForwarder != null) | ||
345 | conn.ClientEventForwarder.AddSceneToEventForwarding(scene); | ||
331 | connectedYN = true; | 346 | connectedYN = true; |
332 | break; | 347 | break; |
333 | } | 348 | } |
@@ -367,7 +382,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
367 | m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}", | 382 | m_log.DebugFormat("Scene: {0} to the northeast of Scene{1} Offset: {2}. Extents:{3}", |
368 | conn.RegionScene.RegionInfo.RegionName, | 383 | conn.RegionScene.RegionInfo.RegionName, |
369 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | 384 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); |
370 | conn.RegionScene.PhysicsScene.Combine(null,Vector3.Zero,extents); | 385 | conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); |
371 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); | 386 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); |
372 | 387 | ||
373 | lock (conn.RegionScene.NorthBorders) | 388 | lock (conn.RegionScene.NorthBorders) |
@@ -386,7 +401,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
386 | 401 | ||
387 | scene.BordersLocked = false; | 402 | scene.BordersLocked = false; |
388 | conn.RegionScene.BordersLocked = false; | 403 | conn.RegionScene.BordersLocked = false; |
389 | 404 | if (conn.ClientEventForwarder != null) | |
405 | conn.ClientEventForwarder.AddSceneToEventForwarding(scene); | ||
390 | connectedYN = true; | 406 | connectedYN = true; |
391 | break; | 407 | break; |
392 | } | 408 | } |
@@ -424,52 +440,52 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
424 | m_log.DebugFormat("Scene: {0} to the NorthEast of Scene{1} Offset: {2}. Extents:{3}", | 440 | m_log.DebugFormat("Scene: {0} to the NorthEast of Scene{1} Offset: {2}. Extents:{3}", |
425 | conn.RegionScene.RegionInfo.RegionName, | 441 | conn.RegionScene.RegionInfo.RegionName, |
426 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); | 442 | regionConnections.RegionScene.RegionInfo.RegionName, offset, extents); |
427 | 443 | ||
428 | conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); | 444 | conn.RegionScene.PhysicsScene.Combine(null, Vector3.Zero, extents); |
429 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); | 445 | scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset, Vector3.Zero); |
430 | lock (conn.RegionScene.NorthBorders) | 446 | lock (conn.RegionScene.NorthBorders) |
431 | if (conn.RegionScene.NorthBorders.Count == 1)// && 2) | 447 | if (conn.RegionScene.NorthBorders.Count == 1)// && 2) |
432 | { | 448 | { |
433 | //compound border | 449 | //compound border |
434 | // already locked above | 450 | // already locked above |
435 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; | 451 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; |
436 | 452 | ||
437 | lock (conn.RegionScene.EastBorders) | 453 | lock (conn.RegionScene.EastBorders) |
438 | conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize; | 454 | conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
439 | lock (conn.RegionScene.WestBorders) | 455 | lock (conn.RegionScene.WestBorders) |
440 | conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize; | 456 | conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
441 | 457 | ||
442 | |||
443 | 458 | ||
444 | } | 459 | |
460 | } | ||
445 | lock (scene.SouthBorders) | 461 | lock (scene.SouthBorders) |
446 | scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south | 462 | scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south |
447 | 463 | ||
448 | lock (conn.RegionScene.EastBorders) | 464 | lock (conn.RegionScene.EastBorders) |
449 | if (conn.RegionScene.EastBorders.Count == 1)// && conn.RegionScene.EastBorders.Count == 2) | 465 | if (conn.RegionScene.EastBorders.Count == 1)// && conn.RegionScene.EastBorders.Count == 2) |
450 | { | 466 | { |
451 | 467 | ||
452 | conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize; | 468 | conn.RegionScene.EastBorders[0].BorderLine.Z += (int)Constants.RegionSize; |
453 | lock (conn.RegionScene.NorthBorders) | 469 | lock (conn.RegionScene.NorthBorders) |
454 | conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize; | 470 | conn.RegionScene.NorthBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
455 | lock (conn.RegionScene.SouthBorders) | 471 | lock (conn.RegionScene.SouthBorders) |
456 | conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize; | 472 | conn.RegionScene.SouthBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
457 | 473 | ||
458 | 474 | ||
459 | } | 475 | } |
460 | 476 | ||
461 | lock (scene.WestBorders) | 477 | lock (scene.WestBorders) |
462 | scene.WestBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport West | 478 | scene.WestBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport West |
463 | /* | 479 | /* |
464 | else | 480 | else |
465 | { | 481 | { |
466 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; | 482 | conn.RegionScene.NorthBorders[0].BorderLine.Z += (int)Constants.RegionSize; |
467 | conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize; | 483 | conn.RegionScene.EastBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
468 | conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize; | 484 | conn.RegionScene.WestBorders[0].BorderLine.Y += (int)Constants.RegionSize; |
469 | scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south | 485 | scene.SouthBorders[0].BorderLine.Z += (int)Constants.RegionSize; //auto teleport south |
470 | } | 486 | } |
471 | */ | 487 | */ |
472 | 488 | ||
473 | 489 | ||
474 | // Reset Terrain.. since terrain normally loads first. | 490 | // Reset Terrain.. since terrain normally loads first. |
475 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); | 491 | //conn.RegionScene.PhysicsScene.SetTerrain(conn.RegionScene.Heightmap.GetFloatsSerialised()); |
@@ -478,6 +494,9 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
478 | scene.BordersLocked = false; | 494 | scene.BordersLocked = false; |
479 | conn.RegionScene.BordersLocked = false; | 495 | conn.RegionScene.BordersLocked = false; |
480 | 496 | ||
497 | if (conn.ClientEventForwarder != null) | ||
498 | conn.ClientEventForwarder.AddSceneToEventForwarding(scene); | ||
499 | |||
481 | connectedYN = true; | 500 | connectedYN = true; |
482 | 501 | ||
483 | //scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset,extents); | 502 | //scene.PhysicsScene.Combine(conn.RegionScene.PhysicsScene, offset,extents); |
@@ -495,7 +514,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
495 | rdata.RegionScene = scene; | 514 | rdata.RegionScene = scene; |
496 | regionConnections.RegionLandChannel = scene.LandChannel; | 515 | regionConnections.RegionLandChannel = scene.LandChannel; |
497 | 516 | ||
498 | RegionCombinerLargeLandChannel lnd = new RegionCombinerLargeLandChannel(rdata,scene.LandChannel,regionConnections.ConnectedRegions); | 517 | RegionCombinerLargeLandChannel lnd = new RegionCombinerLargeLandChannel(rdata, scene.LandChannel, regionConnections.ConnectedRegions); |
499 | scene.LandChannel = lnd; | 518 | scene.LandChannel = lnd; |
500 | lock (m_regions) | 519 | lock (m_regions) |
501 | { | 520 | { |
@@ -504,24 +523,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
504 | ForwardPermissionRequests(regionConnections, r.RegionScene); | 523 | ForwardPermissionRequests(regionConnections, r.RegionScene); |
505 | } | 524 | } |
506 | } | 525 | } |
507 | 526 | ||
508 | m_regions.Add(scene.RegionInfo.originRegionID,regionConnections); | 527 | regionConnections.ClientEventForwarder = new RegionCombinerClientEventForwarder(regionConnections); |
528 | |||
529 | m_regions.Add(scene.RegionInfo.originRegionID, regionConnections); | ||
509 | } | 530 | } |
510 | 531 | ||
511 | } | 532 | } |
512 | AdjustLargeRegionBounds(); | 533 | AdjustLargeRegionBounds(); |
513 | |||
514 | } | ||
515 | |||
516 | public void RemoveRegion(Scene scene) | ||
517 | { | ||
518 | |||
519 | |||
520 | } | ||
521 | |||
522 | public void RegionLoaded(Scene scene) | ||
523 | { | ||
524 | |||
525 | } | 534 | } |
526 | 535 | ||
527 | public void PostInitialise() | 536 | public void PostInitialise() |
@@ -733,6 +742,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
733 | public int YEnd; | 742 | public int YEnd; |
734 | public List<RegionData> ConnectedRegions; | 743 | public List<RegionData> ConnectedRegions; |
735 | public RegionCombinerPermissionModule PermissionModule; | 744 | public RegionCombinerPermissionModule PermissionModule; |
745 | public RegionCombinerClientEventForwarder ClientEventForwarder; | ||
736 | public void UpdateExtents(Vector3 extents) | 746 | public void UpdateExtents(Vector3 extents) |
737 | { | 747 | { |
738 | XEnd = (int)extents.X; | 748 | XEnd = (int)extents.X; |
@@ -790,7 +800,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
790 | else | 800 | else |
791 | { | 801 | { |
792 | int offsetX = (x / (int)Constants.RegionSize); | 802 | int offsetX = (x / (int)Constants.RegionSize); |
793 | int offsetY = (x / (int)Constants.RegionSize); | 803 | int offsetY = (y / (int)Constants.RegionSize); |
794 | offsetX *= (int)Constants.RegionSize; | 804 | offsetX *= (int)Constants.RegionSize; |
795 | offsetY *= (int)Constants.RegionSize; | 805 | offsetY *= (int)Constants.RegionSize; |
796 | 806 | ||
@@ -823,7 +833,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
823 | else | 833 | else |
824 | { | 834 | { |
825 | int offsetX = (int)(x/(int) Constants.RegionSize); | 835 | int offsetX = (int)(x/(int) Constants.RegionSize); |
826 | int offsetY = (int)(x/(int) Constants.RegionSize); | 836 | int offsetY = (int)(y/(int) Constants.RegionSize); |
827 | offsetX *= (int) Constants.RegionSize; | 837 | offsetX *= (int) Constants.RegionSize; |
828 | offsetY *= (int) Constants.RegionSize; | 838 | offsetY *= (int) Constants.RegionSize; |
829 | 839 | ||
@@ -886,6 +896,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
886 | m_rootScene = RootScene; | 896 | m_rootScene = RootScene; |
887 | } | 897 | } |
888 | 898 | ||
899 | #region Permission Override | ||
889 | public bool BypassPermissions() | 900 | public bool BypassPermissions() |
890 | { | 901 | { |
891 | return m_rootScene.Permissions.BypassPermissions(); | 902 | return m_rootScene.Permissions.BypassPermissions(); |
@@ -1110,5 +1121,132 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1110 | { | 1121 | { |
1111 | return m_rootScene.Permissions.CanUseObjectReturn(landdata, type, client, retlist); | 1122 | return m_rootScene.Permissions.CanUseObjectReturn(landdata, type, client, retlist); |
1112 | } | 1123 | } |
1124 | #endregion | ||
1125 | } | ||
1126 | |||
1127 | public class RegionCombinerClientEventForwarder | ||
1128 | { | ||
1129 | private Scene m_rootScene; | ||
1130 | private Dictionary<UUID, Scene> m_virtScene = new Dictionary<UUID, Scene>(); | ||
1131 | private Dictionary<UUID,RegionCombinerModuleIndividualForwarder> m_forwarders = new Dictionary<UUID, RegionCombinerModuleIndividualForwarder>(); | ||
1132 | public RegionCombinerClientEventForwarder(RegionConnections rootScene) | ||
1133 | { | ||
1134 | m_rootScene = rootScene.RegionScene; | ||
1135 | |||
1136 | |||
1137 | } | ||
1138 | |||
1139 | public void AddSceneToEventForwarding( Scene virtualScene ) | ||
1140 | { | ||
1141 | lock (m_virtScene) | ||
1142 | { | ||
1143 | if (m_virtScene.ContainsKey(virtualScene.RegionInfo.originRegionID)) | ||
1144 | { | ||
1145 | m_virtScene[virtualScene.RegionInfo.originRegionID] = virtualScene; | ||
1146 | } | ||
1147 | else | ||
1148 | { | ||
1149 | m_virtScene.Add(virtualScene.RegionInfo.originRegionID, virtualScene); | ||
1150 | } | ||
1151 | } | ||
1152 | |||
1153 | lock (m_forwarders) | ||
1154 | { | ||
1155 | // TODO: Fix this to unregister if this happens | ||
1156 | if (m_forwarders.ContainsKey(virtualScene.RegionInfo.originRegionID)) | ||
1157 | m_forwarders.Remove(virtualScene.RegionInfo.originRegionID); | ||
1158 | |||
1159 | RegionCombinerModuleIndividualForwarder forwarder = | ||
1160 | new RegionCombinerModuleIndividualForwarder(m_rootScene, virtualScene); | ||
1161 | m_forwarders.Add(virtualScene.RegionInfo.originRegionID, forwarder); | ||
1162 | |||
1163 | virtualScene.EventManager.OnNewClient += forwarder.ClientConnect; | ||
1164 | virtualScene.EventManager.OnClientClosed += forwarder.ClientClosed; | ||
1165 | } | ||
1166 | } | ||
1167 | |||
1168 | public void RemoveSceneFromEventForwarding (Scene virtualScene) | ||
1169 | { | ||
1170 | lock (m_forwarders) | ||
1171 | { | ||
1172 | RegionCombinerModuleIndividualForwarder forwarder = m_forwarders[virtualScene.RegionInfo.originRegionID]; | ||
1173 | virtualScene.EventManager.OnNewClient -= forwarder.ClientConnect; | ||
1174 | virtualScene.EventManager.OnClientClosed -= forwarder.ClientClosed; | ||
1175 | m_forwarders.Remove(virtualScene.RegionInfo.originRegionID); | ||
1176 | } | ||
1177 | lock (m_virtScene) | ||
1178 | { | ||
1179 | if (m_virtScene.ContainsKey(virtualScene.RegionInfo.originRegionID)) | ||
1180 | { | ||
1181 | m_virtScene.Remove(virtualScene.RegionInfo.originRegionID); | ||
1182 | } | ||
1183 | } | ||
1184 | } | ||
1185 | } | ||
1186 | |||
1187 | public class RegionCombinerModuleIndividualForwarder | ||
1188 | { | ||
1189 | private Scene m_rootScene; | ||
1190 | private Scene m_virtScene; | ||
1191 | public RegionCombinerModuleIndividualForwarder(Scene rootScene, Scene virtScene) | ||
1192 | { | ||
1193 | m_rootScene = rootScene; | ||
1194 | m_virtScene = virtScene; | ||
1195 | } | ||
1196 | |||
1197 | public void ClientConnect(IClientAPI client) | ||
1198 | { | ||
1199 | |||
1200 | m_virtScene.UnSubscribeToClientPrimEvents(client); | ||
1201 | m_virtScene.UnSubscribeToClientPrimRezEvents(client); | ||
1202 | m_virtScene.UnSubscribeToClientInventoryEvents(client); | ||
1203 | m_virtScene.UnSubscribeToClientAttachmentEvents(client); | ||
1204 | m_virtScene.UnSubscribeToClientTeleportEvents(client); | ||
1205 | m_virtScene.UnSubscribeToClientScriptEvents(client); | ||
1206 | m_virtScene.UnSubscribeToClientGodEvents(client); | ||
1207 | m_virtScene.UnSubscribeToClientNetworkEvents(client); | ||
1208 | |||
1209 | m_rootScene.SubscribeToClientPrimEvents(client); | ||
1210 | client.OnAddPrim += LocalAddNewPrim; | ||
1211 | client.OnRezObject += LocalRezObject; | ||
1212 | m_rootScene.SubscribeToClientInventoryEvents(client); | ||
1213 | m_rootScene.SubscribeToClientAttachmentEvents(client); | ||
1214 | m_rootScene.SubscribeToClientTeleportEvents(client); | ||
1215 | m_rootScene.SubscribeToClientScriptEvents(client); | ||
1216 | m_rootScene.SubscribeToClientGodEvents(client); | ||
1217 | m_rootScene.SubscribeToClientNetworkEvents(client); | ||
1218 | } | ||
1219 | public void ClientClosed(UUID clientid, Scene scene) | ||
1220 | { | ||
1221 | |||
1222 | } | ||
1223 | |||
1224 | |||
1225 | private void LocalRezObject(IClientAPI remoteclient, UUID itemid, Vector3 rayend, Vector3 raystart, UUID raytargetid, byte bypassraycast, bool rayendisintersection, bool rezselected, bool removeitem, UUID fromtaskid) | ||
1226 | { | ||
1227 | int differenceX = (int)m_virtScene.RegionInfo.RegionLocX - (int)m_rootScene.RegionInfo.RegionLocX; | ||
1228 | int differenceY = (int)m_virtScene.RegionInfo.RegionLocY - (int)m_rootScene.RegionInfo.RegionLocY; | ||
1229 | rayend.X += differenceX * (int)Constants.RegionSize; | ||
1230 | rayend.Y += differenceY * (int)Constants.RegionSize; | ||
1231 | raystart.X += differenceX * (int)Constants.RegionSize; | ||
1232 | raystart.Y += differenceY * (int)Constants.RegionSize; | ||
1233 | |||
1234 | m_rootScene.RezObject(remoteclient, itemid, rayend, raystart, raytargetid, bypassraycast, | ||
1235 | rayendisintersection, rezselected, removeitem, fromtaskid); | ||
1236 | |||
1237 | } | ||
1238 | |||
1239 | private void LocalAddNewPrim(UUID ownerid, UUID groupid, Vector3 rayend, Quaternion rot, PrimitiveBaseShape shape, byte bypassraycast, Vector3 raystart, UUID raytargetid, byte rayendisintersection) | ||
1240 | { | ||
1241 | int differenceX = (int)m_virtScene.RegionInfo.RegionLocX - (int)m_rootScene.RegionInfo.RegionLocX; | ||
1242 | int differenceY = (int)m_virtScene.RegionInfo.RegionLocY - (int)m_rootScene.RegionInfo.RegionLocY; | ||
1243 | rayend.X += differenceX * (int)Constants.RegionSize; | ||
1244 | rayend.Y += differenceY * (int)Constants.RegionSize; | ||
1245 | raystart.X += differenceX * (int)Constants.RegionSize; | ||
1246 | raystart.Y += differenceY * (int)Constants.RegionSize; | ||
1247 | m_rootScene.AddNewPrim(ownerid, groupid, rayend, rot, shape, bypassraycast, raystart, raytargetid, | ||
1248 | rayendisintersection); | ||
1249 | |||
1250 | } | ||
1113 | } | 1251 | } |
1114 | } | 1252 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 1d0da4c..c25ae10 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -2365,14 +2365,40 @@ namespace OpenSim.Region.Framework.Scenes | |||
2365 | EventManager.TriggerOnNewClient(client); | 2365 | EventManager.TriggerOnNewClient(client); |
2366 | } | 2366 | } |
2367 | 2367 | ||
2368 | |||
2369 | |||
2368 | /// <summary> | 2370 | /// <summary> |
2369 | /// Register for events from the client | 2371 | /// Register for events from the client |
2370 | /// </summary> | 2372 | /// </summary> |
2371 | /// <param name="client">The IClientAPI of the connected client</param> | 2373 | /// <param name="client">The IClientAPI of the connected client</param> |
2372 | protected virtual void SubscribeToClientEvents(IClientAPI client) | 2374 | public virtual void SubscribeToClientEvents(IClientAPI client) |
2375 | { | ||
2376 | SubscribeToClientTerrainEvents(client); | ||
2377 | SubscribeToClientPrimEvents(client); | ||
2378 | SubscribeToClientPrimRezEvents(client); | ||
2379 | SubscribeToClientInventoryEvents(client); | ||
2380 | SubscribeToClientAttachmentEvents(client); | ||
2381 | SubscribeToClientTeleportEvents(client); | ||
2382 | SubscribeToClientScriptEvents(client); | ||
2383 | SubscribeToClientParcelEvents(client); | ||
2384 | SubscribeToClientGridEvents(client); | ||
2385 | SubscribeToClientGodEvents(client); | ||
2386 | |||
2387 | SubscribeToClientNetworkEvents(client); | ||
2388 | |||
2389 | |||
2390 | // EventManager.TriggerOnNewClient(client); | ||
2391 | } | ||
2392 | |||
2393 | public virtual void SubscribeToClientTerrainEvents(IClientAPI client) | ||
2373 | { | 2394 | { |
2374 | client.OnRegionHandShakeReply += SendLayerData; | 2395 | client.OnRegionHandShakeReply += SendLayerData; |
2375 | client.OnAddPrim += AddNewPrim; | 2396 | client.OnUnackedTerrain += TerrainUnAcked; |
2397 | } | ||
2398 | |||
2399 | public virtual void SubscribeToClientPrimEvents(IClientAPI client) | ||
2400 | { | ||
2401 | |||
2376 | client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition; | 2402 | client.OnUpdatePrimGroupPosition += m_sceneGraph.UpdatePrimPosition; |
2377 | client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition; | 2403 | client.OnUpdatePrimSinglePosition += m_sceneGraph.UpdatePrimSinglePosition; |
2378 | client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; | 2404 | client.OnUpdatePrimGroupRotation += m_sceneGraph.UpdatePrimRotation; |
@@ -2384,8 +2410,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
2384 | client.OnUpdateExtraParams += m_sceneGraph.UpdateExtraParam; | 2410 | client.OnUpdateExtraParams += m_sceneGraph.UpdateExtraParam; |
2385 | client.OnUpdatePrimShape += m_sceneGraph.UpdatePrimShape; | 2411 | client.OnUpdatePrimShape += m_sceneGraph.UpdatePrimShape; |
2386 | client.OnUpdatePrimTexture += m_sceneGraph.UpdatePrimTexture; | 2412 | client.OnUpdatePrimTexture += m_sceneGraph.UpdatePrimTexture; |
2387 | client.OnTeleportLocationRequest += RequestTeleportLocation; | ||
2388 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | ||
2389 | client.OnObjectRequest += RequestPrim; | 2413 | client.OnObjectRequest += RequestPrim; |
2390 | client.OnObjectSelect += SelectPrim; | 2414 | client.OnObjectSelect += SelectPrim; |
2391 | client.OnObjectDeselect += DeselectPrim; | 2415 | client.OnObjectDeselect += DeselectPrim; |
@@ -2393,15 +2417,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2393 | client.OnSpinStart += m_sceneGraph.SpinStart; | 2417 | client.OnSpinStart += m_sceneGraph.SpinStart; |
2394 | client.OnSpinUpdate += m_sceneGraph.SpinObject; | 2418 | client.OnSpinUpdate += m_sceneGraph.SpinObject; |
2395 | client.OnDeRezObject += DeRezObject; | 2419 | client.OnDeRezObject += DeRezObject; |
2396 | client.OnRezObject += RezObject; | 2420 | |
2397 | client.OnRezSingleAttachmentFromInv += RezSingleAttachment; | ||
2398 | client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments; | ||
2399 | client.OnDetachAttachmentIntoInv += DetachSingleAttachmentToInv; | ||
2400 | client.OnObjectAttach += m_sceneGraph.AttachObject; | ||
2401 | client.OnObjectDetach += m_sceneGraph.DetachObject; | ||
2402 | client.OnObjectDrop += m_sceneGraph.DropObject; | ||
2403 | client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest; | ||
2404 | client.OnObjectDescription += m_sceneGraph.PrimDescription; | ||
2405 | client.OnObjectName += m_sceneGraph.PrimName; | 2421 | client.OnObjectName += m_sceneGraph.PrimName; |
2406 | client.OnObjectClickAction += m_sceneGraph.PrimClickAction; | 2422 | client.OnObjectClickAction += m_sceneGraph.PrimClickAction; |
2407 | client.OnObjectMaterial += m_sceneGraph.PrimMaterial; | 2423 | client.OnObjectMaterial += m_sceneGraph.PrimMaterial; |
@@ -2412,7 +2428,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
2412 | client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags; | 2428 | client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags; |
2413 | client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily; | 2429 | client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily; |
2414 | client.OnObjectPermissions += HandleObjectPermissionsUpdate; | 2430 | client.OnObjectPermissions += HandleObjectPermissionsUpdate; |
2431 | client.OnGrabObject += ProcessObjectGrab; | ||
2432 | client.OnDeGrabObject += ProcessObjectDeGrab; | ||
2433 | client.OnUndo += m_sceneGraph.HandleUndo; | ||
2434 | client.OnObjectDescription += m_sceneGraph.PrimDescription; | ||
2435 | client.OnObjectDrop += m_sceneGraph.DropObject; | ||
2436 | client.OnObjectSaleInfo += ObjectSaleInfo; | ||
2437 | client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; | ||
2438 | client.OnObjectOwner += ObjectOwner; | ||
2439 | } | ||
2440 | |||
2441 | public virtual void SubscribeToClientPrimRezEvents(IClientAPI client) | ||
2442 | { | ||
2443 | client.OnAddPrim += AddNewPrim; | ||
2444 | client.OnRezObject += RezObject; | ||
2445 | } | ||
2415 | 2446 | ||
2447 | public virtual void SubscribeToClientInventoryEvents(IClientAPI client) | ||
2448 | { | ||
2416 | client.OnCreateNewInventoryItem += CreateNewInventoryItem; | 2449 | client.OnCreateNewInventoryItem += CreateNewInventoryItem; |
2417 | client.OnCreateNewInventoryFolder += HandleCreateInventoryFolder; | 2450 | client.OnCreateNewInventoryFolder += HandleCreateInventoryFolder; |
2418 | client.OnUpdateInventoryFolder += HandleUpdateInventoryFolder; | 2451 | client.OnUpdateInventoryFolder += HandleUpdateInventoryFolder; |
@@ -2430,36 +2463,217 @@ namespace OpenSim.Region.Framework.Scenes | |||
2430 | client.OnRemoveTaskItem += RemoveTaskInventory; | 2463 | client.OnRemoveTaskItem += RemoveTaskInventory; |
2431 | client.OnUpdateTaskInventory += UpdateTaskInventory; | 2464 | client.OnUpdateTaskInventory += UpdateTaskInventory; |
2432 | client.OnMoveTaskItem += ClientMoveTaskInventoryItem; | 2465 | client.OnMoveTaskItem += ClientMoveTaskInventoryItem; |
2466 | } | ||
2433 | 2467 | ||
2434 | client.OnGrabObject += ProcessObjectGrab; | 2468 | public virtual void SubscribeToClientAttachmentEvents(IClientAPI client) |
2435 | client.OnDeGrabObject += ProcessObjectDeGrab; | 2469 | { |
2436 | client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; | 2470 | client.OnRezSingleAttachmentFromInv += RezSingleAttachment; |
2437 | client.OnParcelBuy += ProcessParcelBuy; | 2471 | client.OnRezMultipleAttachmentsFromInv += RezMultipleAttachments; |
2438 | client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; | 2472 | client.OnDetachAttachmentIntoInv += DetachSingleAttachmentToInv; |
2439 | client.OnObjectIncludeInSearch += m_sceneGraph.MakeObjectSearchable; | 2473 | client.OnObjectAttach += m_sceneGraph.AttachObject; |
2474 | client.OnObjectDetach += m_sceneGraph.DetachObject; | ||
2475 | } | ||
2476 | |||
2477 | public virtual void SubscribeToClientTeleportEvents(IClientAPI client) | ||
2478 | { | ||
2479 | client.OnTeleportLocationRequest += RequestTeleportLocation; | ||
2480 | client.OnTeleportLandmarkRequest += RequestTeleportLandmark; | ||
2440 | client.OnTeleportHomeRequest += TeleportClientHome; | 2481 | client.OnTeleportHomeRequest += TeleportClientHome; |
2441 | client.OnSetStartLocationRequest += SetHomeRezPoint; | 2482 | } |
2442 | client.OnUndo += m_sceneGraph.HandleUndo; | 2483 | |
2443 | client.OnObjectGroupRequest += m_sceneGraph.HandleObjectGroupUpdate; | 2484 | public virtual void SubscribeToClientScriptEvents(IClientAPI client) |
2444 | client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel; | 2485 | { |
2445 | client.OnParcelSetOtherCleanTime += LandChannel.SetParcelOtherCleanTime; | ||
2446 | client.OnObjectSaleInfo += ObjectSaleInfo; | ||
2447 | client.OnScriptReset += ProcessScriptReset; | 2486 | client.OnScriptReset += ProcessScriptReset; |
2448 | client.OnGetScriptRunning += GetScriptRunning; | 2487 | client.OnGetScriptRunning += GetScriptRunning; |
2449 | client.OnSetScriptRunning += SetScriptRunning; | 2488 | client.OnSetScriptRunning += SetScriptRunning; |
2489 | } | ||
2490 | |||
2491 | public virtual void SubscribeToClientParcelEvents(IClientAPI client) | ||
2492 | { | ||
2493 | client.OnObjectGroupRequest += m_sceneGraph.HandleObjectGroupUpdate; | ||
2494 | client.OnParcelReturnObjectsRequest += LandChannel.ReturnObjectsInParcel; | ||
2495 | client.OnParcelSetOtherCleanTime += LandChannel.SetParcelOtherCleanTime; | ||
2496 | client.OnParcelBuy += ProcessParcelBuy; | ||
2497 | } | ||
2498 | |||
2499 | public virtual void SubscribeToClientGridEvents(IClientAPI client) | ||
2500 | { | ||
2501 | client.OnNameFromUUIDRequest += CommsManager.HandleUUIDNameRequest; | ||
2502 | client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; | ||
2503 | client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; | ||
2504 | client.OnSetStartLocationRequest += SetHomeRezPoint; | ||
2450 | client.OnRegionHandleRequest += RegionHandleRequest; | 2505 | client.OnRegionHandleRequest += RegionHandleRequest; |
2451 | client.OnUnackedTerrain += TerrainUnAcked; | 2506 | } |
2452 | client.OnObjectOwner += ObjectOwner; | ||
2453 | 2507 | ||
2508 | public virtual void SubscribeToClientGodEvents(IClientAPI client) | ||
2509 | { | ||
2454 | IGodsModule godsModule = RequestModuleInterface<IGodsModule>(); | 2510 | IGodsModule godsModule = RequestModuleInterface<IGodsModule>(); |
2455 | client.OnGodKickUser += godsModule.KickUser; | 2511 | client.OnGodKickUser += godsModule.KickUser; |
2456 | client.OnRequestGodlikePowers += godsModule.RequestGodlikePowers; | 2512 | client.OnRequestGodlikePowers += godsModule.RequestGodlikePowers; |
2513 | } | ||
2457 | 2514 | ||
2515 | public virtual void SubscribeToClientNetworkEvents(IClientAPI client) | ||
2516 | { | ||
2458 | client.OnNetworkStatsUpdate += StatsReporter.AddPacketsStats; | 2517 | client.OnNetworkStatsUpdate += StatsReporter.AddPacketsStats; |
2518 | } | ||
2519 | |||
2520 | protected virtual void UnsubscribeToClientEvents(IClientAPI client) | ||
2521 | { | ||
2522 | |||
2523 | } | ||
2524 | |||
2525 | /// <summary> | ||
2526 | /// Register for events from the client | ||
2527 | /// </summary> | ||
2528 | /// <param name="client">The IClientAPI of the connected client</param> | ||
2529 | public virtual void UnSubscribeToClientEvents(IClientAPI client) | ||
2530 | { | ||
2531 | UnSubscribeToClientTerrainEvents(client); | ||
2532 | UnSubscribeToClientPrimEvents(client); | ||
2533 | UnSubscribeToClientPrimRezEvents(client); | ||
2534 | UnSubscribeToClientInventoryEvents(client); | ||
2535 | UnSubscribeToClientAttachmentEvents(client); | ||
2536 | UnSubscribeToClientTeleportEvents(client); | ||
2537 | UnSubscribeToClientScriptEvents(client); | ||
2538 | UnSubscribeToClientParcelEvents(client); | ||
2539 | UnSubscribeToClientGridEvents(client); | ||
2540 | UnSubscribeToClientGodEvents(client); | ||
2541 | |||
2542 | UnSubscribeToClientNetworkEvents(client); | ||
2543 | |||
2459 | 2544 | ||
2460 | // EventManager.TriggerOnNewClient(client); | 2545 | // EventManager.TriggerOnNewClient(client); |
2461 | } | 2546 | } |
2462 | 2547 | ||
2548 | public virtual void UnSubscribeToClientTerrainEvents(IClientAPI client) | ||
2549 | { | ||
2550 | client.OnRegionHandShakeReply -= SendLayerData; | ||
2551 | client.OnUnackedTerrain -= TerrainUnAcked; | ||
2552 | } | ||
2553 | |||
2554 | public virtual void UnSubscribeToClientPrimEvents(IClientAPI client) | ||
2555 | { | ||
2556 | client.OnUpdatePrimGroupPosition -= m_sceneGraph.UpdatePrimPosition; | ||
2557 | client.OnUpdatePrimSinglePosition -= m_sceneGraph.UpdatePrimSinglePosition; | ||
2558 | client.OnUpdatePrimGroupRotation -= m_sceneGraph.UpdatePrimRotation; | ||
2559 | client.OnUpdatePrimGroupMouseRotation -= m_sceneGraph.UpdatePrimRotation; | ||
2560 | client.OnUpdatePrimSingleRotation -= m_sceneGraph.UpdatePrimSingleRotation; | ||
2561 | client.OnUpdatePrimSingleRotationPosition -= m_sceneGraph.UpdatePrimSingleRotationPosition; | ||
2562 | client.OnUpdatePrimScale -= m_sceneGraph.UpdatePrimScale; | ||
2563 | client.OnUpdatePrimGroupScale -= m_sceneGraph.UpdatePrimGroupScale; | ||
2564 | client.OnUpdateExtraParams -= m_sceneGraph.UpdateExtraParam; | ||
2565 | client.OnUpdatePrimShape -= m_sceneGraph.UpdatePrimShape; | ||
2566 | client.OnUpdatePrimTexture -= m_sceneGraph.UpdatePrimTexture; | ||
2567 | client.OnObjectRequest -= RequestPrim; | ||
2568 | client.OnObjectSelect -= SelectPrim; | ||
2569 | client.OnObjectDeselect -= DeselectPrim; | ||
2570 | client.OnGrabUpdate -= m_sceneGraph.MoveObject; | ||
2571 | client.OnSpinStart -= m_sceneGraph.SpinStart; | ||
2572 | client.OnSpinUpdate -= m_sceneGraph.SpinObject; | ||
2573 | client.OnDeRezObject -= DeRezObject; | ||
2574 | client.OnObjectName -= m_sceneGraph.PrimName; | ||
2575 | client.OnObjectClickAction -= m_sceneGraph.PrimClickAction; | ||
2576 | client.OnObjectMaterial -= m_sceneGraph.PrimMaterial; | ||
2577 | client.OnLinkObjects -= m_sceneGraph.LinkObjects; | ||
2578 | client.OnDelinkObjects -= m_sceneGraph.DelinkObjects; | ||
2579 | client.OnObjectDuplicate -= m_sceneGraph.DuplicateObject; | ||
2580 | client.OnObjectDuplicateOnRay -= doObjectDuplicateOnRay; | ||
2581 | client.OnUpdatePrimFlags -= m_sceneGraph.UpdatePrimFlags; | ||
2582 | client.OnRequestObjectPropertiesFamily -= m_sceneGraph.RequestObjectPropertiesFamily; | ||
2583 | client.OnObjectPermissions -= HandleObjectPermissionsUpdate; | ||
2584 | client.OnGrabObject -= ProcessObjectGrab; | ||
2585 | client.OnDeGrabObject -= ProcessObjectDeGrab; | ||
2586 | client.OnUndo -= m_sceneGraph.HandleUndo; | ||
2587 | client.OnObjectDescription -= m_sceneGraph.PrimDescription; | ||
2588 | client.OnObjectDrop -= m_sceneGraph.DropObject; | ||
2589 | client.OnObjectSaleInfo -= ObjectSaleInfo; | ||
2590 | client.OnObjectIncludeInSearch -= m_sceneGraph.MakeObjectSearchable; | ||
2591 | client.OnObjectOwner -= ObjectOwner; | ||
2592 | } | ||
2593 | |||
2594 | public virtual void UnSubscribeToClientPrimRezEvents(IClientAPI client) | ||
2595 | { | ||
2596 | client.OnAddPrim -= AddNewPrim; | ||
2597 | client.OnRezObject -= RezObject; | ||
2598 | } | ||
2599 | |||
2600 | |||
2601 | public virtual void UnSubscribeToClientInventoryEvents(IClientAPI client) | ||
2602 | { | ||
2603 | client.OnCreateNewInventoryItem -= CreateNewInventoryItem; | ||
2604 | client.OnCreateNewInventoryFolder -= HandleCreateInventoryFolder; | ||
2605 | client.OnUpdateInventoryFolder -= HandleUpdateInventoryFolder; | ||
2606 | client.OnMoveInventoryFolder -= HandleMoveInventoryFolder; // 2; //!! | ||
2607 | client.OnFetchInventoryDescendents -= HandleFetchInventoryDescendents; | ||
2608 | client.OnPurgeInventoryDescendents -= HandlePurgeInventoryDescendents; // 2; //!! | ||
2609 | client.OnFetchInventory -= HandleFetchInventory; | ||
2610 | client.OnUpdateInventoryItem -= UpdateInventoryItemAsset; | ||
2611 | client.OnCopyInventoryItem -= CopyInventoryItem; | ||
2612 | client.OnMoveInventoryItem -= MoveInventoryItem; | ||
2613 | client.OnRemoveInventoryItem -= RemoveInventoryItem; | ||
2614 | client.OnRemoveInventoryFolder -= RemoveInventoryFolder; | ||
2615 | client.OnRezScript -= RezScript; | ||
2616 | client.OnRequestTaskInventory -= RequestTaskInventory; | ||
2617 | client.OnRemoveTaskItem -= RemoveTaskInventory; | ||
2618 | client.OnUpdateTaskInventory -= UpdateTaskInventory; | ||
2619 | client.OnMoveTaskItem -= ClientMoveTaskInventoryItem; | ||
2620 | } | ||
2621 | |||
2622 | public virtual void UnSubscribeToClientAttachmentEvents(IClientAPI client) | ||
2623 | { | ||
2624 | client.OnRezSingleAttachmentFromInv -= RezSingleAttachment; | ||
2625 | client.OnRezMultipleAttachmentsFromInv -= RezMultipleAttachments; | ||
2626 | client.OnDetachAttachmentIntoInv -= DetachSingleAttachmentToInv; | ||
2627 | client.OnObjectAttach -= m_sceneGraph.AttachObject; | ||
2628 | client.OnObjectDetach -= m_sceneGraph.DetachObject; | ||
2629 | } | ||
2630 | |||
2631 | public virtual void UnSubscribeToClientTeleportEvents(IClientAPI client) | ||
2632 | { | ||
2633 | client.OnTeleportLocationRequest -= RequestTeleportLocation; | ||
2634 | client.OnTeleportLandmarkRequest -= RequestTeleportLandmark; | ||
2635 | client.OnTeleportHomeRequest -= TeleportClientHome; | ||
2636 | } | ||
2637 | |||
2638 | public virtual void UnSubscribeToClientScriptEvents(IClientAPI client) | ||
2639 | { | ||
2640 | client.OnScriptReset -= ProcessScriptReset; | ||
2641 | client.OnGetScriptRunning -= GetScriptRunning; | ||
2642 | client.OnSetScriptRunning -= SetScriptRunning; | ||
2643 | } | ||
2644 | |||
2645 | public virtual void UnSubscribeToClientParcelEvents(IClientAPI client) | ||
2646 | { | ||
2647 | client.OnObjectGroupRequest -= m_sceneGraph.HandleObjectGroupUpdate; | ||
2648 | client.OnParcelReturnObjectsRequest -= LandChannel.ReturnObjectsInParcel; | ||
2649 | client.OnParcelSetOtherCleanTime -= LandChannel.SetParcelOtherCleanTime; | ||
2650 | client.OnParcelBuy -= ProcessParcelBuy; | ||
2651 | } | ||
2652 | |||
2653 | public virtual void UnSubscribeToClientGridEvents(IClientAPI client) | ||
2654 | { | ||
2655 | client.OnNameFromUUIDRequest -= CommsManager.HandleUUIDNameRequest; | ||
2656 | client.OnMoneyTransferRequest -= ProcessMoneyTransferRequest; | ||
2657 | client.OnAvatarPickerRequest -= ProcessAvatarPickerRequest; | ||
2658 | client.OnSetStartLocationRequest -= SetHomeRezPoint; | ||
2659 | client.OnRegionHandleRequest -= RegionHandleRequest; | ||
2660 | } | ||
2661 | |||
2662 | public virtual void UnSubscribeToClientGodEvents(IClientAPI client) | ||
2663 | { | ||
2664 | IGodsModule godsModule = RequestModuleInterface<IGodsModule>(); | ||
2665 | client.OnGodKickUser -= godsModule.KickUser; | ||
2666 | client.OnRequestGodlikePowers -= godsModule.RequestGodlikePowers; | ||
2667 | } | ||
2668 | |||
2669 | public virtual void UnSubscribeToClientNetworkEvents(IClientAPI client) | ||
2670 | { | ||
2671 | client.OnNetworkStatsUpdate -= StatsReporter.AddPacketsStats; | ||
2672 | } | ||
2673 | |||
2674 | |||
2675 | |||
2676 | |||
2463 | /// <summary> | 2677 | /// <summary> |
2464 | /// Teleport an avatar to their home region | 2678 | /// Teleport an avatar to their home region |
2465 | /// </summary> | 2679 | /// </summary> |